linux/fs/ext4
Eric Sandeen 5b41d92437 ext4: implement writeback livelock avoidance using page tagging
This is analogous to Jan Kara's commit,
f446daaea9
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>
2010-10-27 21:30:13 -04:00
..
acl.c ext4: update ctime when changing the file's permission by setfacl 2010-06-15 12:19:59 -04:00
acl.h
balloc.c ext4: Clean up s_dirt handling 2010-06-11 23:14:04 -04:00
bitmap.c
block_validity.c ext4: use KMEM_CACHE instead of kmem_cache_create 2010-10-27 21:30:09 -04:00
dir.c ext4: improve llseek error handling for overly large seek offsets 2010-10-27 21:30:06 -04:00
ext4_extents.h
ext4_jbd2.c ext4: Pass line numbers to ext4_error() and friends 2010-07-27 11:56:40 -04:00
ext4_jbd2.h ext4: Pass line numbers to ext4_error() and friends 2010-07-27 11:56:40 -04:00
ext4.h ext4: Add batched discard support for ext4 2010-10-27 21:30:12 -04:00
extents.c ext4: use bio layer instead of buffer layer in mpage_da_submit_io 2010-10-27 21:30:10 -04:00
file.c ext4: improve llseek error handling for overly large seek offsets 2010-10-27 21:30:06 -04:00
fsync.c rename the generic fsync implementations 2010-05-27 22:06:06 -04:00
hash.c
ialloc.c ext4: add interface to advertise ext4 features in sysfs 2010-10-27 21:30:05 -04:00
inode.c ext4: implement writeback livelock avoidance using page tagging 2010-10-27 21:30:13 -04:00
ioctl.c
Kconfig
Makefile ext4: use bio layer instead of buffer layer in mpage_da_submit_io 2010-10-27 21:30:10 -04:00
mballoc.c ext4: Add batched discard support for ext4 2010-10-27 21:30:12 -04:00
mballoc.h
migrate.c ext4: Convert more i_flags references to use accessor functions 2010-06-14 09:54:48 -04:00
move_extent.c ext4: Pass line numbers to ext4_error() and friends 2010-07-27 11:56:40 -04:00
namei.c ext4: use search_dirblock() in ext4_dx_find_entry() 2010-10-27 21:30:08 -04:00
page-io.c ext4: use bio layer instead of buffer layer in mpage_da_submit_io 2010-10-27 21:30:10 -04:00
resize.c ext4: use sb_issue_zeroout in setup_new_group_blocks 2010-10-27 21:30:05 -04:00
super.c ext4: add batched_discard into ext4 feature list 2010-10-27 21:30:12 -04:00
symlink.c
xattr_security.c ext4: constify xattr_handler 2010-05-21 18:31:19 -04:00
xattr_trusted.c ext4: constify xattr_handler 2010-05-21 18:31:19 -04:00
xattr_user.c ext4: constify xattr_handler 2010-05-21 18:31:19 -04:00
xattr.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6 2010-08-10 11:26:52 -07:00
xattr.h ext4: constify xattr_handler 2010-05-21 18:31:19 -04:00