diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2021-08-03 22:45:18 +0300 |
---|---|---|
committer | Chuck Lever <chuck.lever@oracle.com> | 2021-08-20 20:50:32 +0300 |
commit | c782af250083f69ba810e79b60a552252e777416 (patch) | |
tree | 3bfbcc4a3d9662303c157e38c868944f5e41581e | |
parent | 729580ddc53efd8093371788721487024c9b2f71 (diff) | |
download | linux-c782af250083f69ba810e79b60a552252e777416.tar.xz |
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 <chuck.lever@oracle.com>
-rw-r--r-- | lib/Kconfig.debug | 7 | ||||
-rw-r--r-- | net/sunrpc/debugfs.c | 14 | ||||
-rw-r--r-- | net/sunrpc/fail.h | 21 |
3 files changed, 42 insertions, 0 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 5ddd575159fb..cd78bb0a7dd9 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1971,6 +1971,13 @@ config FAIL_MMC_REQUEST and to test how the mmc host driver handles retries from the block device. +config FAIL_SUNRPC + bool "Fault-injection capability for SunRPC" + depends on FAULT_INJECTION_DEBUG_FS && SUNRPC_DEBUG + help + Provide fault-injection capability for SunRPC and + its consumers. + config FAULT_INJECTION_STACKTRACE_FILTER bool "stacktrace filter for fault-injection capabilities" depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT diff --git a/net/sunrpc/debugfs.c b/net/sunrpc/debugfs.c index 56029e3af6ff..eaeb51f83abd 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,13 @@ static const struct file_operations fault_disconnect_fops = { .release = fault_release, }; +#if IS_ENABLED(CONFIG_FAIL_SUNRPC) +struct fail_sunrpc_attr fail_sunrpc = { + .attr = FAULT_ATTR_INITIALIZER, +}; +EXPORT_SYMBOL_GPL(fail_sunrpc); +#endif + void __exit sunrpc_debugfs_exit(void) { @@ -321,4 +330,9 @@ sunrpc_debugfs_init(void) debugfs_create_file("disconnect", S_IFREG | 0400, rpc_fault_dir, NULL, &fault_disconnect_fops); + +#if IS_ENABLED(CONFIG_FAIL_SUNRPC) + fault_create_debugfs_attr("fail_sunrpc", NULL, + &fail_sunrpc.attr); +#endif } diff --git a/net/sunrpc/fail.h b/net/sunrpc/fail.h new file mode 100644 index 000000000000..1d402b0d3453 --- /dev/null +++ b/net/sunrpc/fail.h @@ -0,0 +1,21 @@ +/* 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> + +#if IS_ENABLED(CONFIG_FAULT_INJECTION) + +struct fail_sunrpc_attr { + struct fault_attr attr; +}; + +extern struct fail_sunrpc_attr fail_sunrpc; + +#endif /* CONFIG_FAULT_INJECTION */ + +#endif /* _NET_SUNRPC_FAIL_H_ */ |