#include "xdr3.h"
 #include "vfs.h"
 #include "filecache.h"
+#include "trace.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_PROC
 
        __be32 status;
        int host_err;
 
+       trace_nfsd_vfs_create(rqstp, fhp, S_IFREG, argp->name, argp->len);
+
        if (isdotent(argp->name, argp->len))
                return nfserr_exist;
        if (!(iap->ia_valid & ATTR_MODE))
 
        )
 );
 
+TRACE_EVENT(nfsd_vfs_create,
+       TP_PROTO(
+               const struct svc_rqst *rqstp,
+               const struct svc_fh *fhp,
+               umode_t type,
+               const char *name,
+               unsigned int len
+       ),
+       TP_ARGS(rqstp, fhp, type, name, len),
+       TP_STRUCT__entry(
+               NFSD_TRACE_PROC_CALL_FIELDS(rqstp)
+               __field(u32, fh_hash)
+               __field(umode_t, type)
+               __string_len(name, name, len)
+       ),
+       TP_fast_assign(
+               NFSD_TRACE_PROC_CALL_ASSIGNMENTS(rqstp);
+               __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
+               __entry->type = type;
+               __assign_str(name);
+       ),
+       TP_printk("xid=0x%08x fh_hash=0x%08x type=%s name=%s",
+               __entry->xid, __entry->fh_hash,
+               show_fs_file_type(__entry->type), __get_str(name)
+       )
+);
+
 #endif /* _NFSD_TRACE_H */
 
 #undef TRACE_INCLUDE_PATH
 
        __be32          err;
        int             host_err;
 
+       trace_nfsd_vfs_create(rqstp, fhp, type, fname, flen);
+
        if (isdotent(fname, flen))
                return nfserr_exist;