mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-01-12 19:20:28 +03:00
Properly destroy work items in spl_kmem_cache_destroy()
In a non-debug build the ASSERT() would be optimized away which could cause pending work items to not be cancelled. We must also use cancel_delayed_work_sync() rather than just cancel_delayed_work() to actually wait until work items have completed. Otherwise they might accidentally access free'd memory. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes ZFS bugs #279, #62, #363, #418
This commit is contained in:
parent
763b2f3b57
commit
64c075c3f4
@ -1491,10 +1491,10 @@ spl_kmem_cache_destroy(spl_kmem_cache_t *skc)
|
||||
up_write(&spl_kmem_cache_sem);
|
||||
|
||||
/* Cancel any and wait for any pending delayed work */
|
||||
ASSERT(!test_and_set_bit(KMC_BIT_DESTROY, &skc->skc_flags));
|
||||
cancel_delayed_work(&skc->skc_work);
|
||||
VERIFY(!test_and_set_bit(KMC_BIT_DESTROY, &skc->skc_flags));
|
||||
cancel_delayed_work_sync(&skc->skc_work);
|
||||
for_each_online_cpu(i)
|
||||
cancel_delayed_work(&skc->skc_mag[i]->skm_work);
|
||||
cancel_delayed_work_sync(&skc->skc_mag[i]->skm_work);
|
||||
|
||||
flush_scheduled_work();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user