nfsd: Add tracepoints for exp_find_key() and exp_get_by_name()
authorTrond Myklebust <trondmy@gmail.com>
Sun, 1 Mar 2020 23:21:40 +0000 (18:21 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 16 Mar 2020 16:04:33 +0000 (12:04 -0400)
Add tracepoints for upcalls.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/export.c
fs/nfsd/trace.h

index 15422c951fd1603d1fbd56c0dcf5c0dba8dcfb91..e867db0bb3806e9e4e6dff8c6ab0748111247266 100644 (file)
@@ -23,6 +23,7 @@
 #include "netns.h"
 #include "pnfs.h"
 #include "filecache.h"
+#include "trace.h"
 
 #define NFSDDBG_FACILITY       NFSDDBG_EXPORT
 
@@ -832,8 +833,10 @@ exp_find_key(struct cache_detail *cd, struct auth_domain *clp, int fsid_type,
        if (ek == NULL)
                return ERR_PTR(-ENOMEM);
        err = cache_check(cd, &ek->h, reqp);
-       if (err)
+       if (err) {
+               trace_nfsd_exp_find_key(&key, err);
                return ERR_PTR(err);
+       }
        return ek;
 }
 
@@ -855,8 +858,10 @@ exp_get_by_name(struct cache_detail *cd, struct auth_domain *clp,
        if (exp == NULL)
                return ERR_PTR(-ENOMEM);
        err = cache_check(cd, &exp->h, reqp);
-       if (err)
+       if (err) {
+               trace_nfsd_exp_get_by_name(&key, err);
                return ERR_PTR(err);
+       }
        return exp;
 }
 
index 9abd1591a841cba1fb36b68b2ae48a1d203acabb..3b9277d7b5f2f9a7d9902fd23c10e2aba856310f 100644 (file)
@@ -9,6 +9,7 @@
 #define _NFSD_TRACE_H
 
 #include <linux/tracepoint.h>
+#include "export.h"
 #include "nfsfh.h"
 
 TRACE_EVENT(nfsd_compound,
@@ -80,6 +81,51 @@ DEFINE_EVENT(nfsd_fh_err_class, nfsd_##name, \
 DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport);
 DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle);
 
+TRACE_EVENT(nfsd_exp_find_key,
+       TP_PROTO(const struct svc_expkey *key,
+                int status),
+       TP_ARGS(key, status),
+       TP_STRUCT__entry(
+               __field(int, fsidtype)
+               __array(u32, fsid, 6)
+               __string(auth_domain, key->ek_client->name)
+               __field(int, status)
+       ),
+       TP_fast_assign(
+               __entry->fsidtype = key->ek_fsidtype;
+               memcpy(__entry->fsid, key->ek_fsid, 4*6);
+               __assign_str(auth_domain, key->ek_client->name);
+               __entry->status = status;
+       ),
+       TP_printk("fsid=%x::%s domain=%s status=%d",
+               __entry->fsidtype,
+               __print_array(__entry->fsid, 6, 4),
+               __get_str(auth_domain),
+               __entry->status
+       )
+);
+
+TRACE_EVENT(nfsd_exp_get_by_name,
+       TP_PROTO(const struct svc_export *key,
+                int status),
+       TP_ARGS(key, status),
+       TP_STRUCT__entry(
+               __string(path, key->ex_path.dentry->d_name.name)
+               __string(auth_domain, key->ex_client->name)
+               __field(int, status)
+       ),
+       TP_fast_assign(
+               __assign_str(path, key->ex_path.dentry->d_name.name);
+               __assign_str(auth_domain, key->ex_client->name);
+               __entry->status = status;
+       ),
+       TP_printk("path=%s domain=%s status=%d",
+               __get_str(path),
+               __get_str(auth_domain),
+               __entry->status
+       )
+);
+
 DECLARE_EVENT_CLASS(nfsd_io_class,
        TP_PROTO(struct svc_rqst *rqstp,
                 struct svc_fh  *fhp,