Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Nov 2004 18:56:13 +0000 (UTC)
From:      Xin LI <delphij@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/vm vm_contig.c
Message-ID:  <200411241856.iAOIuDo5055072@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411241856.iAOIuDo5055072>