On 24/12/25(Wed) 11:55, Martin Pieuchot wrote:
> On 23/12/25(Tue) 22:49, Alexander Bluhm wrote:
> > On Mon, Dec 22, 2025 at 11:04:59PM +0100, Alexander Bluhm wrote:
> > > On Mon, Dec 15, 2025 at 06:15:35PM +0100, Alexander Bluhm wrote:
> > > > On Mon, Dec 15, 2025 at 02:18:45PM +0100, Martin Pieuchot wrote:
> > > > > Thanks for the report.  Is your machine still in ddb?  We're missing 
> > > > > the
> > > > > trace of the CPU1 which is the one that paniced.  Would you please 
> > > > > get it?
> > > 
> > > It happend again.  This time with trace of all CPUs.  Note that I
> > > did a make build with a kernel where I applied the "Make pdaemon
> > > understandable" diff before.
> > 
> > And here another one.  This time with the fixed pgdemon diff.
> 
> Thanks a lot Alexander.  I have two hypothesis about this assert.
> Either it is a race and the page is no longer on the active list by
> the time the page daemon is trying to lock it or it is a corruption.
> 
> Would you please try the diff below and look for the corresponding
> message in dmesg?  Thanks a lot!

Now with the necessary include:

Index: uvm/uvm_pdaemon.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_pdaemon.c,v
diff -u -p -r1.144 uvm_pdaemon.c
--- uvm/uvm_pdaemon.c   24 Dec 2025 10:29:22 -0000      1.144
+++ uvm/uvm_pdaemon.c   24 Dec 2025 10:59:19 -0000
@@ -386,6 +386,8 @@ uvm_aiodone_daemon(void *arg)
        }
 }
 
+#include <uvm/uvm_ddb.h>
+
 /*
  * uvmpd_trylockowner: trylock the page's owner.
  *
@@ -396,15 +398,21 @@ uvmpd_trylockowner(struct vm_page *pg)
 {
 
        struct uvm_object *uobj = pg->uobject;
+       struct vm_anon *anon = pg->uanon;
        struct rwlock *slock;
 
        if (uobj != NULL) {
                slock = uobj->vmobjlock;
-       } else {
-               struct vm_anon *anon = pg->uanon;
-
-               KASSERT(anon != NULL);
+               KASSERTMSG(slock != NULL, "pg %p uobj %p, NULL lock", pg, uobj);
+       } else if (anon != NULL) {
                slock = anon->an_lock;
+               KASSERTMSG(slock != NULL, "pg %p anon %p, NULL lock", pg, anon);
+       } else {
+#if 1
+               printf("page still active?");
+               uvm_page_printit(pg, 1, printf);
+#endif
+               return NULL;
        }
 
        if (rw_enter(slock, RW_WRITE|RW_NOSLEEP)) {


Reply via email to