]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - fs/nfsd/trace.h
Merge tag 'csky-for-linus-5.7-rc1' of git://github.com/c-sky/csky-linux
[mirror_ubuntu-jammy-kernel.git] / fs / nfsd / trace.h
index 06dd0d33704922c9dac70615cd7b301f0278f487..78c574251c608bf56c841e0cd80a47bb22a47834 100644 (file)
@@ -9,6 +9,7 @@
 #define _NFSD_TRACE_H
 
 #include <linux/tracepoint.h>
+#include "export.h"
 #include "nfsfh.h"
 
 TRACE_EVENT(nfsd_compound,
@@ -50,6 +51,127 @@ TRACE_EVENT(nfsd_compound_status,
                __get_str(name), __entry->status)
 )
 
+DECLARE_EVENT_CLASS(nfsd_fh_err_class,
+       TP_PROTO(struct svc_rqst *rqstp,
+                struct svc_fh  *fhp,
+                int            status),
+       TP_ARGS(rqstp, fhp, status),
+       TP_STRUCT__entry(
+               __field(u32, xid)
+               __field(u32, fh_hash)
+               __field(int, status)
+       ),
+       TP_fast_assign(
+               __entry->xid = be32_to_cpu(rqstp->rq_xid);
+               __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
+               __entry->status = status;
+       ),
+       TP_printk("xid=0x%08x fh_hash=0x%08x status=%d",
+                 __entry->xid, __entry->fh_hash,
+                 __entry->status)
+)
+
+#define DEFINE_NFSD_FH_ERR_EVENT(name)         \
+DEFINE_EVENT(nfsd_fh_err_class, nfsd_##name,   \
+       TP_PROTO(struct svc_rqst *rqstp,        \
+                struct svc_fh  *fhp,           \
+                int            status),        \
+       TP_ARGS(rqstp, fhp, status))
+
+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_expkey_update,
+       TP_PROTO(const struct svc_expkey *key, const char *exp_path),
+       TP_ARGS(key, exp_path),
+       TP_STRUCT__entry(
+               __field(int, fsidtype)
+               __array(u32, fsid, 6)
+               __string(auth_domain, key->ek_client->name)
+               __string(path, exp_path)
+               __field(bool, cache)
+       ),
+       TP_fast_assign(
+               __entry->fsidtype = key->ek_fsidtype;
+               memcpy(__entry->fsid, key->ek_fsid, 4*6);
+               __assign_str(auth_domain, key->ek_client->name);
+               __assign_str(path, exp_path);
+               __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags);
+       ),
+       TP_printk("fsid=%x::%s domain=%s path=%s cache=%s",
+               __entry->fsidtype,
+               __print_array(__entry->fsid, 6, 4),
+               __get_str(auth_domain),
+               __get_str(path),
+               __entry->cache ? "pos" : "neg"
+       )
+);
+
+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
+       )
+);
+
+TRACE_EVENT(nfsd_export_update,
+       TP_PROTO(const struct svc_export *key),
+       TP_ARGS(key),
+       TP_STRUCT__entry(
+               __string(path, key->ex_path.dentry->d_name.name)
+               __string(auth_domain, key->ex_client->name)
+               __field(bool, cache)
+       ),
+       TP_fast_assign(
+               __assign_str(path, key->ex_path.dentry->d_name.name);
+               __assign_str(auth_domain, key->ex_client->name);
+               __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags);
+       ),
+       TP_printk("path=%s domain=%s cache=%s",
+               __get_str(path),
+               __get_str(auth_domain),
+               __entry->cache ? "pos" : "neg"
+       )
+);
+
 DECLARE_EVENT_CLASS(nfsd_io_class,
        TP_PROTO(struct svc_rqst *rqstp,
                 struct svc_fh  *fhp,