lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <45B7FE1C.3070807@yahoo.com.au>
Date:	Thu, 25 Jan 2007 11:47:24 +1100
From:	Nick Piggin <nickpiggin@...oo.com.au>
To:	David Chinner <dgc@....com>
CC:	Peter Zijlstra <a.p.zijlstra@...llo.nl>,
	linux-kernel@...r.kernel.org, xfs@....sgi.com, akpm@...l.org
Subject: Re: [PATCH 1/2]: Fix BUG in cancel_dirty_pages on XFS

David Chinner wrote:
> On Thu, Jan 25, 2007 at 11:12:41AM +1100, Nick Piggin wrote:

>>... so surely if you do a direct read followed by a buffered read,
>>you should *not* get the same data if there has been some activity
>>to modify that part of the file in the meantime (whether that be a
>>buffered or direct write).
> 
> 
> Right. And that is what happens in XFS because it purges the
> caches on direct I/O and forces data to be re-read from disk.

And that is critical for direct IO writes, of course.

> Effectively, if you are mixing direct I/O with other types of I/O
> (buffered or mmap) then the application really needs to be certain
> it is doing the right thing because there are races that can occur
> below the filesystem. All we care about in the filesystem is that
> what we cache is the same as what is on disk, and that implies that
> direct I/O needs to purge the cache regardless of the state it is in....
> 
> Hence we need to unmap pages and use truncate semantics on them to
> ensure they are removed from the page cache....

OK, I understand that this does need to happen (at least for writes),
so you need to fix it regardless of the DIO read issue.

But I'm just interested about DIO reads. I think you can get pretty
reasonable semantics without discarding pagecache, but the semantics
are weaker in one aspect.

DIO read
1. writeback page
2. read from disk

Now your read will pick up data no older than 1. And if a buffered
write happens after 2, then there is no problem either.

So if you are doing a buffered write and DIO read concurrently, you
want synchronisation so the buffered write happens either before 1
or after 2 -- the DIO read will see either all or none of the write.

Supposing your pagecache isn't invalidated, then a buffered write
(from mmap, if XFS doesn't allow write(2)) comes in between 1 and 2,
then the DIO read will find either none, some, or all of that write.

So I guess what you are preventing is the "some" case. Am I right?

-- 
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ