summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-05-27 21:38:00 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-05-30 15:04:49 -0400
commit68a095b6760e176e1b202e44969070383d7b7e98 (patch)
tree394439e563e3c67c5f4ddac0ca6fc8edb57d79ec
parentaeef50827224ec0486c7a212fd210de25d5ac4f8 (diff)
bcachefs: Split out btree_error_wq
We can't use btree_update_wq becuase btree updates may be waiting on btree writes to complete. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--fs/bcachefs/bcachefs.h1
-rw-r--r--fs/bcachefs/btree_io.c2
-rw-r--r--fs/bcachefs/super.c4
3 files changed, 6 insertions, 1 deletions
diff --git a/fs/bcachefs/bcachefs.h b/fs/bcachefs/bcachefs.h
index 90d331643d0d..56c53d78a892 100644
--- a/fs/bcachefs/bcachefs.h
+++ b/fs/bcachefs/bcachefs.h
@@ -666,6 +666,7 @@ struct bch_fs {
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;
diff --git a/fs/bcachefs/btree_io.c b/fs/bcachefs/btree_io.c
index 22707230b8dd..38bfad2566f8 100644
--- a/fs/bcachefs/btree_io.c
+++ b/fs/bcachefs/btree_io.c
@@ -1608,7 +1608,7 @@ static void btree_node_write_work(struct work_struct *work)
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;
}
diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c
index 1cf0afb468f1..5e20f5ee4dfa 100644
--- a/fs/bcachefs/super.c
+++ b/fs/bcachefs/super.c
@@ -513,6 +513,8 @@ static void __bch2_fs_free(struct bch_fs *c)
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);
@@ -764,6 +766,8 @@ static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, struct bch_opts opts)
if (!(c->btree_update_wq = alloc_workqueue("bcachefs",
WQ_FREEZABLE|WQ_MEM_RECLAIM|WQ_CPU_INTENSIVE, 1)) ||
+ !(c->btree_error_wq = alloc_workqueue("bcachefs_error",
+ WQ_FREEZABLE|WQ_MEM_RECLAIM|WQ_CPU_INTENSIVE, 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",