Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/nfsserver/nfs_nfsdport.c
Show First 20 Lines • Show All 1,492 Lines • ▼ Show 20 Lines | nfsvno_fsync(struct vnode *vp, u_int64_t off, int cnt, struct ucred *cred, | ||||
* File systems that do not use the buffer cache (as indicated | * File systems that do not use the buffer cache (as indicated | ||||
* by MNTK_USES_BCACHE not being set) must use VOP_FSYNC(). | * by MNTK_USES_BCACHE not being set) must use VOP_FSYNC(). | ||||
*/ | */ | ||||
if (cnt == 0 || cnt > MAX_COMMIT_COUNT || | if (cnt == 0 || cnt > MAX_COMMIT_COUNT || | ||||
(vp->v_mount->mnt_kern_flag & MNTK_USES_BCACHE) == 0) { | (vp->v_mount->mnt_kern_flag & MNTK_USES_BCACHE) == 0) { | ||||
/* | /* | ||||
* Give up and do the whole thing | * Give up and do the whole thing | ||||
*/ | */ | ||||
if (vp->v_object && | if (vp->v_object && vm_object_mightbedirty(vp->v_object)) { | ||||
(vp->v_object->flags & OBJ_MIGHTBEDIRTY)) { | |||||
VM_OBJECT_WLOCK(vp->v_object); | VM_OBJECT_WLOCK(vp->v_object); | ||||
vm_object_page_clean(vp->v_object, 0, 0, OBJPC_SYNC); | vm_object_page_clean(vp->v_object, 0, 0, OBJPC_SYNC); | ||||
VM_OBJECT_WUNLOCK(vp->v_object); | VM_OBJECT_WUNLOCK(vp->v_object); | ||||
} | } | ||||
error = VOP_FSYNC(vp, MNT_WAIT, td); | error = VOP_FSYNC(vp, MNT_WAIT, td); | ||||
} else { | } else { | ||||
/* | /* | ||||
* Locate and synchronously write any buffers that fall | * Locate and synchronously write any buffers that fall | ||||
Show All 13 Lines | if (off & iomask) { | ||||
off &= ~(u_quad_t)iomask; | off &= ~(u_quad_t)iomask; | ||||
} | } | ||||
if (off & PAGE_MASK) { | if (off & PAGE_MASK) { | ||||
cnt += off & PAGE_MASK; | cnt += off & PAGE_MASK; | ||||
off &= ~(u_quad_t)PAGE_MASK; | off &= ~(u_quad_t)PAGE_MASK; | ||||
} | } | ||||
lblkno = off / iosize; | lblkno = off / iosize; | ||||
if (vp->v_object && | if (vp->v_object && vm_object_mightbedirty(vp->v_object)) { | ||||
(vp->v_object->flags & OBJ_MIGHTBEDIRTY)) { | |||||
VM_OBJECT_WLOCK(vp->v_object); | VM_OBJECT_WLOCK(vp->v_object); | ||||
vm_object_page_clean(vp->v_object, off, off + cnt, | vm_object_page_clean(vp->v_object, off, off + cnt, | ||||
OBJPC_SYNC); | OBJPC_SYNC); | ||||
VM_OBJECT_WUNLOCK(vp->v_object); | VM_OBJECT_WUNLOCK(vp->v_object); | ||||
} | } | ||||
bo = &vp->v_bufobj; | bo = &vp->v_bufobj; | ||||
BO_LOCK(bo); | BO_LOCK(bo); | ||||
▲ Show 20 Lines • Show All 4,328 Lines • Show Last 20 Lines |