From aa1918f9491442a007a0cbe41a31539233209777 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Tue, 17 Dec 2019 20:09:08 -0500 Subject: get rid of fs_value_is_filename_empty Its behaviour is identical to that of fs_value_is_filename. It makes no sense, anyway - LOOKUP_EMPTY affects nothing whatsoever once the pathname has been imported from userland. And both fs_value_is_filename and fs_value_is_filename_empty carry an already imported pathname. Signed-off-by: Al Viro --- include/linux/fs_context.h | 1 - 1 file changed, 1 deletion(-) (limited to 'include/linux/fs_context.h') diff --git a/include/linux/fs_context.h b/include/linux/fs_context.h index e5c14e2c53d3..c7c69640a6c6 100644 --- a/include/linux/fs_context.h +++ b/include/linux/fs_context.h @@ -54,7 +54,6 @@ enum fs_value_type { fs_value_is_string, /* Value is a string */ fs_value_is_blob, /* Value is a binary blob */ fs_value_is_filename, /* Value is a filename* + dirfd */ - fs_value_is_filename_empty, /* Value is a filename* + dirfd + AT_EMPTY_PATH */ fs_value_is_file, /* Value is a file* */ }; -- cgit v1.2.3 From 9f09f649ca3350cdb49c81f7d5ac6e64a4d7e1a1 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Fri, 20 Dec 2019 22:10:36 -0500 Subject: teach logfc() to handle prefices, give it saner calling conventions Signed-off-by: Al Viro --- fs/fs_context.c | 63 +++++++++++++--------------------------------- include/linux/fs_context.h | 16 +++++++----- 2 files changed, 27 insertions(+), 52 deletions(-) (limited to 'include/linux/fs_context.h') diff --git a/fs/fs_context.c b/fs/fs_context.c index ea97a2411e83..fb6329c21384 100644 --- a/fs/fs_context.c +++ b/fs/fs_context.c @@ -388,64 +388,33 @@ EXPORT_SYMBOL(vfs_dup_fs_context); * @fc: The filesystem context to log to. * @fmt: The format of the buffer. */ -void logfc(struct fs_context *fc, const char *fmt, ...) +void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, ...) { - static const char store_failure[] = "OOM: Can't store error string"; - struct fc_log *log = fc ? fc->log : NULL; - const char *p; va_list va; - char *q; - u8 freeable; + struct va_format vaf = {.fmt = fmt, .va = &va}; va_start(va, fmt); - if (!strchr(fmt, '%')) { - p = fmt; - goto unformatted_string; - } - if (strcmp(fmt, "%s") == 0) { - p = va_arg(va, const char *); - goto unformatted_string; - } - - q = kvasprintf(GFP_KERNEL, fmt, va); -copied_string: - if (!q) - goto store_failure; - freeable = 1; - goto store_string; - -unformatted_string: - if ((unsigned long)p >= (unsigned long)__start_rodata && - (unsigned long)p < (unsigned long)__end_rodata) - goto const_string; - if (log && within_module_core((unsigned long)p, log->owner)) - goto const_string; - q = kstrdup(p, GFP_KERNEL); - goto copied_string; - -store_failure: - p = store_failure; -const_string: - q = (char *)p; - freeable = 0; -store_string: if (!log) { - switch (fmt[0]) { + switch (level) { case 'w': - printk(KERN_WARNING "%s\n", q + 2); + printk(KERN_WARNING "%s%s%pV\n", prefix ? prefix : "", + prefix ? ": " : "", &vaf); break; case 'e': - printk(KERN_ERR "%s\n", q + 2); + printk(KERN_ERR "%s%s%pV\n", prefix ? prefix : "", + prefix ? ": " : "", &vaf); break; default: - printk(KERN_NOTICE "%s\n", q + 2); + printk(KERN_NOTICE "%s%s%pV\n", prefix ? prefix : "", + prefix ? ": " : "", &vaf); break; } - if (freeable) - kfree(q); } else { unsigned int logsize = ARRAY_SIZE(log->buffer); u8 index; + char *q = kasprintf(GFP_KERNEL, "%c %s%s%pV\n", level, + prefix ? prefix : "", + prefix ? ": " : "", &vaf); index = log->head & (logsize - 1); BUILD_BUG_ON(sizeof(log->head) != sizeof(u8) || @@ -457,9 +426,11 @@ store_string: log->tail++; } - log->buffer[index] = q; - log->need_free &= ~(1 << index); - log->need_free |= freeable << index; + log->buffer[index] = q ? q : "OOM: Can't store error string"; + if (q) + log->need_free |= 1 << index; + else + log->need_free &= ~(1 << index); log->head++; } va_end(va); diff --git a/include/linux/fs_context.h b/include/linux/fs_context.h index c7c69640a6c6..d18ff422e942 100644 --- a/include/linux/fs_context.h +++ b/include/linux/fs_context.h @@ -181,9 +181,13 @@ struct fc_log { char *buffer[8]; }; -extern __attribute__((format(printf, 2, 3))) -void logfc(struct fs_context *fc, const char *fmt, ...); +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__);}) /** * infof - Store supplementary informational message * @fc: The context in which to log the informational message @@ -192,7 +196,7 @@ void logfc(struct fs_context *fc, const char *fmt, ...); * Store the supplementary informational message for the process if the process * has enabled the facility. */ -#define infof(fc, fmt, ...) ({ logfc(fc, "i "fmt, ## __VA_ARGS__); }) +#define infof(fc, fmt, ...) __logfc(fc, 'i', fmt, ## __VA_ARGS__) /** * warnf - Store supplementary warning message @@ -202,7 +206,7 @@ void logfc(struct fs_context *fc, const char *fmt, ...); * Store the supplementary warning message for the process if the process has * enabled the facility. */ -#define warnf(fc, fmt, ...) ({ logfc(fc, "w "fmt, ## __VA_ARGS__); }) +#define warnf(fc, fmt, ...) __logfc(fc, 'w', fmt, ## __VA_ARGS__) /** * errorf - Store supplementary error message @@ -212,7 +216,7 @@ void logfc(struct fs_context *fc, const char *fmt, ...); * Store the supplementary error message for the process if the process has * enabled the facility. */ -#define errorf(fc, fmt, ...) ({ logfc(fc, "e "fmt, ## __VA_ARGS__); }) +#define errorf(fc, fmt, ...) __logfc(fc, 'e', fmt, ## __VA_ARGS__) /** * invalf - Store supplementary invalid argument error message @@ -222,6 +226,6 @@ void logfc(struct fs_context *fc, const char *fmt, ...); * Store the supplementary error message for the process if the process has * enabled the facility and return -EINVAL. */ -#define invalf(fc, fmt, ...) ({ errorf(fc, fmt, ## __VA_ARGS__); -EINVAL; }) +#define invalf(fc, fmt, ...) (errorf(fc, fmt, ## __VA_ARGS__), -EINVAL) #endif /* _LINUX_FS_CONTEXT_H */ -- cgit v1.2.3 From 3fbb8d5554a1481d9c5f54ee7dc59f416650efb1 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Fri, 20 Dec 2019 23:43:32 -0500 Subject: struct p_log, variants of warnf() et.al. taking that one instead primitives for prefixed logging Signed-off-by: Al Viro --- drivers/block/rbd.c | 1 + include/linux/fs_context.h | 11 +++++++++++ 2 files changed, 12 insertions(+) (limited to 'include/linux/fs_context.h') diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 9fc686be81ca..1dd758e8f955 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -6353,6 +6353,7 @@ static int rbd_parse_param(struct fs_parameter *param, { struct rbd_options *opt = pctx->opts; struct fs_parse_result result; + struct p_log log = {.prefix = "rbd"}; int token, ret; ret = ceph_parse_param(param, pctx->copts, NULL); diff --git a/include/linux/fs_context.h b/include/linux/fs_context.h index d18ff422e942..6a7eeb252084 100644 --- a/include/linux/fs_context.h +++ b/include/linux/fs_context.h @@ -73,6 +73,11 @@ struct fs_parameter { int dirfd; }; +struct p_log { + const char *prefix; + struct fc_log *log; +}; + /* * Filesystem context for holding the parameters used in the creation or * reconfiguration of a superblock. @@ -188,6 +193,8 @@ void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, struct fs_context *__fc = (fc); \ logfc(__fc ? __fc->log : NULL, NULL, \ l, fmt, ## __VA_ARGS__);}) +#define __plog(p, l, fmt, ...) logfc((p)->log, (p)->prefix, \ + l, fmt, ## __VA_ARGS__) /** * infof - Store supplementary informational message * @fc: The context in which to log the informational message @@ -197,6 +204,7 @@ void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, * has enabled the facility. */ #define infof(fc, fmt, ...) __logfc(fc, 'i', fmt, ## __VA_ARGS__) +#define info_plog(p, fmt, ...) __plog(p, 'i', fmt, ## __VA_ARGS__) /** * warnf - Store supplementary warning message @@ -207,6 +215,7 @@ void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, * enabled the facility. */ #define warnf(fc, fmt, ...) __logfc(fc, 'w', fmt, ## __VA_ARGS__) +#define warn_plog(p, fmt, ...) __plog(p, 'w', fmt, ## __VA_ARGS__) /** * errorf - Store supplementary error message @@ -217,6 +226,7 @@ void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, * enabled the facility. */ #define errorf(fc, fmt, ...) __logfc(fc, 'e', fmt, ## __VA_ARGS__) +#define error_plog(p, fmt, ...) __plog(p, 'e', fmt, ## __VA_ARGS__) /** * invalf - Store supplementary invalid argument error message @@ -227,5 +237,6 @@ void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, * enabled the facility and return -EINVAL. */ #define invalf(fc, fmt, ...) (errorf(fc, fmt, ## __VA_ARGS__), -EINVAL) +#define inval_plog(p, fmt, ...) (error_plog(p, fmt, ## __VA_ARGS__), -EINVAL) #endif /* _LINUX_FS_CONTEXT_H */ -- cgit v1.2.3 From 7f5d38141e309bb4ba995d9726928af85a299c50 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Fri, 20 Dec 2019 23:52:55 -0500 Subject: 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(-) (limited to 'include/linux/fs_context.h') 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; -- cgit v1.2.3 From cc3c0b533ab9142eac2e291628fbfca3685f38cd Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sat, 21 Dec 2019 00:16:49 -0500 Subject: add prefix to fs_context->log ... turning it into struct p_log embedded into fs_context. Initialize the prefix with fs_type->name, turning fs_parse() into a trivial inline wrapper for __fs_parse(). This makes fs_parameter_description->name completely unused. Signed-off-by: Al Viro --- fs/ceph/super.c | 4 ++-- fs/fs_context.c | 9 +++++---- fs/fs_parser.c | 10 ---------- fs/fsopen.c | 10 +++++----- include/linux/fs_context.h | 4 ++-- include/linux/fs_parser.h | 13 +++++++++---- 6 files changed, 23 insertions(+), 27 deletions(-) (limited to 'include/linux/fs_context.h') diff --git a/fs/ceph/super.c b/fs/ceph/super.c index 0fe0aa575585..4125de07221b 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c @@ -250,7 +250,7 @@ static int ceph_parse_source(struct fs_parameter *param, struct fs_context *fc) dout("server path '%s'\n", fsopt->server_path); ret = ceph_parse_mon_ips(param->string, dev_name_end - dev_name, - pctx->copts, fc->log); + pctx->copts, fc->log.log); if (ret) return ret; @@ -268,7 +268,7 @@ static int ceph_parse_mount_param(struct fs_context *fc, unsigned int mode; int token, ret; - ret = ceph_parse_param(param, pctx->copts, fc->log); + ret = ceph_parse_param(param, pctx->copts, fc->log.log); if (ret != -ENOPARAM) return ret; diff --git a/fs/fs_context.c b/fs/fs_context.c index fb6329c21384..fc9f6ef93b55 100644 --- a/fs/fs_context.c +++ b/fs/fs_context.c @@ -271,6 +271,7 @@ static struct fs_context *alloc_fs_context(struct file_system_type *fs_type, fc->fs_type = get_filesystem(fs_type); fc->cred = get_current_cred(); fc->net_ns = get_net(current->nsproxy->net_ns); + fc->log.prefix = fs_type->name; mutex_init(&fc->uapi_mutex); @@ -364,8 +365,8 @@ struct fs_context *vfs_dup_fs_context(struct fs_context *src_fc) get_net(fc->net_ns); get_user_ns(fc->user_ns); get_cred(fc->cred); - if (fc->log) - refcount_inc(&fc->log->usage); + if (fc->log.log) + refcount_inc(&fc->log.log->usage); /* Can't call put until we've called ->dup */ ret = fc->ops->dup(fc, src_fc); @@ -442,12 +443,12 @@ EXPORT_SYMBOL(logfc); */ static void put_fc_log(struct fs_context *fc) { - struct fc_log *log = fc->log; + struct fc_log *log = fc->log.log; int i; if (log) { if (refcount_dec_and_test(&log->usage)) { - fc->log = NULL; + fc->log.log = NULL; for (i = 0; i <= 7; i++) if (log->need_free & (1 << i)) kfree(log->buffer[i]); diff --git a/fs/fs_parser.c b/fs/fs_parser.c index dadb6582874d..4c410eef0173 100644 --- a/fs/fs_parser.c +++ b/fs/fs_parser.c @@ -243,16 +243,6 @@ unknown_parameter: } 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); - /** * fs_lookup_param - Look up a path referred to by a parameter * @fc: The filesystem context to log errors through. diff --git a/fs/fsopen.c b/fs/fsopen.c index c822d8924ca9..2fa3f241b762 100644 --- a/fs/fsopen.c +++ b/fs/fsopen.c @@ -25,7 +25,7 @@ static ssize_t fscontext_read(struct file *file, char __user *_buf, size_t len, loff_t *pos) { struct fs_context *fc = file->private_data; - struct fc_log *log = fc->log; + struct fc_log *log = fc->log.log; unsigned int logsize = ARRAY_SIZE(log->buffer); ssize_t ret; char *p; @@ -97,11 +97,11 @@ static int fscontext_create_fd(struct fs_context *fc, unsigned int o_flags) static int fscontext_alloc_log(struct fs_context *fc) { - fc->log = kzalloc(sizeof(*fc->log), GFP_KERNEL); - if (!fc->log) + fc->log.log = kzalloc(sizeof(*fc->log.log), GFP_KERNEL); + if (!fc->log.log) return -ENOMEM; - refcount_set(&fc->log->usage, 1); - fc->log->owner = fc->fs_type->owner; + refcount_set(&fc->log.log->usage, 1); + fc->log.log->owner = fc->fs_type->owner; return 0; } diff --git a/include/linux/fs_context.h b/include/linux/fs_context.h index 41f37d33e358..b2ad9b0a7af4 100644 --- a/include/linux/fs_context.h +++ b/include/linux/fs_context.h @@ -97,7 +97,7 @@ struct fs_context { struct user_namespace *user_ns; /* The user namespace for this mount */ struct net *net_ns; /* The network namespace for this mount */ const struct cred *cred; /* The mounter's credentials */ - struct fc_log *log; /* Logging buffer */ + struct p_log log; /* Logging buffer */ const char *source; /* The source name (eg. dev path) */ void *security; /* Linux S&M options */ void *s_fs_info; /* Proposed s_fs_info */ @@ -189,7 +189,7 @@ 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, ...) logfc((fc)->log, NULL, \ +#define __logfc(fc, l, fmt, ...) logfc((fc)->log.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 b0fba26a4ffe..37459124c1c1 100644 --- a/include/linux/fs_parser.h +++ b/include/linux/fs_parser.h @@ -78,10 +78,15 @@ 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, - struct fs_parse_result *result); + +static inline int fs_parse(struct fs_context *fc, + const struct fs_parameter_description *desc, + struct fs_parameter *param, + struct fs_parse_result *result) +{ + return __fs_parse(&fc->log, desc, param, result); +} + extern int fs_lookup_param(struct fs_context *fc, struct fs_parameter *param, bool want_bdev, -- cgit v1.2.3 From a3ff937b33d9dfd0923ac5279d87723048599057 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sat, 21 Dec 2019 21:30:50 -0500 Subject: prefix-handling analogues of errorf() and friends called errorfc/infofc/warnfc/invalfc Signed-off-by: Al Viro --- include/linux/fs_context.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'include/linux/fs_context.h') diff --git a/include/linux/fs_context.h b/include/linux/fs_context.h index b2ad9b0a7af4..e6c3e4c61dad 100644 --- a/include/linux/fs_context.h +++ b/include/linux/fs_context.h @@ -203,6 +203,7 @@ void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, */ #define infof(fc, fmt, ...) __logfc(fc, 'i', fmt, ## __VA_ARGS__) #define info_plog(p, fmt, ...) __plog(p, 'i', fmt, ## __VA_ARGS__) +#define infofc(p, fmt, ...) __plog((&(fc)->log), 'i', fmt, ## __VA_ARGS__) /** * warnf - Store supplementary warning message @@ -214,6 +215,7 @@ void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, */ #define warnf(fc, fmt, ...) __logfc(fc, 'w', fmt, ## __VA_ARGS__) #define warn_plog(p, fmt, ...) __plog(p, 'w', fmt, ## __VA_ARGS__) +#define warnfc(fc, fmt, ...) __plog((&(fc)->log), 'w', fmt, ## __VA_ARGS__) /** * errorf - Store supplementary error message @@ -225,6 +227,7 @@ void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, */ #define errorf(fc, fmt, ...) __logfc(fc, 'e', fmt, ## __VA_ARGS__) #define error_plog(p, fmt, ...) __plog(p, 'e', fmt, ## __VA_ARGS__) +#define errorfc(fc, fmt, ...) __plog((&(fc)->log), 'e', fmt, ## __VA_ARGS__) /** * invalf - Store supplementary invalid argument error message @@ -236,5 +239,6 @@ void logfc(struct fc_log *log, const char *prefix, char level, const char *fmt, */ #define invalf(fc, fmt, ...) (errorf(fc, fmt, ## __VA_ARGS__), -EINVAL) #define inval_plog(p, fmt, ...) (error_plog(p, fmt, ## __VA_ARGS__), -EINVAL) +#define invalfc(fc, fmt, ...) (errorfc(fc, fmt, ## __VA_ARGS__), -EINVAL) #endif /* _LINUX_FS_CONTEXT_H */ -- cgit v1.2.3