From owner-svn-src-user@FreeBSD.ORG  Mon Nov 23 05:47:54 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 769BE1065679;
	Mon, 23 Nov 2009 05:47:54 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 4C98B8FC17;
	Mon, 23 Nov 2009 05:47:54 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAN5lreI041819;
	Mon, 23 Nov 2009 05:47:53 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAN5lrfP041818;
	Mon, 23 Nov 2009 05:47:53 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <200911230547.nAN5lrfP041818@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Mon, 23 Nov 2009 05:47:53 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r199691 -
	user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 23 Nov 2009 05:47:54 -0000

Author: kmacy
Date: Mon Nov 23 05:47:53 2009
New Revision: 199691
URL: http://svn.freebsd.org/changeset/base/199691

Log:
  assert that a buffers pages are not attached to the object

Modified:
  user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c

Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
==============================================================================
--- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c	Mon Nov 23 05:16:35 2009	(r199690)
+++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c	Mon Nov 23 05:47:53 2009	(r199691)
@@ -1491,24 +1491,37 @@ arc_getblk(arc_buf_t *buf)
 
 	if (newbp != NULL) {
 		BUF_KERNPROC(newbp);
-		KASSERT(newbp->b_pages[0]->object == NULL,
-		    "newbp page not removed");
+#ifdef INVARIANTS
+		for (i = 0; i < newbp->b_npages; i++)
+			KASSERT(newbp->b_pages[i]->object == NULL,
+			    "newbp page not removed");
+#endif	
 	}
 	buf->b_bp = newbp;
 	buf->b_data = data;
 }
 
-static void
+void
+arc_brelse(arc_buf_t *buf, void *data, size_t size);
+
+void
 arc_brelse(arc_buf_t *buf, void *data, size_t size)
 {
 	struct buf *bp = buf->b_bp;
 	arc_buf_hdr_t *hdr = buf->b_hdr;
-
+#ifdef INVARIANTS
+	int i;
+#endif
+	
 	if (bp == NULL) {
 		zio_buf_free(buf->b_data, size);
 		return;
 	}
-
+#ifdef INVARIANTS
+	for (i = 0; i < bp->b_npages; i++)
+		KASSERT(bp->b_pages[i]->object == NULL,
+		    "newbp page not removed");
+#endif	
 	arc_bcache(buf);
 
 
@@ -1519,10 +1532,6 @@ arc_brelse(arc_buf_t *buf, void *data, s
 		    " size %ld blkno=%ld",
 		    bp, bp->b_flags, size, bp->b_blkno);
 
-	/*
-	 * need to log path through here to determine why we're not ending up on the inactive queue
-	 *
-	 */
 	brelse(bp);
 }
 
@@ -2805,6 +2814,12 @@ arc_read_done(zio_t *zio)
 			buf_hash_remove(hdr);
 		freeable = refcount_is_zero(&hdr->b_refcnt);
 	} else if (buf->b_bp != NULL) {
+#ifdef INVARIANTS
+		int i;
+		for (i = 0; i < buf->b_bp->b_npages; i++)
+			KASSERT(buf->b_bp->b_pages[i]->object == NULL,
+			    "bp page not removed");
+#endif	
 		buf->b_bp->b_flags |= B_CACHE;
 		buf->b_bp->b_flags &= ~B_INVAL;
 	}