On 09/09/22(Fri) 14:41, Martin Pieuchot wrote:
> On 09/09/22(Fri) 12:25, Theo Buehler wrote:
> > > Yesterday gnezdo@ fixed a race in uvn_attach() that lead to the same
> > > assert.  Here's an rebased diff for the bug discussed in this thread,
> > > could you try again and let us know?  Thanks!
> > 
> > This seems to be stable now. It's been running for nearly 5 days.
> > Without gnezdo's fix it would blow up within at most 2 days.
> 
> Thanks!  I'm looking for oks then. 

Here's an alternative possible fix.  The previous one got reverted
because it exposes a bug on arm64 machines with Cortex-A72 CPUs.

The idea of the diff below is to flush data to physical pages that we keep
around when munmap(2) is called.  I hope that the page daemon does the right
thing and don't try to grab a reference to the vnode if all pages are PG_CLEAN.

Could you try that and tell me if this prevents the panic you're seeing?

Index: uvm/uvm_vnode.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_vnode.c,v
retrieving revision 1.130
diff -u -p -r1.130 uvm_vnode.c
--- uvm/uvm_vnode.c     20 Oct 2022 13:31:52 -0000      1.130
+++ uvm/uvm_vnode.c     9 Nov 2022 16:08:57 -0000
@@ -329,7 +329,7 @@ uvn_detach(struct uvm_object *uobj)
         */
        if (uvn->u_flags & UVM_VNODE_CANPERSIST) {
                /* won't block */
-               uvn_flush(uobj, 0, 0, PGO_DEACTIVATE|PGO_ALLPAGES);
+               uvn_flush(uobj, 0, 0, PGO_CLEANIT|PGO_DEACTIVATE|PGO_ALLPAGES);
                goto out;
        }
 

Reply via email to