Changeset View
Changeset View
Standalone View
Standalone View
sys/ufs/ffs/ffs_vfsops.c
Show First 20 Lines • Show All 1,707 Lines • ▼ Show 20 Lines | ffs_sync(struct mount *mp, int waitfor) | ||||
*/ | */ | ||||
lockreq = LK_EXCLUSIVE | LK_NOWAIT; | lockreq = LK_EXCLUSIVE | LK_NOWAIT; | ||||
if (waitfor == MNT_SUSPEND) { | if (waitfor == MNT_SUSPEND) { | ||||
suspend = 1; | suspend = 1; | ||||
waitfor = MNT_WAIT; | waitfor = MNT_WAIT; | ||||
} | } | ||||
if (waitfor == MNT_WAIT) | if (waitfor == MNT_WAIT) | ||||
lockreq = LK_EXCLUSIVE; | lockreq = LK_EXCLUSIVE; | ||||
lockreq |= LK_INTERLOCK | LK_SLEEPFAIL; | lockreq |= LK_INTERLOCK; | ||||
loop: | loop: | ||||
/* Grab snapshot of secondary write counts */ | /* Grab snapshot of secondary write counts */ | ||||
MNT_ILOCK(mp); | MNT_ILOCK(mp); | ||||
secondary_writes = mp->mnt_secondary_writes; | secondary_writes = mp->mnt_secondary_writes; | ||||
secondary_accwrites = mp->mnt_secondary_accwrites; | secondary_accwrites = mp->mnt_secondary_accwrites; | ||||
MNT_IUNLOCK(mp); | MNT_IUNLOCK(mp); | ||||
/* Grab snapshot of softdep dependency counts */ | /* Grab snapshot of softdep dependency counts */ | ||||
Show All 13 Lines | MNT_VNODE_FOREACH_ALL(vp, mp, mvp) { | ||||
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) { | ||||
VI_UNLOCK(vp); | VI_UNLOCK(vp); | ||||
continue; | continue; | ||||
} | } | ||||
if ((error = vget(vp, lockreq)) != 0) { | if ((error = vget(vp, lockreq)) != 0) { | ||||
if (error == ENOENT || error == ENOLCK) { | |||||
MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp); | |||||
goto loop; | |||||
} | |||||
continue; | continue; | ||||
} | } | ||||
#ifdef QUOTA | #ifdef QUOTA | ||||
qsyncvp(vp); | qsyncvp(vp); | ||||
#endif | #endif | ||||
for (;;) { | for (;;) { | ||||
error = ffs_syncvnode(vp, waitfor, 0); | error = ffs_syncvnode(vp, waitfor, 0); | ||||
if (error == ERELOOKUP) | if (error == ERELOOKUP) | ||||
▲ Show 20 Lines • Show All 855 Lines • Show Last 20 Lines |