On Thu, Apr 28, 2022 at 04:04:41PM +0200, Alexander Bluhm wrote:
> On Wed, Apr 27, 2022 at 09:16:48AM +0200, Sebastien Marie wrote:
> > Here a new diff (sorry for the delay) which add a new vnode_history_record()
> > point inside uvn_detach() (when 'uvn' object has UVM_VNODE_CANPERSIST flag 
> > sets).
> 
> [-- MARK -- Thu Apr 28 14:10:00 2022]
> uvn_io: start: 0x23ae1400, type VREG, use 0, write 0, hold 0, flags 
> (VBIOONFREELIST)
>         tag VT_UFS, ino 495247, on dev 0, 10 flags 0x100, effnlink 1, nlink 1
>         mode 0100660, owner 21, group 21, size 13647873
> ==> vnode_history_print 0x23ae1400, next=6
>  [3] c++[44194] usecount 2>1
> #0  0x626946ec
>  [4] reaper[10898] usecount 1>1
> #0  entropy_pool0+0xf54

even if the stacktrace is somehow grabage, the "usecount 1>1" is due to VH_NOP 
(no increment neither decrement), so it is the vnode_history_record() newly 
added at:

@@ -323,6 +325,10 @@ uvn_detach(struct uvm_object *uobj)
         * let it "stick around".
         */
        if (uvn->u_flags & UVM_VNODE_CANPERSIST) {
+               extern void vnode_history_record(struct vnode *, int);
+
+               vnode_history_record(vp, 0);
+
                /* won't block */
                uvn_flush(uobj, 0, 0, PGO_DEACTIVATE|PGO_ALLPAGES);
                goto out;

mpi@, it confirms that uvn_flush() is called without PGO_FREE for this uvn.

>  [5] reaper[10898] usecount 1>0
> #0  splx+0x30
> #1  0xfffffffc
> #2  vrele+0x5c
> #3  uvn_detach+0x160
> #4  uvm_unmap_detach+0x1a4
> #5  uvm_map_teardown+0x184
> #6  uvmspace_free+0x60
> #7  uvm_exit+0x30
> #8  reaper+0x138
> #9  fork_trampoline+0x14

-- 
Sebastien Marie

Reply via email to