summaryrefslogtreecommitdiff
path: root/libbcachefs/alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/alloc.c')
-rw-r--r--libbcachefs/alloc.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/libbcachefs/alloc.c b/libbcachefs/alloc.c
index a12c5d3e..36dc947c 100644
--- a/libbcachefs/alloc.c
+++ b/libbcachefs/alloc.c
@@ -361,7 +361,7 @@ static int __bch2_alloc_write_key(struct bch_fs *c, struct bch_dev *ca,
struct bucket *g, struct btree_iter *iter,
u64 *journal_seq)
{
- struct bucket_mark m = READ_ONCE(g->mark);
+ struct bucket_mark m;
__BKEY_PADDED(k, DIV_ROUND_UP(sizeof(struct bch_alloc), 8)) alloc_key;
struct bkey_i_alloc *a;
u8 *d;
@@ -374,6 +374,8 @@ static int __bch2_alloc_write_key(struct bch_fs *c, struct bch_dev *ca,
if (ret)
break;
+ /* read mark under btree node lock: */
+ m = READ_ONCE(g->mark);
a = bkey_alloc_init(&alloc_key.k);
a->k.p = iter->pos;
a->v.fields = 0;
@@ -407,8 +409,6 @@ int bch2_alloc_replay_key(struct bch_fs *c, struct bpos pos)
struct btree_iter iter;
int ret;
- lockdep_assert_held(&c->state_lock);
-
if (pos.inode >= c->sb.nr_devices || !c->devs[pos.inode])
return 0;