vn_open(): If the vnode is reclaimed during open(2), do not return error.

(cherry picked from commit ee965dfa64)
This commit is contained in:
Konstantin Belousov 2021-02-03 13:02:18 +02:00
parent ed3b4bbe35
commit 75f0d88bd3
2 changed files with 9 additions and 4 deletions

View file

@ -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

View file

@ -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);
}