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 | |||||