提交 c782af25 编写于 作者: C Chuck Lever

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: NChuck Lever <chuck.lever@oracle.com>
上级 729580dd
...@@ -1971,6 +1971,13 @@ config FAIL_MMC_REQUEST ...@@ -1971,6 +1971,13 @@ config FAIL_MMC_REQUEST
and to test how the mmc host driver handles retries from and to test how the mmc host driver handles retries from
the block device. 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 config FAULT_INJECTION_STACKTRACE_FILTER
bool "stacktrace filter for fault-injection capabilities" bool "stacktrace filter for fault-injection capabilities"
depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
......
...@@ -8,7 +8,9 @@ ...@@ -8,7 +8,9 @@
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/sunrpc/sched.h> #include <linux/sunrpc/sched.h>
#include <linux/sunrpc/clnt.h> #include <linux/sunrpc/clnt.h>
#include "netns.h" #include "netns.h"
#include "fail.h"
static struct dentry *topdir; static struct dentry *topdir;
static struct dentry *rpc_clnt_dir; static struct dentry *rpc_clnt_dir;
...@@ -297,6 +299,13 @@ static const struct file_operations fault_disconnect_fops = { ...@@ -297,6 +299,13 @@ static const struct file_operations fault_disconnect_fops = {
.release = fault_release, .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 void __exit
sunrpc_debugfs_exit(void) sunrpc_debugfs_exit(void)
{ {
...@@ -321,4 +330,9 @@ sunrpc_debugfs_init(void) ...@@ -321,4 +330,9 @@ sunrpc_debugfs_init(void)
debugfs_create_file("disconnect", S_IFREG | 0400, rpc_fault_dir, NULL, debugfs_create_file("disconnect", S_IFREG | 0400, rpc_fault_dir, NULL,
&fault_disconnect_fops); &fault_disconnect_fops);
#if IS_ENABLED(CONFIG_FAIL_SUNRPC)
fault_create_debugfs_attr("fail_sunrpc", NULL,
&fail_sunrpc.attr);
#endif
} }
/* 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_ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册