On Thu, Feb 24, 2011 at 12:37:53PM -0500, Chris Mason wrote:
Excerpts from Jan Kara's message of 2011-02-24 11:47:58 -0500:
quoted
On Wed 23-02-11 15:35:11, Chris Mason wrote:
quoted
Excerpts from Joel Becker's message of 2011-02-23 15:24:47 -0500:
quoted
On Tue, Feb 22, 2011 at 11:45:44AM -0500, Martin K. Petersen wrote:
quoted
Also, DIX is only the tip of the iceberg. Many other impending
technologies feature checksums and require pages to be stable during I/O
due to checksumming, encryption and so on.
The VM is already trying to do the right thing. We just need the
relevant filesystems to catch up.
ocfs2 handles stable metadata for its checksums when feeding
things to the journal. If we're doing pagecache-based I/O, is the
pagecache going to help here for data?
Data is much easier than metadata. All you really need is to wait on
writeback in file_write, wait on writeback in page_mkwrite, and make
sure you don't free blocks back to the allocator that are actively under
IO.
I expect the hard part to be jbd and metadata in ext34.
But JBD already has to do data copy if a buffer is going to be modified
before/while it is written to the journal. So we should alredy do all that
is needed for metadata. I don't say there aren't any bugs as they could be
triggered only by crashing at the wrong moment and observing fs corruption.
But most of the work should be there...
Most of it is there, but there are always little bits and pieces. The
ext4 journal csumming code was one semi-recent example where we found
metadata changing in flight.
A big part of testing this is getting some way to detect the bugs
without dif/dix. With btrfs I have patches to do set_memory_ro on
pages once I've don the crc, hopefully we can generalize that idea or
some up with something smarter.
Right now I'm faking it with modprobe scsi_debug ato=1 guard=1 dif=3 dix=199.
Hm, would you mind sharing those patches? I've been working on a second patch
to do the wait-on-writeback per everyone's suggestions, but I still see the
occasional corruption error as soon as I enable the mmap write case and covet
some more debugging tools. It does seem to be working for the pure pwrite()
case. :)
--D