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>
This commit is contained in:
Chuck Lever 2021-08-03 15:45:18 -04:00
parent 729580ddc5
commit c782af2500
3 changed files with 42 additions and 0 deletions

View File

@ -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

View File

@ -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 = {
.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)
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
} }

21
net/sunrpc/fail.h Normal file
View File

@ -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_ */