From 4f68d7878fbed9e225022a1d435cfb7177234110 Mon Sep 17 00:00:00 2001 From: George Wilson Date: Fri, 5 Sep 2014 02:50:36 +0200 Subject: [PATCH] Illumos 5117 - spacemap reallocation can cause corruption 5117 space map reallocation can cause corruption Reviewed by: Matthew Ahrens Reviewed by: Sebastien Roy Reviewed by: Richard Elling Approved by: Richard Lowe References: https://www.illumos.org/projects/illumos-gate/issues/5117 https://github.com/illumos/illumos-gate/commit/e503a68 Ported by: Turbo Fredriksson Signed-off-by: Brian Behlendorf Closes #2662 --- module/zfs/dnode_sync.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/module/zfs/dnode_sync.c b/module/zfs/dnode_sync.c index 676578859018..6ad623998c2b 100644 --- a/module/zfs/dnode_sync.c +++ b/module/zfs/dnode_sync.c @@ -695,6 +695,11 @@ dnode_sync(dnode_t *dn, dmu_tx_t *tx) return; } + if (dn->dn_next_nlevels[txgoff]) { + dnode_increase_indirection(dn, tx); + dn->dn_next_nlevels[txgoff] = 0; + } + if (dn->dn_next_nblkptr[txgoff]) { /* this should only happen on a realloc */ ASSERT(dn->dn_allocated_txg == tx->tx_txg); @@ -720,11 +725,6 @@ dnode_sync(dnode_t *dn, dmu_tx_t *tx) mutex_exit(&dn->dn_mtx); } - if (dn->dn_next_nlevels[txgoff]) { - dnode_increase_indirection(dn, tx); - dn->dn_next_nlevels[txgoff] = 0; - } - dbuf_sync_list(list, tx); if (!DMU_OBJECT_IS_SPECIAL(dn->dn_object)) {