On Tue, Jan 26, 2021 at 04:34:02PM +0800, Qu Wenruo wrote:
> This adds the basic RO mount ability for 4K sector size on 64K page
> system.
> 
> Currently we only plan to support 4K and 64K page system.
> 
> Signed-off-by: Qu Wenruo <[email protected]>
> Signed-off-by: David Sterba <[email protected]>
> ---
>  fs/btrfs/disk-io.c | 24 +++++++++++++++++++++---
>  fs/btrfs/super.c   |  7 +++++++
>  2 files changed, 28 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
> index 0b10577ad2bd..d74ee0a396ac 100644
> --- a/fs/btrfs/disk-io.c
> +++ b/fs/btrfs/disk-io.c
> @@ -2483,13 +2483,21 @@ static int validate_super(struct btrfs_fs_info 
> *fs_info,
>               btrfs_err(fs_info, "invalid sectorsize %llu", sectorsize);
>               ret = -EINVAL;
>       }
> -     /* Only PAGE SIZE is supported yet */
> -     if (sectorsize != PAGE_SIZE) {
> +
> +     /*
> +      * For 4K page size, we only support 4K sector size.
> +      * For 64K page size, we support RW for 64K sector size, and RO for
> +      * 4K sector size.
> +      */
> +     if ((SZ_4K == PAGE_SIZE && sectorsize != PAGE_SIZE) ||
> +         (SZ_64K == PAGE_SIZE && (sectorsize != SZ_4K &&

I've switched the order here so it reads more naturally as PAGE_SIZE == SZ_...

> +                                  sectorsize != SZ_64K))) {
>               btrfs_err(fs_info,
> -                     "sectorsize %llu not supported yet, only support %lu",
> +                     "sectorsize %llu not supported yet for page size %lu",
>                       sectorsize, PAGE_SIZE);
>               ret = -EINVAL;
>       }
> +
>       if (!is_power_of_2(nodesize) || nodesize < sectorsize ||
>           nodesize > BTRFS_MAX_METADATA_BLOCKSIZE) {
>               btrfs_err(fs_info, "invalid nodesize %llu", nodesize);
> @@ -3248,6 +3256,16 @@ int __cold open_ctree(struct super_block *sb, struct 
> btrfs_fs_devices *fs_device
>               goto fail_alloc;
>       }
>  
> +     /* For 4K sector size support, it's only read-only yet */
> +     if (PAGE_SIZE == SZ_64K && sectorsize == SZ_4K) {
> +             if (!sb_rdonly(sb) || btrfs_super_log_root(disk_super)) {
> +                     btrfs_err(fs_info,
> +                             "subpage sector size only support RO yet");

Similar to the other message, I've added which sectorsize and page size
don't work.

And s/RO/read-only/. This is for clarity of the messages that are read
by users, while we can use the RO/RW in comments or changelogs.

Reply via email to