Changeset View
Changeset View
Standalone View
Standalone View
fs/nfsclient/nfs_clrpcops.c
Show First 20 Lines • Show All 1,434 Lines • ▼ Show 20 Lines | if (!nd->nd_repstat && !error) { | ||||
NFSM_STRSIZ(len, NFS_MAXPATHLEN); | NFSM_STRSIZ(len, NFS_MAXPATHLEN); | ||||
/* | /* | ||||
* This seems weird to me, but must have been added to | * This seems weird to me, but must have been added to | ||||
* FreeBSD for some reason. The only thing I can think of | * FreeBSD for some reason. The only thing I can think of | ||||
* is that there was/is some server that replies with | * is that there was/is some server that replies with | ||||
* more link data than it should? | * more link data than it should? | ||||
*/ | */ | ||||
if (len == NFS_MAXPATHLEN) { | if (len == NFS_MAXPATHLEN) { | ||||
NFSLOCKNODE(np); | sx_xlock(&np->n_slock); | ||||
if (np->n_size > 0 && np->n_size < NFS_MAXPATHLEN) { | if (np->n_size > 0 && np->n_size < NFS_MAXPATHLEN) { | ||||
len = np->n_size; | len = np->n_size; | ||||
cangetattr = 0; | cangetattr = 0; | ||||
} | } | ||||
NFSUNLOCKNODE(np); | sx_xunlock(&np->n_slock); | ||||
} | } | ||||
error = nfsm_mbufuio(nd, uiop, len); | error = nfsm_mbufuio(nd, uiop, len); | ||||
if ((nd->nd_flag & ND_NFSV4) && !error && cangetattr) | if ((nd->nd_flag & ND_NFSV4) && !error && cangetattr) | ||||
error = nfscl_postop_attr(nd, nap, attrflagp, stuff); | error = nfscl_postop_attr(nd, nap, attrflagp, stuff); | ||||
} | } | ||||
if (nd->nd_repstat && !error) | if (nd->nd_repstat && !error) | ||||
error = nd->nd_repstat; | error = nd->nd_repstat; | ||||
nfsmout: | nfsmout: | ||||
▲ Show 20 Lines • Show All 6,210 Lines • Show Last 20 Lines |