From patchwork Thu Mar 6 12:38:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14004417 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6477720D50F; Thu, 6 Mar 2025 12:38:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741264713; cv=none; b=dUziqDZHBSMWU5S2D6qZ+oZPFRxtKtxpdsguXWVnRUt4e8A1FvB8GiEb1D091KWavlTZomDSLKQ+efuUO4MuJzEEq+hoBGaC+3gW0iz2IQpFqrt3vWELhwsH9gUCdlJaLZHqXwqKyDttCq5ApVDC4UWnDzPxKvgYjHjjnDxvT7k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741264713; c=relaxed/simple; bh=jC3vud5pWlNnQwn60QUYW6ELssAqnVz/RrhPdDsIdB8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SbOLYmPcct1dz34ztlpmER15MEbWItt1ceMJku9b1Sgi5gRz07t9ook2KDwlsRg9t/S6In+3xdEANmXwAQtCOdrro0US2nZYyFGc82HjOZuMEMIKsiYA5Erddu6f9pouKq65z00CLC0UdPV53MMTNfGkZ4zehJjEzqc1TEm2iOE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qRMcV0gN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qRMcV0gN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8643AC4CEE9; Thu, 6 Mar 2025 12:38:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741264712; bh=jC3vud5pWlNnQwn60QUYW6ELssAqnVz/RrhPdDsIdB8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qRMcV0gNE41eSWDfRYkj+RK8JyMBMLxxs+WPB5qNE4W09bYzDMCRefZoEg0vU979N Tt1i5SKkDnJRKvvJtPFc7Gk7Ve1mSzgmZK1DGD0ws93hTsr0QhBwmW/oPmWM2vSslf UFmOYPen3Mnu9A+bgFsyfcIwSATTJwuFThgcbHStoOmQchhaSatQibm4wGVHCUJ0JJ m1JzSXNZbft+FRn+QvDmkYvfkhspxqPLaw3XI7dBRmX/yoLN9NiuXfwRm0AgkE2rLm Wn1pBln9eQtvDY2JVoyx8ECRxqpqZkqTD8KbJYMcJH0fbzFeBuwy4gxTyjVpEZNDjz /GpK0nVPH3Ndg== From: Jeff Layton Date: Thu, 06 Mar 2025 07:38:13 -0500 Subject: [PATCH 1/4] nfsd: add commit start/done tracepoints around nfsd_commit() Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250306-nfsd-tracepoints-v1-1-4405bf41b95f@kernel.org> References: <20250306-nfsd-tracepoints-v1-0-4405bf41b95f@kernel.org> In-Reply-To: <20250306-nfsd-tracepoints-v1-0-4405bf41b95f@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Trond Myklebust , Anna Schumaker , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Sargun Dillon , linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1486; i=jlayton@kernel.org; h=from:subject:message-id; bh=jC3vud5pWlNnQwn60QUYW6ELssAqnVz/RrhPdDsIdB8=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnyZdEsBEAaQ9XGT3DT0LweJSDPazX8z3WXmN6d g3qji72m72JAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ8mXRAAKCRAADmhBGVaC FZ8eD/wNnEC4wACUFFzIZMDDbYuYrOg8sECNsSWAu2Qapf64rlGVUQ/p2mJNKRwGVcbLRmp1qZn x+dh0sKNXfRYxuPS97VwCmQQLLZzX+gu618bDv644pKLxAD1WPGX3WRZAHdG3qZ+LKoytdIKOsC x505327L7uxZ1McZ9Zsokw1kE07QN9QYos6EeXp1aNb8+M2qBT0NcZ41dzA+ms+IKrTdEyRM3qt wXMdobK5LWsRBpHdTZJ0DEh/61um58HU/V0RjBq3BZu4dd81+O0HZaRj82yyjKfEigVeXEbCewc 3L95hTb9IIduCA5ocEQYvwIb+CIVcK3iCy8iOcyZXIpaQUaEkoeuZVlj/AEWmZZcQ8RO2Dj65an A7oX5vNWb8aCWX8VGNGnsUIh11ORvWM+8U/Q25IrS7TEl+NMK4RFI6EQt96ia2tlklxdSau9fEY H1A7xPUM1IumnItxQjmzMqJHLyOFAVLsXxi+syTHA4ib1/31Y0xBgs4BgcGRs0PvR4WpYj0/N7N bD2ux01R6KHt4aIuCnO4LC52fpyJzixABsorgnDQvcR+fzmlYqI2mcg4XVbWhxlE8QadWCnBhZg 2lr0Q18B99SOZzS62lKc834Yw3qhXfz3Swm4rvBsTghp0drkBnRKotCrr6BpB4LlFRYrz3EGN/V 1vtGv4ZkAAVMcig== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Very useful for gauging how long the vfs_fsync_range() takes. Signed-off-by: Jeff Layton --- fs/nfsd/trace.h | 2 ++ fs/nfsd/vfs.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/fs/nfsd/trace.h b/fs/nfsd/trace.h index a7630e9f657776a9335ba68ad223641e3ed9121a..0d49fc064f7273f32c93732a993fd77bc0783f5d 100644 --- a/fs/nfsd/trace.h +++ b/fs/nfsd/trace.h @@ -451,6 +451,8 @@ DEFINE_NFSD_IO_EVENT(write_start); DEFINE_NFSD_IO_EVENT(write_opened); DEFINE_NFSD_IO_EVENT(write_io_done); DEFINE_NFSD_IO_EVENT(write_done); +DEFINE_NFSD_IO_EVENT(commit_start); +DEFINE_NFSD_IO_EVENT(commit_done); DECLARE_EVENT_CLASS(nfsd_err_class, TP_PROTO(struct svc_rqst *rqstp, diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 4021b047eb1804f0058f6fb511d3fdfc03a42bf3..390ddfb169083535faa3a2413389e247bdbf4a73 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1339,6 +1339,8 @@ nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp, struct nfsd_file *nf, loff_t start, end; struct nfsd_net *nn; + trace_nfsd_commit_start(rqstp, fhp, offset, count); + /* * Convert the client-provided (offset, count) range to a * (start, end) range. If the client-provided range falls @@ -1377,6 +1379,7 @@ nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp, struct nfsd_file *nf, } else nfsd_copy_write_verifier(verf, nn); + trace_nfsd_commit_done(rqstp, fhp, offset, count); return err; } From patchwork Thu Mar 6 12:38:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14004418 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 155DD20E30A; Thu, 6 Mar 2025 12:38:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741264716; cv=none; b=IrvCLOiYsiftmJECv/VdKAyHxKv6x8LnDDFCGns19K/D9RMGvpyWAnHdw9eYr6jDRExnO407X5ppZ4/xv5n03QQQFQPZ4EBIsDSWKfybOm+816s2i0flB1hussT6MDK3EKOdWeI4KdOf5OxXJFTVv13iCNtx0b1CAC9iru5gQXc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741264716; c=relaxed/simple; bh=l94euaVl8GxBtZu2zgPXV0MuIFNOPdoJJNkFxgc1pP0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cpWWyNVjidDELiF3qoemM9zQ6pbjf4hAyYL2JnV3Xu57v9IKjWx7Zfp/Qfk+LVxseJgJf9n9m7L6t9YmcQY4ld2ZlyYOBi3jq5lO7XIC4KzXdtiEDN2W08rUpgDaye0GupoI0UkZebVb7JqVbopixYY/ddul9m2QiJJ3CdBAHUw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Sl75Zl7D; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Sl75Zl7D" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 253D0C4CEEE; Thu, 6 Mar 2025 12:38:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741264714; bh=l94euaVl8GxBtZu2zgPXV0MuIFNOPdoJJNkFxgc1pP0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Sl75Zl7DPv5dUA9y3DUXMWsuudpr97g2t4qm5VAM9mtYQ86CKPjRcT3iekcgDXu/J KZU+n67DQaJXAsdl3YZlrjA53ThMHCvUU4rmZlvSiqezrxSlq06pT5eTtKSK2LhRLD RT627SrIWLBJAop3KYHPPnnPi1HL7gB0X6EF1tyQfoEgcEtwYnrY/Dzzc69czU4zUp sYIA4RJ1dmnNL6FHkj0qoH2xjx0l14fD7EOxfAyDRm0pF0XcmPTGtO2xcDbKkuIaLm ptzs8tiA7unPZJllskq9v3aCJOjeo3gM3sB4f3WerfA/i3f/CwHuIUfs1Z1aW9pAYG COVovqctvzPHg== From: Jeff Layton Date: Thu, 06 Mar 2025 07:38:14 -0500 Subject: [PATCH 2/4] nfsd: add a tracepoint for nfsd_setattr Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250306-nfsd-tracepoints-v1-2-4405bf41b95f@kernel.org> References: <20250306-nfsd-tracepoints-v1-0-4405bf41b95f@kernel.org> In-Reply-To: <20250306-nfsd-tracepoints-v1-0-4405bf41b95f@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Trond Myklebust , Anna Schumaker , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Sargun Dillon , linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3206; i=jlayton@kernel.org; h=from:subject:message-id; bh=l94euaVl8GxBtZu2zgPXV0MuIFNOPdoJJNkFxgc1pP0=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnyZdFMugoBKetmmJe09DSMrKrLFoNVxnguUZ8A dcnk47sjoOJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ8mXRQAKCRAADmhBGVaC FWVhEAC0mRRQYap+gSU8KNMDxEvQ8KuEXcxfpN0scW/10eIL3bH4I5xFgtgTBFZ1nz2ceXxSEef YLfug41xz5gb3pgcQskUFHpiBAI5GJ6Z2vdRVad3RZLraBuOLic9Kr2AvEe4xUie6mE/CnpWG4S NcOZGCePkLcK6YwRuJ17aQRdyY9lvKWqOkjOXsgXE5c2A1SRY+mM56zU2fSPbShUVnELOqKzvEL wHDJSKQURyVBnfOZfT51X8v4s3SEm96AUE1OieUDy9/LYXGnmij8TNqPP4NtOq6buCh2bdl56Da 68BfkjeUxtck/K4TXwc9OaTwysCG0BF0u1QVjV7jWXxHPhx1mLAAq93Dt5l4s6bFFSA0J9tp4vp nPuqcR6SrsjiEHqFi/8no6RBhD55AoDogowyplUuqk5BtiB0Ng54HEDzcQp4UfyaUNRsk7BBhM2 ygdBhxOfD//4bvFE4oeDR3gLzP+CQB8QXfjIYPWEhC609woafGVIG3nkQq6zBGZdlIky89FgVd0 XuIx93yo9dovoz53tj2NdWQs1rXsWlO31jhoc/ge6SPlAOLLYEEHHwgpL+zaxDoUtuffUSWVLWF eohsP73fc/F1imoJE69pxkcX31zG8fNhrJ7A9RSH3kFfXgswAbBOI/0eowTme0SACoDuFiUAXS8 tEGKySBtVYEAPYg== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Turn Sargun's internal kprobe based implementation of this into a normal static tracepoint. Cc: Sargun Dillon Signed-off-by: Jeff Layton --- fs/nfsd/trace.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ fs/nfsd/vfs.c | 2 ++ 2 files changed, 56 insertions(+) diff --git a/fs/nfsd/trace.h b/fs/nfsd/trace.h index 0d49fc064f7273f32c93732a993fd77bc0783f5d..117f7e1fd66a4838a048cc44bd5bf4dd8c6db958 100644 --- a/fs/nfsd/trace.h +++ b/fs/nfsd/trace.h @@ -2337,6 +2337,60 @@ DEFINE_EVENT(nfsd_copy_async_done_class, \ DEFINE_COPY_ASYNC_DONE_EVENT(done); DEFINE_COPY_ASYNC_DONE_EVENT(cancel); +#define show_ia_valid_flags(x) \ + __print_flags(x, "|", \ + { ATTR_MODE, "MODE" }, \ + { ATTR_UID, "UID" }, \ + { ATTR_GID, "GID" }, \ + { ATTR_SIZE, "SIZE" }, \ + { ATTR_ATIME, "ATIME" }, \ + { ATTR_MTIME, "MTIME" }, \ + { ATTR_CTIME, "CTIME" }, \ + { ATTR_ATIME_SET, "ATIME_SET" }, \ + { ATTR_MTIME_SET, "MTIME_SET" }, \ + { ATTR_FORCE, "FORCE" }, \ + { ATTR_KILL_SUID, "KILL_SUID" }, \ + { ATTR_KILL_SGID, "KILL_SGID" }, \ + { ATTR_FILE, "FILE" }, \ + { ATTR_KILL_PRIV, "KILL_PRIV" }, \ + { ATTR_OPEN, "OPEN" }, \ + { ATTR_TIMES_SET, "TIMES_SET" }, \ + { ATTR_TOUCH, "TOUCH"}) + +TRACE_EVENT(nfsd_setattr, + TP_PROTO(const struct svc_rqst *rqstp, const struct svc_fh *fhp, + const struct iattr *iap, const struct timespec64 *guardtime), + TP_ARGS(rqstp, fhp, iap, guardtime), + TP_STRUCT__entry( + __field(u32, xid) + __field(u32, fh_hash) + __field(s64, gtime_tv_sec) + __field(u32, gtime_tv_nsec) + __field(unsigned int, ia_valid) + __field(umode_t, ia_mode) + __field(uid_t, ia_uid) + __field(gid_t, ia_gid) + __field(loff_t, ia_size) + ), + TP_fast_assign(__entry->xid = be32_to_cpu(rqstp->rq_xid); + __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); + __entry->gtime_tv_sec = guardtime ? guardtime->tv_sec : 0; + __entry->gtime_tv_nsec = guardtime ? guardtime->tv_nsec : 0; + __entry->ia_valid = iap->ia_valid; + __entry->ia_mode = iap->ia_mode; + __entry->ia_uid = __kuid_val(iap->ia_uid); + __entry->ia_gid = __kgid_val(iap->ia_gid); + __entry->ia_size = iap->ia_size; + + ), + TP_printk( + "xid=0x%08x fh_hash=0x%08x ia_valid=%s ia_mode=%o ia_uid=%u ia_gid=%u guard_time=%lld.%u", + __entry->xid, __entry->fh_hash, show_ia_valid_flags(__entry->ia_valid), + __entry->ia_mode, __entry->ia_uid, __entry->ia_gid, + __entry->gtime_tv_sec, __entry->gtime_tv_nsec + ) +) + #endif /* _NFSD_TRACE_H */ #undef TRACE_INCLUDE_PATH diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 390ddfb169083535faa3a2413389e247bdbf4a73..d755cc87a8670c491e55194de266d999ba1b337d 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -499,6 +499,8 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, bool size_change = (iap->ia_valid & ATTR_SIZE); int retries; + trace_nfsd_setattr(rqstp, fhp, iap, guardtime); + if (iap->ia_valid & ATTR_SIZE) { accmode |= NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE; ftype = S_IFREG; From patchwork Thu Mar 6 12:38:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14004419 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 939E620E335; Thu, 6 Mar 2025 12:38:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741264716; cv=none; b=nSimPHGbZxgCz4k0WMEWlvLGOSFn8c32z4A/q7xqESr/Gnhwl1Kv6k0umGvBcjv4yDmVGEtpqzWB5kYv3S6gKFhEdyS/GewPcVFJSob7u8Joo+m36KtEO7OsbVJ3P0pzO90PDdlZiZtp7CT1uRwgk6veXZZVxVJCkkOXXJZniKs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741264716; c=relaxed/simple; bh=P5cmtorr5cXrsFKmHnbpELmGLQ2FPiPZFr7M/Uw6dhM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lgqZBf6vXyYlKs8qI3Hd/+H4MOjiR4DJlaIw4l2mUgkLi/g4YdTEahFTrSNGUpU2VYL1z27hauqigpiu9hyPE1hYScuzVuVDzc1COyRiOm1Z2Lay3Z+5BePME4WbIvFg/X+SgM4xieccAJjIOUeFxMWHPlxXQComZclcNCnVw5Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PEDKBhqG; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PEDKBhqG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B8C21C4CEEB; Thu, 6 Mar 2025 12:38:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741264716; bh=P5cmtorr5cXrsFKmHnbpELmGLQ2FPiPZFr7M/Uw6dhM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=PEDKBhqGO7mMJfsRuF0wKfZVtfUBrQqRMrRdyVpXHght67b6NmsLjostMnegeCsAu UtBGK925gitKEmpA4as2D0HNd+MsVW0h9EM33iJVTPAbpI6fdiEV+4eRxx109hoPfb eKJYOzUE1LdAEThgThnntacMgplzowI+2JVH94kFGhZRPPlsEmOsMWZUtvEAiRc4dt nNYYsb3if2ozHXokwxUcJrVWzQBOuNcQlmNoH5x50FxUFlXmk2jRyPX9KpCeSgw2GO hqe+Q82kvZCBJuZYT3yK/yLkxOJ20KuUqz1qLYhTB2+Gr0+C6bidwF2nPUGrMtf31b n0m94STEMyhNw== From: Jeff Layton Date: Thu, 06 Mar 2025 07:38:15 -0500 Subject: [PATCH 3/4] nfsd: add some stub tracepoints around key vfs functions Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250306-nfsd-tracepoints-v1-3-4405bf41b95f@kernel.org> References: <20250306-nfsd-tracepoints-v1-0-4405bf41b95f@kernel.org> In-Reply-To: <20250306-nfsd-tracepoints-v1-0-4405bf41b95f@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Trond Myklebust , Anna Schumaker , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Sargun Dillon , linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7290; i=jlayton@kernel.org; h=from:subject:message-id; bh=P5cmtorr5cXrsFKmHnbpELmGLQ2FPiPZFr7M/Uw6dhM=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnyZdFA4872ZaQ4Gpa8va7ieWuQ96bO1fYNLLZD efId0NkSgmJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ8mXRQAKCRAADmhBGVaC FQDUEAC8HLAvBmiG2ZSGcMG5wpJIn/AWa0mZMYW/DS8ak+OFUThHiY5t3InyPaEVM15W7wHNXYU 9Z/Rfu5M8lV/V3i87w9k9ZmjcgHLlMNFHk7+6tUmamp2ZOlcuxRgleKcatMpnmAGhMoZX8Lsy0r WXE5tiFzOOKzS4uSI6hRz85niDX/zvHkItaT9+2XbRGdIsdphACCVEQQeFSkXR4jeP/QUhA8Fru 7IBNC1cia/tBNlmgAzziAlTygqVAEWzFRxaM1hOwo5V2juTjUG4kJTLGlK1f4k/WRKO9kZl9HuD 2AJIoyV3AmWUnCrN32HYJUVN8ldFdefyFKQPGsb0wV9Y8ahdMApipxIQG2ViVbiop2S48M2jJrb DWcUh+uEWf5jy6WjmsYiFN2rkQYohqdTCMQK6ZifKNANLVJymlMPLcihD6e2v7odxEgozTBf5ZJ wI4rmpZKHIYjExPBSbQrNZG20y7gIG/jcldd5eM9g7+DPq3xO8FFbdW4SAdQdndGc/MSuXdNI6O /1pjsbabOhdVlOgvRfG1AlHoSpJVMUEB/YhbueDeESGEXRDyB2V62JEv+seeESP7R+CbeqLOyuh JfASdby/5ZxgfqtifD+BismLMqj9MW9Z1pWrb+flKKaFpM1/bVMBJgs4zXWTSAv/eoMtT3zQy/S jRpunDCaG3GqJmA== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Sargun set up kprobes to add some of these tracepoints. Convert them to simple static tracepoints. These are pretty sparse for now, but they could be expanded in the future as needed. Cc: Sargun Dillon Signed-off-by: Jeff Layton --- fs/nfsd/nfs3proc.c | 3 +++ fs/nfsd/nfs4proc.c | 2 ++ fs/nfsd/nfsproc.c | 2 ++ fs/nfsd/trace.h | 35 +++++++++++++++++++++++++++++++++++ fs/nfsd/vfs.c | 26 ++++++++++++++++++++++++++ 5 files changed, 68 insertions(+) diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c index 372bdcf5e07a5c835da240ecebb02e3576eb2ca6..2a56cae4c78a7ca66d569637e9f0e7c0fdcfb826 100644 --- a/fs/nfsd/nfs3proc.c +++ b/fs/nfsd/nfs3proc.c @@ -14,6 +14,7 @@ #include "xdr3.h" #include "vfs.h" #include "filecache.h" +#include "trace.h" #define NFSDDBG_FACILITY NFSDDBG_PROC @@ -69,6 +70,8 @@ nfsd3_proc_getattr(struct svc_rqst *rqstp) struct nfsd_fhandle *argp = rqstp->rq_argp; struct nfsd3_attrstat *resp = rqstp->rq_resp; + trace_nfsd_getattr(rqstp, &argp->fh); + dprintk("nfsd: GETATTR(3) %s\n", SVCFH_fmt(&argp->fh)); diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index c20f1abcb94f131b1ec898860ba2c394b22e61e1..87d241ff91920317e0122a58bf0cf71c5b28d264 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -876,6 +876,8 @@ nfsd4_getattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_getattr *getattr = &u->getattr; __be32 status; + trace_nfsd_getattr(rqstp, &cstate->current_fh); + status = fh_verify(rqstp, &cstate->current_fh, 0, NFSD_MAY_NOP); if (status) return status; diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c index 6dda081eb24c00b834ab0965c3a35a12115bceb7..9563372f0826b9580299144069f57664dbd2a079 100644 --- a/fs/nfsd/nfsproc.c +++ b/fs/nfsd/nfsproc.c @@ -54,6 +54,8 @@ nfsd_proc_getattr(struct svc_rqst *rqstp) struct nfsd_fhandle *argp = rqstp->rq_argp; struct nfsd_attrstat *resp = rqstp->rq_resp; + trace_nfsd_getattr(rqstp, &argp->fh); + dprintk("nfsd: GETATTR %s\n", SVCFH_fmt(&argp->fh)); fh_copy(&resp->fh, &argp->fh); diff --git a/fs/nfsd/trace.h b/fs/nfsd/trace.h index 117f7e1fd66a4838a048cc44bd5bf4dd8c6db958..d4a78fe1bab24b594b96cca8611c439da9ed6926 100644 --- a/fs/nfsd/trace.h +++ b/fs/nfsd/trace.h @@ -2337,6 +2337,41 @@ DEFINE_EVENT(nfsd_copy_async_done_class, \ DEFINE_COPY_ASYNC_DONE_EVENT(done); DEFINE_COPY_ASYNC_DONE_EVENT(cancel); +DECLARE_EVENT_CLASS(nfsd_vfs_class, + TP_PROTO(struct svc_rqst *rqstp, struct svc_fh *fhp), + TP_ARGS(rqstp, fhp), + TP_STRUCT__entry( + __field(u32, xid) + __field(u32, fh_hash) + ), + TP_fast_assign( + __entry->xid = be32_to_cpu(rqstp->rq_xid); + __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); + ), + TP_printk("xid=0x%08x fh_hash=0x%08x", + __entry->xid, __entry->fh_hash) +); + +#define DEFINE_NFSD_VFS_EVENT(name) \ + DEFINE_EVENT(nfsd_vfs_class, nfsd_##name, \ + TP_PROTO(struct svc_rqst *rqstp, struct svc_fh *fhp), \ + TP_ARGS(rqstp, fhp)) + +DEFINE_NFSD_VFS_EVENT(lookup); +DEFINE_NFSD_VFS_EVENT(lookup_dentry); +DEFINE_NFSD_VFS_EVENT(create_locked); +DEFINE_NFSD_VFS_EVENT(create); +DEFINE_NFSD_VFS_EVENT(access); +DEFINE_NFSD_VFS_EVENT(create_setattr); +DEFINE_NFSD_VFS_EVENT(readlink); +DEFINE_NFSD_VFS_EVENT(symlink); +DEFINE_NFSD_VFS_EVENT(link); +DEFINE_NFSD_VFS_EVENT(rename); +DEFINE_NFSD_VFS_EVENT(unlink); +DEFINE_NFSD_VFS_EVENT(readdir); +DEFINE_NFSD_VFS_EVENT(statfs); +DEFINE_NFSD_VFS_EVENT(getattr); + #define show_ia_valid_flags(x) \ __print_flags(x, "|", \ { ATTR_MODE, "MODE" }, \ diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index d755cc87a8670c491e55194de266d999ba1b337d..772a4d32b09a4bd217a9258ec803c06618cf13c8 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -244,6 +244,8 @@ nfsd_lookup_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp, struct dentry *dentry; int host_err; + trace_nfsd_lookup(rqstp, fhp); + dprintk("nfsd: nfsd_lookup(fh %s, %.*s)\n", SVCFH_fmt(fhp), len,name); dparent = fhp->fh_dentry; @@ -313,6 +315,8 @@ nfsd_lookup(struct svc_rqst *rqstp, struct svc_fh *fhp, const char *name, struct dentry *dentry; __be32 err; + trace_nfsd_lookup(rqstp, fhp); + err = fh_verify(rqstp, fhp, S_IFDIR, NFSD_MAY_EXEC); if (err) return err; @@ -794,6 +798,8 @@ nfsd_access(struct svc_rqst *rqstp, struct svc_fh *fhp, u32 *access, u32 *suppor u32 query, result = 0, sresult = 0; __be32 error; + trace_nfsd_create(rqstp, fhp); + error = fh_verify(rqstp, fhp, 0, NFSD_MAY_NOP); if (error) goto out; @@ -1401,6 +1407,8 @@ nfsd_create_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap = attrs->na_iattr; __be32 status; + trace_nfsd_create_setattr(rqstp, fhp); + /* * Mode has already been set by file creation. */ @@ -1467,6 +1475,8 @@ nfsd_create_locked(struct svc_rqst *rqstp, struct svc_fh *fhp, __be32 err; int host_err; + trace_nfsd_create_locked(rqstp, fhp); + dentry = fhp->fh_dentry; dirp = d_inode(dentry); @@ -1557,6 +1567,8 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, __be32 err; int host_err; + trace_nfsd_create(rqstp, fhp); + if (isdotent(fname, flen)) return nfserr_exist; @@ -1609,6 +1621,8 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp) DEFINE_DELAYED_CALL(done); int len; + trace_nfsd_readlink(rqstp, fhp); + err = fh_verify(rqstp, fhp, S_IFLNK, NFSD_MAY_NOP); if (unlikely(err)) return err; @@ -1657,6 +1671,8 @@ nfsd_symlink(struct svc_rqst *rqstp, struct svc_fh *fhp, __be32 err, cerr; int host_err; + trace_nfsd_symlink(rqstp, fhp); + err = nfserr_noent; if (!flen || path[0] == '\0') goto out; @@ -1725,6 +1741,8 @@ nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp, __be32 err; int host_err; + trace_nfsd_link(rqstp, ffhp); + err = fh_verify(rqstp, ffhp, S_IFDIR, NFSD_MAY_CREATE); if (err) goto out; @@ -1842,6 +1860,8 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen, int host_err; bool close_cached = false; + trace_nfsd_rename(rqstp, ffhp); + err = fh_verify(rqstp, ffhp, S_IFDIR, NFSD_MAY_REMOVE); if (err) goto out; @@ -2000,6 +2020,8 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, __be32 err; int host_err; + trace_nfsd_unlink(rqstp, fhp); + err = nfserr_acces; if (!flen || isdotent(fname, flen)) goto out; @@ -2222,6 +2244,8 @@ nfsd_readdir(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t *offsetp, loff_t offset = *offsetp; int may_flags = NFSD_MAY_READ; + trace_nfsd_readdir(rqstp, fhp); + err = nfsd_open(rqstp, fhp, S_IFDIR, may_flags, &file); if (err) goto out; @@ -2288,6 +2312,8 @@ nfsd_statfs(struct svc_rqst *rqstp, struct svc_fh *fhp, struct kstatfs *stat, in { __be32 err; + trace_nfsd_statfs(rqstp, fhp); + err = fh_verify(rqstp, fhp, 0, NFSD_MAY_NOP | access); if (!err) { struct path path = { From patchwork Thu Mar 6 12:38:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14004420 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2C52320F073; Thu, 6 Mar 2025 12:38:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741264718; cv=none; b=RcDYPSGhY542FUA2ygBFn+KIPdrkfg0DkKU5gHB+cEQ5W7k2z89W+1CKU0fO42vd3TqMTVtYxVg5vNGZLjjLXBrwKOMh8rIkvJ9FEunItW4A+uiVjVv98+xyv2oXBjrycWIO05yqrkLeVzKdRhVSU+//FqtYY8HXky/lgG7cY38= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741264718; c=relaxed/simple; bh=dyD83E6xBgj8xEPdWKHMuiwEZpx2QwPrP55hvE4goOM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Zo9QBJOOoTRv7ZFX67QwjVm/nn6r9qffwodlySsMhTNy5tg279twRKDu71mh2EtMyVAHAH0pcX6SInjPPCEcvmHx2aAJTOCuxAvG+I31JFI7XjkuNYvu5yDnbFHoslRDQUTCfABo7LvFIJO1/IDfEZu5V/anOZYWBwundRljBfo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=msxHK9XV; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="msxHK9XV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5713AC4CEE9; Thu, 6 Mar 2025 12:38:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741264717; bh=dyD83E6xBgj8xEPdWKHMuiwEZpx2QwPrP55hvE4goOM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=msxHK9XVTE/iAEB1CIFbZ3xuYCpuVOzc1hQROyhx73F7J5zvYznz9WZDNmnmN3VuN cp+MCgnB7fiHcyeQQMjYPUxpNKIBLu6EK+qJXESr2iTvGa3rNcYaDSbZ3tpxWQ4+pe 2+h41P267DhcbaimMWpY+AiAgrAOyb6s0fiKzrU0CYgIalQRmJPVAUtr6xIvidHses MAbWL/ifA8OQInDxRL46X3ki7DnTPpmDhW8DmLzWFKyMyMmBxkUf9+798XS9yBb1x3 SRUf8jdZZYWGpXpdQsAh0rTwVEOv6psszH/4VO0Wd3o9rZgNOoABLZFaZaEbGnrQHt UlwDITkIQzuuw== From: Jeff Layton Date: Thu, 06 Mar 2025 07:38:16 -0500 Subject: [PATCH 4/4] sunrpc: keep a count of when there are no threads available Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250306-nfsd-tracepoints-v1-4-4405bf41b95f@kernel.org> References: <20250306-nfsd-tracepoints-v1-0-4405bf41b95f@kernel.org> In-Reply-To: <20250306-nfsd-tracepoints-v1-0-4405bf41b95f@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Trond Myklebust , Anna Schumaker , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Sargun Dillon , linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3042; i=jlayton@kernel.org; h=from:subject:message-id; bh=dyD83E6xBgj8xEPdWKHMuiwEZpx2QwPrP55hvE4goOM=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnyZdFnf7gFL693DACTwjc5lS7TCYZ6V0GGpM6p b+7E2endsWJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ8mXRQAKCRAADmhBGVaC FYnJEACXHTkEJe6iR66DsLQGjBAXCPwcK40MVENvsNzhhADmEbTed0FKW2o9iZcIwZmz3MQKo10 NOc6VALWuBSiBw+ygP6x6sIpa8z4q1PV0gfwWCwTj2obQ/R3w82GJJ5jEeZgeklj3gyGdOaIjeZ My4cT5af4xHXEhqHK2AyRBZqxr1THlO/X5WeuXxlfXhdC3dfKznTytd15InNgWPR/XuCEGceILo Uqd9b3+R7vCNjiSZbA3RBxkTmZE43kxAWX3aJ82Mb5sAPOSSAUU7GQZgW/6OniLEGFkx+D53igu oT7F+bOCJcbs8stmAYeXh/YOiTggE7KiEM/P5KthWrqSmi4l08ec/YQ0TTFXY52CMwz/uEajPKn geYlij3FgIEYMKSpcW4B69flPCzMwxhMKXLvPDfrq0ZGeKGp8OiIOUP3QT4j4dfQlVoUsVkPkSH RgE3YY8SDo8IndxL55Oun6KWtElhmWEn281alhqhOVsztjkpfmFWYKJZbNimZuba2EzO+9Wb0lc SIXWJZFkfgUF6Z2gy8UkLSLOu4Zt6s8HAOke8lMA+e91pJ4eegMmtXt4sab2SV8542IuPJNuTo+ M6nt0XgrFK5joSao7n0Nu73oi4lCk5zy11brcXBcp0JBZjBTpVi5Thy5TzRUJpVhlF6V6q/Pq4f OlrKhKhi7AU3z0Q== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 X-Patchwork-Delegate: kuba@kernel.org Add a new percpu counter and pool_stat that can track how often the kernel went to wake up a thread, but they all were busy. Signed-off-by: Jeff Layton --- include/linux/sunrpc/svc.h | 1 + net/sunrpc/svc.c | 4 +++- net/sunrpc/svc_xprt.c | 7 ++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index 74658cca0f38f21e2673c84c7bcae948ff7feea6..179dbfc86887374e1a0a2b669c5839cb622dd3f5 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h @@ -44,6 +44,7 @@ struct svc_pool { struct percpu_counter sp_messages_arrived; struct percpu_counter sp_sockets_queued; struct percpu_counter sp_threads_woken; + struct percpu_counter sp_no_threads_avail; unsigned long sp_flags; } ____cacheline_aligned_in_smp; diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index e7f9c295d13c03bf28a5eeec839fd85e24f5525f..789f08022aec210b6df08036997ef801d3c73ac8 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -545,6 +545,7 @@ __svc_create(struct svc_program *prog, int nprogs, struct svc_stat *stats, percpu_counter_init(&pool->sp_messages_arrived, 0, GFP_KERNEL); percpu_counter_init(&pool->sp_sockets_queued, 0, GFP_KERNEL); percpu_counter_init(&pool->sp_threads_woken, 0, GFP_KERNEL); + percpu_counter_init(&pool->sp_no_threads_avail, 0, GFP_KERNEL); } return serv; @@ -629,6 +630,7 @@ svc_destroy(struct svc_serv **servp) percpu_counter_destroy(&pool->sp_messages_arrived); percpu_counter_destroy(&pool->sp_sockets_queued); percpu_counter_destroy(&pool->sp_threads_woken); + percpu_counter_destroy(&pool->sp_no_threads_avail); } kfree(serv->sv_pools); kfree(serv); @@ -756,7 +758,7 @@ void svc_pool_wake_idle_thread(struct svc_pool *pool) return; } rcu_read_unlock(); - + percpu_counter_inc(&pool->sp_no_threads_avail); } EXPORT_SYMBOL_GPL(svc_pool_wake_idle_thread); diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index ae25405d8bd22672a361d1fd3adfdcebb403f90f..b2c5a74e4609e8f4a3f5f4637dd9b46b40b79324 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c @@ -1451,15 +1451,16 @@ static int svc_pool_stats_show(struct seq_file *m, void *p) struct svc_pool *pool = p; if (p == SEQ_START_TOKEN) { - seq_puts(m, "# pool packets-arrived sockets-enqueued threads-woken threads-timedout\n"); + seq_puts(m, "# pool packets-arrived sockets-enqueued threads-woken threads-timedout no-threads-avail\n"); return 0; } - seq_printf(m, "%u %llu %llu %llu 0\n", + seq_printf(m, "%u %llu %llu %llu 0 %llu\n", pool->sp_id, percpu_counter_sum_positive(&pool->sp_messages_arrived), percpu_counter_sum_positive(&pool->sp_sockets_queued), - percpu_counter_sum_positive(&pool->sp_threads_woken)); + percpu_counter_sum_positive(&pool->sp_threads_woken), + percpu_counter_sum_positive(&pool->sp_no_threads_avail)); return 0; }