Message ID | 20250206064511.2323878-39-hch@lst.de (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Series | [01/43] xfs: factor out a xfs_rt_check_size helper | expand |
On Thu, Feb 06, 2025 at 07:44:54AM +0100, Christoph Hellwig wrote: > Allow limiting the number of open zones used below that exported by the > device. This is required to tune the number of write streams when zoned > RT devices are used on conventional devices, and can be useful on zoned > devices that support a very large number of open zones. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- Seems pretty straightforward to me... Reviewed-by: "Darrick J. Wong" <djwong@kernel.org> --D > fs/xfs/xfs_super.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index ceb1a855453e..b59d7349dbd2 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -110,7 +110,7 @@ enum { > Opt_filestreams, Opt_quota, Opt_noquota, Opt_usrquota, Opt_grpquota, > Opt_prjquota, Opt_uquota, Opt_gquota, Opt_pquota, > Opt_uqnoenforce, Opt_gqnoenforce, Opt_pqnoenforce, Opt_qnoenforce, > - Opt_discard, Opt_nodiscard, Opt_dax, Opt_dax_enum, > + Opt_discard, Opt_nodiscard, Opt_dax, Opt_dax_enum, Opt_max_open_zones, > }; > > static const struct fs_parameter_spec xfs_fs_parameters[] = { > @@ -155,6 +155,7 @@ static const struct fs_parameter_spec xfs_fs_parameters[] = { > fsparam_flag("nodiscard", Opt_nodiscard), > fsparam_flag("dax", Opt_dax), > fsparam_enum("dax", Opt_dax_enum, dax_param_enums), > + fsparam_u32("max_open_zones", Opt_max_open_zones), > {} > }; > > @@ -234,6 +235,9 @@ xfs_fs_show_options( > if (!(mp->m_qflags & XFS_ALL_QUOTA_ACCT)) > seq_puts(m, ",noquota"); > > + if (mp->m_max_open_zones) > + seq_printf(m, ",max_open_zones=%u", mp->m_max_open_zones); > + > return 0; > } > > @@ -1081,6 +1085,14 @@ xfs_finish_flags( > return -EINVAL; > } > > + if (!xfs_has_zoned(mp)) { > + if (mp->m_max_open_zones) { > + xfs_warn(mp, > +"max_open_zones mount option only supported on zoned file systems."); > + return -EINVAL; > + } > + } > + > return 0; > } > > @@ -1462,6 +1474,9 @@ xfs_fs_parse_param( > xfs_fs_warn_deprecated(fc, param, XFS_FEAT_NOATTR2, true); > parsing_mp->m_features |= XFS_FEAT_NOATTR2; > return 0; > + case Opt_max_open_zones: > + parsing_mp->m_max_open_zones = result.uint_32; > + return 0; > default: > xfs_warn(parsing_mp, "unknown mount option [%s].", param->key); > return -EINVAL; > -- > 2.45.2 > >
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index ceb1a855453e..b59d7349dbd2 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -110,7 +110,7 @@ enum { Opt_filestreams, Opt_quota, Opt_noquota, Opt_usrquota, Opt_grpquota, Opt_prjquota, Opt_uquota, Opt_gquota, Opt_pquota, Opt_uqnoenforce, Opt_gqnoenforce, Opt_pqnoenforce, Opt_qnoenforce, - Opt_discard, Opt_nodiscard, Opt_dax, Opt_dax_enum, + Opt_discard, Opt_nodiscard, Opt_dax, Opt_dax_enum, Opt_max_open_zones, }; static const struct fs_parameter_spec xfs_fs_parameters[] = { @@ -155,6 +155,7 @@ static const struct fs_parameter_spec xfs_fs_parameters[] = { fsparam_flag("nodiscard", Opt_nodiscard), fsparam_flag("dax", Opt_dax), fsparam_enum("dax", Opt_dax_enum, dax_param_enums), + fsparam_u32("max_open_zones", Opt_max_open_zones), {} }; @@ -234,6 +235,9 @@ xfs_fs_show_options( if (!(mp->m_qflags & XFS_ALL_QUOTA_ACCT)) seq_puts(m, ",noquota"); + if (mp->m_max_open_zones) + seq_printf(m, ",max_open_zones=%u", mp->m_max_open_zones); + return 0; } @@ -1081,6 +1085,14 @@ xfs_finish_flags( return -EINVAL; } + if (!xfs_has_zoned(mp)) { + if (mp->m_max_open_zones) { + xfs_warn(mp, +"max_open_zones mount option only supported on zoned file systems."); + return -EINVAL; + } + } + return 0; } @@ -1462,6 +1474,9 @@ xfs_fs_parse_param( xfs_fs_warn_deprecated(fc, param, XFS_FEAT_NOATTR2, true); parsing_mp->m_features |= XFS_FEAT_NOATTR2; return 0; + case Opt_max_open_zones: + parsing_mp->m_max_open_zones = result.uint_32; + return 0; default: xfs_warn(parsing_mp, "unknown mount option [%s].", param->key); return -EINVAL;
Allow limiting the number of open zones used below that exported by the device. This is required to tune the number of write streams when zoned RT devices are used on conventional devices, and can be useful on zoned devices that support a very large number of open zones. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/xfs/xfs_super.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)