Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/ext2fs/ext2_vfsops.c
Show First 20 Lines • Show All 1,135 Lines • ▼ Show 20 Lines | ext2_sync(struct mount *mp, int waitfor) | ||||
fs = ump->um_e2fs; | fs = ump->um_e2fs; | ||||
if (fs->e2fs_fmod != 0 && fs->e2fs_ronly != 0) { /* XXX */ | if (fs->e2fs_fmod != 0 && fs->e2fs_ronly != 0) { /* XXX */ | ||||
panic("ext2_sync: rofs mod fs=%s", fs->e2fs_fsmnt); | panic("ext2_sync: rofs mod fs=%s", fs->e2fs_fsmnt); | ||||
} | } | ||||
/* | /* | ||||
* Write back each (modified) inode. | * Write back each (modified) inode. | ||||
*/ | */ | ||||
loop: | |||||
MNT_VNODE_FOREACH_ALL(vp, mp, mvp) { | MNT_VNODE_FOREACH_ALL(vp, mp, mvp) { | ||||
if (vp->v_type == VNON) { | if (vp->v_type == VNON) { | ||||
VI_UNLOCK(vp); | VI_UNLOCK(vp); | ||||
continue; | continue; | ||||
} | } | ||||
ip = VTOI(vp); | ip = VTOI(vp); | ||||
if ((ip->i_flag & | if ((ip->i_flag & | ||||
(IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE)) == 0 && | (IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE)) == 0 && | ||||
(vp->v_bufobj.bo_dirty.bv_cnt == 0 || | (vp->v_bufobj.bo_dirty.bv_cnt == 0 || | ||||
waitfor == MNT_LAZY)) { | waitfor == MNT_LAZY)) { | ||||
VI_UNLOCK(vp); | VI_UNLOCK(vp); | ||||
continue; | continue; | ||||
} | } | ||||
error = vget(vp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK); | error = vget(vp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK); | ||||
if (error) { | if (error != 0) { | ||||
if (error == ENOENT) { | |||||
MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp); | |||||
goto loop; | |||||
} | |||||
continue; | continue; | ||||
} | } | ||||
if ((error = VOP_FSYNC(vp, waitfor, td)) != 0) | if ((error = VOP_FSYNC(vp, waitfor, td)) != 0) | ||||
allerror = error; | allerror = error; | ||||
vput(vp); | vput(vp); | ||||
} | } | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 278 Lines • Show Last 20 Lines |