/* 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;
	unsigned	rewrite_dev;
	int		btree_insert_flags;
};

struct migrate_write {
	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;
};

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,
			    struct bkey_s_c);

typedef enum data_cmd (*move_pred_fn)(struct bch_fs *, void *,
				enum bkey_type, struct bkey_s_c_extent,
				struct bch_io_opts *, struct data_opts *);

int bch2_move_data(struct bch_fs *, struct bch_ratelimit *,
		   struct write_point_specifier,
		   struct bpos, struct bpos,
		   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 */
