On 2023/9/5 21:42, Chunhai Guo wrote:


On 2023/9/5 0:40, Jaegeuk Kim wrote:
On 09/04, Chao Yu wrote:
On 2023/8/31 15:10, Chunhai Guo wrote:
The commit 344150999b7f ("f2fs: fix to avoid potential deadlock") only
requires unplugging current->plug. Using blk_finish_plug() is unnecessary
as it sets current->plug as NULL and prevents wb_writeback() from using
plug in subsequent loops. Instead, use blk_flush_plug() as a replacement.

Signed-off-by: Chunhai Guo <guochun...@vivo.com>
---
    fs/f2fs/data.c | 3 +--
    fs/f2fs/node.c | 3 +--
    2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 916e317ac925..77b4a55d6d94 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -3346,8 +3346,7 @@ static int __f2fs_write_data_pages(struct address_space 
*mapping,
                atomic_inc(&sbi->wb_sync_req[DATA]);
        else if (atomic_read(&sbi->wb_sync_req[DATA])) {
                /* to avoid potential deadlock */
-               if (current->plug)
-                       blk_finish_plug(current->plug);

What about?

if (current->plug) {
        struct blk_plug *plug = current->plug;

        blk_finish_plug(plug);
        blk_start_plug(plug);
}

Jaegeuk, thoughts?

By the way, do we really need to reuse current->plug again? After checkpoint
being done, we can use the plug in __f2fs_write_data_pages. Are there some
numbers to show the benefit?


I don't have a number on this, but I think that reusing current->plug
can help maintain the original intention of wb_writeback().
Nevertheless, it can be a viable alternative to use the plug in
__f2fs_write_data_pages().

I don't have numbers as well, but it can avoid break the intention of
per-writeback-work plug, which tries to merge IOs from all dirty inode.

Thanks,


Thanks.

Thanks,

+               blk_flush_plug(current->plug, false);
                goto skip_write;
        }
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index ee2e1dd64f25..c4b5717a8c1a 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2126,8 +2126,7 @@ static int f2fs_write_node_pages(struct address_space 
*mapping,
                atomic_inc(&sbi->wb_sync_req[NODE]);
        else if (atomic_read(&sbi->wb_sync_req[NODE])) {
                /* to avoid potential deadlock */
-               if (current->plug)
-                       blk_finish_plug(current->plug);
+               blk_flush_plug(current->plug, false);
                goto skip_write;
        }


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to