2017-03-17 09:18:50 +03:00
/* SPDX-License-Identifier: GPL-2.0 */
# ifndef _BCACHEFS_BKEY_METHODS_H
# define _BCACHEFS_BKEY_METHODS_H
# include "bkey.h"
struct bch_fs ;
struct btree ;
struct bkey ;
2018-11-01 22:10:01 +03:00
enum btree_node_type ;
2019-07-16 19:23:04 +03:00
extern const char * const bch2_bkey_types [ ] ;
2017-03-17 09:18:50 +03:00
enum merge_result {
BCH_MERGE_NOMERGE ,
/*
* The keys were mergeable , but would have overflowed size - so instead
* l was changed to the maximum size , and both keys were modified :
*/
BCH_MERGE_PARTIAL ,
BCH_MERGE_MERGE ,
} ;
struct bkey_ops {
/* Returns reason for being invalid if invalid, else NULL: */
const char * ( * key_invalid ) ( const struct bch_fs * ,
struct bkey_s_c ) ;
2019-09-14 17:47:14 +03:00
void ( * key_debugcheck ) ( struct bch_fs * , struct bkey_s_c ) ;
2018-11-09 09:24:07 +03:00
void ( * val_to_text ) ( struct printbuf * , struct bch_fs * ,
struct bkey_s_c ) ;
2020-02-07 04:15:15 +03:00
void ( * swab ) ( struct bkey_s ) ;
2018-11-01 22:10:01 +03:00
bool ( * key_normalize ) ( struct bch_fs * , struct bkey_s ) ;
enum merge_result ( * key_merge ) ( struct bch_fs * ,
2019-06-09 23:56:16 +03:00
struct bkey_s , struct bkey_s ) ;
2020-01-07 21:29:32 +03:00
void ( * compat ) ( enum btree_id id , unsigned version ,
unsigned big_endian , int write ,
struct bkey_s ) ;
2017-03-17 09:18:50 +03:00
} ;
2018-11-01 22:10:01 +03:00
const char * bch2_bkey_val_invalid ( struct bch_fs * , struct bkey_s_c ) ;
const char * __bch2_bkey_invalid ( struct bch_fs * , struct bkey_s_c ,
enum btree_node_type ) ;
const char * bch2_bkey_invalid ( struct bch_fs * , struct bkey_s_c ,
enum btree_node_type ) ;
2017-03-17 09:18:50 +03:00
const char * bch2_bkey_in_btree_node ( struct btree * , struct bkey_s_c ) ;
void bch2_bkey_debugcheck ( struct bch_fs * , struct btree * , struct bkey_s_c ) ;
2018-11-09 09:24:07 +03:00
void bch2_bpos_to_text ( struct printbuf * , struct bpos ) ;
void bch2_bkey_to_text ( struct printbuf * , const struct bkey * ) ;
2018-11-01 22:10:01 +03:00
void bch2_val_to_text ( struct printbuf * , struct bch_fs * ,
2018-11-09 09:24:07 +03:00
struct bkey_s_c ) ;
void bch2_bkey_val_to_text ( struct printbuf * , struct bch_fs * ,
2018-11-01 22:10:01 +03:00
struct bkey_s_c ) ;
2020-02-07 04:15:15 +03:00
void bch2_bkey_swab_val ( struct bkey_s ) ;
2018-11-01 22:10:01 +03:00
bool bch2_bkey_normalize ( struct bch_fs * , struct bkey_s ) ;
2017-03-17 09:18:50 +03:00
2018-11-01 22:10:01 +03:00
enum merge_result bch2_bkey_merge ( struct bch_fs * ,
2019-06-09 23:56:16 +03:00
struct bkey_s , struct bkey_s ) ;
2017-03-17 09:18:50 +03:00
2018-11-01 22:10:01 +03:00
void bch2_bkey_renumber ( enum btree_node_type , struct bkey_packed * , int ) ;
2017-03-17 09:18:50 +03:00
2020-01-07 21:29:32 +03:00
void __bch2_bkey_compat ( unsigned , enum btree_id , unsigned , unsigned ,
int , struct bkey_format * , struct bkey_packed * ) ;
static inline void bch2_bkey_compat ( unsigned level , enum btree_id btree_id ,
unsigned version , unsigned big_endian ,
int write ,
struct bkey_format * f ,
struct bkey_packed * k )
{
if ( version < bcachefs_metadata_version_current | |
big_endian ! = CPU_BIG_ENDIAN )
__bch2_bkey_compat ( level , btree_id , version ,
big_endian , write , f , k ) ;
}
2017-03-17 09:18:50 +03:00
# endif /* _BCACHEFS_BKEY_METHODS_H */