[Devel] [PATCH rh7] fuse: never skip writeback if there are too many background requests

Vladimir Davydov vdavydov at virtuozzo.com
Mon Apr 25 04:20:38 PDT 2016


This patch removes two hunks introduced while porting
diff-fuse-some-fairness-in-handling-writeback from PCS6, see commit
9525f63ba3151 ("fuse: some fairness in handling writeback").

In the original patch, these two hunks skip page writeback only if
writeback_control->nonblocking flag is set, while in the ported version
writeback may be skipped if writeback_control->sync_mode = WB_SYNC_NONE.
This is not equivalent, because in RH6 based kernels wbc->nonblocking is
set only from the reclaim and compaction paths, while WB_SYNC_NONE is
used in all paths except fsync. As a result, in Vz7 the possibility of
reordering writeback sequence is higher than in PCS6.

Since in RH7 based kernels wbc->nonblocking is absent, let's simply zap
these two hunks in order to be closer to conventional PCS6 behavior.

Note, the possibility of reordering writeback sequence still exists (as
it does in PCS6), because writeback can be performed by kswapd on memory
shortage - see shrink_page_list -> pageout.

https://jira.sw.ru/browse/PSBM-45497

Signed-off-by: Vladimir Davydov <vdavydov at virtuozzo.com>
---
 fs/fuse/file.c | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 11c5959de2cf..9889e26494f4 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -2109,12 +2109,6 @@ static int fuse_writepages_fill(struct page *page,
 	     req->pages[req->num_pages - 1]->index + 1 != page->index)) {
 		int err;
 
-		if (wbc->sync_mode == WB_SYNC_NONE && fc->blocked) {
-			redirty_page_for_writepage(wbc, page);
-			unlock_page(page);
-			return 0;
-		}
-
 		err = fuse_send_writepages(data);
 		if (err) {
 			unlock_page(page);
@@ -2168,11 +2162,6 @@ static int fuse_writepages(struct address_space *mapping,
 	if (is_bad_inode(inode))
 		goto out;
 
-	if (wbc->sync_mode == WB_SYNC_NONE) {
-		if (fc->blocked)
-			return 0;
-	}
-
 	/*
 	 * We use fuse_blocked_for_wb() instead of just fc->blocked to avoid
 	 * deadlock when we are called from fuse_invalidate_files() in case
-- 
2.1.4



More information about the Devel mailing list