summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-04-03 14:27:44 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2022-04-03 20:38:51 -0400
commit5a6a42ab42de7376a1c71dff0e4c012770945acb (patch)
tree13f8b28cafd9e40199dc59215ac2f6391bd88755
parent45d0c2596758c0d050972783dcb139e979e0b434 (diff)
fixup! bcachefs: bch_sb_field_journal_v2
-rw-r--r--fs/bcachefs/journal.c11
-rw-r--r--fs/bcachefs/journal_sb.c3
2 files changed, 12 insertions, 2 deletions
diff --git a/fs/bcachefs/journal.c b/fs/bcachefs/journal.c
index 505e8367b5f2..d01b1cd4000d 100644
--- a/fs/bcachefs/journal.c
+++ b/fs/bcachefs/journal.c
@@ -964,6 +964,7 @@ int bch2_set_nr_journal_buckets(struct bch_fs *c, struct bch_dev *ca,
int bch2_dev_journal_alloc(struct bch_dev *ca)
{
unsigned nr;
+ int ret;
if (dynamic_fault("bcachefs:add:journal_alloc"))
return -ENOMEM;
@@ -980,7 +981,15 @@ int bch2_dev_journal_alloc(struct bch_dev *ca)
min(1 << 13,
(1 << 24) / ca->mi.bucket_size));
- return __bch2_set_nr_journal_buckets(ca, nr, true, NULL);
+ if (ca->fs)
+ mutex_lock(&ca->fs->sb_lock);
+
+ ret = __bch2_set_nr_journal_buckets(ca, nr, true, NULL);
+
+ if (ca->fs)
+ mutex_unlock(&ca->fs->sb_lock);
+
+ return ret;
}
/* startup/shutdown: */
diff --git a/fs/bcachefs/journal_sb.c b/fs/bcachefs/journal_sb.c
index 8efe7b7e3dcb..506044e358db 100644
--- a/fs/bcachefs/journal_sb.c
+++ b/fs/bcachefs/journal_sb.c
@@ -186,7 +186,8 @@ int bch2_journal_buckets_to_sb(struct bch_fs *c, struct bch_dev *ca)
struct bch_sb_field_journal_v2 *j;
unsigned i, dst = 0, nr = 1;
- lockdep_assert_held(&c->sb_lock);
+ if (c)
+ lockdep_assert_held(&c->sb_lock);
if (!ja->nr) {
bch2_sb_field_delete(&ca->disk_sb, BCH_SB_FIELD_journal);