Commit c782af25 authored by Chuck Lever's avatar 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: default avatarChuck Lever <chuck.lever@oracle.com>
parent 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%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment