mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Chao Yu <chao@kernel.org>
To: Daniel Lee <chullee@google.com>
Cc: chao@kernel.org, Jaegeuk Kim <jaegeuk@kernel.org>,
	linux-f2fs-devel@lists.sourceforge.net,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/2] f2fs: use ioprio hint for hot and pinned files
Date: Tue, 1 Jul 2025 11:39:18 +0800	[thread overview]
Message-ID: <8b0c3ab6-6285-4a92-887e-770473062474@kernel.org> (raw)
In-Reply-To: <CALBjLoB6+FgWJMqKPN1o1bpeYWB-d-7BWtGbYPo18fcFWZqEkw@mail.gmail.com>

On 7/1/25 06:56, Daniel Lee wrote:
> On Mon, Jun 16, 2025 at 5:50 AM Chao Yu <chao@kernel.org> wrote:
>>
>> On 6/15/25 22:42, Daniel Lee wrote:
>>> Apply the `ioprio_hint` to set `F2FS_IOPRIO_WRITE` priority
>>> on files identified as "hot" at creation and on files that are
>>> pinned via ioctl.
>>>
>>> Signed-off-by: Daniel Lee <chullee@google.com>
>>> ---
>>>  fs/f2fs/f2fs.h  | 19 +++++++++++++++++++
>>>  fs/f2fs/file.c  |  3 +++
>>>  fs/f2fs/namei.c | 11 +++++++----
>>>  3 files changed, 29 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
>>> index 3e02687c1b58..0c4f52892ff7 100644
>>> --- a/fs/f2fs/f2fs.h
>>> +++ b/fs/f2fs/f2fs.h
>>> @@ -3440,6 +3440,25 @@ static inline void set_file(struct inode *inode, int type)
>>>       f2fs_mark_inode_dirty_sync(inode, true);
>>>  }
>>>
>>> +static inline int get_ioprio(struct inode *inode)
>>> +{
>>> +     return F2FS_I(inode)->ioprio_hint;
>>> +}
>>> +
>>> +static inline void set_ioprio(struct inode *inode, int level)
>>> +{
>>> +     if (get_ioprio(inode) == level)
>>> +             return;
>>> +     F2FS_I(inode)->ioprio_hint = level;
>>> +}
>>> +
>>> +static inline void clear_ioprio(struct inode *inode)
>>> +{
>>> +     if (get_ioprio(inode) == 0)
>>> +             return;
>>> +     F2FS_I(inode)->ioprio_hint = 0;
>>> +}
>>> +
>>>  static inline void clear_file(struct inode *inode, int type)
>>>  {
>>>       if (!is_file(inode, type))
>>> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
>>> index 3eb40d7bf602..a18fb7f3d019 100644
>>> --- a/fs/f2fs/file.c
>>> +++ b/fs/f2fs/file.c
>>> @@ -3496,6 +3496,7 @@ static int f2fs_ioc_set_pin_file(struct file *filp, unsigned long arg)
>>>
>>>       if (!pin) {
>>>               clear_inode_flag(inode, FI_PIN_FILE);
>>> +             clear_ioprio(inode);
>>
>> I guess there are more places clearing FI_PIN_FILE? we need to cover
>> them all?
> 
> Yes, you're right. FI_PIN_FILE is toggled in several places. However,
> this change is intended to set the HOT and IOPRIO on the files that
> users explicitly pin through IOCTL. The other kernel internal
> mechanisms (e.g., swap or gc_failures) remain the same. Are there any
> potential issues that I should consider?

Daniel,

Not sure, just notice that it seems FI_PIN_FILE and IOPRIO are not
set/unset together always.

> 
>  >
>>>               f2fs_i_gc_failures_write(inode, 0);
>>>               goto done;
>>>       } else if (f2fs_is_pinned_file(inode)) {
>>> @@ -3529,6 +3530,8 @@ static int f2fs_ioc_set_pin_file(struct file *filp, unsigned long arg)
>>>       }
>>>
>>>       set_inode_flag(inode, FI_PIN_FILE);
>>> +     file_set_hot(inode);
>>
>> Unnecessary file_set_hot() invoking? Or am I missing anything?
>>
>> Thanks,
> 
> Setting HOT and IOPRIO by default is also intentional. We set both
> flags by default because the main use case for pinned files involves
> frequently updated or short-lived data that needs fast write speeds.

Well, if it is intentional, let's describe it in commit message explicitly.

Two more questions:
- when we unpin a file, we need to clear hot flag as well?
- when we set pin on cold file, do we need to clear the cold flag and then
set hot flag?

BTW, there is no document about this pin ioctl, its sematics becomes more
complicated now, not sure whether user can use this ioctl as their needs or
not, how about adding some comments above this ioctl function, later, we
can relocate the comments to f2fs.rst as document.

Thanks,

> 
>>
>>> +     set_ioprio(inode, F2FS_IOPRIO_WRITE);
>>>       ret = F2FS_I(inode)->i_gc_failures;
>>>  done:
>>>       f2fs_update_time(sbi, REQ_TIME);
>>> diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
>>> index 07e333ee21b7..0f96a0b86c40 100644
>>> --- a/fs/f2fs/namei.c
>>> +++ b/fs/f2fs/namei.c
>>> @@ -191,9 +191,10 @@ static void set_compress_new_inode(struct f2fs_sb_info *sbi, struct inode *dir,
>>>  }
>>>
>>>  /*
>>> - * Set file's temperature for hot/cold data separation
>>> + * Set file's temperature (for hot/cold data separation) and
>>> + * I/O priority, based on filename extension
>>>   */
>>> -static void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode,
>>> +static void set_file_temp_prio(struct f2fs_sb_info *sbi, struct inode *inode,
>>>               const unsigned char *name)
>>>  {
>>>       __u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
>>> @@ -212,8 +213,10 @@ static void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode,
>>>
>>>       if (i < cold_count)
>>>               file_set_cold(inode);
>>> -     else
>>> +     else {
>>>               file_set_hot(inode);
>>> +             set_ioprio(inode, F2FS_IOPRIO_WRITE);
>>> +     }
>>>  }
>>>
>>>  static struct inode *f2fs_new_inode(struct mnt_idmap *idmap,
>>> @@ -317,7 +320,7 @@ static struct inode *f2fs_new_inode(struct mnt_idmap *idmap,
>>>               set_inode_flag(inode, FI_INLINE_DATA);
>>>
>>>       if (name && !test_opt(sbi, DISABLE_EXT_IDENTIFY))
>>> -             set_file_temperature(sbi, inode, name);
>>> +             set_file_temp_prio(sbi, inode, name);
>>>
>>>       stat_inc_inline_xattr(inode);
>>>       stat_inc_inline_inode(inode);
>>


      reply	other threads:[~2025-07-01  3:39 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-15 14:42 [PATCH v2 0/2] f2fs: Fix DIO flags and add ioprio hint Daniel Lee
2025-06-15 14:42 ` [PATCH v2 1/2] f2fs: Apply bio flags to direct I/O Daniel Lee
2025-06-16 12:41   ` Chao Yu
2025-06-30 23:02     ` Daniel Lee
2025-06-15 14:42 ` [PATCH v2 2/2] f2fs: use ioprio hint for hot and pinned files Daniel Lee
2025-06-16 12:50   ` Chao Yu
2025-06-30 22:56     ` Daniel Lee
2025-07-01  3:39       ` Chao Yu [this message]

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=8b0c3ab6-6285-4a92-887e-770473062474@kernel.org \
    --to=chao@kernel.org \
    --cc=chullee@google.com \
    --cc=jaegeuk@kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®