From 2b5149d5dcdcfa9a5a05ba2de39982c7d213e1d9 Mon Sep 17 00:00:00 2001 From: Antonio Huete Jimenez Date: Sun, 23 Mar 2014 02:30:01 +0100 Subject: [PATCH] ext2fs - Attempt to fix a panic on VOP_CLOSE Follows-up commit 12cdc371fb859682eda7d1c26c5059920a7cf118 --- sys/gnu/vfs/ext2fs/ext2_vfsops.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sys/gnu/vfs/ext2fs/ext2_vfsops.c b/sys/gnu/vfs/ext2fs/ext2_vfsops.c index a4f1a9c711..5e43be83aa 100644 --- a/sys/gnu/vfs/ext2fs/ext2_vfsops.c +++ b/sys/gnu/vfs/ext2fs/ext2_vfsops.c @@ -856,7 +856,9 @@ ext2_mountfs(struct vnode *devvp, struct mount *mp, struct ucred *cred) out: if (bp) brelse(bp); + vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY); VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, NULL); + vn_unlock(devvp); if (ump) { bsd_free(ump->um_e2fs->s_es, M_EXT2MNT); bsd_free(ump->um_e2fs, M_EXT2MNT); @@ -908,7 +910,11 @@ ext2_unmount(struct mount *mp, int mntflags) ULCK_BUF(fs->s_block_bitmap[i]) ump->um_devvp->v_rdev->si_mountpoint = NULL; + + vn_lock(ump->um_devvp, LK_EXCLUSIVE | LK_RETRY); error = VOP_CLOSE(ump->um_devvp, ronly ? FREAD : FREAD|FWRITE, NULL); + vn_unlock(ump->um_devvp); + vrele(ump->um_devvp); bsd_free(fs->s_es, M_EXT2MNT); bsd_free(fs, M_EXT2MNT); -- 2.41.0