From d344c1186100b5323aefd8a08d585a95db5aa73c Mon Sep 17 00:00:00 2001 From: tegge Date: Mon, 9 Jan 2006 20:42:19 +0000 Subject: Add marker vnodes to ensure that all vnodes associated with the mount point are iterated over when using MNT_VNODE_FOREACH. Reviewed by: truckman --- sys/kern/vfs_default.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'sys/kern/vfs_default.c') 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); -- cgit v1.1