aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAl Viro2019-12-20 23:52:55 -0500
committerAl Viro2020-02-07 14:48:34 -0500
commit7f5d38141e309bb4ba995d9726928af85a299c50 (patch)
tree06400fc56ab3282c8a137b8655d1dba7eb5925d5
parent2c3f3dc315565941262e980029c0f74ad118231a (diff)
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 <viro@zeniv.linux.org.uk>
-rw-r--r--drivers/block/rbd.c2
-rw-r--r--fs/fs_parser.c21
-rw-r--r--include/linux/fs_context.h6
-rw-r--r--include/linux/fs_parser.h4
-rw-r--r--net/ceph/ceph_common.c2
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 @@ okay:
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;