Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 May 2012 09:55:15 +0000 (UTC)
From:      Grzegorz Bernacki <gber@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r235469 - head/sys/kern
Message-ID:  <201205150955.q4F9tFTo079472@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gber
Date: Tue May 15 09:55:15 2012
New Revision: 235469
URL: http://svn.freebsd.org/changeset/base/235469

Log:
  Do not call bremfree for managed buffers.
  
  Calling bremfree for these buffers results in panic:
  "bremfree: buffer %p not on a queue."
  
  Approved by: kib

Modified:
  head/sys/kern/vfs_bio.c

Modified: head/sys/kern/vfs_bio.c
==============================================================================
--- head/sys/kern/vfs_bio.c	Tue May 15 09:37:22 2012	(r235468)
+++ head/sys/kern/vfs_bio.c	Tue May 15 09:55:15 2012	(r235469)
@@ -2640,8 +2640,8 @@ loop:
 	if (bp != NULL) {
 		int lockflags;
 		/*
-		 * Buffer is in-core.  If the buffer is not busy, it must
-		 * be on a queue.
+		 * Buffer is in-core.  If the buffer is not busy nor managed,
+		 * it must be on a queue.
 		 */
 		lockflags = LK_EXCLUSIVE | LK_SLEEPFAIL | LK_INTERLOCK;
 
@@ -2671,9 +2671,13 @@ loop:
 			bp->b_flags &= ~B_CACHE;
 		else if ((bp->b_flags & (B_VMIO | B_INVAL)) == 0)
 			bp->b_flags |= B_CACHE;
-		BO_LOCK(bo);
-		bremfree(bp);
-		BO_UNLOCK(bo);
+		if (bp->b_flags & B_MANAGED)
+			MPASS(bp->b_qindex == QUEUE_NONE);
+		else {
+			BO_LOCK(bo);
+			bremfree(bp);
+			BO_UNLOCK(bo);
+		}
 
 		/*
 		 * check for size inconsistancies for non-VMIO case.



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