summaryrefslogtreecommitdiffstats
path: root/fs/fs-writeback.c
diff options
context:
space:
mode:
authorKemeng Shi <shikemeng@huaweicloud.com>2024-02-28 17:19:56 +0800
committerChristian Brauner <brauner@kernel.org>2024-04-05 15:53:45 +0200
commit639924abc1ae28eb05893a402081e8e6cff23b8a (patch)
treeb49adda2eedd0e50a3b64fefab9eafa00223d4bd /fs/fs-writeback.c
parent2ddc93461214507b8e50ba7218d6260be8d623d1 (diff)
downloadlinux-stable-639924abc1ae28eb05893a402081e8e6cff23b8a.tar.gz
linux-stable-639924abc1ae28eb05893a402081e8e6cff23b8a.tar.bz2
linux-stable-639924abc1ae28eb05893a402081e8e6cff23b8a.zip
fs/writeback: only calculate dirtied_before when b_io is empty
The dirtied_before is only used when b_io is not empty, so only calculate when b_io is not empty. Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com> Link: https://lore.kernel.org/r/20240228091958.288260-5-shikemeng@huaweicloud.com Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'fs/fs-writeback.c')
-rw-r--r--fs/fs-writeback.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index a754eb254535..cbfb3e05e120 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -2105,20 +2105,21 @@ static long wb_writeback(struct bdi_writeback *wb,
spin_lock(&wb->list_lock);
- /*
- * Kupdate and background works are special and we want to
- * include all inodes that need writing. Livelock avoidance is
- * handled by these works yielding to any other work so we are
- * safe.
- */
- if (work->for_kupdate) {
- dirtied_before = jiffies -
- msecs_to_jiffies(dirty_expire_interval * 10);
- } else if (work->for_background)
- dirtied_before = jiffies;
-
trace_writeback_start(wb, work);
if (list_empty(&wb->b_io)) {
+ /*
+ * Kupdate and background works are special and we want
+ * to include all inodes that need writing. Livelock
+ * avoidance is handled by these works yielding to any
+ * other work so we are safe.
+ */
+ if (work->for_kupdate) {
+ dirtied_before = jiffies -
+ msecs_to_jiffies(dirty_expire_interval *
+ 10);
+ } else if (work->for_background)
+ dirtied_before = jiffies;
+
queue_io(wb, work, dirtied_before);
queued = true;
}