git: 75f0d88bd3f0 - stable/13 - vn_open(): If the vnode is reclaimed during open(2), do not return error.

Konstantin Belousov kib at FreeBSD.org
Wed Feb 24 07:58:48 UTC 2021


The branch stable/13 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=75f0d88bd3f0d85cce17f7d1039c7e14c7d2aa4d

commit 75f0d88bd3f0d85cce17f7d1039c7e14c7d2aa4d
Author:     Konstantin Belousov <kib at FreeBSD.org>
AuthorDate: 2021-02-03 11:02:18 +0000
Commit:     Konstantin Belousov <kib at FreeBSD.org>
CommitDate: 2021-02-24 07:42:42 +0000

    vn_open(): If the vnode is reclaimed during open(2), do not return error.
    
    (cherry picked from commit ee965dfa64929227ced8adb68900c35f877480e7)
---
 sys/fs/deadfs/dead_vnops.c | 11 +++++++++--
 sys/kern/vfs_vnops.c       |  2 --
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/sys/fs/deadfs/dead_vnops.c b/sys/fs/deadfs/dead_vnops.c
index 09c3c996ee0e..324bbafd7caf 100644
--- a/sys/fs/deadfs/dead_vnops.c
+++ b/sys/fs/deadfs/dead_vnops.c
@@ -45,6 +45,7 @@
  */
 static vop_lookup_t	dead_lookup;
 static vop_open_t	dead_open;
+static vop_close_t	dead_close;
 static vop_getwritemount_t dead_getwritemount;
 static vop_rename_t	dead_rename;
 static vop_unset_text_t	dead_unset_text;
@@ -55,6 +56,7 @@ struct vop_vector dead_vnodeops = {
 	.vop_access =		VOP_EBADF,
 	.vop_advlock =		VOP_EBADF,
 	.vop_bmap =		VOP_EBADF,
+	.vop_close =		dead_close,
 	.vop_create =		VOP_PANIC,
 	.vop_getattr =		VOP_EBADF,
 	.vop_getwritemount =	dead_getwritemount,
@@ -104,13 +106,18 @@ dead_lookup(struct vop_lookup_args *ap)
 }
 
 /*
- * Open always fails as if device did not exist.
+ * Silently succeed open and close.
  */
 static int
 dead_open(struct vop_open_args *ap)
 {
+	return (0);
+}
 
-	return (ENXIO);
+static int
+dead_close(struct vop_close_args *ap)
+{
+	return (0);
 }
 
 int
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 1e52a797a1f7..3ec2662dfcd8 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -356,8 +356,6 @@ vn_open_vnode_advlock(struct vnode *vp, int fmode, struct file *fp)
 		fp->f_flag |= FHASLOCK;
 
 	vn_lock(vp, lock_flags | LK_RETRY);
-	if (error == 0 && VN_IS_DOOMED(vp))
-		error = ENOENT;
 	return (error);
 }
 


More information about the dev-commits-src-all mailing list