]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
Update bcachefs sources to 0939e1c732 fixup! bcachefs: Rework lru btree
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 20 Dec 2022 03:24:41 +0000 (22:24 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Tue, 20 Dec 2022 03:24:41 +0000 (22:24 -0500)
.bcachefs_revision
libbcachefs/alloc_background.c
libbcachefs/lru.c

index e8e13fb5f686b157897ac38fb9089f21a56fbd3b..615d94b8ae9b15c82636b4cbc9afa17960f4d8e0 100644 (file)
@@ -1 +1 @@
-2e8463c770e9f1e2269e0fc9f64d044424758f4f
+0939e1c73231c779c961e1143e1ba489ef2b168c
index be2fa9ebfdb04d779ec6fcfc5f8b1b7b688fd7a4..a78232ed87f1fa962a77d19210ce04e952991988 100644 (file)
@@ -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;
 }
index f7bb2be2adb7936c2171add596bf4a4bc7ebbcc4..e542cd3d4ff280d55fc8f2a20e0235d75c3f555b 100644 (file)
@@ -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);