mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
nilfs2: accept 64-bit checkpoint numbers in cp mount option
The current implementation doesn't mount snapshots with checkpoint numbers larger than INT_MAX since it uses match_int() for parsing "cp=" mount option. This uses simple_strtoull() for the conversion to resolve the issue. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
This commit is contained in:
parent
2879ed66e4
commit
c05dbfc260
@ -556,7 +556,6 @@ static int parse_options(char *options, struct super_block *sb, int is_remount)
|
||||
struct nilfs_sb_info *sbi = NILFS_SB(sb);
|
||||
char *p;
|
||||
substring_t args[MAX_OPT_ARGS];
|
||||
int option;
|
||||
|
||||
if (!options)
|
||||
return 1;
|
||||
@ -594,8 +593,6 @@ static int parse_options(char *options, struct super_block *sb, int is_remount)
|
||||
nilfs_write_opt(sbi, ERROR_MODE, ERRORS_CONT);
|
||||
break;
|
||||
case Opt_snapshot:
|
||||
if (match_int(&args[0], &option) || option <= 0)
|
||||
return 0;
|
||||
if (is_remount) {
|
||||
printk(KERN_ERR
|
||||
"NILFS: \"%s\" option is invalid "
|
||||
@ -1065,7 +1062,7 @@ static int nilfs_identify(char *data, struct nilfs_super_data *sd)
|
||||
{
|
||||
char *p, *options = data;
|
||||
substring_t args[MAX_OPT_ARGS];
|
||||
int option, token;
|
||||
int token;
|
||||
int ret = 0;
|
||||
|
||||
do {
|
||||
@ -1073,18 +1070,20 @@ static int nilfs_identify(char *data, struct nilfs_super_data *sd)
|
||||
if (p != NULL && *p) {
|
||||
token = match_token(p, tokens, args);
|
||||
if (token == Opt_snapshot) {
|
||||
if (!(sd->flags & MS_RDONLY))
|
||||
if (!(sd->flags & MS_RDONLY)) {
|
||||
ret++;
|
||||
else {
|
||||
ret = match_int(&args[0], &option);
|
||||
if (!ret) {
|
||||
if (option > 0)
|
||||
sd->cno = option;
|
||||
else
|
||||
} else {
|
||||
sd->cno = simple_strtoull(args[0].from,
|
||||
NULL, 0);
|
||||
/*
|
||||
* No need to see the end pointer;
|
||||
* match_token() has done syntax
|
||||
* checking.
|
||||
*/
|
||||
if (sd->cno == 0)
|
||||
ret++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ret)
|
||||
printk(KERN_ERR
|
||||
"NILFS: invalid mount option: %s\n", p);
|
||||
|
Loading…
Reference in New Issue
Block a user