Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/msdosfs/msdosfs_vfsops.c
Show First 20 Lines • Show All 1,010 Lines • ▼ Show 20 Lines | if (pmp->pm_flags & MSDOSFSMNT_RONLY) | ||||
panic("msdosfs_sync: rofs mod"); | panic("msdosfs_sync: rofs mod"); | ||||
else { | else { | ||||
/* update FATs here */ | /* update FATs here */ | ||||
} | } | ||||
} | } | ||||
/* | /* | ||||
* Write back each (modified) denode. | * Write back each (modified) denode. | ||||
*/ | */ | ||||
loop: | |||||
MNT_VNODE_FOREACH_ALL(vp, mp, nvp) { | MNT_VNODE_FOREACH_ALL(vp, mp, nvp) { | ||||
if (vp->v_type == VNON) { | if (vp->v_type == VNON) { | ||||
VI_UNLOCK(vp); | VI_UNLOCK(vp); | ||||
continue; | continue; | ||||
} | } | ||||
dep = VTODE(vp); | dep = VTODE(vp); | ||||
if ((dep->de_flag & | if ((dep->de_flag & | ||||
(DE_ACCESS | DE_CREATE | DE_UPDATE | DE_MODIFIED)) == 0 && | (DE_ACCESS | DE_CREATE | DE_UPDATE | DE_MODIFIED)) == 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, nvp); | |||||
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); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 54 Lines • Show Last 20 Lines |