git: c2007457027d - releng/13.0 - vn_open(): If the vnode is reclaimed during open(2), do not return error.
Konstantin Belousov
kib at FreeBSD.org
Thu Feb 25 20:52:21 UTC 2021
The branch releng/13.0 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=c2007457027d54f60d4558b4e8f90673596357a2
commit c2007457027d54f60d4558b4e8f90673596357a2
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-25 20:48:28 +0000
vn_open(): If the vnode is reclaimed during open(2), do not return error.
Approved by: re (delphij, gjb)
(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