Pass consistent param->type to fs_parse()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 17 Dec 2019 19:15:04 +0000 (14:15 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 7 Feb 2020 05:10:29 +0000 (00:10 -0500)
commit0f89589a8c6f1033cb847a606517998efb0da8ee
treec20e5e8b71553ced5b592d6135a76cb975e12253
parent7dc2993a9e51dd2eee955944efec65bef90265b7
Pass consistent param->type to fs_parse()

As it is, vfs_parse_fs_string() makes "foo" and "foo=" indistinguishable;
both get fs_value_is_string for ->type and NULL for ->string.  To make
it even more unpleasant, that combination is impossible to produce with
fsconfig().

Much saner rules would be
        "foo"           => fs_value_is_flag, NULL
"foo="          => fs_value_is_string, ""
"foo=bar"       => fs_value_is_string, "bar"
All cases are distinguishable, all results are expressable by fsconfig(),
->has_value checks are much simpler that way (to the point of the field
being useless) and quite a few regressions go away (gfs2 has no business
accepting -o nodebug=, for example).

Partially based upon patches from Miklos.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/block/rbd.c
fs/fs_context.c
fs/fs_parser.c
include/linux/fs_parser.h