mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-22 16:06:04 -05:00
bcachefs: add support for true/false & yes/no in bool-type options
Here is the patch which uses existing constant table: Currently, when using bcachefs-tools to set options, bool-type options can only accept 1 or 0. Add support for accepting true/false and yes/no for these options. Signed-off-by: Integral <integral@murena.io> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev> Acked-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
e5ea05293a
commit
394033dcc9
3 changed files with 13 additions and 8 deletions
|
@ -1,6 +1,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/fs_parser.h>
|
||||||
|
|
||||||
#include "bcachefs.h"
|
#include "bcachefs.h"
|
||||||
#include "compress.h"
|
#include "compress.h"
|
||||||
|
@ -334,17 +335,18 @@ int bch2_opt_parse(struct bch_fs *c,
|
||||||
switch (opt->type) {
|
switch (opt->type) {
|
||||||
case BCH_OPT_BOOL:
|
case BCH_OPT_BOOL:
|
||||||
if (val) {
|
if (val) {
|
||||||
ret = kstrtou64(val, 10, res);
|
ret = lookup_constant(bool_names, val, -BCH_ERR_option_not_bool);
|
||||||
|
if (ret != -BCH_ERR_option_not_bool) {
|
||||||
|
*res = ret;
|
||||||
|
} else {
|
||||||
|
if (err)
|
||||||
|
prt_printf(err, "%s: must be bool", opt->attr.name);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = 0;
|
|
||||||
*res = 1;
|
*res = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret < 0 || (*res != 0 && *res != 1)) {
|
|
||||||
if (err)
|
|
||||||
prt_printf(err, "%s: must be bool", opt->attr.name);
|
|
||||||
return ret < 0 ? ret : -BCH_ERR_option_not_bool;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case BCH_OPT_UINT:
|
case BCH_OPT_UINT:
|
||||||
if (!val) {
|
if (!val) {
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <linux/namei.h>
|
#include <linux/namei.h>
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
static const struct constant_table bool_names[] = {
|
const struct constant_table bool_names[] = {
|
||||||
{ "0", false },
|
{ "0", false },
|
||||||
{ "1", true },
|
{ "1", true },
|
||||||
{ "false", false },
|
{ "false", false },
|
||||||
|
@ -22,6 +22,7 @@ static const struct constant_table bool_names[] = {
|
||||||
{ "yes", true },
|
{ "yes", true },
|
||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL(bool_names);
|
||||||
|
|
||||||
static const struct constant_table *
|
static const struct constant_table *
|
||||||
__lookup_constant(const struct constant_table *tbl, const char *name)
|
__lookup_constant(const struct constant_table *tbl, const char *name)
|
||||||
|
|
|
@ -84,6 +84,8 @@ extern int fs_lookup_param(struct fs_context *fc,
|
||||||
|
|
||||||
extern int lookup_constant(const struct constant_table tbl[], const char *name, int not_found);
|
extern int lookup_constant(const struct constant_table tbl[], const char *name, int not_found);
|
||||||
|
|
||||||
|
extern const struct constant_table bool_names[];
|
||||||
|
|
||||||
#ifdef CONFIG_VALIDATE_FS_PARSER
|
#ifdef CONFIG_VALIDATE_FS_PARSER
|
||||||
extern bool validate_constant_table(const struct constant_table *tbl, size_t tbl_size,
|
extern bool validate_constant_table(const struct constant_table *tbl, size_t tbl_size,
|
||||||
int low, int high, int special);
|
int low, int high, int special);
|
||||||
|
|
Loading…
Reference in a new issue