Don't upgrade a metaslab when the pool is not writable

Illumos 4982 added code to metaslab_fragmentation() to proactively update
space maps when the spacemap_histogram feature is enabled.  This should
only happen when the pool is writeable.

References:
  https://www.illumos.org/issues/4982
  https://github.com/illumos/illumos-gate/commit/2e4c998

Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2595
This commit is contained in:
Tim Chase 2014-08-14 07:01:20 -05:00 committed by Brian Behlendorf
parent f3a7f6610f
commit 8b0a0840b4

View File

@ -1395,13 +1395,16 @@ metaslab_fragmentation(metaslab_t *msp)
* so that we upgrade next time we encounter it. * so that we upgrade next time we encounter it.
*/ */
if (msp->ms_sm->sm_dbuf->db_size != sizeof (space_map_phys_t)) { if (msp->ms_sm->sm_dbuf->db_size != sizeof (space_map_phys_t)) {
uint64_t txg = spa_syncing_txg(spa);
vdev_t *vd = msp->ms_group->mg_vd; vdev_t *vd = msp->ms_group->mg_vd;
msp->ms_condense_wanted = B_TRUE; if (spa_writeable(vd->vdev_spa)) {
vdev_dirty(vd, VDD_METASLAB, msp, txg + 1); uint64_t txg = spa_syncing_txg(spa);
spa_dbgmsg(spa, "txg %llu, requesting force condense: "
"msp %p, vd %p", txg, msp, vd); msp->ms_condense_wanted = B_TRUE;
vdev_dirty(vd, VDD_METASLAB, msp, txg + 1);
spa_dbgmsg(spa, "txg %llu, requesting force condense: "
"msp %p, vd %p", txg, msp, vd);
}
return (ZFS_FRAG_INVALID); return (ZFS_FRAG_INVALID);
} }