Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/nfsclient/nfs_clvfsops.c
| Show First 20 Lines • Show All 1,915 Lines • ▼ Show 20 Lines | if (NFSCL_FORCEDISM(mp)) { | ||||
| MNT_IUNLOCK(mp); | MNT_IUNLOCK(mp); | ||||
| return (EBADF); | return (EBADF); | ||||
| } | } | ||||
| MNT_IUNLOCK(mp); | MNT_IUNLOCK(mp); | ||||
| /* | /* | ||||
| * Force stale buffer cache information to be flushed. | * Force stale buffer cache information to be flushed. | ||||
| */ | */ | ||||
| loop: | |||||
| MNT_VNODE_FOREACH_ALL(vp, mp, mvp) { | MNT_VNODE_FOREACH_ALL(vp, mp, mvp) { | ||||
| /* XXX Racy bv_cnt check. */ | /* XXX Racy bv_cnt check. */ | ||||
| if (NFSVOPISLOCKED(vp) || vp->v_bufobj.bo_dirty.bv_cnt == 0 || | if (NFSVOPISLOCKED(vp) || vp->v_bufobj.bo_dirty.bv_cnt == 0 || | ||||
| waitfor == MNT_LAZY) { | waitfor == MNT_LAZY) { | ||||
| VI_UNLOCK(vp); | VI_UNLOCK(vp); | ||||
| continue; | continue; | ||||
| } | } | ||||
| if (vget(vp, LK_EXCLUSIVE | LK_INTERLOCK)) { | if (vget(vp, LK_EXCLUSIVE | LK_INTERLOCK) != 0) { | ||||
| MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp); | continue; | ||||
| goto loop; | |||||
| } | } | ||||
| error = VOP_FSYNC(vp, waitfor, td); | error = VOP_FSYNC(vp, waitfor, td); | ||||
| if (error) | if (error) | ||||
| allerror = error; | allerror = error; | ||||
| NFSVOPUNLOCK(vp); | NFSVOPUNLOCK(vp); | ||||
| vrele(vp); | vrele(vp); | ||||
| } | } | ||||
| return (allerror); | return (allerror); | ||||
| ▲ Show 20 Lines • Show All 222 Lines • Show Last 20 Lines | |||||