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

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
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment