diff options
Diffstat (limited to 'fs/bcachefs/buckets.c')
-rw-r--r-- | fs/bcachefs/buckets.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/bcachefs/buckets.c b/fs/bcachefs/buckets.c index 6d452311d924..58f25894d48a 100644 --- a/fs/bcachefs/buckets.c +++ b/fs/bcachefs/buckets.c @@ -642,9 +642,13 @@ static int bch2_mark_alloc(struct bch_fs *c, struct bkey_s_c k, if (flags & BCH_BUCKET_MARK_GC) return 0; - u = bch2_alloc_unpack(bkey_s_c_to_alloc(k).v); ca = bch_dev_bkey_exists(c, k.k->p.inode); + + if (k.k->p.offset >= ca->mi.nbuckets) + return 0; + g = __bucket(ca, k.k->p.offset, gc); + u = bch2_alloc_unpack(k); old = bucket_data_cmpxchg(c, ca, fs_usage, g, m, ({ m.gen = u.gen; @@ -1370,7 +1374,7 @@ static int bch2_trans_mark_pointer(struct btree_trans *trans, goto out; } - u = bch2_alloc_unpack(bkey_s_c_to_alloc(k).v); + u = bch2_alloc_unpack(k); if (gen_after(u.gen, p.ptr.gen)) { ret = 1; |