svn commit: r199690 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Kip Macy kmacy at FreeBSD.org
Mon Nov 23 05:16:36 UTC 2009


Author: kmacy
Date: Mon Nov 23 05:16:35 2009
New Revision: 199690
URL: http://svn.freebsd.org/changeset/base/199690

Log:
  - move bgetvp to start of arc_pcache
  - don't getblk on 0
  - assert that newbp's pages have been removed from vp's 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 04:36:54 2009	(r199689)
+++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c	Mon Nov 23 05:16:35 2009	(r199690)
@@ -1356,6 +1356,11 @@ arc_pcache(struct vnode *vp, struct buf 
 	vm_page_t m;
 	int i;
 
+	if (lockneeded)
+		BO_LOCK(bo);
+	bgetvp(vp, bp);
+	BO_UNLOCK(bo);
+
 	VM_OBJECT_LOCK(object);
 	vm_page_cache_free(object, start, start + bp->b_npages);
 	vm_object_page_remove(object, start, start + bp->b_npages, FALSE);
@@ -1364,10 +1369,6 @@ arc_pcache(struct vnode *vp, struct buf 
 		vm_page_insert(m, object, start + i);
 	}
 	VM_OBJECT_UNLOCK(object);
-	if (lockneeded)
-		BO_LOCK(bo);
-	bgetvp(vp, bp);
-	BO_UNLOCK(bo);
 	bp->b_flags |= B_VMIO;
 }
 
@@ -1449,7 +1450,8 @@ arc_getblk(arc_buf_t *buf)
 	if (size < PAGE_SIZE) {
 		data = zio_buf_alloc(size);
 	} else if ((buf->b_hdr->b_flags & ARC_BUF_CLONING) ||
-	    BUF_EMPTY(buf->b_hdr)) {
+	    BUF_EMPTY(buf->b_hdr) ||
+	    (blkno == 0)) {
 		newbp = geteblk(size, flags);
 		data = newbp->b_data;
 		buf->b_hdr->b_flags &= ~ARC_BUF_CLONING;
@@ -1487,8 +1489,11 @@ arc_getblk(arc_buf_t *buf)
 	    newbp, newbp->b_flags);
 #endif
 
-	if (newbp != NULL)
+	if (newbp != NULL) {
 		BUF_KERNPROC(newbp);
+		KASSERT(newbp->b_pages[0]->object == NULL,
+		    "newbp page not removed");
+	}
 	buf->b_bp = newbp;
 	buf->b_data = data;
 }


More information about the svn-src-user mailing list