diff options
Diffstat (limited to 'fs/super.c')
| -rw-r--r-- | fs/super.c | 22 | 
1 files changed, 11 insertions, 11 deletions
diff --git a/fs/super.c b/fs/super.c index cf001775617f..c743fb3be4b8 100644 --- a/fs/super.c +++ b/fs/super.c @@ -105,11 +105,12 @@ static int prune_super(struct shrinker *shrink, struct shrink_control *sc)  /**   *	alloc_super	-	create new superblock   *	@type:	filesystem type superblock should belong to + *	@flags: the mount flags   *   *	Allocates and initializes a new &struct super_block.  alloc_super()   *	returns a pointer new superblock or %NULL if allocation had failed.   */ -static struct super_block *alloc_super(struct file_system_type *type) +static struct super_block *alloc_super(struct file_system_type *type, int flags)  {  	struct super_block *s = kzalloc(sizeof(struct super_block),  GFP_USER);  	static const struct super_operations default_op; @@ -136,6 +137,7 @@ static struct super_block *alloc_super(struct file_system_type *type)  #else  		INIT_LIST_HEAD(&s->s_files);  #endif +		s->s_flags = flags;  		s->s_bdi = &default_backing_dev_info;  		INIT_HLIST_NODE(&s->s_instances);  		INIT_HLIST_BL_HEAD(&s->s_anon); @@ -415,11 +417,13 @@ EXPORT_SYMBOL(generic_shutdown_super);   *	@type:	filesystem type superblock should belong to   *	@test:	comparison callback   *	@set:	setup callback + *	@flags:	mount flags   *	@data:	argument to each of them   */  struct super_block *sget(struct file_system_type *type,  			int (*test)(struct super_block *,void *),  			int (*set)(struct super_block *,void *), +			int flags,  			void *data)  {  	struct super_block *s = NULL; @@ -450,7 +454,7 @@ retry:  	}  	if (!s) {  		spin_unlock(&sb_lock); -		s = alloc_super(type); +		s = alloc_super(type, flags);  		if (!s)  			return ERR_PTR(-ENOMEM);  		goto retry; @@ -925,13 +929,12 @@ struct dentry *mount_ns(struct file_system_type *fs_type, int flags,  {  	struct super_block *sb; -	sb = sget(fs_type, ns_test_super, ns_set_super, data); +	sb = sget(fs_type, ns_test_super, ns_set_super, flags, data);  	if (IS_ERR(sb))  		return ERR_CAST(sb);  	if (!sb->s_root) {  		int err; -		sb->s_flags = flags;  		err = fill_super(sb, data, flags & MS_SILENT ? 1 : 0);  		if (err) {  			deactivate_locked_super(sb); @@ -992,7 +995,8 @@ struct dentry *mount_bdev(struct file_system_type *fs_type,  		error = -EBUSY;  		goto error_bdev;  	} -	s = sget(fs_type, test_bdev_super, set_bdev_super, bdev); +	s = sget(fs_type, test_bdev_super, set_bdev_super, flags | MS_NOSEC, +		 bdev);  	mutex_unlock(&bdev->bd_fsfreeze_mutex);  	if (IS_ERR(s))  		goto error_s; @@ -1017,7 +1021,6 @@ struct dentry *mount_bdev(struct file_system_type *fs_type,  	} else {  		char b[BDEVNAME_SIZE]; -		s->s_flags = flags | MS_NOSEC;  		s->s_mode = mode;  		strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id));  		sb_set_blocksize(s, block_size(bdev)); @@ -1062,13 +1065,11 @@ struct dentry *mount_nodev(struct file_system_type *fs_type,  	int (*fill_super)(struct super_block *, void *, int))  {  	int error; -	struct super_block *s = sget(fs_type, NULL, set_anon_super, NULL); +	struct super_block *s = sget(fs_type, NULL, set_anon_super, flags, NULL);  	if (IS_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); @@ -1091,11 +1092,10 @@ struct dentry *mount_single(struct file_system_type *fs_type,  	struct super_block *s;  	int error; -	s = sget(fs_type, compare_single, set_anon_super, NULL); +	s = sget(fs_type, compare_single, set_anon_super, flags, NULL);  	if (IS_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);  | 
