Module Name: src Committed By: hannken Date: Sat Mar 19 13:50:02 UTC 2022
Modified Files: src/sys/kern: vfs_vnops.c Log Message: Lock vnode across VOP_OPEN. To generate a diff of this commit: cvs rdiff -u -r1.225 -r1.226 src/sys/kern/vfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/vfs_vnops.c diff -u src/sys/kern/vfs_vnops.c:1.225 src/sys/kern/vfs_vnops.c:1.226 --- src/sys/kern/vfs_vnops.c:1.225 Sun Mar 13 13:52:53 2022 +++ src/sys/kern/vfs_vnops.c Sat Mar 19 13:50:02 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnops.c,v 1.225 2022/03/13 13:52:53 riastradh Exp $ */ +/* $NetBSD: vfs_vnops.c,v 1.226 2022/03/19 13:50:02 hannken Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.225 2022/03/13 13:52:53 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.226 2022/03/19 13:50:02 hannken Exp $"); #include "veriexec.h" @@ -1344,13 +1344,15 @@ vn_bdev_open(dev_t dev, struct vnode **v if ((error = bdevvp(dev, vpp)) != 0) return error; + vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY); if ((error = VOP_OPEN(*vpp, FREAD | FWRITE, l->l_cred)) != 0) { - vrele(*vpp); + vput(*vpp); return error; } mutex_enter((*vpp)->v_interlock); (*vpp)->v_writecount++; mutex_exit((*vpp)->v_interlock); + VOP_UNLOCK(*vpp); return 0; }