[Zrouter-src-freebsd] ZRouter.org: push to FreeBSD HEAD tree
zrouter-src-freebsd at zrouter.org
zrouter-src-freebsd at zrouter.org
Wed Feb 1 10:56:24 UTC 2012
details: http://zrouter.org/hg/FreeBSD/head//rev/393510e878e5
changeset: 305:393510e878e5
user: ray at terran.dlink.ua
date: Wed Feb 01 11:31:00 2012 +0200
description:
Update sys/nfsclient
diffstat:
head/sys/nfsclient/nfs_bio.c | 16 +---
head/sys/nfsclient/nfs_subs.c | 10 +-
head/sys/nfsclient/nfs_vfsops.c | 40 ++++++++++--
head/sys/nfsclient/nfs_vnops.c | 126 +++++++++++++++++----------------------
head/sys/nfsclient/nfsm_subs.h | 15 +++-
head/sys/nfsclient/nfsmount.h | 7 +-
head/sys/nfsclient/nfsnode.h | 5 +-
7 files changed, 118 insertions(+), 101 deletions(-)
diffs (559 lines):
diff -r e0562ffa123c -r 393510e878e5 head/sys/nfsclient/nfs_bio.c
--- a/head/sys/nfsclient/nfs_bio.c Wed Feb 01 11:30:18 2012 +0200
+++ b/head/sys/nfsclient/nfs_bio.c Wed Feb 01 11:31:00 2012 +0200
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_bio.c 228156 2011-11-30 17:39:00Z kib $");
+__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_bio.c 230605 2012-01-27 02:46:12Z rmacklem $");
#include "opt_kdtrace.h"
@@ -474,7 +474,7 @@
/* No caching/ no readaheads. Just read data into the user buffer */
return nfs_readrpc(vp, uio, cred);
- biosize = vp->v_mount->mnt_stat.f_iosize;
+ biosize = vp->v_bufobj.bo_bsize;
seqcount = (int)((off_t)(ioflag >> IO_SEQSHIFT) * biosize / BKVASIZE);
error = nfs_bioread_check_cons(vp, td, cred);
@@ -951,7 +951,7 @@
if (vn_rlimit_fsize(vp, uio, td))
return (EFBIG);
- biosize = vp->v_mount->mnt_stat.f_iosize;
+ biosize = vp->v_bufobj.bo_bsize;
/*
* Find all of this file's B_NEEDCOMMIT buffers. If our writes
* would exceed the local maximum per-file write commit size when
@@ -1255,12 +1255,8 @@
bp = getblk(vp, bn, size, 0, 0, 0);
}
- if (vp->v_type == VREG) {
- int biosize;
-
- biosize = mp->mnt_stat.f_iosize;
- bp->b_blkno = bn * (biosize / DEV_BSIZE);
- }
+ if (vp->v_type == VREG)
+ bp->b_blkno = bn * (vp->v_bufobj.bo_bsize / DEV_BSIZE);
return (bp);
}
@@ -1767,7 +1763,7 @@
{
struct nfsnode *np = VTONFS(vp);
u_quad_t tsize;
- int biosize = vp->v_mount->mnt_stat.f_iosize;
+ int biosize = vp->v_bufobj.bo_bsize;
int error = 0;
mtx_lock(&np->n_mtx);
diff -r e0562ffa123c -r 393510e878e5 head/sys/nfsclient/nfs_subs.c
--- a/head/sys/nfsclient/nfs_subs.c Wed Feb 01 11:30:18 2012 +0200
+++ b/head/sys/nfsclient/nfs_subs.c Wed Feb 01 11:31:00 2012 +0200
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_subs.c 221973 2011-05-15 20:52:43Z rmacklem $");
+__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_subs.c 230394 2012-01-20 20:02:01Z jhb $");
/*
* These functions support the macros and help fiddle mbuf chains for
@@ -978,8 +978,8 @@
}
int
-nfsm_postop_attr_xx(struct vnode **v, int *f, struct mbuf **md,
- caddr_t *dpos)
+nfsm_postop_attr_xx(struct vnode **v, int *f, struct vattr *va,
+ struct mbuf **md, caddr_t *dpos)
{
u_int32_t *tl;
int t1;
@@ -990,7 +990,7 @@
return EBADRPC;
*f = fxdr_unsigned(int, *tl);
if (*f != 0) {
- t1 = nfs_loadattrcache(&ttvp, md, dpos, NULL, 1);
+ t1 = nfs_loadattrcache(&ttvp, md, dpos, va, 1);
if (t1 != 0) {
*f = 0;
return t1;
@@ -1020,7 +1020,7 @@
VTONFS(*v)->n_mtime.tv_nsec == fxdr_unsigned(u_int32_t, *(tl + 3)));
mtx_unlock(&(VTONFS(*v))->n_mtx);
}
- t1 = nfsm_postop_attr_xx(v, &ttattrf, md, dpos);
+ t1 = nfsm_postop_attr_xx(v, &ttattrf, NULL, md, dpos);
if (t1)
return t1;
if (*f)
diff -r e0562ffa123c -r 393510e878e5 head/sys/nfsclient/nfs_vfsops.c
--- a/head/sys/nfsclient/nfs_vfsops.c Wed Feb 01 11:30:18 2012 +0200
+++ b/head/sys/nfsclient/nfs_vfsops.c Wed Feb 01 11:31:00 2012 +0200
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_vfsops.c 227507 2011-11-14 18:52:07Z jhb $");
+__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_vfsops.c 230803 2012-01-31 03:58:26Z rmacklem $");
#include "opt_bootp.h"
@@ -56,6 +56,7 @@
#include <sys/socketvar.h>
#include <sys/sockio.h>
#include <sys/sysctl.h>
+#include <sys/syslog.h>
#include <sys/vnode.h>
#include <sys/signalvar.h>
@@ -117,7 +118,7 @@
struct nfs_args *argp, const char *hostname);
static int mountnfs(struct nfs_args *, struct mount *,
struct sockaddr *, char *, struct vnode **,
- struct ucred *cred, int);
+ struct ucred *cred, int, int);
static void nfs_getnlminfo(struct vnode *, uint8_t *, size_t *,
struct sockaddr_storage *, int *, off_t *,
struct timeval *);
@@ -559,8 +560,8 @@
int error;
nam = sodupsockaddr((struct sockaddr *)sin, M_WAITOK);
- if ((error = mountnfs(args, mp, nam, path, vpp,
- td->td_ucred, NFS_DEFAULT_NEGNAMETIMEO)) != 0) {
+ if ((error = mountnfs(args, mp, nam, path, vpp, td->td_ucred,
+ NFS_DEFAULT_NAMETIMEO, NFS_DEFAULT_NEGNAMETIMEO)) != 0) {
printf("nfs_mountroot: mount %s on /: %d\n", path, error);
return (error);
}
@@ -788,6 +789,7 @@
"wsize", "rsize", "retrans", "acregmin", "acregmax", "acdirmin",
"acdirmax", "deadthresh", "hostname", "timeout", "addr", "fh", "nfsv3",
"sec", "maxgroups", "principal", "negnametimeo", "nocto", "wcommitsize",
+ "nametimeo",
NULL };
/*
@@ -836,6 +838,7 @@
size_t len;
u_char nfh[NFSX_V3FHMAX];
char *opt;
+ int nametimeo = NFS_DEFAULT_NAMETIMEO;
int negnametimeo = NFS_DEFAULT_NEGNAMETIMEO;
has_nfs_args_opt = 0;
@@ -1058,6 +1061,14 @@
}
args.flags |= NFSMNT_MAXGRPS;
}
+ if (vfs_getopt(mp->mnt_optnew, "nametimeo", (void **)&opt, NULL) == 0) {
+ ret = sscanf(opt, "%d", &nametimeo);
+ if (ret != 1 || nametimeo < 0) {
+ vfs_mount_error(mp, "illegal nametimeo: %s", opt);
+ error = EINVAL;
+ goto out;
+ }
+ }
if (vfs_getopt(mp->mnt_optnew, "negnametimeo", (void **)&opt, NULL)
== 0) {
ret = sscanf(opt, "%d", &negnametimeo);
@@ -1106,6 +1117,19 @@
error = EIO;
goto out;
}
+
+ /*
+ * If a change from TCP->UDP is done and there are thread(s)
+ * that have I/O RPC(s) in progress with a tranfer size
+ * greater than NFS_MAXDGRAMDATA, those thread(s) will be
+ * hung, retrying the RPC(s) forever. Usually these threads
+ * will be seen doing an uninterruptible sleep on wait channel
+ * "newnfsreq" (truncated to "newnfsre" by procstat).
+ */
+ if (args.sotype == SOCK_DGRAM && nmp->nm_sotype == SOCK_STREAM)
+ tprintf(curthread->td_proc, LOG_WARNING,
+ "Warning: mount -u that changes TCP->UDP can result in hung threads\n");
+
/*
* When doing an update, we can't change from or to
* v3, switch lockd strategies or change cookie translation
@@ -1165,7 +1189,7 @@
goto out;
}
error = mountnfs(&args, mp, nam, args.hostname, &vp,
- curthread->td_ucred, negnametimeo);
+ curthread->td_ucred, nametimeo, negnametimeo);
out:
if (!error) {
MNT_ILOCK(mp);
@@ -1187,7 +1211,7 @@
*/
/* ARGSUSED */
static int
-nfs_cmount(struct mntarg *ma, void *data, int flags)
+nfs_cmount(struct mntarg *ma, void *data, uint64_t flags)
{
int error;
struct nfs_args args;
@@ -1207,7 +1231,8 @@
*/
static int
mountnfs(struct nfs_args *argp, struct mount *mp, struct sockaddr *nam,
- char *hst, struct vnode **vpp, struct ucred *cred, int negnametimeo)
+ char *hst, struct vnode **vpp, struct ucred *cred, int nametimeo,
+ int negnametimeo)
{
struct nfsmount *nmp;
struct nfsnode *np;
@@ -1257,6 +1282,7 @@
nmp->nm_numgrps = NFS_MAXGRPS;
nmp->nm_readahead = NFS_DEFRAHEAD;
nmp->nm_deadthresh = NFS_MAXDEADTHRESH;
+ nmp->nm_nametimeo = nametimeo;
nmp->nm_negnametimeo = negnametimeo;
nmp->nm_tprintf_delay = nfs_tprintf_delay;
if (nmp->nm_tprintf_delay < 0)
diff -r e0562ffa123c -r 393510e878e5 head/sys/nfsclient/nfs_vnops.c
--- a/head/sys/nfsclient/nfs_vnops.c Wed Feb 01 11:30:18 2012 +0200
+++ b/head/sys/nfsclient/nfs_vnops.c Wed Feb 01 11:31:00 2012 +0200
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_vnops.c 224733 2011-08-09 15:29:58Z jhb $");
+__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_vnops.c 230552 2012-01-25 20:48:20Z kib $");
/*
* vnode op calls for Sun NFS version 2 and 3
@@ -913,7 +913,7 @@
struct vnode **vpp = ap->a_vpp;
struct mount *mp = dvp->v_mount;
struct vattr vattr;
- struct timespec dmtime;
+ struct timespec nctime;
int flags = cnp->cn_flags;
struct vnode *newvp;
struct nfsmount *nmp;
@@ -922,7 +922,7 @@
long len;
nfsfh_t *fhp;
struct nfsnode *np, *newnp;
- int error = 0, attrflag, fhsize, ltype;
+ int error = 0, attrflag, dattrflag, fhsize, ltype, ncticks;
int v3 = NFS_ISV3(dvp);
struct thread *td = cnp->cn_thread;
@@ -938,15 +938,29 @@
*vpp = NULLVP;
return (error);
}
- error = cache_lookup(dvp, vpp, cnp);
+ error = cache_lookup_times(dvp, vpp, cnp, &nctime, &ncticks);
if (error > 0 && error != ENOENT)
return (error);
if (error == -1) {
/*
+ * Lookups of "." are special and always return the
+ * current directory. cache_lookup() already handles
+ * associated locking bookkeeping, etc.
+ */
+ if (cnp->cn_namelen == 1 && cnp->cn_nameptr[0] == '.') {
+ /* XXX: Is this really correct? */
+ if (cnp->cn_nameiop != LOOKUP &&
+ (flags & ISLASTCN))
+ cnp->cn_flags |= SAVENAME;
+ return (0);
+ }
+
+ /*
* We only accept a positive hit in the cache if the
* change time of the file matches our cached copy.
* Otherwise, we discard the cache entry and fallback
- * to doing a lookup RPC.
+ * to doing a lookup RPC. We also only trust cache
+ * entries for less than nm_nametimeo seconds.
*
* To better handle stale file handles and attributes,
* clear the attribute cache of this node if it is a
@@ -967,8 +981,9 @@
KDTRACE_NFS_ATTRCACHE_FLUSH_DONE(newvp);
mtx_unlock(&newnp->n_mtx);
}
- if (VOP_GETATTR(newvp, &vattr, cnp->cn_cred) == 0 &&
- timespeccmp(&vattr.va_ctime, &newnp->n_ctime, ==)) {
+ if ((u_int)(ticks - ncticks) < (nmp->nm_nametimeo * hz) &&
+ VOP_GETATTR(newvp, &vattr, cnp->cn_cred) == 0 &&
+ timespeccmp(&vattr.va_ctime, &nctime, ==)) {
nfsstats.lookupcache_hits++;
if (cnp->cn_nameiop != LOOKUP &&
(flags & ISLASTCN))
@@ -987,36 +1002,22 @@
/*
* We only accept a negative hit in the cache if the
* modification time of the parent directory matches
- * our cached copy. Otherwise, we discard all of the
- * negative cache entries for this directory. We also
- * only trust -ve cache entries for less than
- * nm_negative_namecache_timeout seconds.
+ * the cached copy in the name cache entry.
+ * Otherwise, we discard all of the negative cache
+ * entries for this directory. We also only trust
+ * negative cache entries for up to nm_negnametimeo
+ * seconds.
*/
- if ((u_int)(ticks - np->n_dmtime_ticks) <
- (nmp->nm_negnametimeo * hz) &&
+ if ((u_int)(ticks - ncticks) < (nmp->nm_negnametimeo * hz) &&
VOP_GETATTR(dvp, &vattr, cnp->cn_cred) == 0 &&
- timespeccmp(&vattr.va_mtime, &np->n_dmtime, ==)) {
+ timespeccmp(&vattr.va_mtime, &nctime, ==)) {
nfsstats.lookupcache_hits++;
return (ENOENT);
}
cache_purge_negative(dvp);
- mtx_lock(&np->n_mtx);
- timespecclear(&np->n_dmtime);
- mtx_unlock(&np->n_mtx);
}
- /*
- * Cache the modification time of the parent directory in case
- * the lookup fails and results in adding the first negative
- * name cache entry for the directory. Since this is reading
- * a single time_t, don't bother with locking. The
- * modification time may be a bit stale, but it must be read
- * before performing the lookup RPC to prevent a race where
- * another lookup updates the timestamp on the directory after
- * the lookup RPC has been performed on the server but before
- * n_dmtime is set at the end of this function.
- */
- dmtime = np->n_vattr.va_mtime;
+ attrflag = dattrflag = 0;
error = 0;
newvp = NULLVP;
nfsstats.lookupcache_misses++;
@@ -1031,7 +1032,7 @@
nfsm_request(dvp, NFSPROC_LOOKUP, cnp->cn_thread, cnp->cn_cred);
if (error) {
if (v3) {
- nfsm_postop_attr(dvp, attrflag);
+ nfsm_postop_attr_va(dvp, dattrflag, &vattr);
m_freem(mrep);
}
goto nfsmout;
@@ -1127,16 +1128,17 @@
}
}
if (v3) {
- nfsm_postop_attr(newvp, attrflag);
- nfsm_postop_attr(dvp, attrflag);
- } else
- nfsm_loadattr(newvp, NULL);
+ nfsm_postop_attr_va(newvp, attrflag, &vattr);
+ nfsm_postop_attr(dvp, dattrflag);
+ } else {
+ nfsm_loadattr(newvp, &vattr);
+ attrflag = 1;
+ }
if (cnp->cn_nameiop != LOOKUP && (flags & ISLASTCN))
cnp->cn_flags |= SAVENAME;
if ((cnp->cn_flags & MAKEENTRY) &&
- (cnp->cn_nameiop != DELETE || !(flags & ISLASTCN))) {
- np->n_ctime = np->n_vattr.va_ctime;
- cache_enter(dvp, newvp, cnp);
+ (cnp->cn_nameiop != DELETE || !(flags & ISLASTCN)) && attrflag) {
+ cache_enter_time(dvp, newvp, cnp, &vattr.va_ctime);
}
*vpp = newvp;
m_freem(mrep);
@@ -1164,30 +1166,22 @@
return (EJUSTRETURN);
}
- if ((cnp->cn_flags & MAKEENTRY) && cnp->cn_nameiop != CREATE) {
+ if ((cnp->cn_flags & MAKEENTRY) && cnp->cn_nameiop != CREATE &&
+ dattrflag) {
/*
- * Maintain n_dmtime as the modification time
- * of the parent directory when the oldest -ve
- * name cache entry for this directory was
- * added. If a -ve cache entry has already
- * been added with a newer modification time
- * by a concurrent lookup, then don't bother
- * adding a cache entry. The modification
- * time of the directory might have changed
- * due to the file this lookup failed to find
- * being created. In that case a subsequent
- * lookup would incorrectly use the entry
- * added here instead of doing an extra
- * lookup.
+ * Cache the modification time of the parent
+ * directory from the post-op attributes in
+ * the name cache entry. The negative cache
+ * entry will be ignored once the directory
+ * has changed. Don't bother adding the entry
+ * if the directory has already changed.
*/
mtx_lock(&np->n_mtx);
- if (timespeccmp(&np->n_dmtime, &dmtime, <=)) {
- if (!timespecisset(&np->n_dmtime)) {
- np->n_dmtime = dmtime;
- np->n_dmtime_ticks = ticks;
- }
+ if (timespeccmp(&np->n_vattr.va_mtime,
+ &vattr.va_mtime, ==)) {
mtx_unlock(&np->n_mtx);
- cache_enter(dvp, NULL, cnp);
+ cache_enter_time(dvp, NULL, cnp,
+ &vattr.va_mtime);
} else
mtx_unlock(&np->n_mtx);
}
@@ -1538,8 +1532,6 @@
if (newvp)
vput(newvp);
} else {
- if (cnp->cn_flags & MAKEENTRY)
- cache_enter(dvp, newvp, cnp);
*vpp = newvp;
}
mtx_lock(&(VTONFS(dvp))->n_mtx);
@@ -1678,8 +1670,6 @@
vput(newvp);
}
if (!error) {
- if (cnp->cn_flags & MAKEENTRY)
- cache_enter(dvp, newvp, cnp);
*ap->a_vpp = newvp;
}
mtx_lock(&(VTONFS(dvp))->n_mtx);
@@ -2473,6 +2463,7 @@
nfsuint64 cookie;
struct nfsmount *nmp = VFSTONFS(vp->v_mount);
struct nfsnode *dnp = VTONFS(vp), *np;
+ struct vattr vattr;
nfsfh_t *fhp;
u_quad_t fileno;
int error = 0, tlen, more_dirs = 1, blksiz = 0, doit, bigenough = 1, i;
@@ -2653,18 +2644,13 @@
dpos = dpossav1;
mdsav2 = md;
md = mdsav1;
- nfsm_loadattr(newvp, NULL);
+ nfsm_loadattr(newvp, &vattr);
dpos = dpossav2;
md = mdsav2;
- dp->d_type =
- IFTODT(VTTOIF(np->n_vattr.va_type));
+ dp->d_type = IFTODT(VTTOIF(vattr.va_type));
ndp->ni_vp = newvp;
- /*
- * Update n_ctime so subsequent lookup
- * doesn't purge entry.
- */
- np->n_ctime = np->n_vattr.va_ctime;
- cache_enter(ndp->ni_dvp, ndp->ni_vp, cnp);
+ cache_enter_time(ndp->ni_dvp, ndp->ni_vp, cnp,
+ &vattr.va_ctime);
}
} else {
/* Just skip over the file handle */
diff -r e0562ffa123c -r 393510e878e5 head/sys/nfsclient/nfsm_subs.h
--- a/head/sys/nfsclient/nfsm_subs.h Wed Feb 01 11:30:18 2012 +0200
+++ b/head/sys/nfsclient/nfsm_subs.h Wed Feb 01 11:31:00 2012 +0200
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*
* @(#)nfsm_subs.h 8.2 (Berkeley) 3/30/95
- * $FreeBSD$
+ * $FreeBSD: head/sys/nfsclient/nfsm_subs.h 230394 2012-01-20 20:02:01Z jhb $
*/
#ifndef _NFSCLIENT_NFSM_SUBS_H_
@@ -152,8 +152,8 @@
caddr_t *dpos);
int nfsm_loadattr_xx(struct vnode **v, struct vattr *va, struct mbuf **md,
caddr_t *dpos);
-int nfsm_postop_attr_xx(struct vnode **v, int *f, struct mbuf **md,
- caddr_t *dpos);
+int nfsm_postop_attr_xx(struct vnode **v, int *f, struct vattr *va,
+ struct mbuf **md, caddr_t *dpos);
int nfsm_wcc_data_xx(struct vnode **v, int *f, struct mbuf **md,
caddr_t *dpos);
@@ -181,7 +181,14 @@
#define nfsm_postop_attr(v, f) \
do { \
int32_t t1; \
- t1 = nfsm_postop_attr_xx(&v, &f, &md, &dpos); \
+ t1 = nfsm_postop_attr_xx(&v, &f, NULL, &md, &dpos); \
+ nfsm_dcheck(t1, mrep); \
+} while (0)
+
+#define nfsm_postop_attr_va(v, f, va) \
+do { \
+ int32_t t1; \
+ t1 = nfsm_postop_attr_xx(&v, &f, va, &md, &dpos); \
nfsm_dcheck(t1, mrep); \
} while (0)
diff -r e0562ffa123c -r 393510e878e5 head/sys/nfsclient/nfsmount.h
--- a/head/sys/nfsclient/nfsmount.h Wed Feb 01 11:30:18 2012 +0200
+++ b/head/sys/nfsclient/nfsmount.h Wed Feb 01 11:31:00 2012 +0200
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*
* @(#)nfsmount.h 8.3 (Berkeley) 3/30/95
- * $FreeBSD$
+ * $FreeBSD: head/sys/nfsclient/nfsmount.h 230547 2012-01-25 20:05:58Z jhb $
*/
#ifndef _NFSCLIENT_NFSMOUNT_H_
@@ -83,6 +83,7 @@
struct rpc_timers nm_timers[NFS_MAX_TIMER]; /* RTT Timers for rpcs */
char nm_principal[MNAMELEN]; /* GSS-API principal of server */
gss_OID nm_mech_oid; /* OID of selected GSS-API mechanism */
+ int nm_nametimeo; /* timeout for +ve entries (sec) */
int nm_negnametimeo; /* timeout for -ve entries (sec) */
/* NFSv4 */
@@ -116,6 +117,10 @@
#define NFS_TPRINTF_DELAY 30
#endif
+#ifndef NFS_DEFAULT_NAMETIMEO
+#define NFS_DEFAULT_NAMETIMEO 60
+#endif
+
#ifndef NFS_DEFAULT_NEGNAMETIMEO
#define NFS_DEFAULT_NEGNAMETIMEO 60
#endif
diff -r e0562ffa123c -r 393510e878e5 head/sys/nfsclient/nfsnode.h
--- a/head/sys/nfsclient/nfsnode.h Wed Feb 01 11:30:18 2012 +0200
+++ b/head/sys/nfsclient/nfsnode.h Wed Feb 01 11:31:00 2012 +0200
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*
* @(#)nfsnode.h 8.9 (Berkeley) 5/14/95
- * $FreeBSD: head/sys/nfsclient/nfsnode.h 224604 2011-08-02 11:24:42Z rmacklem $
+ * $FreeBSD: head/sys/nfsclient/nfsnode.h 230394 2012-01-20 20:02:01Z jhb $
*/
#ifndef _NFSCLIENT_NFSNODE_H_
@@ -104,9 +104,6 @@
time_t n_attrstamp; /* Attr. cache timestamp */
struct nfs_accesscache n_accesscache[NFS_ACCESSCACHESIZE];
struct timespec n_mtime; /* Prev modify time. */
- struct timespec n_ctime; /* Prev create time. */
- struct timespec n_dmtime; /* Prev dir modify time. */
- int n_dmtime_ticks; /* Tick of -ve cache entry */
nfsfh_t *n_fhp; /* NFS File Handle */
struct vnode *n_vnode; /* associated vnode */
struct vnode *n_dvp; /* parent vnode */
More information about the Zrouter-src-freebsd
mailing list