Hi all, Yes, I also agree with using bdev_max_open_zones() instead of bdev_max_active_zones(). I will submit a revised version as soon as possible.
Thanks, On Thu, Feb 1, 2024 at 10:47 PM Chao Yu <[email protected]> wrote: > > On 2024/1/23 17:18, Yongpeng Yang wrote: > > Hi Wenjie, > > It seems more reasonable to use bdev_max_open_zones instead of > > bdev_max_active_zones. > > Hi all, > > I guess it needs to be initialized w/ bdev_max_open_zones(), due > to the max of open zones of zoned device limits the number of > zones that a host software can simultaneously write [1], right? > > [1] https://zonedstorage.io/docs/introduction/zoned-storage#active-zones-limit > > Thanks, > > > > > If an NVMe device has multiple namespaces, and the device contains a > > total of 11 open zones, two of the namespaces, nvme0n1 and nvme0n2, each > > correspond to an instance of the F2FS filesystem, and both filesystem > > instances can be initialized successfully. Since multiple namespaces > > share all open zones, the number of open zones is not equal to the > > number of open zones available to F2FS in a multi-namespace scenario. > > This patch does not yet cover this scenario. > > > > On 1/23/2024 4:12 PM, Wenjie Qi wrote: > >> If the max active zones of zoned devices are less than > >> the active logs of F2FS, the device may error due to > >> insufficient zone resources when multiple active logs are > >> being written at the same time. If this value is 0, there is no limit. > >> > >> Signed-off-by: Wenjie Qi <[email protected]> > >> --- > >> fs/f2fs/f2fs.h | 1 + > >> fs/f2fs/super.c | 18 ++++++++++++++++++ > >> 2 files changed, 19 insertions(+) > >> > >> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > >> index 65294e3b0bef..669f84f6b0e5 100644 > >> --- a/fs/f2fs/f2fs.h > >> +++ b/fs/f2fs/f2fs.h > >> @@ -1551,6 +1551,7 @@ struct f2fs_sb_info { > >> > >> #ifdef CONFIG_BLK_DEV_ZONED > >> unsigned int blocks_per_blkz; /* F2FS blocks per zone */ > >> + unsigned int max_active_zones; /* max zone resources of the > >> zoned device */ > >> #endif > >> > >> /* for node-related operations */ > >> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c > >> index 206d03c82d96..aef41b54098c 100644 > >> --- a/fs/f2fs/super.c > >> +++ b/fs/f2fs/super.c > >> @@ -2385,6 +2385,16 @@ static int f2fs_remount(struct super_block *sb, int > >> *flags, char *data) > >> if (err) > >> goto restore_opts; > >> > >> +#ifdef CONFIG_BLK_DEV_ZONED > >> + if (sbi->max_active_zones && sbi->max_active_zones < > >> F2FS_OPTION(sbi).active_logs) { > >> + f2fs_err(sbi, > >> + "zoned: max active zones %u is too small, need at > >> least %u active zones", > >> + sbi->max_active_zones, > >> F2FS_OPTION(sbi).active_logs); > >> + err = -EINVAL; > >> + goto restore_opts; > >> + } > >> +#endif > >> + > >> /* flush outstanding errors before changing fs state */ > >> flush_work(&sbi->s_error_work); > >> > >> @@ -3932,6 +3942,14 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, > >> int devi) > >> if (!f2fs_sb_has_blkzoned(sbi)) > >> return 0; > >> > >> + sbi->max_active_zones = bdev_max_active_zones(bdev); > >> + if (sbi->max_active_zones && sbi->max_active_zones < > >> F2FS_OPTION(sbi).active_logs) { > >> + f2fs_err(sbi, > >> + "zoned: max active zones %u is too small, need at > >> least %u active zones", > >> + sbi->max_active_zones, > >> F2FS_OPTION(sbi).active_logs); > >> + return -EINVAL; > >> + } > >> + > >> zone_sectors = bdev_zone_sectors(bdev); > >> if (!is_power_of_2(zone_sectors)) { > >> f2fs_err(sbi, "F2FS does not support non power of 2 zone > >> sizes\n"); _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
