aboutsummaryrefslogtreecommitdiff
path: root/sys/fs/msdosfs
diff options
context:
space:
mode:
authorKirk McKusick <mckusick@FreeBSD.org>2012-04-17 16:28:22 +0000
committerKirk McKusick <mckusick@FreeBSD.org>2012-04-17 16:28:22 +0000
commit71469bb38f7440f7bdae7452672091fed324cda3 (patch)
tree0e74691cb191897ed22ab84b20109f1b4147b16d /sys/fs/msdosfs
parent9e21ef395ab886d44f9c6f369a00811fe0e474d5 (diff)
downloadsrc-71469bb38f7440f7bdae7452672091fed324cda3.tar.gz
src-71469bb38f7440f7bdae7452672091fed324cda3.zip
Notes
Diffstat (limited to 'sys/fs/msdosfs')
-rw-r--r--sys/fs/msdosfs/msdosfs_vfsops.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/sys/fs/msdosfs/msdosfs_vfsops.c b/sys/fs/msdosfs/msdosfs_vfsops.c
index f8eb317fae73..d2f49d986cee 100644
--- a/sys/fs/msdosfs/msdosfs_vfsops.c
+++ b/sys/fs/msdosfs/msdosfs_vfsops.c
@@ -923,27 +923,22 @@ msdosfs_sync(struct mount *mp, int waitfor)
/*
* Write back each (modified) denode.
*/
- MNT_ILOCK(mp);
loop:
- MNT_VNODE_FOREACH(vp, mp, nvp) {
- VI_LOCK(vp);
- if (vp->v_type == VNON || (vp->v_iflag & VI_DOOMED)) {
+ MNT_VNODE_FOREACH_ALL(vp, mp, nvp) {
+ if (vp->v_type == VNON) {
VI_UNLOCK(vp);
continue;
}
- MNT_IUNLOCK(mp);
dep = VTODE(vp);
if ((dep->de_flag &
(DE_ACCESS | DE_CREATE | DE_UPDATE | DE_MODIFIED)) == 0 &&
(vp->v_bufobj.bo_dirty.bv_cnt == 0 ||
waitfor == MNT_LAZY)) {
VI_UNLOCK(vp);
- MNT_ILOCK(mp);
continue;
}
error = vget(vp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK, td);
if (error) {
- MNT_ILOCK(mp);
if (error == ENOENT)
goto loop;
continue;
@@ -953,9 +948,7 @@ loop:
allerror = error;
VOP_UNLOCK(vp, 0);
vrele(vp);
- MNT_ILOCK(mp);
}
- MNT_IUNLOCK(mp);
/*
* Flush filesystem control info.