SUNRPC: Server-side disconnect injection
Disconnect injection stress-tests the ability for both client and server implementations to behave resiliently in the face of network instability. A file called /sys/kernel/debug/fail_sunrpc/ignore-server-disconnect enables administrators to turn off server-side disconnect injection while allowing other types of sunrpc errors to be injected. The default setting is that server-side disconnect injection is enabled (ignore=false). Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
Родитель
a4ae308143
Коммит
3a12618059
|
@ -259,6 +259,9 @@ static void fail_sunrpc_init(void)
|
|||
|
||||
debugfs_create_bool("ignore-client-disconnect", S_IFREG | 0600, dir,
|
||||
&fail_sunrpc.ignore_client_disconnect);
|
||||
|
||||
debugfs_create_bool("ignore-server-disconnect", S_IFREG | 0600, dir,
|
||||
&fail_sunrpc.ignore_server_disconnect);
|
||||
}
|
||||
#else
|
||||
static void fail_sunrpc_init(void)
|
||||
|
|
|
@ -14,6 +14,8 @@ struct fail_sunrpc_attr {
|
|||
struct fault_attr attr;
|
||||
|
||||
bool ignore_client_disconnect;
|
||||
|
||||
bool ignore_server_disconnect;
|
||||
};
|
||||
|
||||
extern struct fail_sunrpc_attr fail_sunrpc;
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
|
||||
#include <trace/events/sunrpc.h>
|
||||
|
||||
#include "fail.h"
|
||||
|
||||
#define RPCDBG_FACILITY RPCDBG_SVCDSP
|
||||
|
||||
static void svc_unregister(const struct svc_serv *serv, struct net *net);
|
||||
|
@ -1524,6 +1526,12 @@ svc_process(struct svc_rqst *rqstp)
|
|||
struct svc_serv *serv = rqstp->rq_server;
|
||||
u32 dir;
|
||||
|
||||
#if IS_ENABLED(CONFIG_FAIL_SUNRPC)
|
||||
if (!fail_sunrpc.ignore_server_disconnect &&
|
||||
should_fail(&fail_sunrpc.attr, 1))
|
||||
svc_xprt_deferred_close(rqstp->rq_xprt);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Setup response xdr_buf.
|
||||
* Initially it has just one page
|
||||
|
|
Загрузка…
Ссылка в новой задаче