Commit 4c5762f5 authored by Russell King's avatar Russell King Committed by Al Viro
Browse files

fs/adfs: super: safely update options on remount



Only update the options on remount if we successfully parse all options,
rather than updating those we've managed to parse.

Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 421d3c0f
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -170,10 +170,10 @@ static const match_table_t tokens = {
	{Opt_err, NULL}
};

static int parse_options(struct super_block *sb, char *options)
static int parse_options(struct super_block *sb, struct adfs_sb_info *asb,
			 char *options)
{
	char *p;
	struct adfs_sb_info *asb = ADFS_SB(sb);
	int option;

	if (!options)
@@ -228,9 +228,18 @@ static int parse_options(struct super_block *sb, char *options)

static int adfs_remount(struct super_block *sb, int *flags, char *data)
{
	struct adfs_sb_info temp_asb;
	int ret;

	sync_filesystem(sb);
	*flags |= ADFS_SB_FLAGS;
	return parse_options(sb, data);

	temp_asb = *ADFS_SB(sb);
	ret = parse_options(sb, &temp_asb, data);
	if (ret == 0)
		*ADFS_SB(sb) = temp_asb;

	return ret;
}

static int adfs_statfs(struct dentry *dentry, struct kstatfs *buf)
@@ -387,7 +396,7 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
	asb->s_other_mask = ADFS_DEFAULT_OTHER_MASK;
	asb->s_ftsuffix = 0;

	if (parse_options(sb, data))
	if (parse_options(sb, asb, data))
		goto error;

	sb_set_blocksize(sb, BLOCK_SIZE);