This directory will contain a set of administrative controls for enabling error injection for kernel RPC consumers. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> --- net/sunrpc/debugfs.c | 20 ++++++++++++++++++++ net/sunrpc/fail.h | 17 +++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 net/sunrpc/fail.h diff --git a/net/sunrpc/debugfs.c b/net/sunrpc/debugfs.c index 56029e3af6ff..7a9065b6a058 100644 --- a/net/sunrpc/debugfs.c +++ b/net/sunrpc/debugfs.c @@ -8,7 +8,9 @@ #include <linux/debugfs.h> #include <linux/sunrpc/sched.h> #include <linux/sunrpc/clnt.h> + #include "netns.h" +#include "fail.h" static struct dentry *topdir; static struct dentry *rpc_clnt_dir; @@ -297,6 +299,22 @@ static const struct file_operations fault_disconnect_fops = { .release = fault_release, }; +struct fail_sunrpc_attr fail_sunrpc = { + .attr = FAULT_ATTR_INITIALIZER, +}; + +#if IS_ENABLED(CONFIG_FAULT_INJECTION_DEBUG_FS) +static void fail_sunrpc_init(void) +{ + fault_create_debugfs_attr("fail_sunrpc", NULL, + &fail_sunrpc.attr); +} +#else +static inline void fail_sunrpc_init(void) +{ +} +#endif + void __exit sunrpc_debugfs_exit(void) { @@ -321,4 +339,6 @@ sunrpc_debugfs_init(void) debugfs_create_file("disconnect", S_IFREG | 0400, rpc_fault_dir, NULL, &fault_disconnect_fops); + + fail_sunrpc_init(); } diff --git a/net/sunrpc/fail.h b/net/sunrpc/fail.h new file mode 100644 index 000000000000..96a46eff94e4 --- /dev/null +++ b/net/sunrpc/fail.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2021, Oracle. All rights reserved. + */ + +#ifndef _NET_SUNRPC_FAIL_H_ +#define _NET_SUNRPC_FAIL_H_ + +#include <linux/fault-inject.h> + +struct fail_sunrpc_attr { + struct fault_attr attr; +}; + +extern struct fail_sunrpc_attr fail_sunrpc; + +#endif /* _NET_SUNRPC_FAIL_H_ */