summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Wilson <george.wilson@delphix.com>2014-04-01 00:22:55 +0000
committerBrian Behlendorf <behlendorf1@llnl.gov>2014-05-06 16:46:04 +0000
commitaa7d06a98a2b3b0d864aadd310113c52b946b842 (patch)
treee49591df2df73594f9f0ac0a497514d6d6ce0bb8
parentcc79a5c263802b58de62b190e264c7f61b6235c9 (diff)
-rw-r--r--man/man5/zfs-module-parameters.515
-rw-r--r--module/zfs/metaslab.c20
2 files changed, 27 insertions, 8 deletions
diff --git a/man/man5/zfs-module-parameters.5 b/man/man5/zfs-module-parameters.5
index e0d44d22c1d6..815c856c0615 100644
--- a/man/man5/zfs-module-parameters.5
+++ b/man/man5/zfs-module-parameters.5
@@ -137,10 +137,21 @@ Default value: \fB8,388,608\fR.
.sp
.ne 2
.na
-\fBmetaslab_debug\fR (int)
+\fBmetaslab_debug_load\fR (int)
.ad
.RS 12n
-Keep space maps in core to verify frees
+Load all metaslabs during pool import.
+.sp
+Use \fB1\fR for yes and \fB0\fR for no (default).
+.RE
+
+.sp
+.ne 2
+.na
+\fBmetaslab_debug_unload\fR (int)
+.ad
+.RS 12n
+Prevent metaslabs from being unloaded.
.sp
Use \fB1\fR for yes and \fB0\fR for no (default).
.RE
diff --git a/module/zfs/metaslab.c b/module/zfs/metaslab.c
index 6356f79502be..32ffdfb9858d 100644
--- a/module/zfs/metaslab.c
+++ b/module/zfs/metaslab.c
@@ -81,9 +81,14 @@ int zfs_mg_alloc_failures = 0;
int zfs_mg_noalloc_threshold = 0;
/*
- * Metaslab debugging: when set, keeps all space maps in core to verify frees.
+ * When set will load all metaslabs when pool is first opened.
*/
-int metaslab_debug = 0;
+int metaslab_debug_load = 0;
+
+/*
+ * When set will prevent metaslabs from being unloaded.
+ */
+int metaslab_debug_unload = 0;
/*
* Minimum size which forces the dynamic allocator to change
@@ -846,7 +851,7 @@ metaslab_init(metaslab_group_t *mg, space_map_obj_t *smo,
metaslab_group_add(mg, msp);
- if (metaslab_debug && smo->smo_object != 0) {
+ if (metaslab_debug_load && smo->smo_object != 0) {
mutex_enter(&msp->ms_lock);
VERIFY(space_map_load(msp->ms_map, mg->mg_class->mc_ops,
SM_FREE, smo, spa_meta_objset(vd->vdev_spa)) == 0);
@@ -1407,7 +1412,7 @@ metaslab_sync_done(metaslab_t *msp, uint64_t txg)
if (msp->ms_allocmap[(txg + t) & TXG_MASK]->sm_space)
evictable = 0;
- if (evictable && !metaslab_debug)
+ if (evictable && !metaslab_debug_unload)
space_map_unload(sm);
}
@@ -2109,6 +2114,9 @@ metaslab_check_free(spa_t *spa, const blkptr_t *bp)
}
#if defined(_KERNEL) && defined(HAVE_SPL)
-module_param(metaslab_debug, int, 0644);
-MODULE_PARM_DESC(metaslab_debug, "keep space maps in core to verify frees");
+module_param(metaslab_debug_load, int, 0644);
+MODULE_PARM_DESC(metaslab_debug_load, "load all metaslabs during pool import");
+
+module_param(metaslab_debug_unload, int, 0644);
+MODULE_PARM_DESC(metaslab_debug_unload, "prevent metaslabs from being unloaded");
#endif /* _KERNEL && HAVE_SPL */