uvn_detach sets UVM_VNODE_RELKILL flag and wait for all async i/o to finish. but
uvm_vnp_terminate() could clear the flag and take over the vnode.
mpi@ noted that this code path is mostly dead code because there is no "async
I/O" (uvn_io() is always synchronous).
ok visa@ mpi@
-/* $OpenBSD: uvm_vnode.c,v 1.121 2021/12/15 12:53:53 mpi Exp $ */
+/* $OpenBSD: uvm_vnode.c,v 1.122 2022/04/19 15:30:52 semarie Exp $ */
/* $NetBSD: uvm_vnode.c,v 1.36 2000/11/24 20:34:01 chs Exp $ */
/*
INFSLP);
}
- if ((uvn->u_flags & UVM_VNODE_RELKILL) == 0)
+ if ((uvn->u_flags & UVM_VNODE_RELKILL) == 0) {
+ rw_exit(uobj->vmobjlock);
return;
+ }
/*
* kill object now. note that we can't be on the sync q because