mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 03:08:51 +03:00
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 <behlendorf1@llnl.gov> Signed-off-by: Signed-off-by: Chunwei Chen <tuxoko@gmail.com> Signed-off-by: Tim Chase <tim@chase2k.com> Closes #4331
This commit is contained in:
@@ -1392,6 +1392,7 @@ zpool_find_import_impl(libzfs_handle_t *hdl, importargs_t *iarg)
|
||||
slice->rn_nozpool = B_FALSE;
|
||||
avl_add(&slice_cache, slice);
|
||||
}
|
||||
|
||||
/*
|
||||
* create a thread pool to do all of this in parallel;
|
||||
* rn_nozpool is not protected, so this is racy in that
|
||||
@@ -1401,7 +1402,6 @@ zpool_find_import_impl(libzfs_handle_t *hdl, importargs_t *iarg)
|
||||
* locks in the kernel, so going beyond this doesn't
|
||||
* buy us much.
|
||||
*/
|
||||
thread_init();
|
||||
t = taskq_create("z_import", 2 * boot_ncpus, defclsyspri,
|
||||
2 * boot_ncpus, INT_MAX, TASKQ_PREPOPULATE);
|
||||
for (slice = avl_first(&slice_cache); slice;
|
||||
@@ -1411,7 +1411,6 @@ zpool_find_import_impl(libzfs_handle_t *hdl, importargs_t *iarg)
|
||||
TQ_SLEEP);
|
||||
taskq_wait(t);
|
||||
taskq_destroy(t);
|
||||
thread_fini();
|
||||
|
||||
cookie = NULL;
|
||||
while ((slice = avl_destroy_nodes(&slice_cache,
|
||||
|
||||
Reference in New Issue
Block a user