mirror of https://gitee.com/openkylin/linux.git
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: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
421d3c0faa
commit
4c5762f5f5
|
@ -170,10 +170,10 @@ static const match_table_t tokens = {
|
||||||
{Opt_err, NULL}
|
{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;
|
char *p;
|
||||||
struct adfs_sb_info *asb = ADFS_SB(sb);
|
|
||||||
int option;
|
int option;
|
||||||
|
|
||||||
if (!options)
|
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)
|
static int adfs_remount(struct super_block *sb, int *flags, char *data)
|
||||||
{
|
{
|
||||||
|
struct adfs_sb_info temp_asb;
|
||||||
|
int ret;
|
||||||
|
|
||||||
sync_filesystem(sb);
|
sync_filesystem(sb);
|
||||||
*flags |= ADFS_SB_FLAGS;
|
*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)
|
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_other_mask = ADFS_DEFAULT_OTHER_MASK;
|
||||||
asb->s_ftsuffix = 0;
|
asb->s_ftsuffix = 0;
|
||||||
|
|
||||||
if (parse_options(sb, data))
|
if (parse_options(sb, asb, data))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
sb_set_blocksize(sb, BLOCK_SIZE);
|
sb_set_blocksize(sb, BLOCK_SIZE);
|
||||||
|
|
Loading…
Reference in New Issue