All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qu Wenruo <quwenruo@cn.fujitsu.com>
To: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH] btrfs: Move some super block check to btrfs_check_super_valid
Date: Tue, 24 Dec 2013 11:55:43 +0800	[thread overview]
Message-ID: <52B905BF.5030003@cn.fujitsu.com> (raw)
In-Reply-To: <1387856996-24504-1-git-send-email-quwenruo@cn.fujitsu.com>

I am very sorry that branch btrfs-next seems changed all the printk,
so I'll rebase this to btrfs-next branch.

Qu

On tue, 24 Dec 2013 11:49:56 +0800, Qu Wenruo wrote:
> Move some early check to btrfs_check_super_valid:
> - sectorsize check
> - leafsize == nodesize check
> - leafsize > BTRFS_MAX_METADATA_BLOCKSIZE check
> - incompat_flags check
>
> and remove the duplicant magic check of btrfs_super_block,
> since btrfs_read_dev_super already checked the magic number.
>
> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
> ---
>  fs/btrfs/disk-io.c | 76 ++++++++++++++++++++++++------------------------------
>  1 file changed, 34 insertions(+), 42 deletions(-)
>
> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
> index 8072cfa..04ad1d3 100644
> --- a/fs/btrfs/disk-io.c
> +++ b/fs/btrfs/disk-io.c
> @@ -2388,33 +2388,6 @@ int open_ctree(struct super_block *sb,
>  		goto fail_alloc;
>  	}
>  
> -	features = btrfs_super_incompat_flags(disk_super) &
> -		~BTRFS_FEATURE_INCOMPAT_SUPP;
> -	if (features) {
> -		printk(KERN_ERR "BTRFS: couldn't mount because of "
> -		       "unsupported optional features (%Lx).\n",
> -		       features);
> -		err = -EINVAL;
> -		goto fail_alloc;
> -	}
> -
> -	if (btrfs_super_leafsize(disk_super) !=
> -	    btrfs_super_nodesize(disk_super)) {
> -		printk(KERN_ERR "BTRFS: couldn't mount because metadata "
> -		       "blocksizes don't match.  node %d leaf %d\n",
> -		       btrfs_super_nodesize(disk_super),
> -		       btrfs_super_leafsize(disk_super));
> -		err = -EINVAL;
> -		goto fail_alloc;
> -	}
> -	if (btrfs_super_leafsize(disk_super) > BTRFS_MAX_METADATA_BLOCKSIZE) {
> -		printk(KERN_ERR "BTRFS: couldn't mount because metadata "
> -		       "blocksize (%d) was too large\n",
> -		       btrfs_super_leafsize(disk_super));
> -		err = -EINVAL;
> -		goto fail_alloc;
> -	}
> -
>  	features = btrfs_super_incompat_flags(disk_super);
>  	features |= BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF;
>  	if (tree_root->fs_info->compress_type == BTRFS_COMPRESS_LZO)
> @@ -2582,17 +2555,6 @@ int open_ctree(struct super_block *sb,
>  	sb->s_blocksize = sectorsize;
>  	sb->s_blocksize_bits = blksize_bits(sectorsize);
>  
> -	if (btrfs_super_magic(disk_super) != BTRFS_MAGIC) {
> -		printk(KERN_INFO "btrfs: valid FS not found on %s\n", sb->s_id);
> -		goto fail_sb_buffer;
> -	}
> -
> -	if (sectorsize != PAGE_SIZE) {
> -		printk(KERN_WARNING "btrfs: Incompatible sector size(%lu) "
> -		       "found on %s\n", (unsigned long)sectorsize, sb->s_id);
> -		goto fail_sb_buffer;
> -	}
> -
>  	mutex_lock(&fs_info->chunk_mutex);
>  	ret = btrfs_read_sys_array(tree_root);
>  	mutex_unlock(&fs_info->chunk_mutex);
> @@ -3706,11 +3668,41 @@ int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid)
>  }
>  
>  static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info,
> -			      int read_only)
> +				   int read_only)
>  {
> -	/*
> -	 * Placeholder for checks
> -	 */
> +	struct btrfs_super_block *disk_super = fs_info->super_copy;
> +	u32 sectorsize = btrfs_super_sectorsize(disk_super);
> +	u64 features;
> +
> +	if (sectorsize != PAGE_SIZE) {
> +		printk(KERN_WARNING "btrfs: Incompatible sector size(%lu) "
> +		       "found on %s\n", (unsigned long)sectorsize,
> +		       fs_info->sb->s_id);
> +		return -EINVAL;
> +	}
> +	if (btrfs_super_leafsize(disk_super) !=
> +	    btrfs_super_nodesize(disk_super)) {
> +		printk(KERN_ERR "BTRFS: couldn't mount because metadata "
> +		       "blocksizes don't match.  node %d leaf %d\n",
> +		       btrfs_super_nodesize(disk_super),
> +		       btrfs_super_leafsize(disk_super));
> +		return -EINVAL;
> +	}
> +	if (btrfs_super_leafsize(disk_super) > BTRFS_MAX_METADATA_BLOCKSIZE) {
> +		printk(KERN_ERR "BTRFS: couldn't mount because metadata "
> +		       "blocksize (%d) was too large\n",
> +		       btrfs_super_leafsize(disk_super));
> +		return -EINVAL;
> +	}
> +
> +	features = btrfs_super_incompat_flags(disk_super) &
> +		~BTRFS_FEATURE_INCOMPAT_SUPP;
> +	if (features) {
> +		printk(KERN_ERR "BTRFS: couldn't mount because of "
> +		       "unsupported optional features (%Lx).\n",
> +		       features);
> +		return -EINVAL;
> +	}
>  	return 0;
>  }
>  


      reply	other threads:[~2013-12-24  3:54 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-24  3:49 [PATCH] btrfs: Move some super block check to btrfs_check_super_valid Qu Wenruo
2013-12-24  3:55 ` Qu Wenruo [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52B905BF.5030003@cn.fujitsu.com \
    --to=quwenruo@cn.fujitsu.com \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.