Changeset View
Changeset View
Standalone View
Standalone View
head/sys/fs/nfsclient/nfs_clvnops.c
Show First 20 Lines • Show All 1,492 Lines • ▼ Show 20 Lines | |||||
*/ | */ | ||||
int | int | ||||
ncl_readrpc(struct vnode *vp, struct uio *uiop, struct ucred *cred) | ncl_readrpc(struct vnode *vp, struct uio *uiop, struct ucred *cred) | ||||
{ | { | ||||
int error, ret, attrflag; | int error, ret, attrflag; | ||||
struct nfsvattr nfsva; | struct nfsvattr nfsva; | ||||
struct nfsmount *nmp; | struct nfsmount *nmp; | ||||
nmp = VFSTONFS(vnode_mount(vp)); | nmp = VFSTONFS(vp->v_mount); | ||||
error = EIO; | error = EIO; | ||||
attrflag = 0; | attrflag = 0; | ||||
if (NFSHASPNFS(nmp)) | if (NFSHASPNFS(nmp)) | ||||
error = nfscl_doiods(vp, uiop, NULL, NULL, | error = nfscl_doiods(vp, uiop, NULL, NULL, | ||||
NFSV4OPEN_ACCESSREAD, 0, cred, uiop->uio_td); | NFSV4OPEN_ACCESSREAD, 0, cred, uiop->uio_td); | ||||
NFSCL_DEBUG(4, "readrpc: aft doiods=%d\n", error); | NFSCL_DEBUG(4, "readrpc: aft doiods=%d\n", error); | ||||
if (error != 0) | if (error != 0) | ||||
error = nfsrpc_read(vp, uiop, cred, uiop->uio_td, &nfsva, | error = nfsrpc_read(vp, uiop, cred, uiop->uio_td, &nfsva, | ||||
Show All 14 Lines | |||||
int | int | ||||
ncl_writerpc(struct vnode *vp, struct uio *uiop, struct ucred *cred, | ncl_writerpc(struct vnode *vp, struct uio *uiop, struct ucred *cred, | ||||
int *iomode, int *must_commit, int called_from_strategy) | int *iomode, int *must_commit, int called_from_strategy) | ||||
{ | { | ||||
struct nfsvattr nfsva; | struct nfsvattr nfsva; | ||||
int error, attrflag, ret; | int error, attrflag, ret; | ||||
struct nfsmount *nmp; | struct nfsmount *nmp; | ||||
nmp = VFSTONFS(vnode_mount(vp)); | nmp = VFSTONFS(vp->v_mount); | ||||
error = EIO; | error = EIO; | ||||
attrflag = 0; | attrflag = 0; | ||||
if (NFSHASPNFS(nmp)) | if (NFSHASPNFS(nmp)) | ||||
error = nfscl_doiods(vp, uiop, iomode, must_commit, | error = nfscl_doiods(vp, uiop, iomode, must_commit, | ||||
NFSV4OPEN_ACCESSWRITE, 0, cred, uiop->uio_td); | NFSV4OPEN_ACCESSWRITE, 0, cred, uiop->uio_td); | ||||
NFSCL_DEBUG(4, "writerpc: aft doiods=%d\n", error); | NFSCL_DEBUG(4, "writerpc: aft doiods=%d\n", error); | ||||
if (error != 0) | if (error != 0) | ||||
error = nfsrpc_write(vp, uiop, iomode, must_commit, cred, | error = nfsrpc_write(vp, uiop, iomode, must_commit, cred, | ||||
▲ Show 20 Lines • Show All 141 Lines • ▼ Show 20 Lines | nfs_create(struct vop_create_args *ap) | ||||
if (vap->va_type == VSOCK) | if (vap->va_type == VSOCK) | ||||
return (nfs_mknodrpc(dvp, ap->a_vpp, cnp, vap)); | return (nfs_mknodrpc(dvp, ap->a_vpp, cnp, vap)); | ||||
if ((error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred))) | if ((error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred))) | ||||
return (error); | return (error); | ||||
if (vap->va_vaflags & VA_EXCLUSIVE) | if (vap->va_vaflags & VA_EXCLUSIVE) | ||||
fmode |= O_EXCL; | fmode |= O_EXCL; | ||||
dnp = VTONFS(dvp); | dnp = VTONFS(dvp); | ||||
nmp = VFSTONFS(vnode_mount(dvp)); | nmp = VFSTONFS(dvp->v_mount); | ||||
again: | again: | ||||
/* For NFSv4, wait until any remove is done. */ | /* For NFSv4, wait until any remove is done. */ | ||||
NFSLOCKNODE(dnp); | NFSLOCKNODE(dnp); | ||||
while (NFSHASNFSV4(nmp) && (dnp->n_flag & NREMOVEINPROG)) { | while (NFSHASNFSV4(nmp) && (dnp->n_flag & NREMOVEINPROG)) { | ||||
dnp->n_flag |= NREMOVEWANT; | dnp->n_flag |= NREMOVEWANT; | ||||
(void) msleep((caddr_t)dnp, &dnp->n_mtx, PZERO, "nfscrt", 0); | (void) msleep((caddr_t)dnp, &dnp->n_mtx, PZERO, "nfscrt", 0); | ||||
} | } | ||||
NFSUNLOCKNODE(dnp); | NFSUNLOCKNODE(dnp); | ||||
▲ Show 20 Lines • Show All 2,597 Lines • Show Last 20 Lines |