On Tue, Sep 09, 2008 at 02:56:45PM -0500, Danhua Shao wrote:
> In lib/libdtrace/common/nfs.d, the following piece of code defines a 
> type translation in sdt.
> 
> typedef struct nfsv3oparg nfsv3oparg_t;
> 
> #pragma D binding "1.5" translator
> translator nfsv3opinfo_t < nfsv3oparg_t *P > {
>         noi_xid = ((struct svc_req *)arg0)->rq_xprt->xp_xid;
>         noi_cred = (cred_t *)arg1;
>         noi_curpath = (arg2 == 0 || ((vnode_t *)arg2)->v_path == NULL) ?
>             "<unknown>" : ((vnode_t *)arg2)->v_path;
> };
> 
> However, I can not find the definition of "struct nfsv3oparg" in usr/src.
> 
> 1) Does this type is just a dummy type that has not been really defined?
> 
> 2) Inside the translator, arg0, arg1, arg2 are refer to the first 3 
> arguments defined in macro DTRACE_NFSV3_3() or DTRACE_NFSV3_4() ?

You've stumbled onto something of a hack that we used to make interacting with
the provider a bit nicer. The nfsv3oparg_t is a synthetic type that you can
see at work in sdt_subr.c in the kernel. For both the 3 and 4 arguments
versions of the macros, the first three arguments are the same (struct
svc_req *, cred_t *, vnode_t *).

Adam

-- 
Adam Leventhal, Fishworks                     http://blogs.sun.com/ahl

Reply via email to