All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kemeng Shi <shikemeng@huaweicloud.com>
To: viro@zeniv.linux.org.uk, brauner@kernel.org, jack@suse.cz,
	tim.c.chen@linux.intel.com
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v2 2/6] fs/writeback: bail out if there is no more inodes for IO and queued once
Date: Wed, 28 Feb 2024 17:19:54 +0800	[thread overview]
Message-ID: <20240228091958.288260-3-shikemeng@huaweicloud.com> (raw)
In-Reply-To: <20240228091958.288260-1-shikemeng@huaweicloud.com>

For case there is no more inodes for IO in io list from last wb_writeback,
We may bail out early even there is inode in dirty list should be written
back. Only bail out when we queued once to avoid missing dirtied inode.

This is from code reading...

Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Reviewed-by: Jan Kara <jack@suse.cz>
---
 fs/fs-writeback.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index 4e6166e07eaf..6fa623277d75 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -2076,6 +2076,7 @@ static long wb_writeback(struct bdi_writeback *wb,
 	struct inode *inode;
 	long progress;
 	struct blk_plug plug;
+	bool queued = false;
 
 	blk_start_plug(&plug);
 	for (;;) {
@@ -2118,8 +2119,10 @@ static long wb_writeback(struct bdi_writeback *wb,
 			dirtied_before = jiffies;
 
 		trace_writeback_start(wb, work);
-		if (list_empty(&wb->b_io))
+		if (list_empty(&wb->b_io)) {
 			queue_io(wb, work, dirtied_before);
+			queued = true;
+		}
 		if (work->sb)
 			progress = writeback_sb_inodes(work->sb, wb, work);
 		else
@@ -2142,7 +2145,7 @@ static long wb_writeback(struct bdi_writeback *wb,
 		/*
 		 * No more inodes for IO, bail
 		 */
-		if (list_empty(&wb->b_more_io)) {
+		if (list_empty(&wb->b_more_io) && queued) {
 			spin_unlock(&wb->list_lock);
 			break;
 		}
-- 
2.30.0


  parent reply	other threads:[~2024-02-28  1:23 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-28  9:19 [PATCH v2 0/6] Fixes and cleanups to fs-writeback Kemeng Shi
2024-02-28  9:19 ` [PATCH v2 1/6] fs/writeback: avoid to writeback non-expired inode in kupdate writeback Kemeng Shi
2024-03-18 17:07   ` Jan Kara
2024-02-28  9:19 ` Kemeng Shi [this message]
2024-02-28  9:19 ` [PATCH v2 3/6] fs/writeback: remove unused parameter wb of finish_writeback_work Kemeng Shi
2024-02-28  9:19 ` [PATCH v2 4/6] fs/writeback: only calculate dirtied_before when b_io is empty Kemeng Shi
2024-03-18 17:10   ` Jan Kara
2024-02-28  9:19 ` [PATCH v2 5/6] fs/writeback: correct comment of __wakeup_flusher_threads_bdi Kemeng Shi
2024-02-28  9:19 ` [PATCH v2 6/6] fs/writeback: remove unnecessary return in writeback_inodes_sb Kemeng Shi
2024-03-18 17:12 ` [PATCH v2 0/6] Fixes and cleanups to fs-writeback Jan Kara
2024-03-19 15:19   ` Christian Brauner
2024-03-19 15:18 ` Christian Brauner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240228091958.288260-3-shikemeng@huaweicloud.com \
    --to=shikemeng@huaweicloud.com \
    --cc=brauner@kernel.org \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tim.c.chen@linux.intel.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.