2023-08-05 16:08:44 -04:00
/* SPDX-License-Identifier: GPL-2.0 */
# ifndef _BCACHEFS_BTREE_JOURNAL_ITER_H
# define _BCACHEFS_BTREE_JOURNAL_ITER_H
struct journal_iter {
struct list_head list ;
enum btree_id btree_id ;
unsigned level ;
size_t idx ;
struct journal_keys * keys ;
} ;
/*
* Iterate over keys in the btree , with keys from the journal overlaid on top :
*/
struct btree_and_journal_iter {
2024-01-22 14:37:42 -05:00
struct btree_trans * trans ;
2023-08-05 16:08:44 -04:00
struct btree * b ;
struct btree_node_iter node_iter ;
struct bkey unpacked ;
struct journal_iter journal ;
struct bpos pos ;
bool at_end ;
2024-01-22 14:25:00 -05:00
bool prefetch ;
2023-08-05 16:08:44 -04:00
} ;
struct bkey_i * bch2_journal_keys_peek_upto ( struct bch_fs * , enum btree_id ,
unsigned , struct bpos , struct bpos , size_t * ) ;
struct bkey_i * bch2_journal_keys_peek_slot ( struct bch_fs * , enum btree_id ,
unsigned , struct bpos ) ;
2024-01-22 14:37:42 -05:00
int bch2_btree_and_journal_iter_prefetch ( struct btree_trans * , struct btree_path * ,
struct btree_and_journal_iter * ) ;
2023-08-05 16:08:44 -04:00
int bch2_journal_key_insert_take ( struct bch_fs * , enum btree_id ,
unsigned , struct bkey_i * ) ;
int bch2_journal_key_insert ( struct bch_fs * , enum btree_id ,
unsigned , struct bkey_i * ) ;
int bch2_journal_key_delete ( struct bch_fs * , enum btree_id ,
unsigned , struct bpos ) ;
2024-03-26 17:14:43 -04:00
bool bch2_key_deleted_in_journal ( struct btree_trans * , enum btree_id , unsigned , struct bpos ) ;
void bch2_journal_key_overwritten ( struct bch_fs * , enum btree_id , unsigned , struct bpos ) ;
2023-08-05 16:08:44 -04:00
void bch2_btree_and_journal_iter_advance ( struct btree_and_journal_iter * ) ;
struct bkey_s_c bch2_btree_and_journal_iter_peek ( struct btree_and_journal_iter * ) ;
void bch2_btree_and_journal_iter_exit ( struct btree_and_journal_iter * ) ;
2024-01-22 14:37:42 -05:00
void __bch2_btree_and_journal_iter_init_node_iter ( struct btree_trans * ,
struct btree_and_journal_iter * , struct btree * ,
2023-08-05 16:08:44 -04:00
struct btree_node_iter , struct bpos ) ;
2024-01-22 14:37:42 -05:00
void bch2_btree_and_journal_iter_init_node_iter ( struct btree_trans * ,
struct btree_and_journal_iter * , struct btree * ) ;
2023-08-05 16:08:44 -04:00
2023-11-17 23:13:49 -05:00
void bch2_journal_keys_put ( struct bch_fs * ) ;
static inline void bch2_journal_keys_put_initial ( struct bch_fs * c )
{
if ( c - > journal_keys . initial_ref_held )
bch2_journal_keys_put ( c ) ;
c - > journal_keys . initial_ref_held = false ;
}
2023-08-05 16:08:44 -04:00
void bch2_journal_entries_free ( struct bch_fs * ) ;
int bch2_journal_keys_sort ( struct bch_fs * ) ;
2024-03-19 18:56:26 -04:00
void bch2_shoot_down_journal_keys ( struct bch_fs * , enum btree_id ,
unsigned , unsigned ,
struct bpos , struct bpos ) ;
2023-08-05 16:08:44 -04:00
# endif /* _BCACHEFS_BTREE_JOURNAL_ITER_H */