diff options
| author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-04-09 01:23:50 -0400 |
|---|---|---|
| committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:31 -0400 |
| commit | 84c72755b9aab31ed43e50eb5c7229d7ef042f7d (patch) | |
| tree | 71dec50f00068356f9707de15b9f77d29ecf2d0b | |
| parent | ce6201c456571d919e722eec3c17f868f0575b05 (diff) | |
| download | linux-84c72755b9aab31ed43e50eb5c7229d7ef042f7d.tar.gz linux-84c72755b9aab31ed43e50eb5c7229d7ef042f7d.tar.bz2 linux-84c72755b9aab31ed43e50eb5c7229d7ef042f7d.zip | |
bcachefs: Initialize ec work structs early
We need to ensure that work structs in bch_fs always get initialized -
otherwise an error in filesystem initialization can pop a warning in the
workqueue code when we try to cancel a work struct that wasn't
initialized.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
| -rw-r--r-- | fs/bcachefs/ec.c | 5 | ||||
| -rw-r--r-- | fs/bcachefs/ec.h | 1 | ||||
| -rw-r--r-- | fs/bcachefs/super.c | 1 |
3 files changed, 6 insertions, 1 deletions
diff --git a/fs/bcachefs/ec.c b/fs/bcachefs/ec.c index 7a524f604875..ae33d3ea8ec1 100644 --- a/fs/bcachefs/ec.c +++ b/fs/bcachefs/ec.c @@ -1682,11 +1682,14 @@ void bch2_fs_ec_exit(struct bch_fs *c) bioset_exit(&c->ec_bioset); } -int bch2_fs_ec_init(struct bch_fs *c) +void bch2_fs_ec_init_early(struct bch_fs *c) { INIT_WORK(&c->ec_stripe_create_work, ec_stripe_create_work); INIT_WORK(&c->ec_stripe_delete_work, ec_stripe_delete_work); +} +int bch2_fs_ec_init(struct bch_fs *c) +{ return bioset_init(&c->ec_bioset, 1, offsetof(struct ec_bio, bio), BIOSET_NEED_BVECS); } diff --git a/fs/bcachefs/ec.h b/fs/bcachefs/ec.h index af7f8eee94b0..a4c13d61af10 100644 --- a/fs/bcachefs/ec.h +++ b/fs/bcachefs/ec.h @@ -224,6 +224,7 @@ void bch2_stripes_heap_to_text(struct printbuf *, struct bch_fs *); void bch2_new_stripes_to_text(struct printbuf *, struct bch_fs *); void bch2_fs_ec_exit(struct bch_fs *); +void bch2_fs_ec_init_early(struct bch_fs *); int bch2_fs_ec_init(struct bch_fs *); #endif /* _BCACHEFS_EC_H */ diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c index 689c82f6cb5d..d2776efa9985 100644 --- a/fs/bcachefs/super.c +++ b/fs/bcachefs/super.c @@ -663,6 +663,7 @@ static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, struct bch_opts opts) bch2_fs_allocator_foreground_init(c); bch2_fs_rebalance_init(c); bch2_fs_quota_init(c); + bch2_fs_ec_init_early(c); INIT_LIST_HEAD(&c->list); |
