Searched hist:"5 b41d92437f1ae19b3f3ffa3b16589fd5df50ac0" (Results 1 – 2 of 2) sorted by relevance
/openbmc/linux/include/linux/ |
H A D | writeback.h | diff 5b41d92437f1ae19b3f3ffa3b16589fd5df50ac0 Wed Oct 27 20:30:13 CDT 2010 Eric Sandeen <sandeen@redhat.com> ext4: implement writeback livelock avoidance using page tagging
This is analogous to Jan Kara's commit, f446daaea9d4a420d16c606f755f3689dcb2d0ce mm: implement writeback livelock avoidance using page tagging
but since we forked write_cache_pages, we need to reimplement it there (and in ext4_da_writepages, since range_cyclic handling was moved to there)
If you start a large buffered IO to a file, and then set fsync after it, you'll find that fsync does not complete until the other IO stops.
If you continue re-dirtying the file (say, putting dd with conv=notrunc in a loop), when fsync finally completes (after all IO is done), it reports via tracing that it has written many more pages than the file contains; in other words it has synced and re-synced pages in the file multiple times.
This then leads to problems with our writeback_index update, since it advances it by pages written, and essentially sets writeback_index off the end of the file...
With the following patch, we only sync as much as was dirty at the time of the sync.
Signed-off-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
/openbmc/linux/fs/ext4/ |
H A D | inode.c | diff 5b41d92437f1ae19b3f3ffa3b16589fd5df50ac0 Wed Oct 27 20:30:13 CDT 2010 Eric Sandeen <sandeen@redhat.com> ext4: implement writeback livelock avoidance using page tagging
This is analogous to Jan Kara's commit, f446daaea9d4a420d16c606f755f3689dcb2d0ce mm: implement writeback livelock avoidance using page tagging
but since we forked write_cache_pages, we need to reimplement it there (and in ext4_da_writepages, since range_cyclic handling was moved to there)
If you start a large buffered IO to a file, and then set fsync after it, you'll find that fsync does not complete until the other IO stops.
If you continue re-dirtying the file (say, putting dd with conv=notrunc in a loop), when fsync finally completes (after all IO is done), it reports via tracing that it has written many more pages than the file contains; in other words it has synced and re-synced pages in the file multiple times.
This then leads to problems with our writeback_index update, since it advances it by pages written, and essentially sets writeback_index off the end of the file...
With the following patch, we only sync as much as was dirty at the time of the sync.
Signed-off-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|