i386/56933: kernel panic vm_page_remove

Heiko Weber heiko at terminmarktwelt.de
Sun Sep 28 02:50:20 PDT 2003


The following reply was made to PR i386/56933; it has been noted by GNATS.

From: "Heiko Weber" <heiko at terminmarktwelt.de>
To: <freebsd-gnats-submit at FreeBSD.org>, <ernst at zaphod.euronet.nl>
Cc:  
Subject: Re: i386/56933: kernel panic vm_page_remove
Date: Sun, 28 Sep 2003 11:45:43 +0200

 This bug was fixed between 4.8 and the upcoming 4.9 release. 
 The following kernel patch which will help before 4.9 is out:
 
 Index: sys/vm/vm_page.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/vm/vm_page.c,v
 retrieving revision 1.147.2.18
 diff -u -r1.147.2.18 vm_page.c
 --- sys/vm/vm_page.c 10 Mar 2002 05:03:19 -0000 1.147.2.18
 +++ sys/vm/vm_page.c 6 Aug 2003 23:09:58 -0000
 @@ -1403,7 +1408,8 @@
  {
   int s;
  
 - if ((m->flags & (PG_BUSY|PG_UNMANAGED)) || m->busy || m->wire_count) {
 + if ((m->flags & (PG_BUSY|PG_UNMANAGED)) || m->busy ||
 +     m->hold_count || m->wire_count) {
    printf("vm_page_cache: attempting to cache busy page\n");
    return;
   }
 Index: sys/kern/sys_pipe.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/kern/sys_pipe.c,v
 retrieving revision 1.60.2.14
 diff -u -r1.60.2.14 sys_pipe.c
 --- sys/kern/sys_pipe.c 3 Aug 2003 13:04:57 -0000 1.60.2.14
 +++ sys/kern/sys_pipe.c 6 Aug 2003 23:09:58 -0000
 @@ -561,12 +561,12 @@
     int j;
  
     for (j = 0; j < i; j++)
 -    vm_page_unwire(wpipe->pipe_map.ms[j], 1);
 +    vm_page_unhold(wpipe->pipe_map.ms[j]);
     return (EFAULT);
    }
  
    m = PHYS_TO_VM_PAGE(paddr);
 -  vm_page_wire(m);
 +  vm_page_hold(m);
    wpipe->pipe_map.ms[i] = m;
   }
  
 @@ -627,7 +627,7 @@
    }
   }
   for (i = 0; i < wpipe->pipe_map.npages; i++)
 -  vm_page_unwire(wpipe->pipe_map.ms[i], 1);
 +  vm_page_unhold(wpipe->pipe_map.ms[i]);
   wpipe->pipe_map.npages = 0;
  }
  
 Index: sys/miscfs/procfs/procfs_mem.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/miscfs/procfs/Attic/procfs_mem.c,v
 retrieving revision 1.46.2.3
 diff -u -r1.46.2.3 procfs_mem.c
 --- sys/miscfs/procfs/procfs_mem.c 22 Jan 2002 17:22:59 -0000 1.46.2.3
 +++ sys/miscfs/procfs/procfs_mem.c 6 Aug 2003 23:09:58 -0000
 @@ -188,9 +188,9 @@
    }
  
    /*
 -   * Wire the page into memory
 +   * Hold the page in memory
     */
 -  vm_page_wire(m);
 +  vm_page_hold(m);
  
    /*
     * We're done with tmap now.
 @@ -212,7 +212,7 @@
    /*
     * release the page and the object
     */
 -  vm_page_unwire(m, 1);
 +  vm_page_unhold(m);
    vm_object_deallocate(object);
  
    object = NULL;
 


More information about the freebsd-i386 mailing list