diff options
author | Rick Macklem <rmacklem@FreeBSD.org> | 2016-10-03 23:17:57 +0000 |
---|---|---|
committer | Rick Macklem <rmacklem@FreeBSD.org> | 2016-10-03 23:17:57 +0000 |
commit | e37691dd1a1d8407d5b2a172e62b1d7b47f074ed (patch) | |
tree | 46fbc16aa52b7b7bec56dc32b80dd021e3c0cd10 | |
parent | 17fce06cdce2c857bf6b89c982fdabe7997f0100 (diff) |
Notes
-rw-r--r-- | sys/fs/nfs/nfs_commonkrpc.c | 12 | ||||
-rw-r--r-- | sys/fs/nfs/nfs_commonport.c | 208 | ||||
-rw-r--r-- | sys/fs/nfs/nfsport.h | 102 | ||||
-rw-r--r-- | sys/fs/nfs/nfsproto.h | 4 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs_clbio.c | 18 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs_clcomsubs.c | 6 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs_clstate.c | 58 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs_clsubs.c | 6 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs_clvfsops.c | 1 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs_clvnops.c | 26 | ||||
-rw-r--r-- | sys/fs/nfsserver/nfs_nfsdcache.c | 36 | ||||
-rw-r--r-- | sys/fs/nfsserver/nfs_nfsdport.c | 5 | ||||
-rw-r--r-- | sys/fs/nfsserver/nfs_nfsdsocket.c | 103 | ||||
-rw-r--r-- | sys/fs/nfsserver/nfs_nfsdstate.c | 50 |
14 files changed, 196 insertions, 439 deletions
diff --git a/sys/fs/nfs/nfs_commonkrpc.c b/sys/fs/nfs/nfs_commonkrpc.c index cf7b59f9c2bf..1c0189f3a1bb 100644 --- a/sys/fs/nfs/nfs_commonkrpc.c +++ b/sys/fs/nfs/nfs_commonkrpc.c @@ -90,7 +90,7 @@ uint32_t nfscl_nfs4_done_probes[NFSV41_NPROCS + 1]; NFSSTATESPINLOCK; NFSREQSPINLOCK; NFSDLOCKMUTEX; -extern struct nfsstatsv1 nfsstatsv1; +extern struct nfsstats newnfsstats; extern struct nfsreqhead nfsd_reqq; extern int nfscl_ticks; extern void (*ncl_call_invalcaches)(struct vnode *); @@ -643,7 +643,7 @@ newnfs_request(struct nfsrv_descript *nd, struct nfsmount *nmp, procnum = NFSV4PROC_COMPOUND; if (nmp != NULL) { - NFSINCRGLOBAL(nfsstatsv1.rpcrequests); + NFSINCRGLOBAL(newnfsstats.rpcrequests); /* Map the procnum to the old NFSv2 one, as required. */ if ((nd->nd_flag & ND_NFSV2) != 0) { @@ -763,18 +763,18 @@ tryagain: if (stat == RPC_SUCCESS) { error = 0; } else if (stat == RPC_TIMEDOUT) { - NFSINCRGLOBAL(nfsstatsv1.rpctimeouts); + NFSINCRGLOBAL(newnfsstats.rpctimeouts); error = ETIMEDOUT; } else if (stat == RPC_VERSMISMATCH) { - NFSINCRGLOBAL(nfsstatsv1.rpcinvalid); + NFSINCRGLOBAL(newnfsstats.rpcinvalid); error = EOPNOTSUPP; } else if (stat == RPC_PROGVERSMISMATCH) { - NFSINCRGLOBAL(nfsstatsv1.rpcinvalid); + NFSINCRGLOBAL(newnfsstats.rpcinvalid); error = EPROTONOSUPPORT; } else if (stat == RPC_INTR) { error = EINTR; } else { - NFSINCRGLOBAL(nfsstatsv1.rpcinvalid); + NFSINCRGLOBAL(newnfsstats.rpcinvalid); error = EACCES; } if (error) { diff --git a/sys/fs/nfs/nfs_commonport.c b/sys/fs/nfs/nfs_commonport.c index 1ed8a2a3cf31..85738afa5b3b 100644 --- a/sys/fs/nfs/nfs_commonport.c +++ b/sys/fs/nfs/nfs_commonport.c @@ -58,7 +58,7 @@ extern void (*nfsd_call_recall)(struct vnode *, int, struct ucred *, extern int nfsrv_useacl; struct mount nfsv4root_mnt; int newnfs_numnfsd = 0; -struct nfsstatsv1 nfsstatsv1; +struct nfsstats newnfsstats; int nfs_numnfscbd = 0; int nfscl_debuglevel = 0; char nfsv4_callbackaddr[INET6_ADDRSTRLEN]; @@ -69,7 +69,6 @@ void (*ncl_call_invalcaches)(struct vnode *) = NULL; static int nfs_realign_test; static int nfs_realign_count; -static struct ext_nfsstats oldnfsstats; SYSCTL_NODE(_vfs, OID_AUTO, nfs, CTLFLAG_RW, 0, "New NFS filesystem"); SYSCTL_INT(_vfs_nfs, OID_AUTO, realign_test, CTLFLAG_RW, &nfs_realign_test, @@ -448,12 +447,9 @@ nfssvc_nfscommon(struct thread *td, struct nfssvc_args *uap) static int nfssvc_call(struct thread *p, struct nfssvc_args *uap, struct ucred *cred) { - int error = EINVAL, i, j; + int error = EINVAL; struct nfsd_idargs nid; struct nfsd_oidargs onid; - struct { - int vers; /* Just the first field of nfsstats. */ - } nfsstatver; if (uap->flag & NFSSVC_IDNAME) { if ((uap->flag & NFSSVC_NEWSTRUCT) != 0) @@ -477,157 +473,63 @@ nfssvc_call(struct thread *p, struct nfssvc_args *uap, struct ucred *cred) error = nfssvc_idname(&nid); goto out; } else if (uap->flag & NFSSVC_GETSTATS) { - if ((uap->flag & NFSSVC_NEWSTRUCT) == 0) { - /* Copy fields to the old ext_nfsstat structure. */ - oldnfsstats.attrcache_hits = - nfsstatsv1.attrcache_hits; - oldnfsstats.attrcache_misses = - nfsstatsv1.attrcache_misses; - oldnfsstats.lookupcache_hits = - nfsstatsv1.lookupcache_hits; - oldnfsstats.lookupcache_misses = - nfsstatsv1.lookupcache_misses; - oldnfsstats.direofcache_hits = - nfsstatsv1.direofcache_hits; - oldnfsstats.direofcache_misses = - nfsstatsv1.direofcache_misses; - oldnfsstats.accesscache_hits = - nfsstatsv1.accesscache_hits; - oldnfsstats.accesscache_misses = - nfsstatsv1.accesscache_misses; - oldnfsstats.biocache_reads = - nfsstatsv1.biocache_reads; - oldnfsstats.read_bios = - nfsstatsv1.read_bios; - oldnfsstats.read_physios = - nfsstatsv1.read_physios; - oldnfsstats.biocache_writes = - nfsstatsv1.biocache_writes; - oldnfsstats.write_bios = - nfsstatsv1.write_bios; - oldnfsstats.write_physios = - nfsstatsv1.write_physios; - oldnfsstats.biocache_readlinks = - nfsstatsv1.biocache_readlinks; - oldnfsstats.readlink_bios = - nfsstatsv1.readlink_bios; - oldnfsstats.biocache_readdirs = - nfsstatsv1.biocache_readdirs; - oldnfsstats.readdir_bios = - nfsstatsv1.readdir_bios; - for (i = 0; i < NFSV4_NPROCS; i++) - oldnfsstats.rpccnt[i] = nfsstatsv1.rpccnt[i]; - oldnfsstats.rpcretries = nfsstatsv1.rpcretries; - for (i = 0; i < NFSV4OP_NOPS; i++) - oldnfsstats.srvrpccnt[i] = - nfsstatsv1.srvrpccnt[i]; - for (i = NFSV42_NOPS, j = NFSV4OP_NOPS; - i < NFSV42_NOPS + NFSV4OP_FAKENOPS; i++, j++) - oldnfsstats.srvrpccnt[j] = - nfsstatsv1.srvrpccnt[i]; - oldnfsstats.srvrpc_errs = nfsstatsv1.srvrpc_errs; - oldnfsstats.srv_errs = nfsstatsv1.srv_errs; - oldnfsstats.rpcrequests = nfsstatsv1.rpcrequests; - oldnfsstats.rpctimeouts = nfsstatsv1.rpctimeouts; - oldnfsstats.rpcunexpected = nfsstatsv1.rpcunexpected; - oldnfsstats.rpcinvalid = nfsstatsv1.rpcinvalid; - oldnfsstats.srvcache_inproghits = - nfsstatsv1.srvcache_inproghits; - oldnfsstats.srvcache_idemdonehits = - nfsstatsv1.srvcache_idemdonehits; - oldnfsstats.srvcache_nonidemdonehits = - nfsstatsv1.srvcache_nonidemdonehits; - oldnfsstats.srvcache_misses = - nfsstatsv1.srvcache_misses; - oldnfsstats.srvcache_tcppeak = - nfsstatsv1.srvcache_tcppeak; - oldnfsstats.srvcache_size = nfsstatsv1.srvcache_size; - oldnfsstats.srvclients = nfsstatsv1.srvclients; - oldnfsstats.srvopenowners = nfsstatsv1.srvopenowners; - oldnfsstats.srvopens = nfsstatsv1.srvopens; - oldnfsstats.srvlockowners = nfsstatsv1.srvlockowners; - oldnfsstats.srvlocks = nfsstatsv1.srvlocks; - oldnfsstats.srvdelegates = nfsstatsv1.srvdelegates; - for (i = 0; i < NFSV4OP_CBNOPS; i++) - oldnfsstats.cbrpccnt[i] = - nfsstatsv1.cbrpccnt[i]; - oldnfsstats.clopenowners = nfsstatsv1.clopenowners; - oldnfsstats.clopens = nfsstatsv1.clopens; - oldnfsstats.cllockowners = nfsstatsv1.cllockowners; - oldnfsstats.cllocks = nfsstatsv1.cllocks; - oldnfsstats.cldelegates = nfsstatsv1.cldelegates; - oldnfsstats.cllocalopenowners = - nfsstatsv1.cllocalopenowners; - oldnfsstats.cllocalopens = nfsstatsv1.cllocalopens; - oldnfsstats.cllocallockowners = - nfsstatsv1.cllocallockowners; - oldnfsstats.cllocallocks = nfsstatsv1.cllocallocks; - error = copyout(&oldnfsstats, uap->argp, - sizeof (oldnfsstats)); - } else { - error = copyin(uap->argp, &nfsstatver, - sizeof(nfsstatver)); - if (error == 0 && nfsstatver.vers != NFSSTATS_V1) - error = EPERM; - if (error == 0) - error = copyout(&nfsstatsv1, uap->argp, - sizeof (nfsstatsv1)); - } + error = copyout(&newnfsstats, + CAST_USER_ADDR_T(uap->argp), sizeof (newnfsstats)); if (error == 0) { if ((uap->flag & NFSSVC_ZEROCLTSTATS) != 0) { - nfsstatsv1.attrcache_hits = 0; - nfsstatsv1.attrcache_misses = 0; - nfsstatsv1.lookupcache_hits = 0; - nfsstatsv1.lookupcache_misses = 0; - nfsstatsv1.direofcache_hits = 0; - nfsstatsv1.direofcache_misses = 0; - nfsstatsv1.accesscache_hits = 0; - nfsstatsv1.accesscache_misses = 0; - nfsstatsv1.biocache_reads = 0; - nfsstatsv1.read_bios = 0; - nfsstatsv1.read_physios = 0; - nfsstatsv1.biocache_writes = 0; - nfsstatsv1.write_bios = 0; - nfsstatsv1.write_physios = 0; - nfsstatsv1.biocache_readlinks = 0; - nfsstatsv1.readlink_bios = 0; - nfsstatsv1.biocache_readdirs = 0; - nfsstatsv1.readdir_bios = 0; - nfsstatsv1.rpcretries = 0; - nfsstatsv1.rpcrequests = 0; - nfsstatsv1.rpctimeouts = 0; - nfsstatsv1.rpcunexpected = 0; - nfsstatsv1.rpcinvalid = 0; - bzero(nfsstatsv1.rpccnt, - sizeof(nfsstatsv1.rpccnt)); + newnfsstats.attrcache_hits = 0; + newnfsstats.attrcache_misses = 0; + newnfsstats.lookupcache_hits = 0; + newnfsstats.lookupcache_misses = 0; + newnfsstats.direofcache_hits = 0; + newnfsstats.direofcache_misses = 0; + newnfsstats.accesscache_hits = 0; + newnfsstats.accesscache_misses = 0; + newnfsstats.biocache_reads = 0; + newnfsstats.read_bios = 0; + newnfsstats.read_physios = 0; + newnfsstats.biocache_writes = 0; + newnfsstats.write_bios = 0; + newnfsstats.write_physios = 0; + newnfsstats.biocache_readlinks = 0; + newnfsstats.readlink_bios = 0; + newnfsstats.biocache_readdirs = 0; + newnfsstats.readdir_bios = 0; + newnfsstats.rpcretries = 0; + newnfsstats.rpcrequests = 0; + newnfsstats.rpctimeouts = 0; + newnfsstats.rpcunexpected = 0; + newnfsstats.rpcinvalid = 0; + bzero(newnfsstats.rpccnt, + sizeof(newnfsstats.rpccnt)); } if ((uap->flag & NFSSVC_ZEROSRVSTATS) != 0) { - nfsstatsv1.srvrpc_errs = 0; - nfsstatsv1.srv_errs = 0; - nfsstatsv1.srvcache_inproghits = 0; - nfsstatsv1.srvcache_idemdonehits = 0; - nfsstatsv1.srvcache_nonidemdonehits = 0; - nfsstatsv1.srvcache_misses = 0; - nfsstatsv1.srvcache_tcppeak = 0; - nfsstatsv1.srvclients = 0; - nfsstatsv1.srvopenowners = 0; - nfsstatsv1.srvopens = 0; - nfsstatsv1.srvlockowners = 0; - nfsstatsv1.srvlocks = 0; - nfsstatsv1.srvdelegates = 0; - nfsstatsv1.clopenowners = 0; - nfsstatsv1.clopens = 0; - nfsstatsv1.cllockowners = 0; - nfsstatsv1.cllocks = 0; - nfsstatsv1.cldelegates = 0; - nfsstatsv1.cllocalopenowners = 0; - nfsstatsv1.cllocalopens = 0; - nfsstatsv1.cllocallockowners = 0; - nfsstatsv1.cllocallocks = 0; - bzero(nfsstatsv1.srvrpccnt, - sizeof(nfsstatsv1.srvrpccnt)); - bzero(nfsstatsv1.cbrpccnt, - sizeof(nfsstatsv1.cbrpccnt)); + newnfsstats.srvrpc_errs = 0; + newnfsstats.srv_errs = 0; + newnfsstats.srvcache_inproghits = 0; + newnfsstats.srvcache_idemdonehits = 0; + newnfsstats.srvcache_nonidemdonehits = 0; + newnfsstats.srvcache_misses = 0; + newnfsstats.srvcache_tcppeak = 0; + newnfsstats.srvclients = 0; + newnfsstats.srvopenowners = 0; + newnfsstats.srvopens = 0; + newnfsstats.srvlockowners = 0; + newnfsstats.srvlocks = 0; + newnfsstats.srvdelegates = 0; + newnfsstats.clopenowners = 0; + newnfsstats.clopens = 0; + newnfsstats.cllockowners = 0; + newnfsstats.cllocks = 0; + newnfsstats.cldelegates = 0; + newnfsstats.cllocalopenowners = 0; + newnfsstats.cllocalopens = 0; + newnfsstats.cllocallockowners = 0; + newnfsstats.cllocallocks = 0; + bzero(newnfsstats.srvrpccnt, + sizeof(newnfsstats.srvrpccnt)); + bzero(newnfsstats.cbrpccnt, + sizeof(newnfsstats.cbrpccnt)); } } goto out; diff --git a/sys/fs/nfs/nfsport.h b/sys/fs/nfs/nfsport.h index da24da7cb69c..1e0c0bae68fc 100644 --- a/sys/fs/nfs/nfsport.h +++ b/sys/fs/nfs/nfsport.h @@ -55,7 +55,6 @@ #include <sys/malloc.h> #include <sys/mbuf.h> #include <sys/mount.h> -#include <sys/mutex.h> #include <sys/namei.h> #include <sys/proc.h> #include <sys/protosw.h> @@ -254,26 +253,24 @@ /* * Must be one more than last op#. - * NFSv4.2 isn't implemented yet, but define the op# limit for it. */ #define NFSV41_NOPS 59 -#define NFSV42_NOPS 72 /* Quirky case if the illegal op code */ #define NFSV4OP_OPILLEGAL 10044 /* - * Fake NFSV4OP_xxx used for nfsstat. Start at NFSV42_NOPS. + * Fake NFSV4OP_xxx used for nfsstat. Start at NFSV4OP_NOPS. */ -#define NFSV4OP_SYMLINK (NFSV42_NOPS) -#define NFSV4OP_MKDIR (NFSV42_NOPS + 1) -#define NFSV4OP_RMDIR (NFSV42_NOPS + 2) -#define NFSV4OP_READDIRPLUS (NFSV42_NOPS + 3) -#define NFSV4OP_MKNOD (NFSV42_NOPS + 4) -#define NFSV4OP_FSSTAT (NFSV42_NOPS + 5) -#define NFSV4OP_FSINFO (NFSV42_NOPS + 6) -#define NFSV4OP_PATHCONF (NFSV42_NOPS + 7) -#define NFSV4OP_V3CREATE (NFSV42_NOPS + 8) +#define NFSV4OP_SYMLINK (NFSV4OP_NOPS) +#define NFSV4OP_MKDIR (NFSV4OP_NOPS + 1) +#define NFSV4OP_RMDIR (NFSV4OP_NOPS + 2) +#define NFSV4OP_READDIRPLUS (NFSV4OP_NOPS + 3) +#define NFSV4OP_MKNOD (NFSV4OP_NOPS + 4) +#define NFSV4OP_FSSTAT (NFSV4OP_NOPS + 5) +#define NFSV4OP_FSINFO (NFSV4OP_NOPS + 6) +#define NFSV4OP_PATHCONF (NFSV4OP_NOPS + 7) +#define NFSV4OP_V3CREATE (NFSV4OP_NOPS + 8) /* * This is the count of the fake operations listed above. @@ -287,12 +284,12 @@ #define NFSV4OP_CBRECALL 4 /* - * Must be one greater than the last Callback Operation# for NFSv4.0. + * Must be one greater than the last Callback Operation#. */ #define NFSV4OP_CBNOPS 5 /* - * Additional Callback Ops for NFSv4.1 only. + * Additional Callback Ops for NFSv4.1 only. Not yet in nfsstats. */ #define NFSV4OP_CBLAYOUTRECALL 5 #define NFSV4OP_CBNOTIFY 6 @@ -305,9 +302,6 @@ #define NFSV4OP_CBNOTIFYLOCK 13 #define NFSV4OP_CBNOTIFYDEVID 14 -#define NFSV41_CBNOPS 15 -#define NFSV42_CBNOPS 16 - /* * The lower numbers -> 21 are used by NFSv2 and v3. These define higher * numbers used by NFSv4. @@ -365,72 +359,7 @@ #endif /* NFS_V3NPROCS */ /* - * New stats structure. - * The vers field will be set to NFSSTATS_V1 by the caller. - */ -#define NFSSTATS_V1 1 -struct nfsstatsv1 { - int vers; /* Set to version requested by caller. */ - uint64_t attrcache_hits; - uint64_t attrcache_misses; - uint64_t lookupcache_hits; - uint64_t lookupcache_misses; - uint64_t direofcache_hits; - uint64_t direofcache_misses; - uint64_t accesscache_hits; - uint64_t accesscache_misses; - uint64_t biocache_reads; - uint64_t read_bios; - uint64_t read_physios; - uint64_t biocache_writes; - uint64_t write_bios; - uint64_t write_physios; - uint64_t biocache_readlinks; - uint64_t readlink_bios; - uint64_t biocache_readdirs; - uint64_t readdir_bios; - uint64_t rpccnt[NFSV41_NPROCS + 15]; - uint64_t rpcretries; - uint64_t srvrpccnt[NFSV42_NOPS + NFSV4OP_FAKENOPS]; - uint64_t srvrpc_errs; - uint64_t srv_errs; - uint64_t rpcrequests; - uint64_t rpctimeouts; - uint64_t rpcunexpected; - uint64_t rpcinvalid; - uint64_t srvcache_inproghits; - uint64_t srvcache_idemdonehits; - uint64_t srvcache_nonidemdonehits; - uint64_t srvcache_misses; - uint64_t srvcache_tcppeak; - int srvcache_size; /* Updated by atomic_xx_int(). */ - uint64_t srvclients; - uint64_t srvopenowners; - uint64_t srvopens; - uint64_t srvlockowners; - uint64_t srvlocks; - uint64_t srvdelegates; - uint64_t cbrpccnt[NFSV42_CBNOPS]; - uint64_t clopenowners; - uint64_t clopens; - uint64_t cllockowners; - uint64_t cllocks; - uint64_t cldelegates; - uint64_t cllocalopenowners; - uint64_t cllocalopens; - uint64_t cllocallockowners; - uint64_t cllocallocks; - uint64_t srvstartcnt; - uint64_t srvdonecnt; - uint64_t srvbytes[NFSV42_NOPS + NFSV4OP_FAKENOPS]; - uint64_t srvops[NFSV42_NOPS + NFSV4OP_FAKENOPS]; - struct bintime srvduration[NFSV42_NOPS + NFSV4OP_FAKENOPS]; - struct bintime busyfrom; - struct bintime busytime; -}; - -/* - * Old stats structure. + * Stats structure */ struct ext_nfsstats { int attrcache_hits; @@ -486,6 +415,11 @@ struct ext_nfsstats { #ifdef _KERNEL /* + * Define the ext_nfsstats as nfsstats for the kernel code. + */ +#define nfsstats ext_nfsstats + +/* * Define NFS_NPROCS as NFSV4_NPROCS for the experimental kernel code. */ #ifndef NFS_NPROCS diff --git a/sys/fs/nfs/nfsproto.h b/sys/fs/nfs/nfsproto.h index 6e8f160cbc6e..b9c18e88bae1 100644 --- a/sys/fs/nfs/nfsproto.h +++ b/sys/fs/nfs/nfsproto.h @@ -345,10 +345,10 @@ /* * NFSPROC_NOOP is a fake op# that can't be the same as any V2/3/4 Procedure - * or Operation#. Since the NFS V4 Op #s go higher, use NFSV42_NOPS, which + * or Operation#. Since the NFS V4 Op #s go higher, use NFSV41_NOPS, which * is one greater than the highest Op#. */ -#define NFSPROC_NOOP NFSV42_NOPS +#define NFSPROC_NOOP NFSV41_NOPS /* Actual Version 2 procedure numbers */ #define NFSV2PROC_NULL 0 diff --git a/sys/fs/nfsclient/nfs_clbio.c b/sys/fs/nfsclient/nfs_clbio.c index cb16f1f91699..3acc132cce78 100644 --- a/sys/fs/nfsclient/nfs_clbio.c +++ b/sys/fs/nfsclient/nfs_clbio.c @@ -62,7 +62,7 @@ __FBSDID("$FreeBSD$"); #include <fs/nfsclient/nfs_kdtrace.h> extern int newnfs_directio_allow_mmap; -extern struct nfsstatsv1 nfsstatsv1; +extern struct nfsstats newnfsstats; extern struct mtx ncl_iod_mutex; extern int ncl_numasync; extern enum nfsiod_state ncl_iodwant[NFS_MAXASYNCDAEMON]; @@ -482,7 +482,7 @@ ncl_bioread(struct vnode *vp, struct uio *uio, int ioflag, struct ucred *cred) switch (vp->v_type) { case VREG: - NFSINCRGLOBAL(nfsstatsv1.biocache_reads); + NFSINCRGLOBAL(newnfsstats.biocache_reads); lbn = uio->uio_offset / biosize; on = uio->uio_offset - (lbn * biosize); @@ -559,7 +559,7 @@ ncl_bioread(struct vnode *vp, struct uio *uio, int ioflag, struct ucred *cred) n = MIN((unsigned)(bcount - on), uio->uio_resid); break; case VLNK: - NFSINCRGLOBAL(nfsstatsv1.biocache_readlinks); + NFSINCRGLOBAL(newnfsstats.biocache_readlinks); bp = nfs_getcacheblk(vp, (daddr_t)0, NFS_MAXPATHLEN, td); if (!bp) { error = newnfs_sigintr(nmp, td); @@ -579,7 +579,7 @@ ncl_bioread(struct vnode *vp, struct uio *uio, int ioflag, struct ucred *cred) on = 0; break; case VDIR: - NFSINCRGLOBAL(nfsstatsv1.biocache_readdirs); + NFSINCRGLOBAL(newnfsstats.biocache_readdirs); if (np->n_direofoffset && uio->uio_offset >= np->n_direofoffset) { return (0); @@ -1008,7 +1008,7 @@ ncl_write(struct vop_write_args *ap) } } - NFSINCRGLOBAL(nfsstatsv1.biocache_writes); + NFSINCRGLOBAL(newnfsstats.biocache_writes); lbn = uio->uio_offset / biosize; on = uio->uio_offset - (lbn * biosize); n = MIN((unsigned)(biosize - on), uio->uio_resid); @@ -1622,7 +1622,7 @@ ncl_doio(struct vnode *vp, struct buf *bp, struct ucred *cr, struct thread *td, switch (vp->v_type) { case VREG: uiop->uio_offset = ((off_t)bp->b_blkno) * DEV_BSIZE; - NFSINCRGLOBAL(nfsstatsv1.read_bios); + NFSINCRGLOBAL(newnfsstats.read_bios); error = ncl_readrpc(vp, uiop, cr); if (!error) { @@ -1657,11 +1657,11 @@ ncl_doio(struct vnode *vp, struct buf *bp, struct ucred *cr, struct thread *td, break; case VLNK: uiop->uio_offset = (off_t)0; - NFSINCRGLOBAL(nfsstatsv1.readlink_bios); + NFSINCRGLOBAL(newnfsstats.readlink_bios); error = ncl_readlinkrpc(vp, uiop, cr); break; case VDIR: - NFSINCRGLOBAL(nfsstatsv1.readdir_bios); + NFSINCRGLOBAL(newnfsstats.readdir_bios); uiop->uio_offset = ((u_quad_t)bp->b_lblkno) * NFS_DIRBLKSIZ; if ((nmp->nm_flag & NFSMNT_RDIRPLUS) != 0) { error = ncl_readdirplusrpc(vp, uiop, cr, td); @@ -1723,7 +1723,7 @@ ncl_doio(struct vnode *vp, struct buf *bp, struct ucred *cr, struct thread *td, + bp->b_dirtyoff; io.iov_base = (char *)bp->b_data + bp->b_dirtyoff; uiop->uio_rw = UIO_WRITE; - NFSINCRGLOBAL(nfsstatsv1.write_bios); + NFSINCRGLOBAL(newnfsstats.write_bios); if ((bp->b_flags & (B_ASYNC | B_NEEDCOMMIT | B_NOCACHE | B_CLUSTER)) == B_ASYNC) iomode = NFSWRITE_UNSTABLE; diff --git a/sys/fs/nfsclient/nfs_clcomsubs.c b/sys/fs/nfsclient/nfs_clcomsubs.c index e108b4bf9553..1fc7d1b7ce41 100644 --- a/sys/fs/nfsclient/nfs_clcomsubs.c +++ b/sys/fs/nfsclient/nfs_clcomsubs.c @@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$"); #ifndef APPLEKEXT #include <fs/nfs/nfsport.h> -extern struct nfsstatsv1 nfsstatsv1; +extern struct nfsstats newnfsstats; extern struct nfsv4_opflag nfsv4_opflag[NFSV41_NOPS]; extern int ncl_mbuf_mlen; extern enum vtype newnv2tov_type[8]; @@ -241,8 +241,8 @@ nfscl_reqstart(struct nfsrv_descript *nd, int procnum, struct nfsmount *nmp, } else { (void) nfsm_fhtom(nd, nfhp, fhlen, 0); } - if (procnum < NFSV41_NPROCS) - NFSINCRGLOBAL(nfsstatsv1.rpccnt[procnum]); + if (procnum < NFSV4_NPROCS) + NFSINCRGLOBAL(newnfsstats.rpccnt[procnum]); } #ifndef APPLE diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c index 0b63aaa1ed1c..2600b80ea5d1 100644 --- a/sys/fs/nfsclient/nfs_clstate.c +++ b/sys/fs/nfsclient/nfs_clstate.c @@ -84,7 +84,7 @@ __FBSDID("$FreeBSD$"); /* * Global variables */ -extern struct nfsstatsv1 nfsstatsv1; +extern struct nfsstats newnfsstats; extern struct nfsreqhead nfsd_reqq; extern u_int32_t newnfs_false, newnfs_true; extern int nfscl_debuglevel; @@ -343,10 +343,10 @@ nfscl_newopen(struct nfsclclient *clp, struct nfscldeleg *dp, nowp->nfsow_defunct = 0; nfscl_lockinit(&nowp->nfsow_rwlock); if (dp != NULL) { - nfsstatsv1.cllocalopenowners++; + newnfsstats.cllocalopenowners++; LIST_INSERT_HEAD(&dp->nfsdl_owner, nowp, nfsow_list); } else { - nfsstatsv1.clopenowners++; + newnfsstats.clopenowners++; LIST_INSERT_HEAD(&clp->nfsc_owner, nowp, nfsow_list); } owp = *owpp = nowp; @@ -380,9 +380,9 @@ nfscl_newopen(struct nfsclclient *clp, struct nfscldeleg *dp, TAILQ_INSERT_HEAD(&clp->nfsc_deleg, dp, nfsdl_list); dp->nfsdl_timestamp = NFSD_MONOSEC + 120; - nfsstatsv1.cllocalopens++; + newnfsstats.cllocalopens++; } else { - nfsstatsv1.clopens++; + newnfsstats.clopens++; } LIST_INSERT_HEAD(&owp->nfsow_open, nop, nfso_list); *opp = nop; @@ -430,7 +430,7 @@ nfscl_deleg(mount_t mp, struct nfsclclient *clp, u_int8_t *nfhp, LIST_INSERT_HEAD(NFSCLDELEGHASH(clp, nfhp, fhlen), dp, nfsdl_hash); dp->nfsdl_timestamp = NFSD_MONOSEC + 120; - nfsstatsv1.cldelegates++; + newnfsstats.cldelegates++; nfscl_delegcnt++; } else { /* @@ -1071,10 +1071,10 @@ nfscl_getbytelock(vnode_t vp, u_int64_t off, u_int64_t len, LIST_INIT(&nlp->nfsl_lock); if (donelocally) { nlp->nfsl_open = NULL; - nfsstatsv1.cllocallockowners++; + newnfsstats.cllocallockowners++; } else { nlp->nfsl_open = op; - nfsstatsv1.cllockowners++; + newnfsstats.cllockowners++; } LIST_INSERT_HEAD(lhp, nlp, nfsl_list); lp = nlp; @@ -1402,9 +1402,9 @@ nfscl_freeopen(struct nfsclopen *op, int local) nfscl_freealllocks(&op->nfso_lock, local); FREE((caddr_t)op, M_NFSCLOPEN); if (local) - nfsstatsv1.cllocalopens--; + newnfsstats.cllocalopens--; else - nfsstatsv1.clopens--; + newnfsstats.clopens--; } /* @@ -1483,9 +1483,9 @@ nfscl_freeopenowner(struct nfsclowner *owp, int local) LIST_REMOVE(owp, nfsow_list); FREE((caddr_t)owp, M_NFSCLOWNER); if (local) - nfsstatsv1.cllocalopenowners--; + newnfsstats.cllocalopenowners--; else - nfsstatsv1.clopenowners--; + newnfsstats.clopenowners--; } /* @@ -1502,9 +1502,9 @@ nfscl_freelockowner(struct nfscllockowner *lp, int local) } FREE((caddr_t)lp, M_NFSCLLOCKOWNER); if (local) - nfsstatsv1.cllocallockowners--; + newnfsstats.cllocallockowners--; else - nfsstatsv1.cllockowners--; + newnfsstats.cllockowners--; } /* @@ -1517,9 +1517,9 @@ nfscl_freelock(struct nfscllock *lop, int local) LIST_REMOVE(lop, nfslo_list); FREE((caddr_t)lop, M_NFSCLLOCK); if (local) - nfsstatsv1.cllocallocks--; + newnfsstats.cllocallocks--; else - nfsstatsv1.cllocks--; + newnfsstats.cllocks--; } /* @@ -1553,7 +1553,7 @@ nfscl_freedeleg(struct nfscldeleghead *hdp, struct nfscldeleg *dp) TAILQ_REMOVE(hdp, dp, nfsdl_list); LIST_REMOVE(dp, nfsdl_hash); FREE((caddr_t)dp, M_NFSCLDELEG); - nfsstatsv1.cldelegates--; + newnfsstats.cldelegates--; nfscl_delegcnt--; } @@ -1621,18 +1621,18 @@ nfscl_expireclient(struct nfsclclient *clp, struct nfsmount *nmp, LIST_REMOVE(op, nfso_list); op->nfso_own = towp; LIST_INSERT_HEAD(&towp->nfsow_open, op, nfso_list); - nfsstatsv1.cllocalopens--; - nfsstatsv1.clopens++; + newnfsstats.cllocalopens--; + newnfsstats.clopens++; } } else { /* Just add the openowner to the client list */ LIST_REMOVE(owp, nfsow_list); owp->nfsow_clp = clp; LIST_INSERT_HEAD(&clp->nfsc_owner, owp, nfsow_list); - nfsstatsv1.cllocalopenowners--; - nfsstatsv1.clopenowners++; - nfsstatsv1.cllocalopens--; - nfsstatsv1.clopens++; + newnfsstats.cllocalopenowners--; + newnfsstats.clopenowners++; + newnfsstats.cllocalopens--; + newnfsstats.clopens++; } } owp = nowp; @@ -2282,9 +2282,9 @@ nfscl_insertlock(struct nfscllockowner *lp, struct nfscllock *new_lop, else LIST_INSERT_AFTER(insert_lop, new_lop, nfslo_list); if (local) - nfsstatsv1.cllocallocks++; + newnfsstats.cllocallocks++; else - nfsstatsv1.cllocks++; + newnfsstats.cllocks++; } /* @@ -2571,7 +2571,7 @@ tryagain: LIST_REMOVE(dp, nfsdl_hash); TAILQ_INSERT_HEAD(&dh, dp, nfsdl_list); nfscl_delegcnt--; - nfsstatsv1.cldelegates--; + newnfsstats.cldelegates--; } NFSLOCKCLSTATE(); } @@ -2612,7 +2612,7 @@ tryagain: LIST_REMOVE(dp, nfsdl_hash); TAILQ_INSERT_HEAD(&dh, dp, nfsdl_list); nfscl_delegcnt--; - nfsstatsv1.cldelegates--; + newnfsstats.cldelegates--; } } dp = ndp; @@ -3215,8 +3215,8 @@ nfscl_docb(struct nfsrv_descript *nd, NFSPROC_T *p) break; } nd->nd_procnum = op; - if (op < NFSV41_CBNOPS) - nfsstatsv1.cbrpccnt[nd->nd_procnum]++; + if (op < NFSV4OP_CBNOPS) + newnfsstats.cbrpccnt[nd->nd_procnum]++; switch (op) { case NFSV4OP_CBGETATTR: NFSCL_DEBUG(4, "cbgetattr\n"); diff --git a/sys/fs/nfsclient/nfs_clsubs.c b/sys/fs/nfsclient/nfs_clsubs.c index 2422d93744ac..e4848ff5beb8 100644 --- a/sys/fs/nfsclient/nfs_clsubs.c +++ b/sys/fs/nfsclient/nfs_clsubs.c @@ -85,7 +85,7 @@ extern enum nfsiod_state ncl_iodwant[NFS_MAXASYNCDAEMON]; extern struct nfsmount *ncl_iodmount[NFS_MAXASYNCDAEMON]; extern int ncl_numasync; extern unsigned int ncl_iodmax; -extern struct nfsstatsv1 nfsstatsv1; +extern struct nfsstats newnfsstats; struct task ncl_nfsiodnew_task; @@ -221,12 +221,12 @@ ncl_getattrcache(struct vnode *vp, struct vattr *vaper) if ((time_second - np->n_attrstamp) >= timeo && (mustflush != 0 || np->n_attrstamp == 0)) { - nfsstatsv1.attrcache_misses++; + newnfsstats.attrcache_misses++; mtx_unlock(&np->n_mtx); KDTRACE_NFS_ATTRCACHE_GET_MISS(vp); return( ENOENT); } - nfsstatsv1.attrcache_hits++; + newnfsstats.attrcache_hits++; if (vap->va_size != np->n_size) { if (vap->va_type == VREG) { if (np->n_flag & NMODIFIED) { diff --git a/sys/fs/nfsclient/nfs_clvfsops.c b/sys/fs/nfsclient/nfs_clvfsops.c index f344ef91da44..b8aa2fdf822d 100644 --- a/sys/fs/nfsclient/nfs_clvfsops.c +++ b/sys/fs/nfsclient/nfs_clvfsops.c @@ -78,6 +78,7 @@ FEATURE(nfscl, "NFSv4 client"); extern int nfscl_ticks; extern struct timeval nfsboottime; +extern struct nfsstats newnfsstats; extern int nfsrv_useacl; extern int nfscl_debuglevel; extern enum nfsiod_state ncl_iodwant[NFS_MAXASYNCDAEMON]; diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c index ee5ca2e73526..d6f9011bf62d 100644 --- a/sys/fs/nfsclient/nfs_clvnops.c +++ b/sys/fs/nfsclient/nfs_clvnops.c @@ -101,7 +101,7 @@ uint32_t nfscl_accesscache_load_done_id; #define TRUE 1 #define FALSE 0 -extern struct nfsstatsv1 nfsstatsv1; +extern struct nfsstats newnfsstats; extern int nfsrv_useacl; extern int nfscl_debuglevel; MALLOC_DECLARE(M_NEWNFSREQ); @@ -259,6 +259,14 @@ int newnfs_directio_allow_mmap = 1; SYSCTL_INT(_vfs_nfs, OID_AUTO, nfs_directio_allow_mmap, CTLFLAG_RW, &newnfs_directio_allow_mmap, 0, "Enable mmaped IO on file with O_DIRECT opens"); +#if 0 +SYSCTL_INT(_vfs_nfs, OID_AUTO, access_cache_hits, CTLFLAG_RD, + &newnfsstats.accesscache_hits, 0, "NFS ACCESS cache hit count"); + +SYSCTL_INT(_vfs_nfs, OID_AUTO, access_cache_misses, CTLFLAG_RD, + &newnfsstats.accesscache_misses, 0, "NFS ACCESS cache miss count"); +#endif + #define NFSACCESS_ALL (NFSACCESS_READ | NFSACCESS_MODIFY \ | NFSACCESS_EXTEND | NFSACCESS_EXECUTE \ | NFSACCESS_DELETE | NFSACCESS_LOOKUP) @@ -411,7 +419,7 @@ nfs_access(struct vop_access_args *ap) if (time_second < (np->n_accesscache[i].stamp + nfsaccess_cache_timeout) && (np->n_accesscache[i].mode & mode) == mode) { - NFSINCRGLOBAL(nfsstatsv1.accesscache_hits); + NFSINCRGLOBAL(newnfsstats.accesscache_hits); gotahit = 1; } break; @@ -430,7 +438,7 @@ nfs_access(struct vop_access_args *ap) /* * Either a no, or a don't know. Go to the wire. */ - NFSINCRGLOBAL(nfsstatsv1.accesscache_misses); + NFSINCRGLOBAL(newnfsstats.accesscache_misses); error = nfs34_access_otw(vp, wmode, ap->a_td, ap->a_cred, &rmode); if (!error && @@ -850,7 +858,7 @@ nfs_getattr(struct vop_getattr_args *ap) if (NFS_ISV34(vp) && nfs_prime_access_cache && nfsaccess_cache_timeout > 0) { - NFSINCRGLOBAL(nfsstatsv1.accesscache_misses); + NFSINCRGLOBAL(newnfsstats.accesscache_misses); nfs34_access_otw(vp, NFSACCESS_ALL, td, ap->a_cred, NULL); if (ncl_getattrcache(vp, ap->a_vap) == 0) { nfscl_deleggetmodtime(vp, &ap->a_vap->va_mtime); @@ -1107,7 +1115,7 @@ nfs_lookup(struct vop_lookup_args *ap) ((u_int)(ticks - ncticks) < (nmp->nm_nametimeo * hz) && VOP_GETATTR(newvp, &vattr, cnp->cn_cred) == 0 && timespeccmp(&vattr.va_ctime, &nctime, ==))) { - NFSINCRGLOBAL(nfsstatsv1.lookupcache_hits); + NFSINCRGLOBAL(newnfsstats.lookupcache_hits); if (cnp->cn_nameiop != LOOKUP && (flags & ISLASTCN)) cnp->cn_flags |= SAVENAME; @@ -1134,7 +1142,7 @@ nfs_lookup(struct vop_lookup_args *ap) if ((u_int)(ticks - ncticks) < (nmp->nm_negnametimeo * hz) && VOP_GETATTR(dvp, &vattr, cnp->cn_cred) == 0 && timespeccmp(&vattr.va_mtime, &nctime, ==)) { - NFSINCRGLOBAL(nfsstatsv1.lookupcache_hits); + NFSINCRGLOBAL(newnfsstats.lookupcache_hits); return (ENOENT); } cache_purge_negative(dvp); @@ -1142,7 +1150,7 @@ nfs_lookup(struct vop_lookup_args *ap) error = 0; newvp = NULLVP; - NFSINCRGLOBAL(nfsstatsv1.lookupcache_misses); + NFSINCRGLOBAL(newnfsstats.lookupcache_misses); error = nfsrpc_lookup(dvp, cnp->cn_nameptr, cnp->cn_namelen, cnp->cn_cred, td, &dnfsva, &nfsva, &nfhp, &attrflag, &dattrflag, NULL); @@ -2220,7 +2228,7 @@ nfs_readdir(struct vop_readdir_args *ap) if ((NFS_ISV4(vp) && np->n_change == vattr.va_filerev) || !NFS_TIMESPEC_COMPARE(&np->n_mtime, &vattr.va_mtime)) { mtx_unlock(&np->n_mtx); - NFSINCRGLOBAL(nfsstatsv1.direofcache_hits); + NFSINCRGLOBAL(newnfsstats.direofcache_hits); if (ap->a_eofflag != NULL) *ap->a_eofflag = 1; return (0); @@ -2247,7 +2255,7 @@ nfs_readdir(struct vop_readdir_args *ap) error = ncl_bioread(vp, uio, 0, ap->a_cred); if (!error && uio->uio_resid == tresid) { - NFSINCRGLOBAL(nfsstatsv1.direofcache_misses); + NFSINCRGLOBAL(newnfsstats.direofcache_misses); if (ap->a_eofflag != NULL) *ap->a_eofflag = 1; } diff --git a/sys/fs/nfsserver/nfs_nfsdcache.c b/sys/fs/nfsserver/nfs_nfsdcache.c index 0b7bf8f3e1fb..0f78b3f06ec1 100644 --- a/sys/fs/nfsserver/nfs_nfsdcache.c +++ b/sys/fs/nfsserver/nfs_nfsdcache.c @@ -159,7 +159,7 @@ __FBSDID("$FreeBSD$"); #ifndef APPLEKEXT #include <fs/nfs/nfsport.h> -extern struct nfsstatsv1 nfsstatsv1; +extern struct nfsstats newnfsstats; extern struct mtx nfsrc_udpmtx; extern struct nfsrchash_bucket nfsrchash_table[NFSRVCACHE_HASHSIZE]; extern struct nfsrchash_bucket nfsrcahash_table[NFSRVCACHE_HASHSIZE]; @@ -318,8 +318,8 @@ nfsrvd_initcache(void) TAILQ_INIT(&nfsrvudplru); nfsrc_tcpsavedreplies = 0; nfsrc_udpcachesize = 0; - nfsstatsv1.srvcache_tcppeak = 0; - nfsstatsv1.srvcache_size = 0; + newnfsstats.srvcache_tcppeak = 0; + newnfsstats.srvcache_size = 0; } /* @@ -395,14 +395,14 @@ loop: TAILQ_REMOVE(&nfsrvudplru, rp, rc_lru); TAILQ_INSERT_TAIL(&nfsrvudplru, rp, rc_lru); if (rp->rc_flag & RC_INPROG) { - nfsstatsv1.srvcache_inproghits++; + newnfsstats.srvcache_inproghits++; mtx_unlock(mutex); ret = RC_DROPIT; } else if (rp->rc_flag & RC_REPSTATUS) { /* * V2 only. */ - nfsstatsv1.srvcache_nonidemdonehits++; + newnfsstats.srvcache_nonidemdonehits++; mtx_unlock(mutex); nfsrvd_rephead(nd); *(nd->nd_errp) = rp->rc_status; @@ -410,7 +410,7 @@ loop: rp->rc_timestamp = NFSD_MONOSEC + NFSRVCACHE_UDPTIMEOUT; } else if (rp->rc_flag & RC_REPMBUF) { - nfsstatsv1.srvcache_nonidemdonehits++; + newnfsstats.srvcache_nonidemdonehits++; mtx_unlock(mutex); nd->nd_mreq = m_copym(rp->rc_reply, 0, M_COPYALL, M_WAITOK); @@ -425,8 +425,8 @@ loop: goto out; } } - nfsstatsv1.srvcache_misses++; - atomic_add_int(&nfsstatsv1.srvcache_size, 1); + newnfsstats.srvcache_misses++; + atomic_add_int(&newnfsstats.srvcache_size, 1); nfsrc_udpcachesize++; newrp->rc_flag |= RC_INPROG; @@ -480,7 +480,7 @@ nfsrvd_updatecache(struct nfsrv_descript *nd) * Reply from cache is a special case returned by nfsrv_checkseqid(). */ if (nd->nd_repstat == NFSERR_REPLYFROMCACHE) { - nfsstatsv1.srvcache_nonidemdonehits++; + newnfsstats.srvcache_nonidemdonehits++; mtx_unlock(mutex); nd->nd_repstat = 0; if (nd->nd_mreq) @@ -519,8 +519,8 @@ nfsrvd_updatecache(struct nfsrv_descript *nd) if (!(rp->rc_flag & RC_UDP)) { atomic_add_int(&nfsrc_tcpsavedreplies, 1); if (nfsrc_tcpsavedreplies > - nfsstatsv1.srvcache_tcppeak) - nfsstatsv1.srvcache_tcppeak = + newnfsstats.srvcache_tcppeak) + newnfsstats.srvcache_tcppeak = nfsrc_tcpsavedreplies; } mtx_unlock(mutex); @@ -678,7 +678,7 @@ tryagain: panic("nfs tcp cache0"); rp->rc_flag |= RC_LOCKED; if (rp->rc_flag & RC_INPROG) { - nfsstatsv1.srvcache_inproghits++; + newnfsstats.srvcache_inproghits++; mtx_unlock(mutex); if (newrp->rc_sockref == rp->rc_sockref) nfsrc_marksametcpconn(rp->rc_sockref); @@ -687,7 +687,7 @@ tryagain: /* * V2 only. */ - nfsstatsv1.srvcache_nonidemdonehits++; + newnfsstats.srvcache_nonidemdonehits++; mtx_unlock(mutex); if (newrp->rc_sockref == rp->rc_sockref) nfsrc_marksametcpconn(rp->rc_sockref); @@ -696,7 +696,7 @@ tryagain: *(nd->nd_errp) = rp->rc_status; rp->rc_timestamp = NFSD_MONOSEC + nfsrc_tcptimeout; } else if (rp->rc_flag & RC_REPMBUF) { - nfsstatsv1.srvcache_nonidemdonehits++; + newnfsstats.srvcache_nonidemdonehits++; mtx_unlock(mutex); if (newrp->rc_sockref == rp->rc_sockref) nfsrc_marksametcpconn(rp->rc_sockref); @@ -711,8 +711,8 @@ tryagain: free((caddr_t)newrp, M_NFSRVCACHE); goto out; } - nfsstatsv1.srvcache_misses++; - atomic_add_int(&nfsstatsv1.srvcache_size, 1); + newnfsstats.srvcache_misses++; + atomic_add_int(&newnfsstats.srvcache_size, 1); /* * For TCP, multiple entries for a key are allowed, so don't @@ -801,7 +801,7 @@ nfsrc_freecache(struct nfsrvcache *rp) atomic_add_int(&nfsrc_tcpsavedreplies, -1); } FREE((caddr_t)rp, M_NFSRVCACHE); - atomic_add_int(&nfsstatsv1.srvcache_size, -1); + atomic_add_int(&newnfsstats.srvcache_size, -1); } /* @@ -825,7 +825,7 @@ nfsrvd_cleancache(void) nfsrc_freecache(rp); } } - nfsstatsv1.srvcache_size = 0; + newnfsstats.srvcache_size = 0; mtx_unlock(&nfsrc_udpmtx); nfsrc_tcpsavedreplies = 0; } diff --git a/sys/fs/nfsserver/nfs_nfsdport.c b/sys/fs/nfsserver/nfs_nfsdport.c index 3f4c0f7575e9..cdbda07eddaf 100644 --- a/sys/fs/nfsserver/nfs_nfsdport.c +++ b/sys/fs/nfsserver/nfs_nfsdport.c @@ -62,7 +62,6 @@ extern struct nfsclienthashhead *nfsclienthash; extern struct nfslockhashhead *nfslockhash; extern struct nfssessionhash *nfssessionhash; extern int nfsrv_sessionhashsize; -extern struct nfsstatsv1 nfsstatsv1; struct vfsoptlist nfsv4root_opt, nfsv4root_newopt; NFSDLOCKMUTEX; struct nfsrchash_bucket nfsrchash_table[NFSRVCACHE_HASHSIZE]; @@ -687,8 +686,6 @@ nfsvno_read(struct vnode *vp, off_t off, int cnt, struct ucred *cred, uiop->uio_td = NULL; nh = nfsrv_sequential_heuristic(uiop, vp); ioflag |= nh->nh_seqcount << IO_SEQSHIFT; - /* XXX KDM make this more systematic? */ - nfsstatsv1.srvbytes[NFSV4OP_READ] += uiop->uio_resid; error = VOP_READ(vp, uiop, IO_NODELOCKED | ioflag, cred); FREE((caddr_t)iv2, M_TEMP); if (error) { @@ -761,8 +758,6 @@ nfsvno_write(struct vnode *vp, off_t off, int retlen, int cnt, int stable, uiop->uio_offset = off; nh = nfsrv_sequential_heuristic(uiop, vp); ioflags |= nh->nh_seqcount << IO_SEQSHIFT; - /* XXX KDM make this more systematic? */ - nfsstatsv1.srvbytes[NFSV4OP_WRITE] += uiop->uio_resid; error = VOP_WRITE(vp, uiop, ioflags, cred); if (error == 0) nh->nh_nextoff = uiop->uio_offset; diff --git a/sys/fs/nfsserver/nfs_nfsdsocket.c b/sys/fs/nfsserver/nfs_nfsdsocket.c index 0f9442f456bc..d89aff687c35 100644 --- a/sys/fs/nfsserver/nfs_nfsdsocket.c +++ b/sys/fs/nfsserver/nfs_nfsdsocket.c @@ -41,7 +41,7 @@ __FBSDID("$FreeBSD$"); #ifndef APPLEKEXT #include <fs/nfs/nfsport.h> -extern struct nfsstatsv1 nfsstatsv1; +extern struct nfsstats newnfsstats; extern struct nfsrvfh nfs_pubfh, nfs_rootfh; extern int nfs_pubfhset, nfs_rootfhset; extern struct nfsv4lock nfsv4rootfs_lock; @@ -400,68 +400,6 @@ static int nfsv3to4op[NFS_V3NPROCS] = { NFSV4OP_COMMIT, }; -static struct mtx nfsrvd_statmtx; -MTX_SYSINIT(nfsst, &nfsrvd_statmtx, "NFSstat", MTX_DEF); - -static void -nfsrvd_statstart(int op, struct bintime *now) -{ - if (op > (NFSV42_NOPS + NFSV4OP_FAKENOPS)) { - printf("%s: op %d invalid\n", __func__, op); - return; - } - - mtx_lock(&nfsrvd_statmtx); - if (nfsstatsv1.srvstartcnt == nfsstatsv1.srvdonecnt) { - if (now != NULL) - nfsstatsv1.busyfrom = *now; - else - binuptime(&nfsstatsv1.busyfrom); - - } - nfsstatsv1.srvrpccnt[op]++; - nfsstatsv1.srvstartcnt++; - mtx_unlock(&nfsrvd_statmtx); - -} - -static void -nfsrvd_statend(int op, uint64_t bytes, struct bintime *now, - struct bintime *then) -{ - struct bintime dt, lnow; - - if (op > (NFSV42_NOPS + NFSV4OP_FAKENOPS)) { - printf("%s: op %d invalid\n", __func__, op); - return; - } - - if (now == NULL) { - now = &lnow; - binuptime(now); - } - - mtx_lock(&nfsrvd_statmtx); - - nfsstatsv1.srvbytes[op] += bytes; - nfsstatsv1.srvops[op]++; - - if (then != NULL) { - dt = *now; - bintime_sub(&dt, then); - bintime_add(&nfsstatsv1.srvduration[op], &dt); - } - - dt = *now; - bintime_sub(&dt, &nfsstatsv1.busyfrom); - bintime_add(&nfsstatsv1.busytime, &dt); - nfsstatsv1.busyfrom = *now; - - nfsstatsv1.srvdonecnt++; - - mtx_unlock(&nfsrvd_statmtx); -} - /* * Do an RPC. Basically, get the file handles translated to vnode pointers * and then call the appropriate server routine. The server routines are @@ -538,9 +476,7 @@ nfsrvd_dorpc(struct nfsrv_descript *nd, int isdgram, u_char *tag, int taglen, */ if (nd->nd_repstat && (nd->nd_flag & ND_NFSV2)) { *nd->nd_errp = nfsd_errmap(nd); - nfsrvd_statstart(nfsv3to4op[nd->nd_procnum], /*now*/ NULL); - nfsrvd_statend(nfsv3to4op[nd->nd_procnum], /*bytes*/ 0, - /*now*/ NULL, /*then*/ NULL); + NFSINCRGLOBAL(newnfsstats.srvrpccnt[nfsv3to4op[nd->nd_procnum]]); if (mp != NULL && nfs_writerpc[nd->nd_procnum] != 0) vn_finished_write(mp); goto out; @@ -555,11 +491,6 @@ nfsrvd_dorpc(struct nfsrv_descript *nd, int isdgram, u_char *tag, int taglen, if (nd->nd_flag & ND_NFSV4) { nfsrvd_compound(nd, isdgram, tag, taglen, minorvers, p); } else { - struct bintime start_time; - - binuptime(&start_time); - nfsrvd_statstart(nfsv3to4op[nd->nd_procnum], &start_time); - if (nfs_retfh[nd->nd_procnum] == 1) { if (vp) NFSVOPUNLOCK(vp, 0); @@ -574,9 +505,7 @@ nfsrvd_dorpc(struct nfsrv_descript *nd, int isdgram, u_char *tag, int taglen, } if (mp != NULL && nfs_writerpc[nd->nd_procnum] != 0) vn_finished_write(mp); - - nfsrvd_statend(nfsv3to4op[nd->nd_procnum], /*bytes*/ 0, - /*now*/ NULL, /*then*/ &start_time); + NFSINCRGLOBAL(newnfsstats.srvrpccnt[nfsv3to4op[nd->nd_procnum]]); } if (error) { if (error != EBADRPC) @@ -618,7 +547,7 @@ static void nfsrvd_compound(struct nfsrv_descript *nd, int isdgram, u_char *tag, int taglen, u_int32_t minorvers, NFSPROC_T *p) { - int i, lktype, op, op0 = 0, statsinprog = 0; + int i, lktype, op, op0 = 0; u_int32_t *tl; struct nfsclient *clp, *nclp; int numops, error = 0, igotlock; @@ -630,7 +559,6 @@ nfsrvd_compound(struct nfsrv_descript *nd, int isdgram, u_char *tag, struct nfsexstuff nes, vpnes, savevpnes; fsid_t cur_fsid, save_fsid; static u_int64_t compref = 0; - struct bintime start_time; NFSVNO_EXINIT(&vpnes); NFSVNO_EXINIT(&savevpnes); @@ -758,11 +686,6 @@ nfsrvd_compound(struct nfsrv_descript *nd, int isdgram, u_char *tag, *repp = *tl; op = fxdr_unsigned(int, *tl); NFSD_DEBUG(4, "op=%d\n", op); - - binuptime(&start_time); - nfsrvd_statstart(op, &start_time); - statsinprog = 1; - if (op < NFSV4OP_ACCESS || (op >= NFSV4OP_NOPS && (nd->nd_flag & ND_NFSV41) == 0) || (op >= NFSV41_NOPS && (nd->nd_flag & ND_NFSV41) != 0)) { @@ -848,6 +771,12 @@ nfsrvd_compound(struct nfsrv_descript *nd, int isdgram, u_char *tag, } if (nfsv4_opflag[op].savereply) nd->nd_flag |= ND_SAVEREPLY; + /* + * For now, newnfsstats.srvrpccnt[] doesn't have entries + * for the NFSv4.1 operations. + */ + if (nd->nd_procnum < NFSV4OP_NOPS) + NFSINCRGLOBAL(newnfsstats.srvrpccnt[nd->nd_procnum]); switch (op) { case NFSV4OP_PUTFH: error = nfsrv_mtofh(nd, &fh); @@ -1078,13 +1007,6 @@ nfsrvd_compound(struct nfsrv_descript *nd, int isdgram, u_char *tag, } error = 0; } - - if (statsinprog != 0) { - nfsrvd_statend(op, /*bytes*/ 0, /*now*/ NULL, - /*then*/ &start_time); - statsinprog = 0; - } - retops++; if (nd->nd_repstat) { *repp = nfsd_errmap(nd); @@ -1094,11 +1016,6 @@ nfsrvd_compound(struct nfsrv_descript *nd, int isdgram, u_char *tag, } } nfsmout: - if (statsinprog != 0) { - nfsrvd_statend(op, /*bytes*/ 0, /*now*/ NULL, - /*then*/ &start_time); - statsinprog = 0; - } if (error) { if (error == EBADRPC || error == NFSERR_BADXDR) nd->nd_repstat = NFSERR_BADXDR; diff --git a/sys/fs/nfsserver/nfs_nfsdstate.c b/sys/fs/nfsserver/nfs_nfsdstate.c index 84410b17066a..456e923dc54c 100644 --- a/sys/fs/nfsserver/nfs_nfsdstate.c +++ b/sys/fs/nfsserver/nfs_nfsdstate.c @@ -37,7 +37,7 @@ int nfsrv_dolocallocks = 0; struct nfsv4lock nfsv4rootfs_lock; extern int newnfs_numnfsd; -extern struct nfsstatsv1 nfsstatsv1; +extern struct nfsstats newnfsstats; extern int nfsrv_lease; extern struct timeval nfsboottime; extern u_int32_t newnfs_true, newnfs_false; @@ -278,7 +278,7 @@ nfsrv_setclient(struct nfsrv_descript *nd, struct nfsclient **new_clpp, LIST_INIT(&new_clp->lc_stateid[i]); LIST_INSERT_HEAD(NFSCLIENTHASH(new_clp->lc_clientid), new_clp, lc_hash); - nfsstatsv1.srvclients++; + newnfsstats.srvclients++; nfsrv_openpluslock++; nfsrv_clients++; NFSLOCKV4ROOTMUTEX(); @@ -382,7 +382,7 @@ nfsrv_setclient(struct nfsrv_descript *nd, struct nfsclient **new_clpp, } LIST_INSERT_HEAD(NFSCLIENTHASH(new_clp->lc_clientid), new_clp, lc_hash); - nfsstatsv1.srvclients++; + newnfsstats.srvclients++; nfsrv_openpluslock++; nfsrv_clients++; NFSLOCKV4ROOTMUTEX(); @@ -446,7 +446,7 @@ nfsrv_setclient(struct nfsrv_descript *nd, struct nfsclient **new_clpp, } LIST_INSERT_HEAD(NFSCLIENTHASH(new_clp->lc_clientid), new_clp, lc_hash); - nfsstatsv1.srvclients++; + newnfsstats.srvclients++; nfsrv_openpluslock++; nfsrv_clients++; } @@ -820,7 +820,7 @@ out: /* * Dump out stats for all clients. Called from nfssvc(2), that is used - * nfsstatsv1. + * newnfsstats. */ APPLESTATIC void nfsrv_dumpclients(struct nfsd_dumpclients *dumpp, int maxcnt) @@ -1224,7 +1224,7 @@ nfsrv_zapclient(struct nfsclient *clp, NFSPROC_T *p) free(clp->lc_stateid, M_NFSDCLIENT); free(clp, M_NFSDCLIENT); NFSLOCKSTATE(); - nfsstatsv1.srvclients--; + newnfsstats.srvclients--; nfsrv_openpluslock--; nfsrv_clients--; NFSUNLOCKSTATE(); @@ -1265,7 +1265,7 @@ nfsrv_freedeleg(struct nfsstate *stp) nfsv4_testlock(&lfp->lf_locallock_lck) == 0) nfsrv_freenfslockfile(lfp); FREE((caddr_t)stp, M_NFSDSTATE); - nfsstatsv1.srvdelegates--; + newnfsstats.srvdelegates--; nfsrv_openpluslock--; nfsrv_delegatecnt--; } @@ -1291,7 +1291,7 @@ nfsrv_freeopenowner(struct nfsstate *stp, int cansleep, NFSPROC_T *p) if (stp->ls_op) nfsrvd_derefcache(stp->ls_op); FREE((caddr_t)stp, M_NFSDSTATE); - nfsstatsv1.srvopenowners--; + newnfsstats.srvopenowners--; nfsrv_openpluslock--; } @@ -1341,7 +1341,7 @@ nfsrv_freeopen(struct nfsstate *stp, vnode_t vp, int cansleep, NFSPROC_T *p) if (cansleep != 0) NFSUNLOCKSTATE(); FREE((caddr_t)stp, M_NFSDSTATE); - nfsstatsv1.srvopens--; + newnfsstats.srvopens--; nfsrv_openpluslock--; return (ret); } @@ -1360,7 +1360,7 @@ nfsrv_freelockowner(struct nfsstate *stp, vnode_t vp, int cansleep, if (stp->ls_op) nfsrvd_derefcache(stp->ls_op); FREE((caddr_t)stp, M_NFSDSTATE); - nfsstatsv1.srvlockowners--; + newnfsstats.srvlockowners--; nfsrv_openpluslock--; } @@ -1435,7 +1435,7 @@ nfsrv_freenfslock(struct nfslock *lop) if (lop->lo_lckfile.le_prev != NULL) { LIST_REMOVE(lop, lo_lckfile); - nfsstatsv1.srvlocks--; + newnfsstats.srvlocks--; nfsrv_openpluslock--; } LIST_REMOVE(lop, lo_lckowner); @@ -2197,7 +2197,7 @@ tryagain: LIST_INSERT_HEAD(&stp->ls_open, new_stp, ls_list); *new_lopp = NULL; *new_stpp = NULL; - nfsstatsv1.srvlockowners++; + newnfsstats.srvlockowners++; nfsrv_openpluslock++; } if (filestruct_locked != 0) { @@ -2846,12 +2846,12 @@ tryagain: LIST_INSERT_HEAD(&new_stp->ls_open, new_open, ls_list); LIST_INSERT_HEAD(&clp->lc_open, new_stp, ls_list); *new_stpp = NULL; - nfsstatsv1.srvopenowners++; + newnfsstats.srvopenowners++; nfsrv_openpluslock++; } openstp = new_open; new_open = NULL; - nfsstatsv1.srvopens++; + newnfsstats.srvopens++; nfsrv_openpluslock++; break; } @@ -2910,7 +2910,7 @@ tryagain: NFSRV_V4DELEGLIMIT(nfsrv_delegatecnt) || !NFSVNO_DELEGOK(vp)) *rflagsp |= NFSV4OPEN_RECALL; - nfsstatsv1.srvdelegates++; + newnfsstats.srvdelegates++; nfsrv_openpluslock++; nfsrv_delegatecnt++; @@ -2950,12 +2950,12 @@ tryagain: LIST_INSERT_HEAD(&new_stp->ls_open, new_open, ls_list); LIST_INSERT_HEAD(&clp->lc_open, new_stp, ls_list); *new_stpp = NULL; - nfsstatsv1.srvopenowners++; + newnfsstats.srvopenowners++; nfsrv_openpluslock++; } openstp = new_open; new_open = NULL; - nfsstatsv1.srvopens++; + newnfsstats.srvopens++; nfsrv_openpluslock++; } else { error = NFSERR_RECLAIMCONFLICT; @@ -3024,7 +3024,7 @@ tryagain: new_deleg->ls_stateid), new_deleg, ls_hash); LIST_INSERT_HEAD(&clp->lc_deleg, new_deleg, ls_list); new_deleg = NULL; - nfsstatsv1.srvdelegates++; + newnfsstats.srvdelegates++; nfsrv_openpluslock++; nfsrv_delegatecnt++; } @@ -3046,7 +3046,7 @@ tryagain: new_open, ls_hash); openstp = new_open; new_open = NULL; - nfsstatsv1.srvopens++; + newnfsstats.srvopens++; nfsrv_openpluslock++; /* @@ -3091,7 +3091,7 @@ tryagain: new_deleg->ls_stateid), new_deleg, ls_hash); LIST_INSERT_HEAD(&clp->lc_deleg, new_deleg, ls_list); new_deleg = NULL; - nfsstatsv1.srvdelegates++; + newnfsstats.srvdelegates++; nfsrv_openpluslock++; nfsrv_delegatecnt++; } @@ -3170,7 +3170,7 @@ tryagain: LIST_INSERT_HEAD(&clp->lc_deleg, new_deleg, ls_list); new_deleg = NULL; - nfsstatsv1.srvdelegates++; + newnfsstats.srvdelegates++; nfsrv_openpluslock++; nfsrv_delegatecnt++; } @@ -3188,9 +3188,9 @@ tryagain: openstp = new_open; new_open = NULL; *new_stpp = NULL; - nfsstatsv1.srvopens++; + newnfsstats.srvopens++; nfsrv_openpluslock++; - nfsstatsv1.srvopenowners++; + newnfsstats.srvopenowners++; nfsrv_openpluslock++; } if (!error) { @@ -3642,7 +3642,7 @@ nfsrv_insertlock(struct nfslock *new_lop, struct nfslock *insert_lop, else LIST_INSERT_AFTER(insert_lop, new_lop, lo_lckowner); if (stp != NULL) { - nfsstatsv1.srvlocks++; + newnfsstats.srvlocks++; nfsrv_openpluslock++; } } @@ -3840,7 +3840,7 @@ out: * just set lc_program to 0 to indicate no callbacks are possible. * (For cases where the address can't be parsed or is 0.0.0.0.0.0, set * the address to the client's transport address. This won't be used - * for callbacks, but can be printed out by nfsstats for info.) + * for callbacks, but can be printed out by newnfsstats for info.) * Return error if the xdr can't be parsed, 0 otherwise. */ APPLESTATIC int |