summaryrefslogtreecommitdiffstats
path: root/sys/fs/nfsserver/nfs_nfsdserv.c
diff options
context:
space:
mode:
authorrmacklem <rmacklem@FreeBSD.org>2010-12-24 21:31:18 +0000
committerrmacklem <rmacklem@FreeBSD.org>2010-12-24 21:31:18 +0000
commit8276de4a81a666e568944ecaf0db30a851b47786 (patch)
tree4c5398fc747079f8082afbff3e720d8edb2725c4 /sys/fs/nfsserver/nfs_nfsdserv.c
parentce0da79f1cca2eefdae9218bb9d265aef91ad5eb (diff)
downloadFreeBSD-src-8276de4a81a666e568944ecaf0db30a851b47786.zip
FreeBSD-src-8276de4a81a666e568944ecaf0db30a851b47786.tar.gz
Add an argument to nfsvno_getattr() in the experimental
NFS server, so that it can avoid calling VOP_ISLOCKED() when the vnode is known to be locked. This will allow LK_SHARED to be used for these cases, which happen to be all the cases that can use LK_SHARED. This does not fix any bug, but it reduces the number of calls to VOP_ISLOCKED() and prepares the code so that it can be switched to using LK_SHARED in a future patch. Reviewed by: kib MFC after: 2 weeks
Diffstat (limited to 'sys/fs/nfsserver/nfs_nfsdserv.c')
-rw-r--r--sys/fs/nfsserver/nfs_nfsdserv.c99
1 files changed, 51 insertions, 48 deletions
diff --git a/sys/fs/nfsserver/nfs_nfsdserv.c b/sys/fs/nfsserver/nfs_nfsdserv.c
index 50fa822..e4976f5 100644
--- a/sys/fs/nfsserver/nfs_nfsdserv.c
+++ b/sys/fs/nfsserver/nfs_nfsdserv.c
@@ -144,7 +144,7 @@ nfsrvd_access(struct nfsrv_descript *nd, __unused int isdgram,
}
nfsmode &= supported;
if (nd->nd_flag & ND_NFSV3) {
- getret = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ getret = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
nfsrv_postopattr(nd, getret, &nva);
}
vput(vp);
@@ -199,7 +199,7 @@ nfsrvd_getattr(struct nfsrv_descript *nd, int isdgram,
NFSACCCHK_VPISLOCKED, NULL);
}
if (!nd->nd_repstat)
- nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
if (!nd->nd_repstat) {
if (nd->nd_flag & ND_NFSV4) {
if (NFSISSET_ATTRBIT(&attrbits, NFSATTRBIT_FILEHANDLE))
@@ -255,7 +255,7 @@ nfsrvd_setattr(struct nfsrv_descript *nd, __unused int isdgram,
error = nfsrv_sattr(nd, &nva, &attrbits, aclp, p);
if (error)
goto nfsmout;
- preat_ret = nfsvno_getattr(vp, &nva2, nd->nd_cred, p);
+ preat_ret = nfsvno_getattr(vp, &nva2, nd->nd_cred, p, 1);
if (!nd->nd_repstat)
nd->nd_repstat = preat_ret;
if (nd->nd_flag & ND_NFSV3) {
@@ -375,7 +375,7 @@ nfsrvd_setattr(struct nfsrv_descript *nd, __unused int isdgram,
exp);
}
if (nd->nd_flag & (ND_NFSV2 | ND_NFSV3)) {
- postat_ret = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ postat_ret = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
if (!nd->nd_repstat)
nd->nd_repstat = postat_ret;
}
@@ -456,7 +456,7 @@ nfsrvd_lookup(struct nfsrv_descript *nd, __unused int isdgram,
if (dirp) {
if (nd->nd_flag & ND_NFSV3)
dattr_ret = nfsvno_getattr(dirp, &dattr,
- nd->nd_cred, p);
+ nd->nd_cred, p, 0);
vrele(dirp);
}
if (nd->nd_flag & ND_NFSV3)
@@ -469,7 +469,7 @@ nfsrvd_lookup(struct nfsrv_descript *nd, __unused int isdgram,
vp = named.ni_vp;
nd->nd_repstat = nfsvno_getfh(vp, fhp, p);
if (!(nd->nd_flag & ND_NFSV4) && !nd->nd_repstat)
- nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
if (vpp) {
NFSVOPUNLOCK(vp, 0, p);
*vpp = vp;
@@ -479,7 +479,7 @@ nfsrvd_lookup(struct nfsrv_descript *nd, __unused int isdgram,
if (dirp) {
if (nd->nd_flag & ND_NFSV3)
dattr_ret = nfsvno_getattr(dirp, &dattr, nd->nd_cred,
- p);
+ p, 0);
vrele(dirp);
}
if (nd->nd_repstat) {
@@ -524,7 +524,7 @@ nfsrvd_readlink(struct nfsrv_descript *nd, __unused int isdgram,
nd->nd_repstat = nfsvno_readlink(vp, nd->nd_cred, p,
&mp, &mpend, &len);
if (nd->nd_flag & ND_NFSV3)
- getret = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ getret = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
vput(vp);
if (nd->nd_flag & ND_NFSV3)
nfsrv_postopattr(nd, getret, &nva);
@@ -612,7 +612,7 @@ nfsrvd_read(struct nfsrv_descript *nd, __unused int isdgram,
nd->nd_repstat = (vnode_vtype(vp) == VDIR) ? EISDIR :
EINVAL;
}
- getret = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ getret = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
if (!nd->nd_repstat)
nd->nd_repstat = getret;
if (!nd->nd_repstat &&
@@ -650,7 +650,7 @@ nfsrvd_read(struct nfsrv_descript *nd, __unused int isdgram,
nd->nd_repstat = nfsvno_read(vp, off, cnt, nd->nd_cred, p,
&m3, &m2);
if (!(nd->nd_flag & ND_NFSV4)) {
- getret = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ getret = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
if (!nd->nd_repstat)
nd->nd_repstat = getret;
}
@@ -788,7 +788,7 @@ nfsrvd_write(struct nfsrv_descript *nd, __unused int isdgram,
nd->nd_repstat = (vnode_vtype(vp) == VDIR) ? EISDIR :
EINVAL;
}
- forat_ret = nfsvno_getattr(vp, &forat, nd->nd_cred, p);
+ forat_ret = nfsvno_getattr(vp, &forat, nd->nd_cred, p, 1);
if (!nd->nd_repstat)
nd->nd_repstat = forat_ret;
if (!nd->nd_repstat &&
@@ -823,7 +823,7 @@ nfsrvd_write(struct nfsrv_descript *nd, __unused int isdgram,
if (nd->nd_flag & ND_NFSV4)
aftat_ret = 0;
else
- aftat_ret = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ aftat_ret = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
vput(vp);
if (!nd->nd_repstat)
nd->nd_repstat = aftat_ret;
@@ -939,7 +939,7 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram,
nfsvno_relpathbuf(&named);
if (nd->nd_flag & ND_NFSV3) {
dirfor_ret = nfsvno_getattr(dp, &dirfor, nd->nd_cred,
- p);
+ p, 1);
nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret,
&diraft);
}
@@ -954,7 +954,7 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram,
dirp = NULL;
} else {
dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd->nd_cred,
- p);
+ p, 0);
}
}
if (nd->nd_repstat) {
@@ -993,7 +993,7 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram,
nd->nd_repstat = nfsvno_getfh(vp, &fh, p);
if (!nd->nd_repstat)
nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred,
- p);
+ p, 1);
vput(vp);
if (!nd->nd_repstat) {
tverf[0] = nva.na_atime.tv_sec;
@@ -1009,7 +1009,7 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram,
if (exclusive_flag && !nd->nd_repstat && (cverf[0] != tverf[0]
|| cverf[1] != tverf[1]))
nd->nd_repstat = EEXIST;
- diraft_ret = nfsvno_getattr(dirp, &diraft, nd->nd_cred, p);
+ diraft_ret = nfsvno_getattr(dirp, &diraft, nd->nd_cred, p, 0);
vrele(dirp);
if (!nd->nd_repstat) {
(void) nfsm_fhtom(nd, (u_int8_t *)&fh, 0, 1);
@@ -1136,7 +1136,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, __unused int isdgram,
}
}
- dirfor_ret = nfsvno_getattr(dp, &dirfor, nd->nd_cred, p);
+ dirfor_ret = nfsvno_getattr(dp, &dirfor, nd->nd_cred, p, 0);
if (!nd->nd_repstat && (nd->nd_flag & ND_NFSV4)) {
if (!dirfor_ret && NFSVNO_ISSETGID(&nva) &&
dirfor.na_gid == nva.na_gid)
@@ -1175,7 +1175,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, __unused int isdgram,
if (dirp) {
if (nd->nd_flag & ND_NFSV3)
dirfor_ret = nfsvno_getattr(dirp, &dirfor,
- nd->nd_cred, p);
+ nd->nd_cred, p, 0);
vrele(dirp);
}
#ifdef NFS4_ACL_EXTATTR_NAME
@@ -1187,7 +1187,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, __unused int isdgram,
return (0);
}
if (dirp)
- dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd->nd_cred, p);
+ dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd->nd_cred, p, 0);
if ((nd->nd_flag & ND_NFSV4) && (vtyp == VDIR || vtyp == VLNK)) {
if (vtyp == VDIR) {
@@ -1217,7 +1217,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, __unused int isdgram,
nd->nd_repstat = nfsvno_getfh(vp, fhp, p);
if ((nd->nd_flag & ND_NFSV3) && !nd->nd_repstat)
nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred,
- p);
+ p, 1);
if (vpp) {
NFSVOPUNLOCK(vp, 0, p);
*vpp = vp;
@@ -1226,7 +1226,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, __unused int isdgram,
}
}
- diraft_ret = nfsvno_getattr(dirp, &diraft, nd->nd_cred, p);
+ diraft_ret = nfsvno_getattr(dirp, &diraft, nd->nd_cred, p, 0);
vrele(dirp);
if (!nd->nd_repstat) {
if (nd->nd_flag & ND_NFSV3) {
@@ -1296,7 +1296,7 @@ nfsrvd_remove(struct nfsrv_descript *nd, __unused int isdgram,
if (dirp) {
if (!(nd->nd_flag & ND_NFSV2)) {
dirfor_ret = nfsvno_getattr(dirp, &dirfor,
- nd->nd_cred, p);
+ nd->nd_cred, p, 0);
} else {
vrele(dirp);
dirp = NULL;
@@ -1321,7 +1321,7 @@ nfsrvd_remove(struct nfsrv_descript *nd, __unused int isdgram,
if (!(nd->nd_flag & ND_NFSV2)) {
if (dirp) {
diraft_ret = nfsvno_getattr(dirp, &diraft, nd->nd_cred,
- p);
+ p, 0);
vrele(dirp);
}
if (nd->nd_flag & ND_NFSV3) {
@@ -1364,7 +1364,7 @@ nfsrvd_rename(struct nfsrv_descript *nd, int isdgram,
return (0);
}
if (!(nd->nd_flag & ND_NFSV2))
- fdirfor_ret = nfsvno_getattr(dp, &fdirfor, nd->nd_cred, p);
+ fdirfor_ret = nfsvno_getattr(dp, &fdirfor, nd->nd_cred, p, 1);
tond.ni_cnd.cn_nameiop = 0;
tond.ni_startdir = NULL;
NFSNAMEICNDSET(&fromnd.ni_cnd, nd->nd_cred, DELETE, WANTPARENT | SAVESTART);
@@ -1380,7 +1380,7 @@ nfsrvd_rename(struct nfsrv_descript *nd, int isdgram,
if (nd->nd_flag & ND_NFSV4) {
tdp = todp;
tnes = *toexp;
- tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd->nd_cred, p);
+ tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd->nd_cred, p, 0);
} else {
error = nfsrv_mtofh(nd, &tfh);
if (error) {
@@ -1395,7 +1395,7 @@ nfsrvd_rename(struct nfsrv_descript *nd, int isdgram,
nfsd_fhtovp(nd, &tfh, &tdp, &tnes, &mp, 0, p);
if (tdp) {
tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd->nd_cred,
- p);
+ p, 1);
NFSVOPUNLOCK(tdp, 0, p);
}
}
@@ -1463,9 +1463,11 @@ nfsrvd_rename(struct nfsrv_descript *nd, int isdgram,
nd->nd_repstat = nfsvno_rename(&fromnd, &tond, nd->nd_repstat,
nd->nd_flag, nd->nd_cred, p);
if (fdirp)
- fdiraft_ret = nfsvno_getattr(fdirp, &fdiraft, nd->nd_cred, p);
+ fdiraft_ret = nfsvno_getattr(fdirp, &fdiraft, nd->nd_cred, p,
+ 0);
if (tdirp)
- tdiraft_ret = nfsvno_getattr(tdirp, &tdiraft, nd->nd_cred, p);
+ tdiraft_ret = nfsvno_getattr(tdirp, &tdiraft, nd->nd_cred, p,
+ 0);
if (tnes.nes_vfslocked && !exp->nes_vfslocked &&
!(nd->nd_flag & ND_NFSV4))
nfsvno_unlockvfs(mp);
@@ -1580,15 +1582,15 @@ nfsrvd_link(struct nfsrv_descript *nd, int isdgram,
dirp = NULL;
} else {
dirfor_ret = nfsvno_getattr(dirp, &dirfor,
- nd->nd_cred, p);
+ nd->nd_cred, p, 0);
}
}
if (!nd->nd_repstat)
nd->nd_repstat = nfsvno_link(&named, vp, nd->nd_cred, p, exp);
if (nd->nd_flag & ND_NFSV3)
- getret = nfsvno_getattr(vp, &at, nd->nd_cred, p);
+ getret = nfsvno_getattr(vp, &at, nd->nd_cred, p, 0);
if (dirp) {
- diraft_ret = nfsvno_getattr(dirp, &diraft, nd->nd_cred, p);
+ diraft_ret = nfsvno_getattr(dirp, &diraft, nd->nd_cred, p, 0);
vrele(dirp);
}
if (tnes.nes_vfslocked && !exp->nes_vfslocked &&
@@ -1659,12 +1661,12 @@ nfsrvd_symlink(struct nfsrv_descript *nd, __unused int isdgram,
if (!nd->nd_repstat) {
if (dirp != NULL)
dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd->nd_cred,
- p);
+ p, 0);
nfsrvd_symlinksub(nd, &named, &nva, fhp, vpp, dirp,
&dirfor, &diraft, &diraft_ret, NULL, NULL, p, exp,
pathcp, pathlen);
} else if (dirp != NULL) {
- dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd->nd_cred, p);
+ dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd->nd_cred, p, 0);
vrele(dirp);
}
if (pathcp)
@@ -1701,7 +1703,7 @@ nfsrvd_symlinksub(struct nfsrv_descript *nd, struct nameidata *ndp,
nd->nd_repstat = nfsvno_getfh(ndp->ni_vp, fhp, p);
if (!nd->nd_repstat)
nd->nd_repstat = nfsvno_getattr(ndp->ni_vp,
- nvap, nd->nd_cred, p);
+ nvap, nd->nd_cred, p, 1);
}
if (vpp) {
NFSVOPUNLOCK(ndp->ni_vp, 0, p);
@@ -1711,7 +1713,7 @@ nfsrvd_symlinksub(struct nfsrv_descript *nd, struct nameidata *ndp,
}
}
if (dirp) {
- *diraft_retp = nfsvno_getattr(dirp, diraftp, nd->nd_cred, p);
+ *diraft_retp = nfsvno_getattr(dirp, diraftp, nd->nd_cred, p, 0);
vrele(dirp);
}
if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) {
@@ -1780,7 +1782,7 @@ nfsrvd_mkdir(struct nfsrv_descript *nd, __unused int isdgram,
if (nd->nd_repstat) {
if (dirp != NULL) {
dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd->nd_cred,
- p);
+ p, 0);
vrele(dirp);
}
if (nd->nd_flag & ND_NFSV3)
@@ -1789,7 +1791,7 @@ nfsrvd_mkdir(struct nfsrv_descript *nd, __unused int isdgram,
return (0);
}
if (dirp != NULL)
- dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd->nd_cred, p);
+ dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd->nd_cred, p, 0);
/*
* Call nfsrvd_mkdirsub() for the code common to V4 as well.
@@ -1836,7 +1838,7 @@ nfsrvd_mkdirsub(struct nfsrv_descript *nd, struct nameidata *ndp,
nd->nd_repstat = nfsvno_getfh(vp, fhp, p);
if (!(nd->nd_flag & ND_NFSV4) && !nd->nd_repstat)
nd->nd_repstat = nfsvno_getattr(vp, nvap, nd->nd_cred,
- p);
+ p, 1);
if (vpp && !nd->nd_repstat) {
NFSVOPUNLOCK(vp, 0, p);
*vpp = vp;
@@ -1845,7 +1847,7 @@ nfsrvd_mkdirsub(struct nfsrv_descript *nd, struct nameidata *ndp,
}
}
if (dirp) {
- *diraft_retp = nfsvno_getattr(dirp, diraftp, nd->nd_cred, p);
+ *diraft_retp = nfsvno_getattr(dirp, diraftp, nd->nd_cred, p, 0);
vrele(dirp);
}
if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) {
@@ -1883,10 +1885,10 @@ nfsrvd_commit(struct nfsrv_descript *nd, __unused int isdgram,
tl += 2;
cnt = fxdr_unsigned(int, *tl);
if (nd->nd_flag & ND_NFSV3)
- for_ret = nfsvno_getattr(vp, &bfor, nd->nd_cred, p);
+ for_ret = nfsvno_getattr(vp, &bfor, nd->nd_cred, p, 1);
nd->nd_repstat = nfsvno_fsync(vp, off, cnt, nd->nd_cred, p);
if (nd->nd_flag & ND_NFSV3) {
- aft_ret = nfsvno_getattr(vp, &aft, nd->nd_cred, p);
+ aft_ret = nfsvno_getattr(vp, &aft, nd->nd_cred, p, 1);
nfsrv_wcc(nd, for_ret, &bfor, aft_ret, &aft);
}
vput(vp);
@@ -1921,7 +1923,7 @@ nfsrvd_statfs(struct nfsrv_descript *nd, __unused int isdgram,
}
sf = &sfs;
nd->nd_repstat = nfsvno_statfs(vp, sf);
- getret = nfsvno_getattr(vp, &at, nd->nd_cred, p);
+ getret = nfsvno_getattr(vp, &at, nd->nd_cred, p, 1);
vput(vp);
if (nd->nd_flag & ND_NFSV3)
nfsrv_postopattr(nd, getret, &at);
@@ -1972,7 +1974,7 @@ nfsrvd_fsinfo(struct nfsrv_descript *nd, int isdgram,
nfsrv_postopattr(nd, getret, &at);
return (0);
}
- getret = nfsvno_getattr(vp, &at, nd->nd_cred, p);
+ getret = nfsvno_getattr(vp, &at, nd->nd_cred, p, 1);
nfsvno_getfs(&fs, isdgram);
vput(vp);
nfsrv_postopattr(nd, getret, &at);
@@ -2019,7 +2021,7 @@ nfsrvd_pathconf(struct nfsrv_descript *nd, __unused int isdgram,
if (!nd->nd_repstat)
nd->nd_repstat = nfsvno_pathconf(vp, _PC_NO_TRUNC, &notrunc,
nd->nd_cred, p);
- getret = nfsvno_getattr(vp, &at, nd->nd_cred, p);
+ getret = nfsvno_getattr(vp, &at, nd->nd_cred, p, 1);
vput(vp);
nfsrv_postopattr(nd, getret, &at);
if (!nd->nd_repstat) {
@@ -2516,7 +2518,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram,
NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED);
create = fxdr_unsigned(int, *tl);
if (!nd->nd_repstat)
- nd->nd_repstat = nfsvno_getattr(dp, &dirfor, nd->nd_cred, p);
+ nd->nd_repstat = nfsvno_getattr(dp, &dirfor, nd->nd_cred, p, 0);
if (create == NFSV4OPEN_CREATE) {
nva.na_type = VREG;
nva.na_mode = 0;
@@ -2710,7 +2712,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram,
}
if (!nd->nd_repstat) {
- nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
if (!nd->nd_repstat) {
tverf[0] = nva.na_atime.tv_sec;
tverf[1] = nva.na_atime.tv_nsec;
@@ -2736,7 +2738,8 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram,
if (stp)
FREE((caddr_t)stp, M_NFSDSTATE);
if (!nd->nd_repstat && dirp)
- nd->nd_repstat = nfsvno_getattr(dirp, &diraft, nd->nd_cred, p);
+ nd->nd_repstat = nfsvno_getattr(dirp, &diraft, nd->nd_cred, p,
+ 0);
if (!nd->nd_repstat) {
NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID + 6 * NFSX_UNSIGNED);
*tl++ = txdr_unsigned(stateid.seqid);
@@ -3348,7 +3351,7 @@ nfsrvd_verify(struct nfsrv_descript *nd, int isdgram,
struct nfsfsinfo fs;
fhandle_t fh;
- nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
+ nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
if (!nd->nd_repstat)
nd->nd_repstat = nfsvno_statfs(vp, &sf);
if (!nd->nd_repstat)
OpenPOWER on IntegriCloud