2017-03-16 22:18:50 -08:00
/* SPDX-License-Identifier: GPL-2.0 */
# ifndef _BCACHEFS_MOVE_H
# define _BCACHEFS_MOVE_H
# include "btree_iter.h"
# include "buckets.h"
# include "io_types.h"
# include "move_types.h"
struct bch_read_bio ;
struct moving_context ;
enum data_cmd {
DATA_SKIP ,
DATA_SCRUB ,
DATA_ADD_REPLICAS ,
DATA_REWRITE ,
DATA_PROMOTE ,
} ;
struct data_opts {
u16 target ;
2020-07-22 23:11:48 -04:00
u8 rewrite_dev ;
u8 nr_replicas ;
2017-03-16 22:18:50 -08:00
int btree_insert_flags ;
} ;
struct migrate_write {
2019-08-16 09:59:56 -04:00
enum btree_id btree_id ;
2017-03-16 22:18:50 -08:00
enum data_cmd data_cmd ;
struct data_opts data_opts ;
unsigned nr_ptrs_reserved ;
struct moving_context * ctxt ;
/* what we read: */
struct bch_extent_ptr ptr ;
u64 offset ;
struct bch_write_op op ;
} ;
2022-10-28 23:57:01 -04:00
int bch2_migrate_index_update ( struct bch_write_op * ) ;
2017-03-16 22:18:50 -08:00
void bch2_migrate_read_done ( struct migrate_write * , struct bch_read_bio * ) ;
int bch2_migrate_write_init ( struct bch_fs * , struct migrate_write * ,
struct write_point_specifier ,
struct bch_io_opts ,
enum data_cmd , struct data_opts ,
2019-08-16 09:59:56 -04:00
enum btree_id , struct bkey_s_c ) ;
2017-03-16 22:18:50 -08:00
typedef enum data_cmd ( * move_pred_fn ) ( struct bch_fs * , void * ,
2018-11-01 15:10:01 -04:00
struct bkey_s_c ,
2017-03-16 22:18:50 -08:00
struct bch_io_opts * , struct data_opts * ) ;
2021-03-22 18:39:16 -04:00
int bch2_scan_old_btree_nodes ( struct bch_fs * , struct bch_move_stats * ) ;
2021-03-14 19:01:14 -04:00
int bch2_move_data ( struct bch_fs * ,
enum btree_id , struct bpos ,
enum btree_id , struct bpos ,
struct bch_ratelimit * ,
2017-03-16 22:18:50 -08:00
struct write_point_specifier ,
move_pred_fn , void * ,
struct bch_move_stats * ) ;
int bch2_data_job ( struct bch_fs * ,
struct bch_move_stats * ,
struct bch_ioctl_data ) ;
# endif /* _BCACHEFS_MOVE_H */