Data corruption using 2.6.18 NFSv3 client -- sparse files?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

When multiple 2.6.18 NFSv3 clients write to the same file, after one of the
clients has recently read from the file, we see data corruption in the form of
null bytes inserted into the file.

Simple test case:

hosta% echo "line 1" > /nfs/volume/bar.txt 

then, in rapid succession: 

hostb% cat bar.txt && sleep 2 && echo "line 2 from hostb" >> /nfs/bar.txt 
hostc% cat bar.txt && sleep 2 && echo "line 2 from hostc" >> /nfs/bar.txt 

Expected result:

/nfs/bar.txt contains:

line 1
line 2 from hostb
line 2 from hostc

Actual result:

/nfs/bar.txt contains:

line 1
\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0line 2 from hostc

This seems to be due to an inconsistency between the page cache and the
attribute cache on hostc. Running the 'cat' command on hostc causes bar.txt
to be loaded into the page cache. Meanwhile, its attributes are cached in the
attribute cache.

Seconds later, the 'echo' command on hostc causes the attribute cache to be
updated (a GETATTR operation is issued) with the new file size (reflecting
the line just appended by hostb), but the page cache is not updated (no READ
operation is issued).

The subsequent WRITE operation from hostc specifies an offset of 0 (beginning
of file) and a length equal to "line 1" + "line 2 from hostb" + "line 2 from 
hostc". Since the page cache on hostc does not contain the "line 2 from hostb"
content, that segment of the WRITE buffer is filled with nulls.

Note that no file locking is being used in this test case or our production
use case.

Questions:

- Is this a bug or correct operation?
- Would file locking produce the expected behaviour?

Thanks,

Clay McClure



--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux