diff options
| -rw-r--r-- | drivers/staging/autofs/init.c | 8 | ||||
| -rw-r--r-- | drivers/staging/pohmelfs/inode.c | 9 | ||||
| -rw-r--r-- | drivers/staging/smbfs/inode.c | 8 | ||||
| -rw-r--r-- | fs/autofs4/init.c | 8 | ||||
| -rw-r--r-- | fs/coda/inode.c | 8 | ||||
| -rw-r--r-- | fs/exofs/super.c | 10 | ||||
| -rw-r--r-- | fs/fuse/inode.c | 8 | ||||
| -rw-r--r-- | fs/hostfs/hostfs_kern.c | 8 | ||||
| -rw-r--r-- | fs/hppfs/hppfs.c | 8 | ||||
| -rw-r--r-- | fs/hugetlbfs/inode.c | 8 | ||||
| -rw-r--r-- | fs/ncpfs/inode.c | 8 | ||||
| -rw-r--r-- | fs/ocfs2/dlmfs/dlmfs.c | 8 | ||||
| -rw-r--r-- | fs/ramfs/inode.c | 17 | ||||
| -rw-r--r-- | fs/super.c | 27 | ||||
| -rw-r--r-- | include/linux/fs.h | 3 | ||||
| -rw-r--r-- | include/linux/ramfs.h | 4 | ||||
| -rw-r--r-- | mm/shmem.c | 10 | 
17 files changed, 87 insertions, 73 deletions
diff --git a/drivers/staging/autofs/init.c b/drivers/staging/autofs/init.c index 765c72f4297..5e4b372ea66 100644 --- a/drivers/staging/autofs/init.c +++ b/drivers/staging/autofs/init.c @@ -14,16 +14,16 @@  #include <linux/init.h>  #include "autofs_i.h" -static int autofs_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *autofs_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, autofs_fill_super, mnt); +	return mount_nodev(fs_type, flags, data, autofs_fill_super);  }  static struct file_system_type autofs_fs_type = {  	.owner		= THIS_MODULE,  	.name		= "autofs", -	.get_sb		= autofs_get_sb, +	.mount		= autofs_mount,  	.kill_sb	= autofs_kill_sb,  }; diff --git a/drivers/staging/pohmelfs/inode.c b/drivers/staging/pohmelfs/inode.c index c62d30017c0..61685ccceda 100644 --- a/drivers/staging/pohmelfs/inode.c +++ b/drivers/staging/pohmelfs/inode.c @@ -1937,11 +1937,10 @@ err_out_exit:  /*   * Some VFS magic here...   */ -static int pohmelfs_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *pohmelfs_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, pohmelfs_fill_super, -				mnt); +	return mount_nodev(fs_type, flags, data, pohmelfs_fill_super);  }  /* @@ -1958,7 +1957,7 @@ static void pohmelfs_kill_super(struct super_block *sb)  static struct file_system_type pohmel_fs_type = {  	.owner		= THIS_MODULE,  	.name		= "pohmel", -	.get_sb		= pohmelfs_get_sb, +	.mount		= pohmelfs_mount,  	.kill_sb 	= pohmelfs_kill_super,  }; diff --git a/drivers/staging/smbfs/inode.c b/drivers/staging/smbfs/inode.c index 552951aa749..f9c493591ce 100644 --- a/drivers/staging/smbfs/inode.c +++ b/drivers/staging/smbfs/inode.c @@ -793,16 +793,16 @@ out:  	return error;  } -static int smb_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *smb_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, smb_fill_super, mnt); +	return mount_nodev(fs_type, flags, data, smb_fill_super);  }  static struct file_system_type smb_fs_type = {  	.owner		= THIS_MODULE,  	.name		= "smbfs", -	.get_sb		= smb_get_sb, +	.mount		= smb_mount,  	.kill_sb	= kill_anon_super,  	.fs_flags	= FS_BINARY_MOUNTDATA,  }; diff --git a/fs/autofs4/init.c b/fs/autofs4/init.c index 9722e4bd895..c038727b405 100644 --- a/fs/autofs4/init.c +++ b/fs/autofs4/init.c @@ -14,16 +14,16 @@  #include <linux/init.h>  #include "autofs_i.h" -static int autofs_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *autofs_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, autofs4_fill_super, mnt); +	return mount_nodev(fs_type, flags, data, autofs4_fill_super);  }  static struct file_system_type autofs_fs_type = {  	.owner		= THIS_MODULE,  	.name		= "autofs", -	.get_sb		= autofs_get_sb, +	.mount		= autofs_mount,  	.kill_sb	= autofs4_kill_sb,  }; diff --git a/fs/coda/inode.c b/fs/coda/inode.c index 7993b96ca34..5ea57c8c7f9 100644 --- a/fs/coda/inode.c +++ b/fs/coda/inode.c @@ -306,16 +306,16 @@ static int coda_statfs(struct dentry *dentry, struct kstatfs *buf)  /* init_coda: used by filesystems.c to register coda */ -static int coda_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *coda_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, coda_fill_super, mnt); +	return mount_nodev(fs_type, flags, data, coda_fill_super);  }  struct file_system_type coda_fs_type = {  	.owner		= THIS_MODULE,  	.name		= "coda", -	.get_sb		= coda_get_sb, +	.mount		= coda_mount,  	.kill_sb	= kill_anon_super,  	.fs_flags	= FS_BINARY_MOUNTDATA,  }; diff --git a/fs/exofs/super.c b/fs/exofs/super.c index 047e92fa3af..79c3ae6e045 100644 --- a/fs/exofs/super.c +++ b/fs/exofs/super.c @@ -659,19 +659,19 @@ free_bdi:  /*   * Set up the superblock (calls exofs_fill_super eventually)   */ -static int exofs_get_sb(struct file_system_type *type, +static struct dentry *exofs_mount(struct file_system_type *type,  			  int flags, const char *dev_name, -			  void *data, struct vfsmount *mnt) +			  void *data)  {  	struct exofs_mountopt opts;  	int ret;  	ret = parse_options(data, &opts);  	if (ret) -		return ret; +		return ERR_PTR(ret);  	opts.dev_name = dev_name; -	return get_sb_nodev(type, flags, &opts, exofs_fill_super, mnt); +	return mount_nodev(type, flags, &opts, exofs_fill_super);  }  /* @@ -809,7 +809,7 @@ static const struct export_operations exofs_export_ops = {  static struct file_system_type exofs_type = {  	.owner          = THIS_MODULE,  	.name           = "exofs", -	.get_sb         = exofs_get_sb, +	.mount          = exofs_mount,  	.kill_sb        = generic_shutdown_super,  }; diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index edf6a184353..cfce3ad86a9 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -1041,11 +1041,11 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)  	return err;  } -static int fuse_get_sb(struct file_system_type *fs_type, +static struct dentry *fuse_mount(struct file_system_type *fs_type,  		       int flags, const char *dev_name, -		       void *raw_data, struct vfsmount *mnt) +		       void *raw_data)  { -	return get_sb_nodev(fs_type, flags, raw_data, fuse_fill_super, mnt); +	return mount_nodev(fs_type, flags, raw_data, fuse_fill_super);  }  static void fuse_kill_sb_anon(struct super_block *sb) @@ -1065,7 +1065,7 @@ static struct file_system_type fuse_fs_type = {  	.owner		= THIS_MODULE,  	.name		= "fuse",  	.fs_flags	= FS_HAS_SUBTYPE, -	.get_sb		= fuse_get_sb, +	.mount		= fuse_mount,  	.kill_sb	= fuse_kill_sb_anon,  }; diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index cd7c93917cc..2c0f148a49e 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c @@ -962,11 +962,11 @@ out:  	return err;  } -static int hostfs_read_sb(struct file_system_type *type, +static struct dentry *hostfs_read_sb(struct file_system_type *type,  			  int flags, const char *dev_name, -			  void *data, struct vfsmount *mnt) +			  void *data)  { -	return get_sb_nodev(type, flags, data, hostfs_fill_sb_common, mnt); +	return mount_nodev(type, flags, data, hostfs_fill_sb_common);  }  static void hostfs_kill_sb(struct super_block *s) @@ -978,7 +978,7 @@ static void hostfs_kill_sb(struct super_block *s)  static struct file_system_type hostfs_type = {  	.owner 		= THIS_MODULE,  	.name 		= "hostfs", -	.get_sb 	= hostfs_read_sb, +	.mount	 	= hostfs_read_sb,  	.kill_sb	= hostfs_kill_sb,  	.fs_flags 	= 0,  }; diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 4e2a45ea614..f702b5f713f 100644 --- a/fs/hppfs/hppfs.c +++ b/fs/hppfs/hppfs.c @@ -748,17 +748,17 @@ static int hppfs_fill_super(struct super_block *sb, void *d, int silent)  	return(err);  } -static int hppfs_read_super(struct file_system_type *type, +static struct dentry *hppfs_read_super(struct file_system_type *type,  			    int flags, const char *dev_name, -			    void *data, struct vfsmount *mnt) +			    void *data)  { -	return get_sb_nodev(type, flags, data, hppfs_fill_super, mnt); +	return mount_nodev(type, flags, data, hppfs_fill_super);  }  static struct file_system_type hppfs_type = {  	.owner 		= THIS_MODULE,  	.name 		= "hppfs", -	.get_sb 	= hppfs_read_super, +	.mount 		= hppfs_read_super,  	.kill_sb	= kill_anon_super,  	.fs_flags 	= 0,  }; diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index b14be3f781c..d6cfac1f0a4 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -896,15 +896,15 @@ void hugetlb_put_quota(struct address_space *mapping, long delta)  	}  } -static int hugetlbfs_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *hugetlbfs_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, hugetlbfs_fill_super, mnt); +	return mount_nodev(fs_type, flags, data, hugetlbfs_fill_super);  }  static struct file_system_type hugetlbfs_fs_type = {  	.name		= "hugetlbfs", -	.get_sb		= hugetlbfs_get_sb, +	.mount		= hugetlbfs_mount,  	.kill_sb	= kill_litter_super,  }; diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c index 985fabb26ac..d290545aa0c 100644 --- a/fs/ncpfs/inode.c +++ b/fs/ncpfs/inode.c @@ -1020,16 +1020,16 @@ out:  	return result;  } -static int ncp_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *ncp_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, ncp_fill_super, mnt); +	return mount_nodev(fs_type, flags, data, ncp_fill_super);  }  static struct file_system_type ncp_fs_type = {  	.owner		= THIS_MODULE,  	.name		= "ncpfs", -	.get_sb		= ncp_get_sb, +	.mount		= ncp_mount,  	.kill_sb	= kill_anon_super,  	.fs_flags	= FS_BINARY_MOUNTDATA,  }; diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c index 75e115f1bd7..b2df490a19e 100644 --- a/fs/ocfs2/dlmfs/dlmfs.c +++ b/fs/ocfs2/dlmfs/dlmfs.c @@ -643,16 +643,16 @@ static const struct inode_operations dlmfs_file_inode_operations = {  	.setattr	= dlmfs_file_setattr,  }; -static int dlmfs_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *dlmfs_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, dlmfs_fill_super, mnt); +	return mount_nodev(fs_type, flags, data, dlmfs_fill_super);  }  static struct file_system_type dlmfs_fs_type = {  	.owner		= THIS_MODULE,  	.name		= "ocfs2_dlmfs", -	.get_sb		= dlmfs_get_sb, +	.mount		= dlmfs_mount,  	.kill_sb	= kill_litter_super,  }; diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c index 67fadb1ad2c..eacb166fb25 100644 --- a/fs/ramfs/inode.c +++ b/fs/ramfs/inode.c @@ -255,17 +255,16 @@ fail:  	return err;  } -int ramfs_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +struct dentry *ramfs_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, ramfs_fill_super, mnt); +	return mount_nodev(fs_type, flags, data, ramfs_fill_super);  } -static int rootfs_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *rootfs_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags|MS_NOUSER, data, ramfs_fill_super, -			    mnt); +	return mount_nodev(fs_type, flags|MS_NOUSER, data, ramfs_fill_super);  }  static void ramfs_kill_sb(struct super_block *sb) @@ -276,12 +275,12 @@ static void ramfs_kill_sb(struct super_block *sb)  static struct file_system_type ramfs_fs_type = {  	.name		= "ramfs", -	.get_sb		= ramfs_get_sb, +	.mount		= ramfs_mount,  	.kill_sb	= ramfs_kill_sb,  };  static struct file_system_type rootfs_fs_type = {  	.name		= "rootfs", -	.get_sb		= rootfs_get_sb, +	.mount		= rootfs_mount,  	.kill_sb	= kill_litter_super,  }; diff --git a/fs/super.c b/fs/super.c index 6f021a171ac..f6a7bf1fff2 100644 --- a/fs/super.c +++ b/fs/super.c @@ -870,29 +870,42 @@ void kill_block_super(struct super_block *sb)  EXPORT_SYMBOL(kill_block_super);  #endif -int get_sb_nodev(struct file_system_type *fs_type, +struct dentry *mount_nodev(struct file_system_type *fs_type,  	int flags, void *data, -	int (*fill_super)(struct super_block *, void *, int), -	struct vfsmount *mnt) +	int (*fill_super)(struct super_block *, void *, int))  {  	int error;  	struct super_block *s = sget(fs_type, NULL, set_anon_super, NULL);  	if (IS_ERR(s)) -		return PTR_ERR(s); +		return ERR_CAST(s);  	s->s_flags = flags;  	error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);  	if (error) {  		deactivate_locked_super(s); -		return error; +		return ERR_PTR(error);  	}  	s->s_flags |= MS_ACTIVE; -	simple_set_mnt(mnt, s); -	return 0; +	return dget(s->s_root);  } +EXPORT_SYMBOL(mount_nodev); + +int get_sb_nodev(struct file_system_type *fs_type, +	int flags, void *data, +	int (*fill_super)(struct super_block *, void *, int), +	struct vfsmount *mnt) +{ +	struct dentry *root; +	root = mount_nodev(fs_type, flags, data, fill_super); +	if (IS_ERR(root)) +		return PTR_ERR(root); +	mnt->mnt_root = root; +	mnt->mnt_sb = root->d_sb; +	return 0; +}  EXPORT_SYMBOL(get_sb_nodev);  static int compare_single(struct super_block *s, void *p) diff --git a/include/linux/fs.h b/include/linux/fs.h index 0aa2f1202af..4c3a29ddcac 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1806,6 +1806,9 @@ extern int get_sb_single(struct file_system_type *fs_type,  	int flags, void *data,  	int (*fill_super)(struct super_block *, void *, int),  	struct vfsmount *mnt); +extern struct dentry *mount_nodev(struct file_system_type *fs_type, +	int flags, void *data, +	int (*fill_super)(struct super_block *, void *, int));  extern int get_sb_nodev(struct file_system_type *fs_type,  	int flags, void *data,  	int (*fill_super)(struct super_block *, void *, int), diff --git a/include/linux/ramfs.h b/include/linux/ramfs.h index e7320b5e82f..3a8f0c9b293 100644 --- a/include/linux/ramfs.h +++ b/include/linux/ramfs.h @@ -3,8 +3,8 @@  struct inode *ramfs_get_inode(struct super_block *sb, const struct inode *dir,  	 int mode, dev_t dev); -extern int ramfs_get_sb(struct file_system_type *fs_type, -	 int flags, const char *dev_name, void *data, struct vfsmount *mnt); +extern struct dentry *ramfs_mount(struct file_system_type *fs_type, +	 int flags, const char *dev_name, void *data);  #ifndef CONFIG_MMU  extern int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize); diff --git a/mm/shmem.c b/mm/shmem.c index f6d350e8adc..47fdeeb9d63 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2538,16 +2538,16 @@ static const struct vm_operations_struct shmem_vm_ops = {  }; -static int shmem_get_sb(struct file_system_type *fs_type, -	int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct dentry *shmem_mount(struct file_system_type *fs_type, +	int flags, const char *dev_name, void *data)  { -	return get_sb_nodev(fs_type, flags, data, shmem_fill_super, mnt); +	return mount_nodev(fs_type, flags, data, shmem_fill_super);  }  static struct file_system_type tmpfs_fs_type = {  	.owner		= THIS_MODULE,  	.name		= "tmpfs", -	.get_sb		= shmem_get_sb, +	.mount		= shmem_mount,  	.kill_sb	= kill_litter_super,  }; @@ -2643,7 +2643,7 @@ out:  static struct file_system_type tmpfs_fs_type = {  	.name		= "tmpfs", -	.get_sb		= ramfs_get_sb, +	.mount		= ramfs_mount,  	.kill_sb	= kill_litter_super,  };  |