All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Yu <chao@kernel.org>
To: daejun7.park@samsung.com,
	"jaegeuk@kernel.org" <jaegeuk@kernel.org>,
	Wenjie Cheng <cwjhust@gmail.com>
Cc: "qwjhust@gmail.com" <qwjhust@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-f2fs-devel@lists.sourceforge.net"
	<linux-f2fs-devel@lists.sourceforge.net>
Subject: Re: [f2fs-dev] (2) (2) (2) [PATCH] Revert "f2fs: use flush command instead of FUA for zoned device"
Date: Thu, 20 Jun 2024 16:01:05 +0800	[thread overview]
Message-ID: <04e52097-def3-4baa-a566-8519c8a2b26d@kernel.org> (raw)
In-Reply-To: <20240620075634epcms2p35d3bafffb5f60902b1df25bf3269a686@epcms2p3>

On 2024/6/20 15:56, Daejun Park wrote:
>> On 2024/6/20 15:22, Daejun Park wrote:
>>>> On 2024/6/20 13:56, Daejun Park wrote:
>>>>> Hi Chao,
>>>>>
>>>>>> Jaegeuk,
>>>>>>
>>>>>> Quoted commit message from commit c550e25bca66 ("f2fs: use flush command
>>>>>> instead of FUA for zoned device")
>>>>>> "
>>>>>> The block layer for zoned disk can reorder the FUA'ed IOs. Let's use flush
>>>>>> command to keep the write order.
>>>>>> "
>>>>>>
>>>>>> It seems mq-deadline use fifo queue and make queue depth of zone device
>>>>>> as 1 to IO order, so why FUA'ed write node IOs can be reordered by block
>>>>>> layer?
>>>>>
>>>>> While other writes are aligned by the mq-deadline, write with FUA is not passed
>>>>> to the scheduler but handled at the block layer.
>>>>
>>>> Hi Daejun,
>>>>
>>>> IIUC, do you mean write w/ FUA may be handled directly in below path?
>>>>
>>>> - blk_mq_submit_bio
>>>>      - op_is_flush && blk_insert_flush
>>>
>>> Hi Chao,
>>>
>>> Yes, I think the path caused an unaligned write when the zone lock was
>>> being applied by mq-deadline.
>>
>> But, blk_insert_flush() may return false due to policy should be
>> REQ_FSEQ_DATA or REQ_FSEQ_DATA REQ_FSEQ_POSTFLUSH, then
>> blk_mq_insert_request() after blk_insert_flush() will be called?
>>
> 
> I was just discussing the handling of FUAs in commit c550e25bca66,
> which is not an issue in the current code as FUAs are handled correctly.

Yup, I think it needs to be reverted. :)

Thanks,

> 
> Thanks,
> 
> 
>> Thanks,
>>
>>>
>>>>
>>>> Thanks,
>>>>
>>>>>
>>>>> Thanks,
>>>>> Daejun
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> On 2024/6/14 8:48, Wenjie Cheng wrote:
>>>>>>> This reverts commit c550e25bca660ed2554cbb48d32b82d0bb98e4b1.
>>>>>>>
>>>>>>> Commit c550e25bca660ed2554cbb48d32b82d0bb98e4b1 ("f2fs: use flush
>>>>>>> command instead of FUA for zoned device") used additional flush
>>>>>>> command to keep write order.
>>>>>>>
>>>>>>> Since Commit dd291d77cc90eb6a86e9860ba8e6e38eebd57d12 ("block:
>>>>>>> Introduce zone write plugging") has enabled the block layer to
>>>>>>> handle this order issue, there is no need to use flush command.
>>>>>>>
>>>>>>> Signed-off-by: Wenjie Cheng <cwjhust@gmail.com>
>>>>>>> ---
>>>>>>>        fs/f2fs/file.c 3 +--
>>>>>>>        fs/f2fs/node.c 2 +-
>>>>>>>        2 files changed, 2 insertions(+), 3 deletions(-)
>>>>>>>
>>>>>>> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
>>>>>>> index eae2e7908072..f08e6208e183 100644
>>>>>>> --- a/fs/f2fs/file.c
>>>>>>> +++ b/fs/f2fs/file.c
>>>>>>> @@ -372,8 +372,7 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
>>>>>>>                 f2fs_remove_ino_entry(sbi, ino, APPEND_INO);
>>>>>>>                 clear_inode_flag(inode, FI_APPEND_WRITE);
>>>>>>>        flush_out:
>>>>>>> -        if ((!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER)
>>>>>>> -            (atomic && !test_opt(sbi, NOBARRIER) && f2fs_sb_has_blkzoned(sbi)))
>>>>>>> +        if (!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER)
>>>>>>>                         ret = f2fs_issue_flush(sbi, inode->i_ino);
>>>>>>>                 if (!ret) {
>>>>>>>                         f2fs_remove_ino_entry(sbi, ino, UPDATE_INO);
>>>>>>> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
>>>>>>> index 144f9f966690..c45d341dcf6e 100644
>>>>>>> --- a/fs/f2fs/node.c
>>>>>>> +++ b/fs/f2fs/node.c
>>>>>>> @@ -1631,7 +1631,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
>>>>>>>                         goto redirty_out;
>>>>>>>                 }
>>>>>>>   
>>>>>>> -        if (atomic && !test_opt(sbi, NOBARRIER) && !f2fs_sb_has_blkzoned(sbi))
>>>>>>> +        if (atomic && !test_opt(sbi, NOBARRIER))
>>>>>>>                         fio.op_flags = REQ_PREFLUSH REQ_FUA;
>>>>>>>   
>>>>>>>                 /* should add to global list before clearing PAGECACHE status */


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

WARNING: multiple messages have this Message-ID (diff)
From: Chao Yu <chao@kernel.org>
To: daejun7.park@samsung.com,
	"jaegeuk@kernel.org" <jaegeuk@kernel.org>,
	Wenjie Cheng <cwjhust@gmail.com>
Cc: "qwjhust@gmail.com" <qwjhust@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-f2fs-devel@lists.sourceforge.net"
	<linux-f2fs-devel@lists.sourceforge.net>
Subject: Re: (2) (2) (2) [f2fs-dev] [PATCH] Revert "f2fs: use flush command instead of FUA for zoned device"
Date: Thu, 20 Jun 2024 16:01:05 +0800	[thread overview]
Message-ID: <04e52097-def3-4baa-a566-8519c8a2b26d@kernel.org> (raw)
In-Reply-To: <20240620075634epcms2p35d3bafffb5f60902b1df25bf3269a686@epcms2p3>

On 2024/6/20 15:56, Daejun Park wrote:
>> On 2024/6/20 15:22, Daejun Park wrote:
>>>> On 2024/6/20 13:56, Daejun Park wrote:
>>>>> Hi Chao,
>>>>>
>>>>>> Jaegeuk,
>>>>>>
>>>>>> Quoted commit message from commit c550e25bca66 ("f2fs: use flush command
>>>>>> instead of FUA for zoned device")
>>>>>> "
>>>>>> The block layer for zoned disk can reorder the FUA'ed IOs. Let's use flush
>>>>>> command to keep the write order.
>>>>>> "
>>>>>>
>>>>>> It seems mq-deadline use fifo queue and make queue depth of zone device
>>>>>> as 1 to IO order, so why FUA'ed write node IOs can be reordered by block
>>>>>> layer?
>>>>>
>>>>> While other writes are aligned by the mq-deadline, write with FUA is not passed
>>>>> to the scheduler but handled at the block layer.
>>>>
>>>> Hi Daejun,
>>>>
>>>> IIUC, do you mean write w/ FUA may be handled directly in below path?
>>>>
>>>> - blk_mq_submit_bio
>>>>      - op_is_flush && blk_insert_flush
>>>
>>> Hi Chao,
>>>
>>> Yes, I think the path caused an unaligned write when the zone lock was
>>> being applied by mq-deadline.
>>
>> But, blk_insert_flush() may return false due to policy should be
>> REQ_FSEQ_DATA or REQ_FSEQ_DATA REQ_FSEQ_POSTFLUSH, then
>> blk_mq_insert_request() after blk_insert_flush() will be called?
>>
> 
> I was just discussing the handling of FUAs in commit c550e25bca66,
> which is not an issue in the current code as FUAs are handled correctly.

Yup, I think it needs to be reverted. :)

Thanks,

> 
> Thanks,
> 
> 
>> Thanks,
>>
>>>
>>>>
>>>> Thanks,
>>>>
>>>>>
>>>>> Thanks,
>>>>> Daejun
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> On 2024/6/14 8:48, Wenjie Cheng wrote:
>>>>>>> This reverts commit c550e25bca660ed2554cbb48d32b82d0bb98e4b1.
>>>>>>>
>>>>>>> Commit c550e25bca660ed2554cbb48d32b82d0bb98e4b1 ("f2fs: use flush
>>>>>>> command instead of FUA for zoned device") used additional flush
>>>>>>> command to keep write order.
>>>>>>>
>>>>>>> Since Commit dd291d77cc90eb6a86e9860ba8e6e38eebd57d12 ("block:
>>>>>>> Introduce zone write plugging") has enabled the block layer to
>>>>>>> handle this order issue, there is no need to use flush command.
>>>>>>>
>>>>>>> Signed-off-by: Wenjie Cheng <cwjhust@gmail.com>
>>>>>>> ---
>>>>>>>        fs/f2fs/file.c 3 +--
>>>>>>>        fs/f2fs/node.c 2 +-
>>>>>>>        2 files changed, 2 insertions(+), 3 deletions(-)
>>>>>>>
>>>>>>> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
>>>>>>> index eae2e7908072..f08e6208e183 100644
>>>>>>> --- a/fs/f2fs/file.c
>>>>>>> +++ b/fs/f2fs/file.c
>>>>>>> @@ -372,8 +372,7 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
>>>>>>>                 f2fs_remove_ino_entry(sbi, ino, APPEND_INO);
>>>>>>>                 clear_inode_flag(inode, FI_APPEND_WRITE);
>>>>>>>        flush_out:
>>>>>>> -        if ((!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER)
>>>>>>> -            (atomic && !test_opt(sbi, NOBARRIER) && f2fs_sb_has_blkzoned(sbi)))
>>>>>>> +        if (!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER)
>>>>>>>                         ret = f2fs_issue_flush(sbi, inode->i_ino);
>>>>>>>                 if (!ret) {
>>>>>>>                         f2fs_remove_ino_entry(sbi, ino, UPDATE_INO);
>>>>>>> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
>>>>>>> index 144f9f966690..c45d341dcf6e 100644
>>>>>>> --- a/fs/f2fs/node.c
>>>>>>> +++ b/fs/f2fs/node.c
>>>>>>> @@ -1631,7 +1631,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
>>>>>>>                         goto redirty_out;
>>>>>>>                 }
>>>>>>>   
>>>>>>> -        if (atomic && !test_opt(sbi, NOBARRIER) && !f2fs_sb_has_blkzoned(sbi))
>>>>>>> +        if (atomic && !test_opt(sbi, NOBARRIER))
>>>>>>>                         fio.op_flags = REQ_PREFLUSH REQ_FUA;
>>>>>>>   
>>>>>>>                 /* should add to global list before clearing PAGECACHE status */

  reply	other threads:[~2024-06-20  8:01 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-14  0:48 [f2fs-dev] [PATCH] Revert "f2fs: use flush command instead of FUA for zoned device" Wenjie Cheng
2024-06-14  0:48 ` Wenjie Cheng
2024-06-20  3:20 ` [f2fs-dev] " Chao Yu
2024-06-20  3:20   ` Chao Yu
2024-06-20  5:56   ` [f2fs-dev] (2) " Daejun Park
2024-06-20  5:56     ` RE:(2) [f2fs-dev] " Daejun Park
2024-06-20  7:12     ` [f2fs-dev] (2) " Chao Yu
2024-06-20  7:12       ` (2) [f2fs-dev] " Chao Yu
2024-06-20  7:22       ` [f2fs-dev] (2) (2) " Daejun Park
2024-06-20  7:22         ` RE:(2) (2) [f2fs-dev] " Daejun Park
2024-06-20  7:27         ` [f2fs-dev] (2) (2) " Chao Yu
2024-06-20  7:27           ` (2) (2) [f2fs-dev] " Chao Yu
2024-06-20  7:56           ` [f2fs-dev] (2) (2) (2) " Daejun Park
2024-06-20  7:56             ` RE:(2) (2) (2) [f2fs-dev] " Daejun Park
2024-06-20  8:01             ` Chao Yu [this message]
2024-06-20  8:01               ` (2) " Chao Yu
2024-07-26  1:11 ` Chao Yu
2024-07-26  1:11   ` Chao Yu
2024-08-05 23:30 ` [f2fs-dev] " patchwork-bot+f2fs
2024-08-05 23:30   ` patchwork-bot+f2fs

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=04e52097-def3-4baa-a566-8519c8a2b26d@kernel.org \
    --to=chao@kernel.org \
    --cc=cwjhust@gmail.com \
    --cc=daejun7.park@samsung.com \
    --cc=jaegeuk@kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=qwjhust@gmail.com \
    /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.