Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/nfsserver/nfs_nfsdport.c
Context not available. | |||||
extern void (*nfsd_call_servertimer)(void); | extern void (*nfsd_call_servertimer)(void); | ||||
extern SVCPOOL *nfsrvd_pool; | extern SVCPOOL *nfsrvd_pool; | ||||
extern struct nfsv4lock nfsd_suspend_lock; | extern struct nfsv4lock nfsd_suspend_lock; | ||||
extern struct nfsstats newnfsstats; | |||||
extern struct nfssessionhash nfssessionhash[NFSSESSIONHASHSIZE]; | extern struct nfssessionhash nfssessionhash[NFSSESSIONHASHSIZE]; | ||||
struct vfsoptlist nfsv4root_opt, nfsv4root_newopt; | struct vfsoptlist nfsv4root_opt, nfsv4root_newopt; | ||||
NFSDLOCKMUTEX; | NFSDLOCKMUTEX; | ||||
Context not available. | |||||
uiop->uio_td = NULL; | uiop->uio_td = NULL; | ||||
nh = nfsrv_sequential_heuristic(uiop, vp); | nh = nfsrv_sequential_heuristic(uiop, vp); | ||||
ioflag |= nh->nh_seqcount << IO_SEQSHIFT; | ioflag |= nh->nh_seqcount << IO_SEQSHIFT; | ||||
/* XXX KDM make this more systematic? */ | |||||
newnfsstats.srvbytes[NFSV4OP_READ] += uiop->uio_resid; | |||||
error = VOP_READ(vp, uiop, IO_NODELOCKED | ioflag, cred); | error = VOP_READ(vp, uiop, IO_NODELOCKED | ioflag, cred); | ||||
FREE((caddr_t)iv2, M_TEMP); | FREE((caddr_t)iv2, M_TEMP); | ||||
if (error) { | if (error) { | ||||
Context not available. | |||||
uiop->uio_offset = off; | uiop->uio_offset = off; | ||||
nh = nfsrv_sequential_heuristic(uiop, vp); | nh = nfsrv_sequential_heuristic(uiop, vp); | ||||
ioflags |= nh->nh_seqcount << IO_SEQSHIFT; | ioflags |= nh->nh_seqcount << IO_SEQSHIFT; | ||||
/* XXX KDM make this more systematic? */ | |||||
newnfsstats.srvbytes[NFSV4OP_WRITE] += uiop->uio_resid; | |||||
error = VOP_WRITE(vp, uiop, ioflags, cred); | error = VOP_WRITE(vp, uiop, ioflags, cred); | ||||
if (error == 0) | if (error == 0) | ||||
nh->nh_nextoff = uiop->uio_offset; | nh->nh_nextoff = uiop->uio_offset; | ||||
Context not available. |