There's no such thing as a NULL string value, the fsconfig(2) syscall rejects that outright. So get rid of that concept from the implementation. Signed-off-by: Miklos Szeredi <mszeredi@xxxxxxxxxx> --- fs/fs_context.c | 2 +- fs/fs_parser.c | 9 ++------- include/linux/fs_parser.h | 1 - 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/fs/fs_context.c b/fs/fs_context.c index 66fd7d753e91..7c4216156950 100644 --- a/fs/fs_context.c +++ b/fs/fs_context.c @@ -174,7 +174,7 @@ int vfs_parse_fs_string(struct fs_context *fc, const char *key, struct fs_parameter param = { .key = key, - .type = fs_value_is_string, + .type = v_size ? fs_value_is_string : fs_value_is_flag, .size = v_size, }; diff --git a/fs/fs_parser.c b/fs/fs_parser.c index 5d8833d71b37..70f95a71f5aa 100644 --- a/fs/fs_parser.c +++ b/fs/fs_parser.c @@ -85,7 +85,6 @@ int fs_parse(struct fs_context *fc, const struct fs_parameter_enum *e; int ret = -ENOPARAM, b; - result->has_value = !!param->string; result->negated = false; result->uint_64 = 0; @@ -95,7 +94,7 @@ int fs_parse(struct fs_context *fc, * "xxx" takes the "no"-form negative - but only if there * wasn't an value. */ - if (result->has_value) + if (param->type != fs_value_is_flag) goto unknown_parameter; if (param->key[0] != 'n' || param->key[1] != 'o' || !param->key[2]) goto unknown_parameter; @@ -146,8 +145,7 @@ int fs_parse(struct fs_context *fc, */ switch (p->type) { case fs_param_is_flag: - if (param->type != fs_value_is_flag && - (param->type != fs_value_is_string || result->has_value)) + if (param->type != fs_value_is_flag) return invalf(fc, "%s: Unexpected value for '%s'", desc->name, param->key); result->boolean = true; @@ -208,9 +206,6 @@ int fs_parse(struct fs_context *fc, case fs_param_is_fd: { switch (param->type) { case fs_value_is_string: - if (!result->has_value) - goto bad_value; - ret = kstrtouint(param->string, 0, &result->uint_32); break; case fs_value_is_file: diff --git a/include/linux/fs_parser.h b/include/linux/fs_parser.h index dee140db6240..45323203128b 100644 --- a/include/linux/fs_parser.h +++ b/include/linux/fs_parser.h @@ -72,7 +72,6 @@ struct fs_parameter_description { */ struct fs_parse_result { bool negated; /* T if param was "noxxx" */ - bool has_value; /* T if value supplied to param */ union { bool boolean; /* For spec_bool */ int int_32; /* For spec_s32/spec_enum */ -- 2.21.0