Print this page
    
Fix NFS dtrace
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/lib/libdtrace/common/nfs.d
          +++ new/usr/src/lib/libdtrace/common/nfs.d
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
  26   26  /*
  27   27   * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
  28   28   */
  29   29  
  30   30  #pragma D depends_on library ip.d
  31   31  #pragma D depends_on library net.d
  32   32  #pragma D depends_on module nfs
  33   33  
  34   34  inline int T_RDMA = 4;
  35   35  #pragma D binding "1.5" T_RDMA
  36   36  
  37   37  typedef struct nfsv4opinfo {
  38   38          uint64_t noi_xid;       /* unique transation ID */
  39   39          cred_t *noi_cred;       /* credentials for operation */
  40   40          string noi_curpath;     /* current file handle path (if any) */
  41   41          string noi_shrpath;     /* current share path */
  42   42          zoneid_t noi_zoneid;    /* zone identifier */
  43   43  } nfsv4opinfo_t;
  44   44  
  45   45  typedef struct nfsv4cbinfo {
  46   46          string nci_curpath;     /* current file handle path (if any) */
  47   47  } nfsv4cbinfo_t;
  48   48  
  49   49  #pragma D binding "1.5" translator
  50   50  translator conninfo_t < struct svc_req *P > {
  51   51          ci_protocol = P->rq_xprt->xp_xpc.xpc_type == T_RDMA ? "rdma" :
  52   52              P->rq_xprt->xp_xpc.xpc_netid == "tcp" ? "ipv4" :
  53   53              P->rq_xprt->xp_xpc.xpc_netid == "udp" ? "ipv4" :
  54   54              P->rq_xprt->xp_xpc.xpc_netid == "tcp6" ? "ipv6" :
  55   55              P->rq_xprt->xp_xpc.xpc_netid == "udp6" ? "ipv6" :
  56   56              "<unknown>";
  57   57  
  58   58          ci_local = (P->rq_xprt->xp_xpc.xpc_netid == "tcp" ||
  59   59              P->rq_xprt->xp_xpc.xpc_netid == "udp") ?
  60   60              inet_ntoa(&((struct sockaddr_in *)
  61   61              P->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin_addr.S_un.S_addr) :
  62   62              (P->rq_xprt->xp_xpc.xpc_netid == "tcp6" ||
  63   63              P->rq_xprt->xp_xpc.xpc_netid == "udp6") ?
  64   64              inet_ntoa6(&((struct sockaddr_in6 *)
  65   65              P->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin6_addr) :
  66   66              "unknown";
  67   67  
  68   68          ci_remote = (P->rq_xprt->xp_xpc.xpc_netid == "tcp" ||
  69   69              P->rq_xprt->xp_xpc.xpc_netid == "udp") ?
  70   70              inet_ntoa(&((struct sockaddr_in *)
  71   71              P->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin_addr.S_un.S_addr) :
  72   72              (P->rq_xprt->xp_xpc.xpc_netid == "tcp6" ||
  73   73              P->rq_xprt->xp_xpc.xpc_netid == "udp6") ?
  74   74              inet_ntoa6(&((struct sockaddr_in6 *)
  75   75              P->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin6_addr) :
  76   76              "unknown";
  77   77  };
  78   78  
  79   79  #pragma D binding "1.5" translator
  80   80  translator conninfo_t < struct compound_state *P > {
  81   81          ci_protocol = P->req->rq_xprt->xp_xpc.xpc_type == T_RDMA ? "rdma" :
  82   82              P->req->rq_xprt->xp_xpc.xpc_netid == "tcp" ? "ipv4" :
  83   83              P->req->rq_xprt->xp_xpc.xpc_netid == "tcp6" ? "ipv6" :
  84   84              "<unknown>";
  85   85  
  86   86          ci_local = (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp") ?
  87   87              inet_ntoa(&((struct sockaddr_in *)
  88   88              P->req->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin_addr.S_un.S_addr) :
  89   89              (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp6") ?
  90   90              inet_ntoa6(&((struct sockaddr_in6 *)
  91   91              P->req->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin6_addr) :
  92   92              "unknown";
  93   93  
  94   94          ci_remote = (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp") ?
  95   95              inet_ntoa(&((struct sockaddr_in *)
  96   96              P->req->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin_addr.S_un.S_addr) :
  97   97              (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp6") ?
  98   98              inet_ntoa6(&((struct sockaddr_in6 *)
  99   99              P->req->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin6_addr) :
 100  100              "unknown";
  
    | 
      ↓ open down ↓ | 
    100 lines elided | 
    
      ↑ open up ↑ | 
  
 101  101  
 102  102  };
 103  103  
 104  104  #pragma D binding "1.5" translator
 105  105  translator nfsv4opinfo_t < struct compound_state *P > {
 106  106          noi_xid = P->req->rq_xprt->xp_xid;
 107  107          noi_cred = P->basecr;
 108  108          noi_curpath = (P->vp == NULL) ? "<unknown>" : P->vp->v_path;
 109  109          noi_shrpath = (P->exi == NULL || P->exi->exi_export.ex_path == NULL) ?
 110  110              "<unknown>" : P->exi->exi_export.ex_path;
 111      -        noi_zoneid = (P->exi == NULL) ? -1 : P->exi->exi_zoneid;
      111 +        noi_zoneid = (P->exi == NULL) ? -1 : P->exi->exi_zone->zone_id;
 112  112  };
 113  113  
 114  114  typedef struct nfsv3opinfo {
 115  115          uint64_t noi_xid;       /* unique transation ID */
 116  116          cred_t *noi_cred;       /* credentials for operation */
 117  117          string noi_curpath;     /* current file handle path (if any) */
 118  118          string noi_shrpath;     /* current share path */
 119  119          zoneid_t noi_zoneid;    /* zone identifier */
 120  120  } nfsv3opinfo_t;
 121  121  
 122  122  typedef struct nfsv3oparg nfsv3oparg_t;
 123  123  
  
    | 
      ↓ open down ↓ | 
    2 lines elided | 
    
      ↑ open up ↑ | 
  
 124  124  #pragma D binding "1.5" translator
 125  125  translator nfsv3opinfo_t < nfsv3oparg_t *P > {
 126  126          noi_xid = ((struct svc_req *)arg0)->rq_xprt->xp_xid;
 127  127          noi_cred = (cred_t *)arg1;
 128  128          noi_curpath = (arg2 == 0 || ((vnode_t *)arg2)->v_path == NULL) ?
 129  129              "<unknown>" : ((vnode_t *)arg2)->v_path;
 130  130          noi_shrpath =
 131  131              (arg3 == 0 || ((exportinfo_t *)arg3)->exi_export.ex_path == NULL) ?
 132  132              "<unknown>" : ((exportinfo_t *)arg3)->exi_export.ex_path;
 133  133          noi_zoneid =
 134      -            (arg3 == 0) ? -1 : ((exportinfo_t *)arg3)->exi_zoneid;
      134 +            (arg3 == 0) ? -1 : ((exportinfo_t *)arg3)->exi_zone->zone_id;
 135  135  };
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX