summaryrefslogtreecommitdiffstats
path: root/module/zfs/metaslab.c
diff options
context:
space:
mode:
authorTim Chase <[email protected]>2014-08-14 07:01:20 -0500
committerBrian Behlendorf <[email protected]>2014-08-18 08:47:19 -0700
commit8b0a0840b405c67d7a2d4a78c9ebeb04fcb9d988 (patch)
tree4e867c32ab71ed05429d175a34f405ba58672889 /module/zfs/metaslab.c
parentf3a7f6610f2df0217ba3b99099019417a954b673 (diff)
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 <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #2595
Diffstat (limited to 'module/zfs/metaslab.c')
-rw-r--r--module/zfs/metaslab.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/module/zfs/metaslab.c b/module/zfs/metaslab.c
index 68a1591c2..098d73f95 100644
--- a/module/zfs/metaslab.c
+++ b/module/zfs/metaslab.c
@@ -1395,13 +1395,16 @@ metaslab_fragmentation(metaslab_t *msp)
* so that we upgrade next time we encounter it.
*/
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;
- 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);
+ if (spa_writeable(vd->vdev_spa)) {
+ uint64_t txg = spa_syncing_txg(spa);
+
+ 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);
}