diff options
author | Chunwei Chen <[email protected]> | 2015-12-02 14:52:46 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-01-20 13:07:45 -0800 |
commit | 16522ac29023d94bc29e97761b01b252117cbbfe (patch) | |
tree | c05042fbea285fe0c73640afd915b3a3d69c8476 /module/spl/spl-generic.c | |
parent | de77e245902cc5bb6c22591d54e31c7647ff912f (diff) |
Use tsd to store tq for taskq_member
To prevent taskq_member holding tq_lock and doing linear search, thus causing
contention. We store the taskq pointer to which the thread belongs in tsd.
This way taskq_member will not need to touch tq_lock, and tsd has per slot
spinlock. So the contention should be reduced greatly.
Signed-off-by: Chunwei Chen <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #500
Closes #504
Closes #505
Diffstat (limited to 'module/spl/spl-generic.c')
-rw-r--r-- | module/spl/spl-generic.c | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/module/spl/spl-generic.c b/module/spl/spl-generic.c index 4d9846cf5..dc3e74aa5 100644 --- a/module/spl/spl-generic.c +++ b/module/spl/spl-generic.c @@ -491,29 +491,20 @@ spl_kvmem_init(void) rc = spl_kmem_init(); if (rc) - goto out1; + return (rc); rc = spl_vmem_init(); - if (rc) - goto out2; - - rc = spl_kmem_cache_init(); - if (rc) - goto out3; + if (rc) { + spl_kmem_fini(); + return (rc); + } return (rc); -out3: - spl_vmem_fini(); -out2: - spl_kmem_fini(); -out1: - return (rc); } static void spl_kvmem_fini(void) { - spl_kmem_cache_fini(); spl_vmem_fini(); spl_kmem_fini(); } @@ -532,38 +523,43 @@ spl_init(void) if ((rc = spl_rw_init())) goto out3; - if ((rc = spl_taskq_init())) + if ((rc = spl_tsd_init())) goto out4; - if ((rc = spl_vn_init())) + if ((rc = spl_taskq_init())) goto out5; - if ((rc = spl_proc_init())) + if ((rc = spl_kmem_cache_init())) goto out6; - if ((rc = spl_kstat_init())) + if ((rc = spl_vn_init())) goto out7; - if ((rc = spl_tsd_init())) + if ((rc = spl_proc_init())) goto out8; - if ((rc = spl_zlib_init())) + if ((rc = spl_kstat_init())) goto out9; + if ((rc = spl_zlib_init())) + goto out10; + printk(KERN_NOTICE "SPL: Loaded module v%s-%s%s\n", SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR); return (rc); +out10: + spl_kstat_fini(); out9: - spl_tsd_fini(); + spl_proc_fini(); out8: - spl_kstat_fini(); + spl_vn_fini(); out7: - spl_proc_fini(); + spl_kmem_cache_fini(); out6: - spl_vn_fini(); -out5: spl_taskq_fini(); +out5: + spl_tsd_fini(); out4: spl_rw_fini(); out3: @@ -584,11 +580,12 @@ spl_fini(void) printk(KERN_NOTICE "SPL: Unloaded module v%s-%s%s\n", SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR); spl_zlib_fini(); - spl_tsd_fini(); spl_kstat_fini(); spl_proc_fini(); spl_vn_fini(); + spl_kmem_cache_fini(); spl_taskq_fini(); + spl_tsd_fini(); spl_rw_fini(); spl_mutex_fini(); spl_kvmem_fini(); |