[FOR INTERNAL REVIEW] [PATCH 4/4] staging: erofs: update .mount and .remount_sb

Chao Yu yuchao0 at huawei.com
Tue Jul 31 17:38:24 AEST 2018


Hi David,

Could you please help to check this patch as well?

Thanks,

On 2018/7/30 17:18, Gao Xiang wrote:
> This patch updates .mount and .remount_sb after
> commit 286c6b145729 ("vfs: Require specification
> of size of mount data for internal mounts").
> 
> Signed-off-by: Gao Xiang <gaoxiang25 at huawei.com>
> ---
> 
> - Tested with images generated by mkfs.erofs:
>    1) mount and unmount operations
>    2) md5sum `find . -type f`
> 
>  drivers/staging/erofs/internal.h |  1 -
>  drivers/staging/erofs/super.c    | 61 +++++++++++-----------------------------
>  2 files changed, 16 insertions(+), 46 deletions(-)
> 
> diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
> index 367b39f..9074a56 100644
> --- a/drivers/staging/erofs/internal.h
> +++ b/drivers/staging/erofs/internal.h
> @@ -111,7 +111,6 @@ struct erofs_sb_info {
>  
>  	u8 uuid[16];                    /* 128-bit uuid for volume */
>  	u8 volume_name[16];             /* volume name */
> -	char *dev_name;
>  
>  	unsigned int mount_opt;
>  	unsigned int shrinker_run_no;
> diff --git a/drivers/staging/erofs/super.c b/drivers/staging/erofs/super.c
> index ae1eb20..190a538 100644
> --- a/drivers/staging/erofs/super.c
> +++ b/drivers/staging/erofs/super.c
> @@ -313,14 +313,18 @@ static struct inode *erofs_init_managed_cache(struct super_block *sb)
>  
>  #endif
>  
> -static int erofs_read_super(struct super_block *sb,
> -	const char *dev_name, void *data, int silent)
> +static int erofs_read_super(struct super_block *sb, void *data,
> +			    size_t data_size, int silent)
>  {
>  	struct inode *inode;
>  	struct erofs_sb_info *sbi;
> +	char b[BDEVNAME_SIZE];
>  	int err = -EINVAL;
>  
> -	infoln("read_super, device -> %s", dev_name);
> +	/* get the block device name */
> +	bdevname(sb->s_bdev, b);
> +
> +	infoln("read_super, device -> %s", b);
>  	infoln("options -> %s", (char *)data);
>  
>  	if (unlikely(!sb_set_blocksize(sb, EROFS_BLKSIZ))) {
> @@ -392,16 +396,6 @@ static int erofs_read_super(struct super_block *sb,
>  		goto err_makeroot;
>  	}
>  
> -	/* save the device name to sbi */
> -	sbi->dev_name = __getname();
> -	if (sbi->dev_name == NULL) {
> -		err = -ENOMEM;
> -		goto err_devname;
> -	}
> -
> -	snprintf(sbi->dev_name, PATH_MAX, "%s", dev_name);
> -	sbi->dev_name[PATH_MAX - 1] = '\0';
> -
>  	erofs_register_super(sb);
>  
>  	/*
> @@ -411,15 +405,13 @@ static int erofs_read_super(struct super_block *sb,
>  	d_rehash(sb->s_root);
>  
>  	if (!silent)
> -		infoln("mounted on %s with opts: %s.", dev_name,
> -			(char *)data);
> +		infoln("mounted on %s with opts: %s.", b, (char *)data);
>  	return 0;
>  	/*
>  	 * please add a label for each exit point and use
>  	 * the following name convention, thus new features
>  	 * can be integrated easily without renaming labels.
>  	 */
> -err_devname:
>  	dput(sb->s_root);
>  err_makeroot:
>  err_isdir:
> @@ -445,6 +437,7 @@ static int erofs_read_super(struct super_block *sb,
>  static void erofs_put_super(struct super_block *sb)
>  {
>  	struct erofs_sb_info *sbi = EROFS_SB(sb);
> +	char b[BDEVNAME_SIZE];
>  
>  	/* for cases which are failed in "read_super" */
>  	if (sbi == NULL)
> @@ -452,8 +445,7 @@ static void erofs_put_super(struct super_block *sb)
>  
>  	WARN_ON(sb->s_magic != EROFS_SUPER_MAGIC);
>  
> -	infoln("unmounted for %s", sbi->dev_name);
> -	__putname(sbi->dev_name);
> +	infoln("unmounted for %s", bdevname(sb->s_bdev, b));
>  
>  #ifdef EROFS_FS_HAS_MANAGED_CACHE
>  	iput(sbi->managed_cache);
> @@ -472,33 +464,11 @@ static void erofs_put_super(struct super_block *sb)
>  	sb->s_fs_info = NULL;
>  }
>  
> -
> -struct erofs_mount_private {
> -	const char *dev_name;
> -	char *options;
> -};
> -
> -/* support mount_bdev() with options */
> -static int erofs_fill_super(struct super_block *sb,
> -	void *_priv, int silent)
> -{
> -	struct erofs_mount_private *priv = _priv;
> -
> -	return erofs_read_super(sb, priv->dev_name,
> -		priv->options, silent);
> -}
> -
> -static struct dentry *erofs_mount(
> -	struct file_system_type *fs_type, int flags,
> -	const char *dev_name, void *data)
> +static struct dentry *erofs_mount(struct file_system_type *fs_type, int flags,
> +	const char *dev_name, void *data, size_t data_size)
>  {
> -	struct erofs_mount_private priv = {
> -		.dev_name = dev_name,
> -		.options = data
> -	};
> -
> -	return mount_bdev(fs_type, flags, dev_name,
> -		&priv, erofs_fill_super);
> +	return mount_bdev(fs_type, flags, dev_name, data, data_size,
> +		erofs_read_super);
>  }
>  
>  static void erofs_kill_sb(struct super_block *sb)
> @@ -623,7 +593,8 @@ static int erofs_show_options(struct seq_file *seq, struct dentry *root)
>  	return 0;
>  }
>  
> -static int erofs_remount(struct super_block *sb, int *flags, char *data)
> +static int erofs_remount(struct super_block *sb, int *flags,
> +	char *data, size_t data_size)
>  {
>  	BUG_ON(!sb_rdonly(sb));
>  
> 



More information about the Linux-erofs mailing list