]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: decouple bch2_lru_check_set() from alloc btree
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 10 Feb 2025 23:42:45 +0000 (18:42 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 15 Mar 2025 01:02:14 +0000 (21:02 -0400)
Pass in the backpointer explicitly, instead of assuming 'referring_k' is
an alloc key and calculating it.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_background.c
fs/bcachefs/lru.c
fs/bcachefs/lru.h

index 87ff50a3cd8174aa847fe8f9821d9329afa4633c..58cdb6a0acf9feca757210508029da3e954ee292 100644 (file)
@@ -1700,6 +1700,7 @@ static int bch2_check_alloc_to_lru_ref(struct btree_trans *trans,
        u64 lru_idx = alloc_lru_idx_fragmentation(*a, ca);
        if (lru_idx) {
                ret = bch2_lru_check_set(trans, BCH_LRU_BUCKET_FRAGMENTATION,
+                                        bucket_to_u64(alloc_k.k->p),
                                         lru_idx, alloc_k, last_flushed);
                if (ret)
                        goto err;
@@ -1729,7 +1730,9 @@ static int bch2_check_alloc_to_lru_ref(struct btree_trans *trans,
                a = &a_mut->v;
        }
 
-       ret = bch2_lru_check_set(trans, alloc_k.k->p.inode, a->io_time[READ],
+       ret = bch2_lru_check_set(trans, alloc_k.k->p.inode,
+                                bucket_to_u64(alloc_k.k->p),
+                                a->io_time[READ],
                                 alloc_k, last_flushed);
        if (ret)
                goto err;
index 8ec16ae8daa65bdaf47e32fa7c668eaea36aeeb6..dc6b9a80a8b5de34a6a9761edd061543bd0a76c6 100644 (file)
@@ -78,7 +78,9 @@ static const char * const bch2_lru_types[] = {
 };
 
 int bch2_lru_check_set(struct btree_trans *trans,
-                      u16 lru_id, u64 time,
+                      u16 lru_id,
+                      u64 dev_bucket,
+                      u64 time,
                       struct bkey_s_c referring_k,
                       struct bkey_buf *last_flushed)
 {
@@ -87,9 +89,7 @@ int bch2_lru_check_set(struct btree_trans *trans,
        struct btree_iter lru_iter;
        struct bkey_s_c lru_k =
                bch2_bkey_get_iter(trans, &lru_iter, BTREE_ID_lru,
-                                  lru_pos(lru_id,
-                                          bucket_to_u64(referring_k.k->p),
-                                          time), 0);
+                                  lru_pos(lru_id, dev_bucket, time), 0);
        int ret = bkey_err(lru_k);
        if (ret)
                return ret;
@@ -104,7 +104,7 @@ int bch2_lru_check_set(struct btree_trans *trans,
                             "  %s",
                             bch2_lru_types[lru_type(lru_k)],
                             (bch2_bkey_val_to_text(&buf, c, referring_k), buf.buf))) {
-                       ret = bch2_lru_set(trans, lru_id, bucket_to_u64(referring_k.k->p), time);
+                       ret = bch2_lru_set(trans, lru_id, dev_bucket, time);
                        if (ret)
                                goto err;
                }
index 398cc25db459344e84bddc87a74b8a3b7d6abcc7..dea1d75cc9c17cca6c422e70d55a13c71c77c0be 100644 (file)
@@ -58,7 +58,7 @@ static inline int bch2_lru_change(struct btree_trans *trans,
 }
 
 struct bkey_buf;
-int bch2_lru_check_set(struct btree_trans *, u16, u64, struct bkey_s_c, struct bkey_buf *);
+int bch2_lru_check_set(struct btree_trans *, u16, u64, u64, struct bkey_s_c, struct bkey_buf *);
 
 int bch2_check_lrus(struct bch_fs *);