diff options
Diffstat (limited to 'sys/kern/vfs_default.c')
-rw-r--r-- | sys/kern/vfs_default.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c index d8adf7c..be8c931 100644 --- a/sys/kern/vfs_default.c +++ b/sys/kern/vfs_default.c @@ -545,7 +545,7 @@ vfs_stdsync(mp, waitfor, td) int waitfor; struct thread *td; { - struct vnode *vp, *nvp; + struct vnode *vp, *mvp; int error, lockreq, allerror = 0; lockreq = LK_EXCLUSIVE | LK_INTERLOCK; @@ -556,7 +556,7 @@ vfs_stdsync(mp, waitfor, td) */ MNT_ILOCK(mp); loop: - MNT_VNODE_FOREACH(vp, mp, nvp) { + MNT_VNODE_FOREACH(vp, mp, mvp) { VI_LOCK(vp); if (vp->v_bufobj.bo_dirty.bv_cnt == 0) { @@ -567,8 +567,10 @@ loop: if ((error = vget(vp, lockreq, td)) != 0) { MNT_ILOCK(mp); - if (error == ENOENT) + if (error == ENOENT) { + MNT_VNODE_FOREACH_ABORT_ILOCKED(mp, mvp); goto loop; + } continue; } error = VOP_FSYNC(vp, waitfor, td); |