Override default SPA config location via environment
[zfs.git] / cmd / zdb / zdb.c
index 0114c41..75d4198 100644 (file)
@@ -164,7 +164,7 @@ usage(void)
        (void) fprintf(stderr, "        -t <txg> -- highest txg to use when "
            "searching for uberblocks\n");
        (void) fprintf(stderr, "        -M <number of inflight I/Os> -- "
-           "specify the maximum number of checksumming I/Os [default is 200]");
+           "specify the maximum number of checksumming I/Os [default is 200]\n");
        (void) fprintf(stderr, "Specify an option more than once (e.g. -bb) "
            "to make only that option verbose\n");
        (void) fprintf(stderr, "Default is to dump everything non-verbosely\n");
@@ -548,7 +548,7 @@ static void
 dump_metaslab_stats(metaslab_t *msp)
 {
        char maxbuf[32];
-       space_map_t *sm = &msp->ms_map;
+       space_map_t *sm = msp->ms_map;
        avl_tree_t *t = sm->sm_pp_root;
        int free_pct = sm->sm_space * 100 / sm->sm_size;
 
@@ -564,7 +564,7 @@ dump_metaslab(metaslab_t *msp)
 {
        vdev_t *vd = msp->ms_group->mg_vd;
        spa_t *spa = vd->vdev_spa;
-       space_map_t *sm = &msp->ms_map;
+       space_map_t *sm = msp->ms_map;
        space_map_obj_t *smo = &msp->ms_smo;
        char freebuf[32];
 
@@ -2194,11 +2194,11 @@ zdb_leak_init(spa_t *spa, zdb_cb_t *zcb)
                        for (m = 0; m < vd->vdev_ms_count; m++) {
                                metaslab_t *msp = vd->vdev_ms[m];
                                mutex_enter(&msp->ms_lock);
-                               space_map_unload(&msp->ms_map);
-                               VERIFY(space_map_load(&msp->ms_map,
+                               space_map_unload(msp->ms_map);
+                               VERIFY(space_map_load(msp->ms_map,
                                    &zdb_space_map_ops, SM_ALLOC, &msp->ms_smo,
                                    spa->spa_meta_objset) == 0);
-                               msp->ms_map.sm_ppd = vd;
+                               msp->ms_map->sm_ppd = vd;
                                mutex_exit(&msp->ms_lock);
                        }
                }
@@ -2223,7 +2223,7 @@ zdb_leak_fini(spa_t *spa)
                        for (m = 0; m < vd->vdev_ms_count; m++) {
                                metaslab_t *msp = vd->vdev_ms[m];
                                mutex_enter(&msp->ms_lock);
-                               space_map_unload(&msp->ms_map);
+                               space_map_unload(msp->ms_map);
                                mutex_exit(&msp->ms_lock);
                        }
                }
@@ -3059,12 +3059,22 @@ main(int argc, char **argv)
        nvlist_t *policy = NULL;
        uint64_t max_txg = UINT64_MAX;
        int rewind = ZPOOL_NEVER_REWIND;
+       char *spa_config_path_env;
 
        (void) setrlimit(RLIMIT_NOFILE, &rl);
        (void) enable_extended_FILE_stdio(-1, -1);
 
        dprintf_setup(&argc, argv);
 
+       /*
+        * If there is an environment variable SPA_CONFIG_PATH it overrides
+        * default spa_config_path setting. If -U flag is specified it will
+        * override this environment variable settings once again.
+        */
+       spa_config_path_env = getenv("SPA_CONFIG_PATH");
+       if (spa_config_path_env != NULL)
+               spa_config_path = spa_config_path_env;
+
        while ((c = getopt(argc, argv, "bcdhilmM:suCDRSAFLXevp:t:U:P")) != -1) {
                switch (c) {
                case 'b':