Skip to content

Commit

Permalink
SUNRPC: Server-side disconnect injection
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Chuck Lever committed Aug 20, 2021
1 parent a4ae308 commit 3a12618
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 0 deletions.
3 changes: 3 additions & 0 deletions net/sunrpc/debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions net/sunrpc/fail.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
8 changes: 8 additions & 0 deletions net/sunrpc/svc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 3a12618

Please sign in to comment.