convert get_sb_single() users
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
					parent
					
						
							
								848b83a59b
							
						
					
				
			
			
				commit
				
					
						fc14f2fef6
					
				
			
		
					 25 changed files with 147 additions and 139 deletions
				
			
		|  | @ -798,17 +798,17 @@ spufs_fill_super(struct super_block *sb, void *data, int silent) | |||
| 	return spufs_create_root(sb, data); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| spufs_get_sb(struct file_system_type *fstype, int flags, | ||||
| 		const char *name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry * | ||||
| spufs_mount(struct file_system_type *fstype, int flags, | ||||
| 		const char *name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fstype, flags, data, spufs_fill_super, mnt); | ||||
| 	return mount_single(fstype, flags, data, spufs_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type spufs_type = { | ||||
| 	.owner = THIS_MODULE, | ||||
| 	.name = "spufs", | ||||
| 	.get_sb = spufs_get_sb, | ||||
| 	.mount = spufs_mount, | ||||
| 	.kill_sb = kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -316,10 +316,10 @@ static int hypfs_fill_super(struct super_block *sb, void *data, int silent) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int hypfs_get_super(struct file_system_type *fst, int flags, | ||||
| 			const char *devname, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *hypfs_mount(struct file_system_type *fst, int flags, | ||||
| 			const char *devname, void *data) | ||||
| { | ||||
| 	return get_sb_single(fst, flags, data, hypfs_fill_super, mnt); | ||||
| 	return mount_single(fst, flags, data, hypfs_fill_super); | ||||
| } | ||||
| 
 | ||||
| static void hypfs_kill_super(struct super_block *sb) | ||||
|  | @ -455,7 +455,7 @@ static const struct file_operations hypfs_file_ops = { | |||
| static struct file_system_type hypfs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "s390_hypfs", | ||||
| 	.get_sb		= hypfs_get_super, | ||||
| 	.mount		= hypfs_mount, | ||||
| 	.kill_sb	= hypfs_kill_super | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,33 +29,33 @@ | |||
| static struct vfsmount *dev_mnt; | ||||
| 
 | ||||
| #if defined CONFIG_DEVTMPFS_MOUNT | ||||
| static int dev_mount = 1; | ||||
| static int mount_dev = 1; | ||||
| #else | ||||
| static int dev_mount; | ||||
| static int mount_dev; | ||||
| #endif | ||||
| 
 | ||||
| static DEFINE_MUTEX(dirlock); | ||||
| 
 | ||||
| static int __init mount_param(char *str) | ||||
| { | ||||
| 	dev_mount = simple_strtoul(str, NULL, 0); | ||||
| 	mount_dev = simple_strtoul(str, NULL, 0); | ||||
| 	return 1; | ||||
| } | ||||
| __setup("devtmpfs.mount=", mount_param); | ||||
| 
 | ||||
| static int dev_get_sb(struct file_system_type *fs_type, int flags, | ||||
| 		      const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *dev_mount(struct file_system_type *fs_type, int flags, | ||||
| 		      const char *dev_name, void *data) | ||||
| { | ||||
| #ifdef CONFIG_TMPFS | ||||
| 	return get_sb_single(fs_type, flags, data, shmem_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, shmem_fill_super); | ||||
| #else | ||||
| 	return get_sb_single(fs_type, flags, data, ramfs_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, ramfs_fill_super); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type dev_fs_type = { | ||||
| 	.name = "devtmpfs", | ||||
| 	.get_sb = dev_get_sb, | ||||
| 	.mount = dev_mount, | ||||
| 	.kill_sb = kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  | @ -351,7 +351,7 @@ int devtmpfs_mount(const char *mntdir) | |||
| { | ||||
| 	int err; | ||||
| 
 | ||||
| 	if (!dev_mount) | ||||
| 	if (!mount_dev) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	if (!dev_mnt) | ||||
|  |  | |||
|  | @ -362,13 +362,13 @@ bail: | |||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| static int ipathfs_get_sb(struct file_system_type *fs_type, int flags, | ||||
| 			const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *ipathfs_mount(struct file_system_type *fs_type, | ||||
| 			int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	int ret = get_sb_single(fs_type, flags, data, | ||||
| 				    ipathfs_fill_super, mnt); | ||||
| 	if (ret >= 0) | ||||
| 		ipath_super = mnt->mnt_sb; | ||||
| 	struct dentry *ret; | ||||
| 	ret = mount_single(fs_type, flags, data, ipathfs_fill_super); | ||||
| 	if (!IS_ERR(ret)) | ||||
| 		ipath_super = ret->d_sb; | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
|  | @ -411,7 +411,7 @@ bail: | |||
| static struct file_system_type ipathfs_fs_type = { | ||||
| 	.owner =	THIS_MODULE, | ||||
| 	.name =		"ipathfs", | ||||
| 	.get_sb =	ipathfs_get_sb, | ||||
| 	.mount =	ipathfs_mount, | ||||
| 	.kill_sb =	ipathfs_kill_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -555,13 +555,13 @@ bail: | |||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| static int qibfs_get_sb(struct file_system_type *fs_type, int flags, | ||||
| 			const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *qibfs_mount(struct file_system_type *fs_type, int flags, | ||||
| 			const char *dev_name, void *data) | ||||
| { | ||||
| 	int ret = get_sb_single(fs_type, flags, data, | ||||
| 				qibfs_fill_super, mnt); | ||||
| 	if (ret >= 0) | ||||
| 		qib_super = mnt->mnt_sb; | ||||
| 	struct dentry *ret; | ||||
| 	ret = mount_single(fs_type, flags, data, qibfs_fill_super); | ||||
| 	if (!IS_ERR(ret)) | ||||
| 		qib_super = ret->d_sb; | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
|  | @ -603,7 +603,7 @@ int qibfs_remove(struct qib_devdata *dd) | |||
| static struct file_system_type qibfs_fs_type = { | ||||
| 	.owner =        THIS_MODULE, | ||||
| 	.name =         "ipathfs", | ||||
| 	.get_sb =       qibfs_get_sb, | ||||
| 	.mount =        qibfs_mount, | ||||
| 	.kill_sb =      qibfs_kill_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -125,16 +125,16 @@ fail: | |||
| 	return -ENOMEM; | ||||
| } | ||||
| 
 | ||||
| static int capifs_get_sb(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *capifs_mount(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, capifs_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, capifs_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type capifs_fs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "capifs", | ||||
| 	.get_sb		= capifs_get_sb, | ||||
| 	.mount		= capifs_mount, | ||||
| 	.kill_sb	= kill_anon_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -91,11 +91,10 @@ static void ibmasmfs_create_files (struct super_block *sb, struct dentry *root); | |||
| static int ibmasmfs_fill_super (struct super_block *sb, void *data, int silent); | ||||
| 
 | ||||
| 
 | ||||
| static int ibmasmfs_get_super(struct file_system_type *fst, | ||||
| 			int flags, const char *name, void *data, | ||||
| 			struct vfsmount *mnt) | ||||
| static struct dentry *ibmasmfs_mount(struct file_system_type *fst, | ||||
| 			int flags, const char *name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fst, flags, data, ibmasmfs_fill_super, mnt); | ||||
| 	return mount_single(fst, flags, data, ibmasmfs_fill_super); | ||||
| } | ||||
| 
 | ||||
| static const struct super_operations ibmasmfs_s_ops = { | ||||
|  | @ -108,7 +107,7 @@ static const struct file_operations *ibmasmfs_dir_ops = &simple_dir_operations; | |||
| static struct file_system_type ibmasmfs_type = { | ||||
| 	.owner          = THIS_MODULE, | ||||
| 	.name           = "ibmasmfs", | ||||
| 	.get_sb         = ibmasmfs_get_super, | ||||
| 	.mount          = ibmasmfs_mount, | ||||
| 	.kill_sb        = kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -259,17 +259,17 @@ static int oprofilefs_fill_super(struct super_block *sb, void *data, int silent) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| static int oprofilefs_get_sb(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *oprofilefs_mount(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, oprofilefs_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, oprofilefs_fill_super); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static struct file_system_type oprofilefs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "oprofilefs", | ||||
| 	.get_sb		= oprofilefs_get_sb, | ||||
| 	.mount		= oprofilefs_mount, | ||||
| 	.kill_sb	= kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -574,16 +574,16 @@ static void fs_remove_file (struct dentry *dentry) | |||
| 
 | ||||
| /* --------------------------------------------------------------------- */ | ||||
| 
 | ||||
| static int usb_get_sb(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *usb_mount(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, usbfs_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, usbfs_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type usb_fs_type = { | ||||
| 	.owner =	THIS_MODULE, | ||||
| 	.name =		"usbfs", | ||||
| 	.get_sb =	usb_get_sb, | ||||
| 	.mount =	usb_mount, | ||||
| 	.kill_sb =	kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1176,9 +1176,9 @@ invalid: | |||
| 
 | ||||
| /* "mount -t functionfs dev_name /dev/function" ends up here */ | ||||
| 
 | ||||
| static int | ||||
| ffs_fs_get_sb(struct file_system_type *t, int flags, | ||||
| 	      const char *dev_name, void *opts, struct vfsmount *mnt) | ||||
| static struct dentry * | ||||
| ffs_fs_mount(struct file_system_type *t, int flags, | ||||
| 	      const char *dev_name, void *opts) | ||||
| { | ||||
| 	struct ffs_sb_fill_data data = { | ||||
| 		.perms = { | ||||
|  | @ -1194,14 +1194,14 @@ ffs_fs_get_sb(struct file_system_type *t, int flags, | |||
| 
 | ||||
| 	ret = functionfs_check_dev_callback(dev_name); | ||||
| 	if (unlikely(ret < 0)) | ||||
| 		return ret; | ||||
| 		return ERR_PTR(ret); | ||||
| 
 | ||||
| 	ret = ffs_fs_parse_opts(&data, opts); | ||||
| 	if (unlikely(ret < 0)) | ||||
| 		return ret; | ||||
| 		return ERR_PTR(ret); | ||||
| 
 | ||||
| 	data.dev_name = dev_name; | ||||
| 	return get_sb_single(t, flags, &data, ffs_sb_fill, mnt); | ||||
| 	return mount_single(t, flags, &data, ffs_sb_fill); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
|  | @ -1220,7 +1220,7 @@ ffs_fs_kill_sb(struct super_block *sb) | |||
| static struct file_system_type ffs_fs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "functionfs", | ||||
| 	.get_sb		= ffs_fs_get_sb, | ||||
| 	.mount		= ffs_fs_mount, | ||||
| 	.kill_sb	= ffs_fs_kill_sb, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -2097,11 +2097,11 @@ enomem0: | |||
| } | ||||
| 
 | ||||
| /* "mount -t gadgetfs path /dev/gadget" ends up here */ | ||||
| static int | ||||
| gadgetfs_get_sb (struct file_system_type *t, int flags, | ||||
| 		const char *path, void *opts, struct vfsmount *mnt) | ||||
| static struct dentry * | ||||
| gadgetfs_mount (struct file_system_type *t, int flags, | ||||
| 		const char *path, void *opts) | ||||
| { | ||||
| 	return get_sb_single (t, flags, opts, gadgetfs_fill_super, mnt); | ||||
| 	return mount_single (t, flags, opts, gadgetfs_fill_super); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
|  | @ -2119,7 +2119,7 @@ gadgetfs_kill_sb (struct super_block *sb) | |||
| static struct file_system_type gadgetfs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= shortname, | ||||
| 	.get_sb		= gadgetfs_get_sb, | ||||
| 	.mount		= gadgetfs_mount, | ||||
| 	.kill_sb	= gadgetfs_kill_sb, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -121,17 +121,17 @@ static int xenfs_fill_super(struct super_block *sb, void *data, int silent) | |||
| 	return rc; | ||||
| } | ||||
| 
 | ||||
| static int xenfs_get_sb(struct file_system_type *fs_type, | ||||
| static int xenfs_mount(struct file_system_type *fs_type, | ||||
| 			int flags, const char *dev_name, | ||||
| 			void *data, struct vfsmount *mnt) | ||||
| 			void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, xenfs_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, xenfs_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type xenfs_type = { | ||||
| 	.owner =	THIS_MODULE, | ||||
| 	.name =		"xenfs", | ||||
| 	.get_sb =	xenfs_get_sb, | ||||
| 	.mount =	xenfs_mount, | ||||
| 	.kill_sb =	kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -706,10 +706,10 @@ static int bm_fill_super(struct super_block * sb, void * data, int silent) | |||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int bm_get_sb(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *bm_mount(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, bm_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, bm_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct linux_binfmt misc_format = { | ||||
|  | @ -720,7 +720,7 @@ static struct linux_binfmt misc_format = { | |||
| static struct file_system_type bm_fs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "binfmt_misc", | ||||
| 	.get_sb		= bm_get_sb, | ||||
| 	.mount		= bm_mount, | ||||
| 	.kill_sb	= kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -104,16 +104,16 @@ static int configfs_fill_super(struct super_block *sb, void *data, int silent) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int configfs_get_sb(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *configfs_do_mount(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, configfs_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, configfs_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type configfs_fs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "configfs", | ||||
| 	.get_sb		= configfs_get_sb, | ||||
| 	.mount		= configfs_do_mount, | ||||
| 	.kill_sb	= kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -135,17 +135,17 @@ static int debug_fill_super(struct super_block *sb, void *data, int silent) | |||
| 	return simple_fill_super(sb, DEBUGFS_MAGIC, debug_files); | ||||
| } | ||||
| 
 | ||||
| static int debug_get_sb(struct file_system_type *fs_type, | ||||
| static struct dentry *debug_mount(struct file_system_type *fs_type, | ||||
| 			int flags, const char *dev_name, | ||||
| 			void *data, struct vfsmount *mnt) | ||||
| 			void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, debug_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, debug_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type debug_fs_type = { | ||||
| 	.owner =	THIS_MODULE, | ||||
| 	.name =		"debugfs", | ||||
| 	.get_sb =	debug_get_sb, | ||||
| 	.mount =	debug_mount, | ||||
| 	.kill_sb =	kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -331,7 +331,7 @@ static int compare_init_pts_sb(struct super_block *s, void *p) | |||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * devpts_get_sb() | ||||
|  * devpts_mount() | ||||
|  * | ||||
|  *     If the '-o newinstance' mount option was specified, mount a new | ||||
|  *     (private) instance of devpts.  PTYs created in this instance are | ||||
|  | @ -345,20 +345,20 @@ static int compare_init_pts_sb(struct super_block *s, void *p) | |||
|  *     semantics in devpts while preserving backward compatibility of the | ||||
|  *     current 'single-namespace' semantics. i.e all mounts of devpts | ||||
|  *     without the 'newinstance' mount option should bind to the initial | ||||
|  *     kernel mount, like get_sb_single(). | ||||
|  *     kernel mount, like mount_single(). | ||||
|  * | ||||
|  *     Mounts with 'newinstance' option create a new, private namespace. | ||||
|  * | ||||
|  *     NOTE: | ||||
|  * | ||||
|  *     For single-mount semantics, devpts cannot use get_sb_single(), | ||||
|  *     because get_sb_single()/sget() find and use the super-block from | ||||
|  *     For single-mount semantics, devpts cannot use mount_single(), | ||||
|  *     because mount_single()/sget() find and use the super-block from | ||||
|  *     the most recent mount of devpts. But that recent mount may be a | ||||
|  *     'newinstance' mount and get_sb_single() would pick the newinstance | ||||
|  *     'newinstance' mount and mount_single() would pick the newinstance | ||||
|  *     super-block instead of the initial super-block. | ||||
|  */ | ||||
| static int devpts_get_sb(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *devpts_mount(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	int error; | ||||
| 	struct pts_mount_opts opts; | ||||
|  | @ -366,7 +366,7 @@ static int devpts_get_sb(struct file_system_type *fs_type, | |||
| 
 | ||||
| 	error = parse_mount_options(data, PARSE_MOUNT, &opts); | ||||
| 	if (error) | ||||
| 		return error; | ||||
| 		return ERR_PTR(error); | ||||
| 
 | ||||
| 	if (opts.newinstance) | ||||
| 		s = sget(fs_type, NULL, set_anon_super, NULL); | ||||
|  | @ -374,7 +374,7 @@ static int devpts_get_sb(struct file_system_type *fs_type, | |||
| 		s = sget(fs_type, compare_init_pts_sb, set_anon_super, NULL); | ||||
| 
 | ||||
| 	if (IS_ERR(s)) | ||||
| 		return PTR_ERR(s); | ||||
| 		return ERR_CAST(s); | ||||
| 
 | ||||
| 	if (!s->s_root) { | ||||
| 		s->s_flags = flags; | ||||
|  | @ -390,13 +390,11 @@ static int devpts_get_sb(struct file_system_type *fs_type, | |||
| 	if (error) | ||||
| 		goto out_undo_sget; | ||||
| 
 | ||||
| 	simple_set_mnt(mnt, s); | ||||
| 
 | ||||
| 	return 0; | ||||
| 	return dget(s->s_root); | ||||
| 
 | ||||
| out_undo_sget: | ||||
| 	deactivate_locked_super(s); | ||||
| 	return error; | ||||
| 	return ERR_PTR(error); | ||||
| } | ||||
| 
 | ||||
| #else | ||||
|  | @ -404,10 +402,10 @@ out_undo_sget: | |||
|  * This supports only the legacy single-instance semantics (no | ||||
|  * multiple-instance semantics) | ||||
|  */ | ||||
| static int devpts_get_sb(struct file_system_type *fs_type, int flags, | ||||
| 		const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *devpts_mount(struct file_system_type *fs_type, int flags, | ||||
| 		const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, devpts_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, devpts_fill_super); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
|  | @ -421,7 +419,7 @@ static void devpts_kill_sb(struct super_block *sb) | |||
| 
 | ||||
| static struct file_system_type devpts_fs_type = { | ||||
| 	.name		= "devpts", | ||||
| 	.get_sb		= devpts_get_sb, | ||||
| 	.mount		= devpts_mount, | ||||
| 	.kill_sb	= devpts_kill_sb, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -322,12 +322,10 @@ static int fuse_ctl_fill_super(struct super_block *sb, void *data, int silent) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int fuse_ctl_get_sb(struct file_system_type *fs_type, int flags, | ||||
| 			const char *dev_name, void *raw_data, | ||||
| 			struct vfsmount *mnt) | ||||
| static struct dentry *fuse_ctl_mount(struct file_system_type *fs_type, | ||||
| 			int flags, const char *dev_name, void *raw_data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, raw_data, | ||||
| 				fuse_ctl_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, raw_data, fuse_ctl_fill_super); | ||||
| } | ||||
| 
 | ||||
| static void fuse_ctl_kill_sb(struct super_block *sb) | ||||
|  | @ -346,7 +344,7 @@ static void fuse_ctl_kill_sb(struct super_block *sb) | |||
| static struct file_system_type fuse_ctl_fs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "fusectl", | ||||
| 	.get_sb		= fuse_ctl_get_sb, | ||||
| 	.mount		= fuse_ctl_mount, | ||||
| 	.kill_sb	= fuse_ctl_kill_sb, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1405,16 +1405,16 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent) | |||
| 	return simple_fill_super(sb, 0x6e667364, nfsd_files); | ||||
| } | ||||
| 
 | ||||
| static int nfsd_get_sb(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *nfsd_mount(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, nfsd_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, nfsd_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type nfsd_fs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "nfsd", | ||||
| 	.get_sb		= nfsd_get_sb, | ||||
| 	.mount		= nfsd_mount, | ||||
| 	.kill_sb	= kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -415,16 +415,16 @@ out_no_root: | |||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| static int openprom_get_sb(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry *openprom_mount(struct file_system_type *fs_type, | ||||
| 	int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, openprom_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, openprom_fill_super) | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type openprom_fs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "openpromfs", | ||||
| 	.get_sb		= openprom_get_sb, | ||||
| 	.mount		= openprom_mount, | ||||
| 	.kill_sb	= kill_anon_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										25
									
								
								fs/super.c
									
										
									
									
									
								
							
							
						
						
									
										25
									
								
								fs/super.c
									
										
									
									
									
								
							|  | @ -900,29 +900,42 @@ static int compare_single(struct super_block *s, void *p) | |||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| int get_sb_single(struct file_system_type *fs_type, | ||||
| struct dentry *mount_single(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)) | ||||
| { | ||||
| 	struct super_block *s; | ||||
| 	int error; | ||||
| 
 | ||||
| 	s = sget(fs_type, compare_single, set_anon_super, NULL); | ||||
| 	if (IS_ERR(s)) | ||||
| 		return PTR_ERR(s); | ||||
| 		return ERR_CAST(s); | ||||
| 	if (!s->s_root) { | ||||
| 		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; | ||||
| 	} else { | ||||
| 		do_remount_sb(s, flags, data, 0); | ||||
| 	} | ||||
| 	simple_set_mnt(mnt, s); | ||||
| 	return dget(s->s_root); | ||||
| } | ||||
| EXPORT_SYMBOL(mount_single); | ||||
| 
 | ||||
| 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) | ||||
| { | ||||
| 	struct dentry *root; | ||||
| 	root = mount_single(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; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1799,6 +1799,9 @@ extern int get_sb_bdev(struct file_system_type *fs_type, | |||
| 	int flags, const char *dev_name, void *data, | ||||
| 	int (*fill_super)(struct super_block *, void *, int), | ||||
| 	struct vfsmount *mnt); | ||||
| extern struct dentry *mount_single(struct file_system_type *fs_type, | ||||
| 	int flags, void *data, | ||||
| 	int (*fill_super)(struct super_block *, void *, int)); | ||||
| extern int get_sb_single(struct file_system_type *fs_type, | ||||
| 	int flags, void *data, | ||||
| 	int (*fill_super)(struct super_block *, void *, int), | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| #include <linux/sunrpc/rpc_pipe_fs.h> | ||||
| #include <linux/sunrpc/cache.h> | ||||
| 
 | ||||
| static struct vfsmount *rpc_mount __read_mostly; | ||||
| static struct vfsmount *rpc_mnt __read_mostly; | ||||
| static int rpc_mount_count; | ||||
| 
 | ||||
| static struct file_system_type rpc_pipe_fs_type; | ||||
|  | @ -417,16 +417,16 @@ struct vfsmount *rpc_get_mount(void) | |||
| { | ||||
| 	int err; | ||||
| 
 | ||||
| 	err = simple_pin_fs(&rpc_pipe_fs_type, &rpc_mount, &rpc_mount_count); | ||||
| 	err = simple_pin_fs(&rpc_pipe_fs_type, &rpc_mnt, &rpc_mount_count); | ||||
| 	if (err != 0) | ||||
| 		return ERR_PTR(err); | ||||
| 	return rpc_mount; | ||||
| 	return rpc_mnt; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(rpc_get_mount); | ||||
| 
 | ||||
| void rpc_put_mount(void) | ||||
| { | ||||
| 	simple_release_fs(&rpc_mount, &rpc_mount_count); | ||||
| 	simple_release_fs(&rpc_mnt, &rpc_mount_count); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(rpc_put_mount); | ||||
| 
 | ||||
|  | @ -1018,17 +1018,17 @@ rpc_fill_super(struct super_block *sb, void *data, int silent) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| rpc_get_sb(struct file_system_type *fs_type, | ||||
| 		int flags, const char *dev_name, void *data, struct vfsmount *mnt) | ||||
| static struct dentry * | ||||
| rpc_mount(struct file_system_type *fs_type, | ||||
| 		int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, rpc_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, rpc_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type rpc_pipe_fs_type = { | ||||
| 	.owner		= THIS_MODULE, | ||||
| 	.name		= "rpc_pipefs", | ||||
| 	.get_sb		= rpc_get_sb, | ||||
| 	.mount		= rpc_mount, | ||||
| 	.kill_sb	= kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -131,17 +131,17 @@ static int fill_super(struct super_block *sb, void *data, int silent) | |||
| 	return simple_fill_super(sb, SECURITYFS_MAGIC, files); | ||||
| } | ||||
| 
 | ||||
| static int get_sb(struct file_system_type *fs_type, | ||||
| static struct dentry *get_sb(struct file_system_type *fs_type, | ||||
| 		  int flags, const char *dev_name, | ||||
| 		  void *data, struct vfsmount *mnt) | ||||
| 		  void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type fs_type = { | ||||
| 	.owner =	THIS_MODULE, | ||||
| 	.name =		"securityfs", | ||||
| 	.get_sb =	get_sb, | ||||
| 	.mount =	get_sb, | ||||
| 	.kill_sb =	kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1909,16 +1909,15 @@ err: | |||
| 	goto out; | ||||
| } | ||||
| 
 | ||||
| static int sel_get_sb(struct file_system_type *fs_type, | ||||
| 		      int flags, const char *dev_name, void *data, | ||||
| 		      struct vfsmount *mnt) | ||||
| static struct dentry *sel_mount(struct file_system_type *fs_type, | ||||
| 		      int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, sel_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, sel_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type sel_fs_type = { | ||||
| 	.name		= "selinuxfs", | ||||
| 	.get_sb		= sel_get_sb, | ||||
| 	.mount		= sel_mount, | ||||
| 	.kill_sb	= kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1310,27 +1310,25 @@ static int smk_fill_super(struct super_block *sb, void *data, int silent) | |||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * smk_get_sb - get the smackfs superblock | ||||
|  * smk_mount - get the smackfs superblock | ||||
|  * @fs_type: passed along without comment | ||||
|  * @flags: passed along without comment | ||||
|  * @dev_name: passed along without comment | ||||
|  * @data: passed along without comment | ||||
|  * @mnt: passed along without comment | ||||
|  * | ||||
|  * Just passes everything along. | ||||
|  * | ||||
|  * Returns what the lower level code does. | ||||
|  */ | ||||
| static int smk_get_sb(struct file_system_type *fs_type, | ||||
| 		      int flags, const char *dev_name, void *data, | ||||
| 		      struct vfsmount *mnt) | ||||
| static struct dentry *smk_mount(struct file_system_type *fs_type, | ||||
| 		      int flags, const char *dev_name, void *data) | ||||
| { | ||||
| 	return get_sb_single(fs_type, flags, data, smk_fill_super, mnt); | ||||
| 	return mount_single(fs_type, flags, data, smk_fill_super); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type smk_fs_type = { | ||||
| 	.name		= "smackfs", | ||||
| 	.get_sb		= smk_get_sb, | ||||
| 	.mount		= smk_mount, | ||||
| 	.kill_sb	= kill_litter_super, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Al Viro
				Al Viro