[Devel] [PATCH 10/13] fs: avoid writeback busy-loop if redirty
Alexander Mikhalitsyn
alexander.mikhalitsyn at virtuozzo.com
Wed Apr 14 10:44:55 MSK 2021
From: Maxim Patlasov <mpatlasov at virtuozzo.com>
wb_writeback() bails out only if either nr_pages comes to zero or
"progress" (as reported by writeback_sb_inodes or __writeback_inodes_wb)
is zero.
If a page is temporarily unavailable (is under fuse-writeback),
fuse_writepages_fill calls redirty_page_for_writepage, unlock the page
and returns OK. This OK results in progress=1. So wb_writeback
loops over writeback_sb_inodes/__writeback_inodes_wb again and again
until all nr_pages are exhausted.
The patch ensures that progress=0 if fuse_writepages_fill did nothing.
Might be in charge of https://jira.sw.ru/browse/PSBM-55919
Signed-off-by: Maxim Patlasov <mpatlasov at virtuozzo.com>
khorenko@: s/BUG_ON/WARN_ON/
If we face this warn_on, we enable "kernel.panic_on_warn" on
nodes which trigger it.
+++
send to MS?
VZ 8 rebase part https://jira.sw.ru/browse/PSBM-127782
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn at virtuozzo.com>
---
fs/fs-writeback.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index 226a030d4a10..4bc064e21675 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -1674,6 +1674,9 @@ static long writeback_sb_inodes(struct super_block *sb,
if (work->nr_pages <= 0)
break;
}
+
+ WARN_ON(wbc.pages_skipped > write_chunk - wbc.nr_to_write);
+ wrote -= wbc.pages_skipped;
}
return wrote;
}
--
2.28.0
More information about the Devel
mailing list