From 505d9655c9e759a145b4812c654c51c34dbe3425 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 17 Mar 2016 15:32:33 -0700 Subject: Fix zdb -e and zhack thread_init() This issue was caused by calling `thread_init()` and `thread_fini()` multiple times resulting in `kthread_key` being invalid. To resolve the issue the explicit calls to `thread_init()` and `thread_fini()` required by the `zpool` command have been moved in to the command. Consumers such as `zdb` and `zhack` perform the same initialized through `kernel_init()` and `kernel_fini()`. Resolving this issue allows multiple additional test cases to be enabled. Signed-off-by: Brian Behlendorf Signed-off-by: Signed-off-by: Chunwei Chen Signed-off-by: Tim Chase Closes #4331 --- cmd/zpool/zpool_main.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'cmd') diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index b74dc219a..c9b600650 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -2331,7 +2331,15 @@ zpool_do_import(int argc, char **argv) idata.cachefile = cachefile; idata.scan = do_scan; + /* + * Under Linux the zpool_find_import_impl() function leverages the + * taskq implementation to parallelize device scanning. It is + * therefore necessary to initialize this functionality for the + * duration of the zpool_search_import() function. + */ + thread_init(); pools = zpool_search_import(g_zfs, &idata); + thread_fini(); if (pools != NULL && idata.exists && (argc == 1 || strcmp(argv[0], argv[1]) == 0)) { -- cgit v1.2.3