提交 a1da9e8a 编写于 作者: A Al Viro

switch logfs to ->mount()

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 e5a0726a
...@@ -620,9 +620,6 @@ void emergency_read_end(struct page *page); ...@@ -620,9 +620,6 @@ void emergency_read_end(struct page *page);
void logfs_crash_dump(struct super_block *sb); void logfs_crash_dump(struct super_block *sb);
void *memchr_inv(const void *s, int c, size_t n); void *memchr_inv(const void *s, int c, size_t n);
int logfs_statfs(struct dentry *dentry, struct kstatfs *stats); int logfs_statfs(struct dentry *dentry, struct kstatfs *stats);
int logfs_get_sb_device(struct logfs_super *s,
struct file_system_type *type, int flags,
struct vfsmount *mnt);
int logfs_check_ds(struct logfs_disk_super *ds); int logfs_check_ds(struct logfs_disk_super *ds);
int logfs_write_sb(struct super_block *sb); int logfs_write_sb(struct super_block *sb);
......
...@@ -325,7 +325,7 @@ static int logfs_make_writeable(struct super_block *sb) ...@@ -325,7 +325,7 @@ static int logfs_make_writeable(struct super_block *sb)
return 0; return 0;
} }
static int logfs_get_sb_final(struct super_block *sb, struct vfsmount *mnt) static int logfs_get_sb_final(struct super_block *sb)
{ {
struct logfs_super *super = logfs_super(sb); struct logfs_super *super = logfs_super(sb);
struct inode *rootdir; struct inode *rootdir;
...@@ -356,7 +356,6 @@ static int logfs_get_sb_final(struct super_block *sb, struct vfsmount *mnt) ...@@ -356,7 +356,6 @@ static int logfs_get_sb_final(struct super_block *sb, struct vfsmount *mnt)
} }
log_super("LogFS: Finished mounting\n"); log_super("LogFS: Finished mounting\n");
simple_set_mnt(mnt, sb);
return 0; return 0;
fail: fail:
...@@ -536,9 +535,8 @@ static void logfs_kill_sb(struct super_block *sb) ...@@ -536,9 +535,8 @@ static void logfs_kill_sb(struct super_block *sb)
log_super("LogFS: Finished unmounting\n"); log_super("LogFS: Finished unmounting\n");
} }
int logfs_get_sb_device(struct logfs_super *super, static struct dentry *logfs_get_sb_device(struct logfs_super *super,
struct file_system_type *type, int flags, struct file_system_type *type, int flags)
struct vfsmount *mnt)
{ {
struct super_block *sb; struct super_block *sb;
int err = -ENOMEM; int err = -ENOMEM;
...@@ -548,14 +546,17 @@ int logfs_get_sb_device(struct logfs_super *super, ...@@ -548,14 +546,17 @@ int logfs_get_sb_device(struct logfs_super *super,
err = -EINVAL; err = -EINVAL;
sb = sget(type, logfs_sb_test, logfs_sb_set, super); sb = sget(type, logfs_sb_test, logfs_sb_set, super);
if (IS_ERR(sb)) if (IS_ERR(sb)) {
goto err0; super->s_devops->put_device(super);
kfree(super);
return ERR_CAST(sb);
}
if (sb->s_root) { if (sb->s_root) {
/* Device is already in use */ /* Device is already in use */
err = 0; super->s_devops->put_device(super);
simple_set_mnt(mnt, sb); kfree(super);
goto err0; return dget(sb->s_root);
} }
/* /*
...@@ -573,10 +574,12 @@ int logfs_get_sb_device(struct logfs_super *super, ...@@ -573,10 +574,12 @@ int logfs_get_sb_device(struct logfs_super *super,
goto err1; goto err1;
sb->s_flags |= MS_ACTIVE; sb->s_flags |= MS_ACTIVE;
err = logfs_get_sb_final(sb, mnt); err = logfs_get_sb_final(sb);
if (err) if (err) {
deactivate_locked_super(sb); deactivate_locked_super(sb);
return err; return ERR_PTR(err);
}
return dget(sb->s_root);
err1: err1:
/* no ->s_root, no ->put_super() */ /* no ->s_root, no ->put_super() */
...@@ -584,15 +587,11 @@ int logfs_get_sb_device(struct logfs_super *super, ...@@ -584,15 +587,11 @@ int logfs_get_sb_device(struct logfs_super *super,
iput(super->s_segfile_inode); iput(super->s_segfile_inode);
iput(super->s_mapping_inode); iput(super->s_mapping_inode);
deactivate_locked_super(sb); deactivate_locked_super(sb);
return err; return ERR_PTR(err);
err0:
super->s_devops->put_device(super);
kfree(super);
return err;
} }
static int logfs_get_sb(struct file_system_type *type, int flags, static struct dentry *logfs_mount(struct file_system_type *type, int flags,
const char *devname, void *data, struct vfsmount *mnt) const char *devname, void *data)
{ {
ulong mtdnr; ulong mtdnr;
struct logfs_super *super; struct logfs_super *super;
...@@ -600,7 +599,7 @@ static int logfs_get_sb(struct file_system_type *type, int flags, ...@@ -600,7 +599,7 @@ static int logfs_get_sb(struct file_system_type *type, int flags,
super = kzalloc(sizeof(*super), GFP_KERNEL); super = kzalloc(sizeof(*super), GFP_KERNEL);
if (!super) if (!super)
return -ENOMEM; return ERR_PTR(-ENOMEM);
if (!devname) if (!devname)
err = logfs_get_sb_bdev(super, type, devname); err = logfs_get_sb_bdev(super, type, devname);
...@@ -617,16 +616,16 @@ static int logfs_get_sb(struct file_system_type *type, int flags, ...@@ -617,16 +616,16 @@ static int logfs_get_sb(struct file_system_type *type, int flags,
if (err) { if (err) {
kfree(super); kfree(super);
return err; return ERR_PTR(err);
} }
return logfs_get_sb_device(super, type, flags, mnt); return logfs_get_sb_device(super, type, flags);
} }
static struct file_system_type logfs_fs_type = { static struct file_system_type logfs_fs_type = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "logfs", .name = "logfs",
.get_sb = logfs_get_sb, .mount = logfs_mount,
.kill_sb = logfs_kill_sb, .kill_sb = logfs_kill_sb,
.fs_flags = FS_REQUIRES_DEV, .fs_flags = FS_REQUIRES_DEV,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册