diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-07-17 00:56:07 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:10:08 -0400 |
commit | 8e992c6c1f3869d0b33c754d4b6730603d3586c4 (patch) | |
tree | 41f0e165a277f49ea6798c40d770d21bb1b64546 /fs/bcachefs/lru.c | |
parent | 4dc5bb9adf3035246e77d5e9cf7931b8af0fcaac (diff) |
bcachefs: bch2_btree_bit_mod()
New helper for bitset btrees.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/lru.c')
-rw-r--r-- | fs/bcachefs/lru.c | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/fs/bcachefs/lru.c b/fs/bcachefs/lru.c index 07d1929535b8..3e8b8f2f38a3 100644 --- a/fs/bcachefs/lru.c +++ b/fs/bcachefs/lru.c @@ -41,28 +41,12 @@ void bch2_lru_pos_to_text(struct printbuf *out, struct bpos lru) } static int __bch2_lru_set(struct btree_trans *trans, u16 lru_id, - u64 dev_bucket, u64 time, unsigned key_type) + u64 dev_bucket, u64 time, bool set) { - struct bkey_i *k; - int ret = 0; - - if (!time) - return 0; - - k = bch2_trans_kmalloc_nomemzero(trans, sizeof(*k)); - ret = PTR_ERR_OR_ZERO(k); - if (unlikely(ret)) - return ret; - - bkey_init(&k->k); - k->k.type = key_type; - k->k.p = lru_pos(lru_id, dev_bucket, time); - - EBUG_ON(lru_pos_id(k->k.p) != lru_id); - EBUG_ON(lru_pos_time(k->k.p) != time); - EBUG_ON(k->k.p.offset != dev_bucket); - - return bch2_trans_update_buffered(trans, BTREE_ID_lru, k); + return time + ? bch2_btree_bit_mod(trans, BTREE_ID_lru, + lru_pos(lru_id, dev_bucket, time), set) + : 0; } int bch2_lru_del(struct btree_trans *trans, u16 lru_id, u64 dev_bucket, u64 time) |