From: Petr Vorel <pvorel@suse.cz>
To: manjunath.b.patil@oracle.com
Cc: Dai.Ngo@oracle.com, anna@kernel.org, cel@kernel.org,
jlayton@kernel.org, linux-nfs@vger.kernel.org, neil@brown.name,
okorniev@redhat.com, tom@talpey.com, trondmy@kernel.org,
Petr Vorel <pvorel@suse.cz>
Subject: [PATCH] SUNRPC: add transport details to timeout diagnostics
Date: Thu, 20 Aug 2026 13:13:03 +0200 [thread overview]
Message-ID: <20260820111303.455807-1-pvorel@suse.cz> (raw)
In-Reply-To: <20260819173055.1956882-1-manjunath.b.patil@oracle.com>
> The existing RPC timeout messages identify only the RPC program and
> server name. That makes it difficult to distinguish a server-side
> response stall from a transport that is disconnected, reconnecting,
> or using a different connection.
>
> Include the RPC client id, transport id, current transport connection
> cookie, and RPC task owner in the ratelimited timeout messages. These
> fields provide a compact way to correlate a timeout message with
> rpcctl and other transport state.
>
> For example, an NFS timeout reports:
>
> nfs: server 192.168.50.1 clid=4 xprt=1 cc=1 owner=6245
> not responding, timed out
Nice improvement, thanks!
>
> Assisted-by: Codex:gpt-5
> Signed-off-by: Manjunath Patil <manjunath.b.patil@oracle.com>
> ---
> net/sunrpc/clnt.c | 20 +++++++++++++-------
> 1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
> index efa26899bc7d..6b5e2787dc81 100644
> --- a/net/sunrpc/clnt.c
> +++ b/net/sunrpc/clnt.c
> @@ -2534,17 +2534,21 @@ static void
> rpc_check_timeout(struct rpc_task *task)
> {
> struct rpc_clnt *clnt = task->tk_client;
> + struct rpc_rqst *req;
> + struct rpc_xprt *xprt;
nit: Would it work to assign req and task earlier (just readability?)
Or is it not safe before checking RPC_SIGNALLED(task)?
struct rpc_clnt *clnt = task->tk_client;
struct rpc_rqst *req = task->tk_rqstp;
struct rpc_xprt *xprt = req->rq_xprt;
The rest LGTM.
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Kind regards,
Petr
>
> if (RPC_SIGNALLED(task))
> return;
>
> - if (xprt_adjust_timeout(task->tk_rqstp) == 0)
> + req = task->tk_rqstp;
> + if (xprt_adjust_timeout(req) == 0)
> return;
> + xprt = req->rq_xprt;
>
> trace_rpc_timeout_status(task);
> task->tk_timeouts++;
>
> - if (RPC_IS_SOFTCONN(task) && !rpc_check_connected(task->tk_rqstp)) {
> + if (RPC_IS_SOFTCONN(task) && !rpc_check_connected(req)) {
> rpc_call_rpcerror(task, -ETIMEDOUT);
> return;
> }
> @@ -2556,14 +2560,15 @@ rpc_check_timeout(struct rpc_task *task)
> * connection gets terminally broken.
> */
> if ((task->tk_flags & RPC_TASK_NO_RETRANS_TIMEOUT) &&
> - rpc_check_connected(task->tk_rqstp))
> + rpc_check_connected(req))
> return;
>
> if (clnt->cl_chatty) {
> pr_notice_ratelimited(
> - "%s: server %s not responding, timed out\n",
> + "%s: server %s clid=%u xprt=%u cc=%u owner=%d not responding, timed out\n",
> clnt->cl_program->name,
> - task->tk_xprt->servername);
> + xprt->servername, clnt->cl_clid, xprt->id,
> + READ_ONCE(xprt->connect_cookie), task->tk_owner);
> }
> if (task->tk_flags & RPC_TASK_TIMEOUT)
> rpc_call_rpcerror(task, -ETIMEDOUT);
> @@ -2576,9 +2581,10 @@ rpc_check_timeout(struct rpc_task *task)
> task->tk_flags |= RPC_CALL_MAJORSEEN;
> if (clnt->cl_chatty) {
> pr_notice_ratelimited(
> - "%s: server %s not responding, still trying\n",
> + "%s: server %s clid=%u xprt=%u cc=%u owner=%d not responding, still trying\n",
> clnt->cl_program->name,
> - task->tk_xprt->servername);
> + xprt->servername, clnt->cl_clid, xprt->id,
> + READ_ONCE(xprt->connect_cookie), task->tk_owner);
> }
> }
> rpc_force_rebind(clnt);
next prev parent reply other threads:[~2026-08-20 11:13 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-19 17:30 [PATCH] SUNRPC: add transport details to timeout diagnostics Manjunath Patil
2026-08-20 11:13 ` Petr Vorel [this message]
2026-08-20 16:15 ` manjunath.b.patil
2026-08-20 18:59 ` Petr Vorel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260820111303.455807-1-pvorel@suse.cz \
--to=pvorel@suse.cz \
--cc=Dai.Ngo@oracle.com \
--cc=anna@kernel.org \
--cc=cel@kernel.org \
--cc=jlayton@kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=manjunath.b.patil@oracle.com \
--cc=neil@brown.name \
--cc=okorniev@redhat.com \
--cc=tom@talpey.com \
--cc=trondmy@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox