Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd200fc8 authored by Gao Xiang's avatar Gao Xiang Committed by Amit Pundir
Browse files

ANDROID: sdcardfs: use mount_nodev and fix a issue in sdcardfs_kill_sb



Use the VFS mount_nodev instead of customized mount_nodev_with_options
and fix generic_shutdown_super to kill_anon_super because of set_anon_super

Signed-off-by: default avatarGao Xiang <gaoxiang25@huawei.com>
Change-Id: Ibe46647aa2ce49d79291aa9d0295e9625cfccd80
parent f74e2d63
Loading
Loading
Loading
Loading
+20 −27
Original line number Original line Diff line number Diff line
@@ -364,41 +364,34 @@ static int sdcardfs_read_super(struct vfsmount *mnt, struct super_block *sb,
	return err;
	return err;
}
}


/* A feature which supports mount_nodev() with options */
struct sdcardfs_mount_private {
static struct dentry *mount_nodev_with_options(struct vfsmount *mnt,
	struct vfsmount *mnt;
			struct file_system_type *fs_type, int flags,
	const char *dev_name;
			const char *dev_name, void *data,
	void *raw_data;
			int (*fill_super)(struct vfsmount *, struct super_block *,
};
						const char *, void *, int))


static int __sdcardfs_fill_super(
	struct super_block *sb,
	void *_priv, int silent)
{
{
	int error;
	struct sdcardfs_mount_private *priv = _priv;
	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;
	return sdcardfs_read_super(priv->mnt,

		sb, priv->dev_name, priv->raw_data, silent);
	error = fill_super(mnt, s, dev_name, data, flags & MS_SILENT ? 1 : 0);
	if (error) {
		deactivate_locked_super(s);
		return ERR_PTR(error);
	}
	s->s_flags |= MS_ACTIVE;
	return dget(s->s_root);
}
}


static struct dentry *sdcardfs_mount(struct vfsmount *mnt,
static struct dentry *sdcardfs_mount(struct vfsmount *mnt,
		struct file_system_type *fs_type, int flags,
		struct file_system_type *fs_type, int flags,
			    const char *dev_name, void *raw_data)
			    const char *dev_name, void *raw_data)
{
{
	/*
	struct sdcardfs_mount_private priv = {
	 * dev_name is a lower_path_name,
		.mnt = mnt,
	 * raw_data is a option string.
		.dev_name = dev_name,
	 */
		.raw_data = raw_data
	return mount_nodev_with_options(mnt, fs_type, flags, dev_name,
	};
						raw_data, sdcardfs_read_super);

	return mount_nodev(fs_type, flags,
		&priv, __sdcardfs_fill_super);
}
}


static struct dentry *sdcardfs_mount_wrn(struct file_system_type *fs_type,
static struct dentry *sdcardfs_mount_wrn(struct file_system_type *fs_type,
@@ -423,7 +416,7 @@ void sdcardfs_kill_sb(struct super_block *sb)
		list_del(&sbi->list);
		list_del(&sbi->list);
		mutex_unlock(&sdcardfs_super_list_lock);
		mutex_unlock(&sdcardfs_super_list_lock);
	}
	}
	generic_shutdown_super(sb);
	kill_anon_super(sb);
}
}


static struct file_system_type sdcardfs_fs_type = {
static struct file_system_type sdcardfs_fs_type = {