From f6324480d4b27a24f4df68d663ec3b56aeca60c0 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Mon, 9 Aug 2021 14:09:24 -0400 Subject: [PATCH] SUNRPC: Add a /sys/kernel/debug/fail_sunrpc/ directory This directory will contain a set of administrative controls for enabling error injection for kernel RPC consumers. Signed-off-by: Chuck Lever --- 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 56029e3af6ff0b..7a9065b6a05847 100644 --- a/net/sunrpc/debugfs.c +++ b/net/sunrpc/debugfs.c @@ -8,7 +8,9 @@ #include #include #include + #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 00000000000000..96a46eff94e4bf --- /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 + +struct fail_sunrpc_attr { + struct fault_attr attr; +}; + +extern struct fail_sunrpc_attr fail_sunrpc; + +#endif /* _NET_SUNRPC_FAIL_H_ */