summaryrefslogtreecommitdiff
path: root/fs/bcachefs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/bcachefs')
-rw-r--r--fs/bcachefs/alloc_background.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c
index a9150238d2d1..0c33424393be 100644
--- a/fs/bcachefs/alloc_background.c
+++ b/fs/bcachefs/alloc_background.c
@@ -588,6 +588,22 @@ static int bch2_check_alloc_key(struct btree_trans *trans,
}
if (bucket_state(a) == BUCKET_cached) {
+ if (fsck_err_on(!a.read_time, c,
+ "cached bucket with read_time 0\n"
+ " %s",
+ (printbuf_reset(&buf),
+ bch2_bkey_val_to_text(&buf, c, alloc_k), buf.buf))) {
+
+ a.read_time = atomic64_read(&c->io_clock[READ].now);
+
+ ret = bch2_lru_change(trans, a.dev, a.bucket,
+ 0, &a.read_time) ?:
+ bch2_alloc_write(trans, alloc_iter, &a, BTREE_TRIGGER_NORUN);
+ bch2_trans_commit(trans, NULL, NULL, 0);
+ if (ret)
+ goto err;
+ }
+
k = bch2_btree_iter_peek_slot(&lru_iter);
ret = bkey_err(k);
if (ret)