[FOR INTERNAL REVIEW] [PATCH RESEND 4/4] staging: erofs: update .mount and .remount_sb
Gao Xiang
gaoxiang25 at huawei.com
Mon Jul 30 19:29:38 AEST 2018
This patch updates .mount and .remount_sb after
commit 286c6b145729 ("vfs: Require specification
of size of mount data for internal mounts").
Reported-by: Stephen Rothwell <sfr at canb.auug.org.au>
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));
--
1.9.1
More information about the Linux-erofs
mailing list