struct btree_key_cache btree_key_cache;
struct workqueue_struct *btree_update_wq;
+ struct workqueue_struct *btree_error_wq;
/* copygc needs its own workqueue for index updates.. */
struct workqueue_struct *copygc_wq;
bio_list_add(&c->btree_write_error_list, &wbio->wbio.bio);
spin_unlock_irqrestore(&c->btree_write_error_lock, flags);
- queue_work(c->btree_update_wq, &c->btree_write_error_work);
+ queue_work(c->btree_error_wq, &c->btree_write_error_work);
return;
}
destroy_workqueue(c->io_complete_wq );
if (c->copygc_wq)
destroy_workqueue(c->copygc_wq);
+ if (c->btree_error_wq)
+ destroy_workqueue(c->btree_error_wq);
if (c->btree_update_wq)
destroy_workqueue(c->btree_update_wq);
if (!(c->btree_update_wq = alloc_workqueue("bcachefs",
WQ_FREEZABLE|WQ_MEM_RECLAIM, 1)) ||
+ !(c->btree_error_wq = alloc_workqueue("bcachefs_error",
+ WQ_FREEZABLE|WQ_MEM_RECLAIM, 1)) ||
!(c->copygc_wq = alloc_workqueue("bcachefs_copygc",
WQ_FREEZABLE|WQ_MEM_RECLAIM|WQ_CPU_INTENSIVE, 1)) ||
!(c->io_complete_wq = alloc_workqueue("bcachefs_io",