diff --git a/module/zfs/metaslab.c b/module/zfs/metaslab.c index 00af4a21b..11b9ba8e9 100644 --- a/module/zfs/metaslab.c +++ b/module/zfs/metaslab.c @@ -3553,12 +3553,19 @@ metaslab_sync(metaslab_t *msp, uint64_t txg) /* * Normally, we don't want to process a metaslab if there are no * allocations or frees to perform. However, if the metaslab is being - * forced to condense and it's loaded, we need to let it through. + * forced to condense, it's loaded and we're not beyond the final + * dirty txg, we need to let it through. Not condensing beyond the + * final dirty txg prevents an issue where metaslabs that need to be + * condensed but were loaded for other reasons could cause a panic + * here. By only checking the txg in that branch of the conditional, + * we preserve the utility of the VERIFY statements in all other + * cases. */ if (range_tree_is_empty(alloctree) && range_tree_is_empty(msp->ms_freeing) && range_tree_is_empty(msp->ms_checkpointing) && - !(msp->ms_loaded && msp->ms_condense_wanted)) + !(msp->ms_loaded && msp->ms_condense_wanted && + txg <= spa_final_dirty_txg(spa))) return; diff --git a/tests/runfiles/linux.run b/tests/runfiles/linux.run index a9ef628bc..d05ff6120 100644 --- a/tests/runfiles/linux.run +++ b/tests/runfiles/linux.run @@ -481,15 +481,13 @@ tests = ['zpool_trim_attach_detach_add_remove', tags = ['functional', 'zpool_trim'] [tests/functional/cli_root/zpool_upgrade] -tests = ['zpool_upgrade_001_pos', +tests = ['zpool_upgrade_001_pos', 'zpool_upgrade_002_pos', + 'zpool_upgrade_003_pos', 'zpool_upgrade_004_pos', 'zpool_upgrade_005_neg', 'zpool_upgrade_006_neg', + 'zpool_upgrade_007_pos', 'zpool_upgrade_008_pos', 'zpool_upgrade_009_neg'] tags = ['functional', 'cli_root', 'zpool_upgrade'] -# Disabled pending resolution of #9185 and #9186. -# 'zpool_upgrade_002_pos', 'zpool_upgrade_003_pos', 'zpool_upgrade_004_pos', -# 'zpool_upgrade_007_pos', 'zpool_upgrade_008_pos', - [tests/functional/cli_user/misc] tests = ['zdb_001_neg', 'zfs_001_neg', 'zfs_allow_001_neg', 'zfs_clone_001_neg', 'zfs_create_001_neg', 'zfs_destroy_001_neg',