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-vendor
mailing list