aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2021-11-02 17:28:37 -0400
committerChuck Lever <chuck.lever@oracle.com>2022-12-14 09:48:43 -0500
commitd2c0a06f656f839955dcb24c15c37a543231fb49 (patch)
tree3cdae4872062ab6e6b8285b6cb1d62bcb15ae925
parent154aa123ba2d7559651013e211d4913c7d8f7f2b (diff)
NFSD: Add tracepoints to record NFSv4 WRITE arguments and resultstopic-xdr-tracepoints
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
-rw-r--r--fs/nfsd/nfs4xdr.c5
-rw-r--r--fs/nfsd/xdr4trace.h58
2 files changed, 62 insertions, 1 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 9a660c22dc87b8..f3421d058ee097 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -1638,6 +1638,7 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write)
write->wr_bytes_written = 0;
write->wr_how_written = 0;
memset(&write->wr_verifier, 0, sizeof(write->wr_verifier));
+ trace_dec_write4args(argp, write);
return nfs_ok;
}
@@ -4895,7 +4896,9 @@ nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_w
*p++ = cpu_to_be32(write->wr_how_written);
p = xdr_encode_opaque_fixed(p, write->wr_verifier.data,
NFS4_VERIFIER_SIZE);
- return 0;
+
+ trace_enc_write4resok(resp, write);
+ return nfs_ok;
}
static __be32
diff --git a/fs/nfsd/xdr4trace.h b/fs/nfsd/xdr4trace.h
index 5d34a0b5bd999c..8825436b663c58 100644
--- a/fs/nfsd/xdr4trace.h
+++ b/fs/nfsd/xdr4trace.h
@@ -1919,6 +1919,36 @@ TRACE_EVENT(dec_verify4args,
)
);
+TRACE_EVENT(dec_write4args,
+ TP_PROTO(
+ const struct nfsd4_compoundargs *argp,
+ const struct nfsd4_write *write
+ ),
+ TP_ARGS(argp, write),
+ TP_STRUCT__entry(
+ TRACE_SVC_XDR_CMPD_FIELDS
+ TRACE_NFS4_STATEID_FIELDS
+
+ __field(u32, count)
+ __field(u64, offset)
+ __field(unsigned long, stable)
+ ),
+ TP_fast_assign(
+ TRACE_SVC_XDR_CMPD_ARG_ASSIGNS(argp);
+ TRACE_NFS4_STATEID_ASSIGNS(&write->wr_stateid);
+
+ __entry->count = write->wr_buflen;
+ __entry->offset = write->wr_offset;
+ __entry->stable = write->wr_stable_how;
+ ),
+ TP_printk(TRACE_XDR_CMPD_FORMAT TRACE_NFS4_STATEID_FORMAT
+ "count=%u offset=%llu stable=%s",
+ TRACE_XDR_CMPD_VARARGS, TRACE_NFS4_STATEID_VARARGS,
+ __entry->count, __entry->offset,
+ show_nfs_stable_how(__entry->stable)
+ )
+);
+
/**
** Server-side result encoding tracepoints
@@ -3006,6 +3036,34 @@ TRACE_EVENT(enc_test_stateid4resok,
)
);
+TRACE_EVENT(enc_write4resok,
+ TP_PROTO(
+ const struct nfsd4_compoundres *resp,
+ const struct nfsd4_write *write
+ ),
+ TP_ARGS(resp, write),
+ TP_STRUCT__entry(
+ TRACE_SVC_XDR_CMPD_FIELDS
+ TRACE_NFS4_VERIFIER_FIELD
+
+ __field(u32, count)
+ __field(unsigned long, committed)
+ ),
+ TP_fast_assign(
+ TRACE_SVC_XDR_CMPD_RES_ASSIGNS(resp);
+ TRACE_NFS4_VERIFIER_ASSIGN(write->wr_verifier);
+
+ __entry->count = write->wr_bytes_written;
+ __entry->committed = write->wr_how_written;
+ ),
+ TP_printk(TRACE_XDR_CMPD_FORMAT
+ "count=%u committed=%s " TRACE_NFS4_VERIFIER_FORMAT,
+ TRACE_XDR_CMPD_VARARGS, __entry->count,
+ show_nfs_stable_how(__entry->committed),
+ TRACE_NFS4_VERIFIER_VARARG
+ )
+);
+
/**
** FATTR4 tracepoints