cvs commit: src/sys/vm vm_contig.c

Xin LI delphij at FreeBSD.org
Wed Nov 24 10:56:13 PST 2004


delphij     2004-11-24 18:56:13 UTC

  FreeBSD src repository

  Modified files:
    sys/vm               vm_contig.c 
  Log:
  Try to close a potential, but serious race in our VM subsystem.
  
  Historically, our contigmalloc1() and contigmalloc2() assumes
  that a page in PQ_CACHE can be unconditionally reused by busying
  and freeing it.  Unfortunatelly, when object happens to be not
  NULL, the code will set m->object to NULL and disregard the fact
  that the page is actually in the VM page bucket, resulting in
  page bucket hash table corruption and finally, a filesystem
  corruption, or a 'page not in hash' panic.
  
  This commit has borrowed the idea taken from DragonFlyBSD's fix
  to the VM fix by Matthew Dillon[1].  This version of patch will
  do the following checks:
  
          - When scanning pages in PQ_CACHE, check hold_count and
            skip over pages that are held temporarily.
          - For pages in PQ_CACHE and selected as candidate of being
            freed, check if it is busy at that time.
  
  Note:  It seems that this is might be unrelated to kern/72539.
  
  Obtained from:  DragonFlyBSD, sys/vm/vm_contig.c,v 1.11 and 1.12 [1]
  Reminded by:    Matt Dillon
  Reworked by:    alc
  MFC After:      1 week
  
  Revision  Changes    Path
  1.41      +15 -2     src/sys/vm/vm_contig.c


More information about the cvs-all mailing list