Message ID | a5df66e698c59ab058cece26456520d882d2f4be.1611627788.git.naohiro.aota@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: zoned block device support | expand |
On 1/26/2021 10:24 AM, Naohiro Aota wrote: > From: Johannes Thumshirn <johannes.thumshirn@wdc.com> > > Don't set the zoned flag in fs_info when encountering the > BTRFS_FEATURE_INCOMPAT_ZONED on mount. The zoned flag in fs_info is in a > union together with the zone_size, so setting it too early will result in > setting an incorrect zone_size as well. > > Once the correct zone_size is read from the device, we can rely on the > zoned flag in fs_info as well to determine if the filesystem is running in > zoned mode. > > Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> > Reviewed-by: Josef Bacik <josef@toxicpanda.com> Looks good. Reviewed-by: Anand Jain <anand.jain@oracle.com> Thanks. > --- > fs/btrfs/disk-io.c | 2 -- > fs/btrfs/zoned.c | 8 ++++++++ > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c > index 39cbe10a81b6..76ab86dacc8d 100644 > --- a/fs/btrfs/disk-io.c > +++ b/fs/btrfs/disk-io.c > @@ -3136,8 +3136,6 @@ int __cold open_ctree(struct super_block *sb, struct btrfs_fs_devices *fs_device > if (features & BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) > btrfs_info(fs_info, "has skinny extents"); > > - fs_info->zoned = (features & BTRFS_FEATURE_INCOMPAT_ZONED); > - > /* > * flag our filesystem as having big metadata blocks if > * they are bigger than the page size > diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c > index 87172ce7173b..315cd5189781 100644 > --- a/fs/btrfs/zoned.c > +++ b/fs/btrfs/zoned.c > @@ -431,6 +431,14 @@ int btrfs_check_zoned_mode(struct btrfs_fs_info *fs_info) > fs_info->zone_size = zone_size; > fs_info->max_zone_append_size = max_zone_append_size; > > + /* > + * Check mount options here, because we might change fs_info->zoned > + * from fs_info->zone_size. > + */ > + ret = btrfs_check_mountopts_zoned(fs_info); > + if (ret) > + goto out; > + > btrfs_info(fs_info, "zoned mode enabled with zone size %llu", zone_size); > out: > return ret; >
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 39cbe10a81b6..76ab86dacc8d 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3136,8 +3136,6 @@ int __cold open_ctree(struct super_block *sb, struct btrfs_fs_devices *fs_device if (features & BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) btrfs_info(fs_info, "has skinny extents"); - fs_info->zoned = (features & BTRFS_FEATURE_INCOMPAT_ZONED); - /* * flag our filesystem as having big metadata blocks if * they are bigger than the page size diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c index 87172ce7173b..315cd5189781 100644 --- a/fs/btrfs/zoned.c +++ b/fs/btrfs/zoned.c @@ -431,6 +431,14 @@ int btrfs_check_zoned_mode(struct btrfs_fs_info *fs_info) fs_info->zone_size = zone_size; fs_info->max_zone_append_size = max_zone_append_size; + /* + * Check mount options here, because we might change fs_info->zoned + * from fs_info->zone_size. + */ + ret = btrfs_check_mountopts_zoned(fs_info); + if (ret) + goto out; + btrfs_info(fs_info, "zoned mode enabled with zone size %llu", zone_size); out: return ret;