Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/vfs_default.c
Show First 20 Lines • Show All 1,517 Lines • ▼ Show 20 Lines | vfs_stdsync(mp, waitfor) | ||||
td = curthread; | td = curthread; | ||||
lockreq = LK_EXCLUSIVE | LK_INTERLOCK; | lockreq = LK_EXCLUSIVE | LK_INTERLOCK; | ||||
if (waitfor != MNT_WAIT) | if (waitfor != MNT_WAIT) | ||||
lockreq |= LK_NOWAIT; | lockreq |= LK_NOWAIT; | ||||
/* | /* | ||||
* 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) { | ||||
if (vp->v_bufobj.bo_dirty.bv_cnt == 0) { | if (vp->v_bufobj.bo_dirty.bv_cnt == 0) { | ||||
VI_UNLOCK(vp); | VI_UNLOCK(vp); | ||||
continue; | continue; | ||||
} | } | ||||
if ((error = vget(vp, lockreq)) != 0) { | if ((error = vget(vp, lockreq)) != 0) { | ||||
if (error == ENOENT) { | |||||
MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp); | |||||
goto loop; | |||||
} | |||||
continue; | continue; | ||||
} | } | ||||
error = VOP_FSYNC(vp, waitfor, td); | error = VOP_FSYNC(vp, waitfor, td); | ||||
if (error) | if (error) | ||||
allerror = error; | allerror = error; | ||||
vput(vp); | vput(vp); | ||||
} | } | ||||
return (allerror); | return (allerror); | ||||
▲ Show 20 Lines • Show All 233 Lines • Show Last 20 Lines |