writeback: make nr_to_write a per-file limit
Subsystems (3)
PATCH 13/13 writeback: make nr_to_write a per-file limit
Andrew,
References: <[email protected]>
Content-Disposition: inline; filename=writeback-single-file-limit.patch
This ensures full 4MB (or larger) writeback size for large dirty files.
CC Jan Kara <[email protected]>
Signed-off-by Wu Fengguang <[email protected]>
--- fs/fs-writeback.c | 11 +++++++++++ include/linux/writeback.h | 1 + 2 files changed, 12 insertions(+)
fs/fs-writeback.c +11 -0
@@ -330,6 +330,8 @@ static int writeback_single_inode(struct inode *inode, struct writeback_control *wbc) { struct address_space *mapping = inode->i_mapping; +long per_file_limit = wbc->per_file_limit; +long nr_to_write;unsigned dirty;int ret;
@@ -365,8 +367,16 @@ writeback_single_inode(struct inode *ino inode->i_state &= ~I_DIRTY_PAGES ;spin_unlock (&inode_lock); +if (per_file_limit) { + nr_to_write = wbc->nr_to_write; + wbc->nr_to_write = per_file_limit; + } + ret =do_writepages (mapping, wbc); +if (per_file_limit) + wbc->nr_to_write += nr_to_write - per_file_limit; +/* * Make sure to wait on the data before writing out the metadata. * This is important for filesystems that modify metadata on data
@@ -698,6 +708,7 @@ static long wb_writeback(struct bdi_writ wbc.more_io =0 ; wbc.nr_to_write = write_chunk; + wbc.per_file_limit = write_chunk; wbc.pages_skipped =0 ;trace_wbc_writeback_start (&wbc, wb->bdi);
include/linux/writeback.h +1 -0
@@ -43,6 +43,7 @@ struct writeback_control {extra jobs and livelock */ long nr_to_write;/* Write this many pages, and decrement this for each page written */ +long per_file_limit;/* Write this many pages for one file */ long pages_skipped;/* Pages which were not written */ /*
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>