aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fs-writeback.c
diff options
context:
space:
mode:
authorWu Fengguang <fengguang.wu@intel.com>2010-07-22 00:50:57 -0400
committerWu Fengguang <fengguang.wu@intel.com>2011-06-07 20:25:20 -0400
commitcb9bd1159c5fe8995e151fa7df10fa19f8c119cc (patch)
tree3f2dd37182180cf85cd9e23d989b7fd7eceb1d63 /fs/fs-writeback.c
parent94c3dcbb0b0cdfd82cedd21705424d8044edc42c (diff)
writeback: introduce writeback_control.inodes_written
The flusher works on dirty inodes in batches, and may quit prematurely if the batch of inodes happen to be metadata-only dirtied: in this case wbc->nr_to_write won't be decreased at all, which stands for "no pages written" but also mis-interpreted as "no progress". So introduce writeback_control.inodes_written to count the inodes get cleaned from VFS POV. A non-zero value means there are some progress on writeback, in which case more writeback can be tried. Acked-by: Jan Kara <jack@suse.cz> Acked-by: Mel Gorman <mel@csn.ul.ie> Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Diffstat (limited to 'fs/fs-writeback.c')
-rw-r--r--fs/fs-writeback.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index fe190a8b0bc8..e4504299f4a5 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -464,6 +464,7 @@ writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
464 * No need to add it back to the LRU. 464 * No need to add it back to the LRU.
465 */ 465 */
466 list_del_init(&inode->i_wb_list); 466 list_del_init(&inode->i_wb_list);
467 wbc->inodes_written++;
467 } 468 }
468 } 469 }
469 inode_sync_complete(inode); 470 inode_sync_complete(inode);
@@ -725,6 +726,7 @@ static long wb_writeback(struct bdi_writeback *wb,
725 wbc.more_io = 0; 726 wbc.more_io = 0;
726 wbc.nr_to_write = write_chunk; 727 wbc.nr_to_write = write_chunk;
727 wbc.pages_skipped = 0; 728 wbc.pages_skipped = 0;
729 wbc.inodes_written = 0;
728 730
729 trace_wbc_writeback_start(&wbc, wb->bdi); 731 trace_wbc_writeback_start(&wbc, wb->bdi);
730 if (work->sb) 732 if (work->sb)
@@ -741,6 +743,8 @@ static long wb_writeback(struct bdi_writeback *wb,
741 */ 743 */
742 if (wbc.nr_to_write <= 0) 744 if (wbc.nr_to_write <= 0)
743 continue; 745 continue;
746 if (wbc.inodes_written)
747 continue;
744 /* 748 /*
745 * Didn't write everything and we don't have more IO, bail 749 * Didn't write everything and we don't have more IO, bail
746 */ 750 */