svn commit: r299434 - vendor-sys/illumos/dist/uts/common/fs/zfs

Alexander Motin mav at FreeBSD.org
Wed May 11 12:36:20 UTC 2016


Author: mav
Date: Wed May 11 12:36:19 2016
New Revision: 299434
URL: https://svnweb.freebsd.org/changeset/base/299434

Log:
  6841 Undirty freed spill blocks
  
  Reviewed by: Brian Behlendorf <behlendorf1 at llnl.gov>
  Reviewed by: Dan McDonald <danmcd at omniti.com>
  Reviewed by: Matthew Ahrens <mahrens at delphix.com>
  Approved by: Robert Mustacchi <rm at joyent.com>
  Author: Tim Chase <tim at chase2k.com>
  
  openzfs/openzfs at 445e67805dd2ca6c3a2363b2ec9e163c62370233

Modified:
  vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c

Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c	Wed May 11 11:35:37 2016	(r299433)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c	Wed May 11 12:36:19 2016	(r299434)
@@ -908,8 +908,10 @@ dbuf_free_range(dnode_t *dn, uint64_t st
 	dmu_buf_impl_t *db, *db_next;
 	uint64_t txg = tx->tx_txg;
 	avl_index_t where;
+	boolean_t freespill =
+	    (start_blkid == DMU_SPILL_BLKID || end_blkid == DMU_SPILL_BLKID);
 
-	if (end_blkid > dn->dn_maxblkid && (end_blkid != DMU_SPILL_BLKID))
+	if (end_blkid > dn->dn_maxblkid && !freespill)
 		end_blkid = dn->dn_maxblkid;
 	dprintf_dnode(dn, "start=%llu end=%llu\n", start_blkid, end_blkid);
 
@@ -918,7 +920,7 @@ dbuf_free_range(dnode_t *dn, uint64_t st
 	db_search.db_state = DB_SEARCH;
 
 	mutex_enter(&dn->dn_dbufs_mtx);
-	if (start_blkid >= dn->dn_unlisted_l0_blkid) {
+	if (start_blkid >= dn->dn_unlisted_l0_blkid && !freespill) {
 		/* There can't be any dbufs in this range; no need to search. */
 #ifdef DEBUG
 		db = avl_find(&dn->dn_dbufs, &db_search, &where);


More information about the svn-src-all mailing list