From: NeilBrown Date: Wed, 17 Nov 2021 04:34:42 +0000 (+1100) Subject: reiserfs: don't use congestion_wait() X-Git-Tag: v5.17-rc1~104^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b831281bb929ca6228ab898e1a97bb9284c07036;p=thirdparty%2Flinux.git reiserfs: don't use congestion_wait() Block devices do not, in general, report congestion any more, so this congestion_wait() is effectively just a sleep. It isn't entirely clear what is being waited for, but as we only wait when j_async_throttle is elevated, it seems reasonable to stop waiting when j_async_throttle becomes zero - or after the same timeout. So change to use wait_event_event_timeout() for waiting, and wake_up_var() to signal an end to waiting. Link: https://lore.kernel.org/r/163712368225.13692.3419908086400748349@noble.neil.brown.name Signed-off-by: NeilBrown Signed-off-by: Jan Kara --- diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c index 0834b101c316d..a3e21160b6347 100644 --- a/fs/reiserfs/journal.c +++ b/fs/reiserfs/journal.c @@ -951,7 +951,9 @@ static int reiserfs_async_progress_wait(struct super_block *s) int depth; depth = reiserfs_write_unlock_nested(s); - congestion_wait(BLK_RW_ASYNC, HZ / 10); + wait_var_event_timeout(&j->j_async_throttle, + atomic_read(&j->j_async_throttle) == 0, + HZ / 10); reiserfs_write_lock_nested(s, depth); } @@ -1058,7 +1060,8 @@ static int flush_commit_list(struct super_block *s, put_bh(tbh) ; } } - atomic_dec(&journal->j_async_throttle); + if (atomic_dec_and_test(&journal->j_async_throttle)) + wake_up_var(&journal->j_async_throttle); for (i = 0; i < (jl->j_len + 1); i++) { bn = SB_ONDISK_JOURNAL_1st_BLOCK(s) +