From 7f5d38141e309bb4ba995d9726928af85a299c50 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Fri, 20 Dec 2019 23:52:55 -0500 Subject: [PATCH] new primitive: __fs_parse() fs_parse() analogue taking p_log instead of fs_context. fs_parse() turned into a wrapper, callers in ceph_common and rbd switched to __fs_parse(). As the result, fs_parse() never gets NULL fs_context and neither do fs_context-based logging primitives Signed-off-by: Al Viro --- drivers/block/rbd.c | 2 +- fs/fs_parser.c | 21 +++++++++++++++------ include/linux/fs_context.h | 6 ++---- include/linux/fs_parser.h | 4 ++++ net/ceph/ceph_common.c | 2 +- 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 596a1188d0c3..47e82f076a12 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -6360,7 +6360,7 @@ static int rbd_parse_param(struct fs_parameter *param, if (ret != -ENOPARAM) return ret; - token = fs_parse(NULL, &rbd_parameters, param, &result); + token = __fs_parse(&log, &rbd_parameters, param, &result); dout("%s fs_parse '%s' token %d\n", __func__, param->key, token); if (token < 0) { if (token == -ENOPARAM) diff --git a/fs/fs_parser.c b/fs/fs_parser.c index dc5c6737c280..dadb6582874d 100644 --- a/fs/fs_parser.c +++ b/fs/fs_parser.c @@ -80,7 +80,7 @@ static const struct fs_parameter_spec *fs_lookup_key( * unknown parameters are okay and -EINVAL if there was a conversion issue or * the parameter wasn't recognised and unknowns aren't okay. */ -int fs_parse(struct fs_context *fc, +int __fs_parse(struct p_log *log, const struct fs_parameter_description *desc, struct fs_parameter *param, struct fs_parse_result *result) @@ -113,8 +113,7 @@ int fs_parse(struct fs_context *fc, } if (p->flags & fs_param_deprecated) - warnf(fc, "%s: Deprecated parameter '%s'", - desc->name, param->key); + warn_plog(log, "Deprecated parameter '%s'", param->key); if (result->negated) goto okay; @@ -152,8 +151,8 @@ int fs_parse(struct fs_context *fc, switch (p->type) { case fs_param_is_flag: if (param->type != fs_value_is_flag) - return invalf(fc, "%s: Unexpected value for '%s'", - desc->name, param->key); + return inval_plog(log, "Unexpected value for '%s'", + param->key); result->boolean = true; goto okay; @@ -238,10 +237,20 @@ int fs_parse(struct fs_context *fc, return p->opt; bad_value: - return invalf(fc, "%s: Bad value for '%s'", desc->name, param->key); + return inval_plog(log, "Bad value for '%s'", param->key); unknown_parameter: return -ENOPARAM; } +EXPORT_SYMBOL(__fs_parse); + +int fs_parse(struct fs_context *fc, + const struct fs_parameter_description *desc, + struct fs_parameter *param, + struct fs_parse_result *result) +{ + struct p_log log = {.prefix = desc->name, .log = fc->log}; + return __fs_parse(&log, desc, param, result); +} EXPORT_SYMBOL(fs_parse); /** diff --git a/include/linux/fs_context.h b/include/linux/fs_context.h index 6a7eeb252084..41f37d33e358 100644 --- a/include/linux/fs_context.h +++ b/include/linux/fs_context.h @@ -189,10 +189,8 @@ struct fc_log { extern __attribute__((format(printf, 4, 5))) void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, ...); -#define __logfc(fc, l, fmt, ...) ({ \ - struct fs_context *__fc = (fc); \ - logfc(__fc ? __fc->log : NULL, NULL, \ - l, fmt, ## __VA_ARGS__);}) +#define __logfc(fc, l, fmt, ...) logfc((fc)->log, NULL, \ + l, fmt, ## __VA_ARGS__) #define __plog(p, l, fmt, ...) logfc((p)->log, (p)->prefix, \ l, fmt, ## __VA_ARGS__) /** diff --git a/include/linux/fs_parser.h b/include/linux/fs_parser.h index 14bdaacf1218..b0fba26a4ffe 100644 --- a/include/linux/fs_parser.h +++ b/include/linux/fs_parser.h @@ -74,6 +74,10 @@ struct fs_parse_result { }; }; +extern int __fs_parse(struct p_log *log, + const struct fs_parameter_description *desc, + struct fs_parameter *value, + struct fs_parse_result *result); extern int fs_parse(struct fs_context *fc, const struct fs_parameter_description *desc, struct fs_parameter *value, diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c index a3f4f00f2b72..9f8bc962985d 100644 --- a/net/ceph/ceph_common.c +++ b/net/ceph/ceph_common.c @@ -407,7 +407,7 @@ int ceph_parse_param(struct fs_parameter *param, struct ceph_options *opt, int token, err; struct p_log log = {.prefix = "libceph", .log = fc ? fc->log : NULL}; - token = fs_parse(fc, &ceph_parameters, param, &result); + token = __fs_parse(&log, &ceph_parameters, param, &result); dout("%s fs_parse '%s' token %d\n", __func__, param->key, token); if (token < 0) return token;