Print this page
nfssrv: nfsstat reports zeroed data in zone
*** 193,205 ****
static void nfs_srv_shutdown_all(int);
static void rfs4_server_start(nfs_globals_t *, int);
static void nullfree(void);
static void rfs_dispatch(struct svc_req *, SVCXPRT *);
static void acl_dispatch(struct svc_req *, SVCXPRT *);
- static void common_dispatch(struct svc_req *, SVCXPRT *,
- rpcvers_t, rpcvers_t, char *,
- struct rpc_disptable *);
static int checkauth(struct exportinfo *, struct svc_req *, cred_t *, int,
bool_t, bool_t *);
static char *client_name(struct svc_req *req);
static char *client_addr(struct svc_req *req, char *buf);
extern int sec_svc_getcred(struct svc_req *, cred_t *cr, char **, int *);
--- 193,202 ----
*** 1332,1348 ****
};
static struct rpc_disptable rfs_disptable[] = {
{sizeof (rfsdisptab_v2) / sizeof (rfsdisptab_v2[0]),
rfscallnames_v2,
! &rfsproccnt_v2_ptr, rfsdisptab_v2},
{sizeof (rfsdisptab_v3) / sizeof (rfsdisptab_v3[0]),
rfscallnames_v3,
! &rfsproccnt_v3_ptr, rfsdisptab_v3},
{sizeof (rfsdisptab_v4) / sizeof (rfsdisptab_v4[0]),
rfscallnames_v4,
! &rfsproccnt_v4_ptr, rfsdisptab_v4},
};
/*
* If nfs_portmon is set, then clients are required to use privileged
* ports (ports < IPPORT_RESERVED) in order to get NFS services.
--- 1329,1345 ----
};
static struct rpc_disptable rfs_disptable[] = {
{sizeof (rfsdisptab_v2) / sizeof (rfsdisptab_v2[0]),
rfscallnames_v2,
! rfsdisptab_v2},
{sizeof (rfsdisptab_v3) / sizeof (rfsdisptab_v3[0]),
rfscallnames_v3,
! rfsdisptab_v3},
{sizeof (rfsdisptab_v4) / sizeof (rfsdisptab_v4[0]),
rfscallnames_v4,
! rfsdisptab_v4},
};
/*
* If nfs_portmon is set, then clients are required to use privileged
* ports (ports < IPPORT_RESERVED) in order to get NFS services.
*** 1460,1470 ****
return (TRUE);
}
return (FALSE);
}
-
static void
common_dispatch(struct svc_req *req, SVCXPRT *xprt, rpcvers_t min_vers,
rpcvers_t max_vers, char *pgmname, struct rpc_disptable *disptable)
{
int which;
--- 1457,1466 ----
*** 1497,1509 ****
--- 1493,1513 ----
struct exportinfo *nfslog_exi = NULL;
char **procnames;
char cbuf[INET6_ADDRSTRLEN]; /* to hold both IPv4 and IPv6 addr */
bool_t ro = FALSE;
nfs_export_t *ne = nfs_get_export();
+ nfs_globals_t *ng = ne->ne_globals;
+ kstat_named_t *svstat, *procstat;
+ ASSERT(req->rq_prog == NFS_PROGRAM || req->rq_prog == NFS_ACL_PROGRAM);
+
vers = req->rq_vers;
+ svstat = ng->svstat[req->rq_vers];
+ procstat = (req->rq_prog == NFS_PROGRAM) ?
+ ng->rfsproccnt[vers] : ng->aclproccnt[vers];
+
if (vers < min_vers || vers > max_vers) {
svcerr_progvers(req->rq_xprt, min_vers, max_vers);
error++;
cmn_err(CE_NOTE, "%s: bad version number %u", pgmname, vers);
goto done;
*** 1515,1525 ****
svcerr_noproc(req->rq_xprt);
error++;
goto done;
}
! (*(disptable[(int)vers].dis_proccntp))[which].value.ui64++;
disp = &disptable[(int)vers].dis_table[which];
procnames = disptable[(int)vers].dis_procnames;
auth_flavor = req->rq_cred.oa_flavor;
--- 1519,1529 ----
svcerr_noproc(req->rq_xprt);
error++;
goto done;
}
! procstat[which].value.ui64++;
disp = &disptable[(int)vers].dis_table[which];
procnames = disptable[(int)vers].dis_procnames;
auth_flavor = req->rq_cred.oa_flavor;
*** 1837,1849 ****
}
if (exi != NULL)
exi_rele(exi);
! global_svstat_ptr[req->rq_vers][NFS_BADCALLS].value.ui64 += error;
!
! global_svstat_ptr[req->rq_vers][NFS_CALLS].value.ui64++;
}
static void
rfs_dispatch(struct svc_req *req, SVCXPRT *xprt)
{
--- 1841,1852 ----
}
if (exi != NULL)
exi_rele(exi);
! svstat[NFS_BADCALLS].value.ui64 += error;
! svstat[NFS_CALLS].value.ui64++;
}
static void
rfs_dispatch(struct svc_req *req, SVCXPRT *xprt)
{
*** 1962,1975 ****
};
static struct rpc_disptable acl_disptable[] = {
{sizeof (acldisptab_v2) / sizeof (acldisptab_v2[0]),
aclcallnames_v2,
! &aclproccnt_v2_ptr, acldisptab_v2},
{sizeof (acldisptab_v3) / sizeof (acldisptab_v3[0]),
aclcallnames_v3,
! &aclproccnt_v3_ptr, acldisptab_v3},
};
static void
acl_dispatch(struct svc_req *req, SVCXPRT *xprt)
{
--- 1965,1978 ----
};
static struct rpc_disptable acl_disptable[] = {
{sizeof (acldisptab_v2) / sizeof (acldisptab_v2[0]),
aclcallnames_v2,
! acldisptab_v2},
{sizeof (acldisptab_v3) / sizeof (acldisptab_v3[0]),
aclcallnames_v3,
! acldisptab_v3},
};
static void
acl_dispatch(struct svc_req *req, SVCXPRT *xprt)
{
*** 2647,2656 ****
--- 2650,2660 ----
/*
* Order here is important.
* export init must precede srv init calls.
*/
nfs_export_zone_init(ng);
+ rfs_stat_zone_init(ng);
rfs_srv_zone_init(ng);
rfs3_srv_zone_init(ng);
rfs4_srv_zone_init(ng);
nfsauth_zone_init(ng);
*** 2695,2704 ****
--- 2699,2709 ----
*/
nfsauth_zone_fini(ng);
rfs4_srv_zone_fini(ng);
rfs3_srv_zone_fini(ng);
rfs_srv_zone_fini(ng);
+ rfs_stat_zone_fini(ng);
nfs_export_zone_fini(ng);
mutex_destroy(&ng->nfs_server_upordown_lock);
cv_destroy(&ng->nfs_server_upordown_cv);
mutex_destroy(&ng->rdma_wait_mutex);