Pass in the backpointer explicitly, instead of assuming 'referring_k' is
an alloc key and calculating it.

Signed-off-by: Kent Overstreet <[email protected]>
---
 fs/bcachefs/alloc_background.c |  5 ++++-
 fs/bcachefs/lru.c              | 10 +++++-----
 fs/bcachefs/lru.h              |  2 +-
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c
index 87ff50a3cd81..58cdb6a0acf9 100644
--- a/fs/bcachefs/alloc_background.c
+++ b/fs/bcachefs/alloc_background.c
@@ -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;
diff --git a/fs/bcachefs/lru.c b/fs/bcachefs/lru.c
index 8ec16ae8daa6..dc6b9a80a8b5 100644
--- a/fs/bcachefs/lru.c
+++ b/fs/bcachefs/lru.c
@@ -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;
                }
diff --git a/fs/bcachefs/lru.h b/fs/bcachefs/lru.h
index 398cc25db459..dea1d75cc9c1 100644
--- a/fs/bcachefs/lru.h
+++ b/fs/bcachefs/lru.h
@@ -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 *);
 
-- 
2.45.2


Reply via email to