Re: [f2fs-dev] [PATCH] f2fs:add zone device priority option to the mount options

From: Jaegeuk Kim
Date: Tue Apr 16 2024 - 12:53:40 EST


I don't see any point why we need this.

On 04/15, Liao Yuanhong wrote:
> Add a zone device priority option in the mount options. When enabled, the
> file system will prioritize using zone devices free space instead of
> conventional devices when writing to the end of the storage space.
>
> Signed-off-by: Liao Yuanhong <liaoyuanhong@xxxxxxxx>
> ---
> fs/f2fs/f2fs.h | 1 +
> fs/f2fs/segment.c | 13 ++++++++++++-
> fs/f2fs/super.c | 20 ++++++++++++++++++++
> 3 files changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index fced2b7652f4..e2438f7d2e13 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -116,6 +116,7 @@ extern const char *f2fs_fault_name[FAULT_MAX];
> #define F2FS_MOUNT_GC_MERGE 0x02000000
> #define F2FS_MOUNT_COMPRESS_CACHE 0x04000000
> #define F2FS_MOUNT_AGE_EXTENT_CACHE 0x08000000
> +#define F2FS_MOUNT_PRIORITY_ZONED 0x10000000
>
> #define F2FS_OPTION(sbi) ((sbi)->mount_opt)
> #define clear_opt(sbi, option) (F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option)
> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
> index 4fd76e867e0a..adbe68a11fa5 100644
> --- a/fs/f2fs/segment.c
> +++ b/fs/f2fs/segment.c
> @@ -2697,7 +2697,18 @@ static int get_new_segment(struct f2fs_sb_info *sbi,
> find_other_zone:
> secno = find_next_zero_bit(free_i->free_secmap, MAIN_SECS(sbi), hint);
> if (secno >= MAIN_SECS(sbi)) {
> - secno = find_first_zero_bit(free_i->free_secmap,
> + /* set hint to get section from zone device first */
> + if (test_opt(sbi, PRIORITY_ZONED)) {
> + hint = GET_SEC_FROM_SEG(sbi, first_zoned_segno(sbi));
> + secno = find_next_zero_bit(free_i->free_secmap,
> + MAIN_SECS(sbi), hint);
> +
> + /* get section from clu if exceeding the size limit */
> + if (secno >= MAIN_SECS(sbi))
> + secno = find_first_zero_bit(free_i->free_secmap,
> + MAIN_SECS(sbi));
> + } else
> + secno = find_first_zero_bit(free_i->free_secmap,
> MAIN_SECS(sbi));
> if (secno >= MAIN_SECS(sbi)) {
> ret = -ENOSPC;
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index a4bc26dfdb1a..2742978a100a 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -126,6 +126,8 @@ enum {
> Opt_inline_data,
> Opt_inline_dentry,
> Opt_noinline_dentry,
> + Opt_priority_zoned,
> + Opt_nopriority_zoned,
> Opt_flush_merge,
> Opt_noflush_merge,
> Opt_barrier,
> @@ -204,6 +206,8 @@ static match_table_t f2fs_tokens = {
> {Opt_inline_data, "inline_data"},
> {Opt_inline_dentry, "inline_dentry"},
> {Opt_noinline_dentry, "noinline_dentry"},
> + {Opt_priority_zoned, "priority_zoned"},
> + {Opt_nopriority_zoned, "nopriority_zoned"},
> {Opt_flush_merge, "flush_merge"},
> {Opt_noflush_merge, "noflush_merge"},
> {Opt_barrier, "barrier"},
> @@ -805,6 +809,16 @@ static int parse_options(struct super_block *sb, char *options, bool is_remount)
> case Opt_noinline_dentry:
> clear_opt(sbi, INLINE_DENTRY);
> break;
> +#ifdef CONFIG_BLK_DEV_ZONED
> + case Opt_priority_zoned:
> + if (f2fs_sb_has_blkzoned(sbi))
> + set_opt(sbi, PRIORITY_ZONED);
> + break;
> + case Opt_nopriority_zoned:
> + if (f2fs_sb_has_blkzoned(sbi))
> + clear_opt(sbi, PRIORITY_ZONED);
> + break;
> +#endif
> case Opt_flush_merge:
> set_opt(sbi, FLUSH_MERGE);
> break;
> @@ -1990,6 +2004,12 @@ static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
> seq_puts(seq, ",inline_dentry");
> else
> seq_puts(seq, ",noinline_dentry");
> +#ifdef CONFIG_BLK_DEV_ZONED
> + if (test_opt(sbi, PRIORITY_ZONED))
> + seq_puts(seq, ",priority_zoned");
> + else
> + seq_puts(seq, ",nopriority_zoned");
> +#endif
> if (test_opt(sbi, FLUSH_MERGE))
> seq_puts(seq, ",flush_merge");
> else
> --
> 2.25.1