|
@@ -2385,6 +2385,7 @@ static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo,
|
|
|
bool remount)
|
|
|
{
|
|
|
char *this_char, *value, *rest;
|
|
|
+ struct mempolicy *mpol = NULL;
|
|
|
uid_t uid;
|
|
|
gid_t gid;
|
|
|
|
|
@@ -2413,7 +2414,7 @@ static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo,
|
|
|
printk(KERN_ERR
|
|
|
"tmpfs: No value for mount option '%s'\n",
|
|
|
this_char);
|
|
|
- return 1;
|
|
|
+ goto error;
|
|
|
}
|
|
|
|
|
|
if (!strcmp(this_char,"size")) {
|
|
@@ -2462,19 +2463,24 @@ static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo,
|
|
|
if (!gid_valid(sbinfo->gid))
|
|
|
goto bad_val;
|
|
|
} else if (!strcmp(this_char,"mpol")) {
|
|
|
- if (mpol_parse_str(value, &sbinfo->mpol))
|
|
|
+ mpol_put(mpol);
|
|
|
+ mpol = NULL;
|
|
|
+ if (mpol_parse_str(value, &mpol))
|
|
|
goto bad_val;
|
|
|
} else {
|
|
|
printk(KERN_ERR "tmpfs: Bad mount option %s\n",
|
|
|
this_char);
|
|
|
- return 1;
|
|
|
+ goto error;
|
|
|
}
|
|
|
}
|
|
|
+ sbinfo->mpol = mpol;
|
|
|
return 0;
|
|
|
|
|
|
bad_val:
|
|
|
printk(KERN_ERR "tmpfs: Bad value '%s' for mount option '%s'\n",
|
|
|
value, this_char);
|
|
|
+error:
|
|
|
+ mpol_put(mpol);
|
|
|
return 1;
|
|
|
|
|
|
}
|
|
@@ -2550,6 +2556,7 @@ static void shmem_put_super(struct super_block *sb)
|
|
|
struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
|
|
|
|
|
|
percpu_counter_destroy(&sbinfo->used_blocks);
|
|
|
+ mpol_put(sbinfo->mpol);
|
|
|
kfree(sbinfo);
|
|
|
sb->s_fs_info = NULL;
|
|
|
}
|