From: Kent Overstreet Date: Tue, 20 Dec 2022 03:24:41 +0000 (-0500) Subject: Update bcachefs sources to 0939e1c732 fixup! bcachefs: Rework lru btree X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=e314b39c63fbfc2522c4b96e4031f9fc8e07e267;p=bcachefs-tools-debian Update bcachefs sources to 0939e1c732 fixup! bcachefs: Rework lru btree --- diff --git a/.bcachefs_revision b/.bcachefs_revision index e8e13fb..615d94b 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -2e8463c770e9f1e2269e0fc9f64d044424758f4f +0939e1c73231c779c961e1143e1ba489ef2b168c diff --git a/libbcachefs/alloc_background.c b/libbcachefs/alloc_background.c index be2fa9e..a78232e 100644 --- a/libbcachefs/alloc_background.c +++ b/libbcachefs/alloc_background.c @@ -920,9 +920,6 @@ int bch2_trans_mark_alloc(struct btree_trans *trans, old_lru, new_lru); if (ret) return ret; - - if (new_a->data_type == BCH_DATA_cached) - new_a->io_time[READ] = new_lru; } if (old_a->gen != new_a->gen) { @@ -1512,7 +1509,6 @@ static int bch2_check_alloc_to_lru_ref(struct btree_trans *trans, const struct bch_alloc_v4 *a; struct bkey_s_c alloc_k, k; struct printbuf buf = PRINTBUF; - struct printbuf buf2 = PRINTBUF; int ret; alloc_k = bch2_btree_iter_peek(alloc_iter); @@ -1529,8 +1525,9 @@ static int bch2_check_alloc_to_lru_ref(struct btree_trans *trans, return 0; bch2_trans_iter_init(trans, &lru_iter, BTREE_ID_lru, - POS(alloc_k.k->p.inode, a->io_time[READ]), 0); - + lru_pos(alloc_k.k->p.inode, + bucket_to_u64(alloc_k.k->p), + a->io_time[READ]), 0); k = bch2_btree_iter_peek_slot(&lru_iter); ret = bkey_err(k); if (ret) @@ -1541,14 +1538,11 @@ static int bch2_check_alloc_to_lru_ref(struct btree_trans *trans, " %s", (printbuf_reset(&buf), bch2_bkey_val_to_text(&buf, c, alloc_k), buf.buf)) || - fsck_err_on(k.k->type != KEY_TYPE_set || - le64_to_cpu(bkey_s_c_to_lru(k).v->idx) != alloc_k.k->p.offset, c, - "incorrect/missing lru entry\n" - " %s\n" + fsck_err_on(k.k->type != KEY_TYPE_set, c, + "missing lru entry\n" " %s", (printbuf_reset(&buf), - bch2_bkey_val_to_text(&buf, c, alloc_k), buf.buf), - (bch2_bkey_val_to_text(&buf2, c, k), buf2.buf))) { + bch2_bkey_val_to_text(&buf, c, alloc_k), buf.buf))) { u64 read_time = a->io_time[READ] ?: atomic64_read(&c->io_clock[READ].now); @@ -1576,7 +1570,6 @@ static int bch2_check_alloc_to_lru_ref(struct btree_trans *trans, err: fsck_err: bch2_trans_iter_exit(trans, &lru_iter); - printbuf_exit(&buf2); printbuf_exit(&buf); return ret; } diff --git a/libbcachefs/lru.c b/libbcachefs/lru.c index f7bb2be..e542cd3 100644 --- a/libbcachefs/lru.c +++ b/libbcachefs/lru.c @@ -58,7 +58,7 @@ static int __bch2_lru_set(struct btree_trans *trans, u16 lru_id, k->k.p, BTREE_ITER_INTENT); ret = bch2_btree_iter_traverse(&iter) ?: - bch2_btree_delete_at(trans, &iter, 0); + bch2_trans_update(trans, &iter, k, 0); bch2_trans_iter_exit(trans, &iter); return ret; } @@ -111,11 +111,12 @@ static int bch2_check_lru_key(struct btree_trans *trans, a = bch2_alloc_to_v4(k, &a_convert); - if (fsck_err_on(k.k->type != KEY_TYPE_set || + if (fsck_err_on(lru_k.k->type != KEY_TYPE_set || a->data_type != BCH_DATA_cached || - a->io_time[READ] != lru_k.k->p.offset, c, - "incorrect lru entry %s\n" + a->io_time[READ] != lru_pos_time(lru_k.k->p), c, + "incorrect lru entry (time %llu) %s\n" " for %s", + lru_pos_time(lru_k.k->p), (bch2_bkey_val_to_text(&buf1, c, lru_k), buf1.buf), (bch2_bkey_val_to_text(&buf2, c, k), buf2.buf))) { ret = bch2_btree_delete_at(trans, lru_iter, 0);