#include "bcachefs.h"
#include "alloc_background.h"
#include "alloc_foreground.h"
#include "backpointers.h"
#include "bkey_buf.h"
#include "btree_gc.h"
#include "btree_io.h"
#include "btree_update.h"
#include "btree_update_interior.h"
#include "btree_write_buffer.h"
#include "compress.h"
#include "disk_groups.h"
#include "ec.h"
#include "errcode.h"
#include "error.h"
#include "inode.h"
#include "io_read.h"
#include "io_write.h"
#include "journal_reclaim.h"
#include "keylist.h"
#include "move.h"
#include "replicas.h"
#include "snapshot.h"
#include "super-io.h"
#include "trace.h"
#include <linux/ioprio.h>
#include <linux/kthread.h>
const char * const bch2_data_ops_strs[] = …;
static void trace_move_extent2(struct bch_fs *c, struct bkey_s_c k,
struct bch_io_opts *io_opts,
struct data_update_opts *data_opts)
{ … }
static void trace_move_extent_read2(struct bch_fs *c, struct bkey_s_c k)
{ … }
struct moving_io { … };
static void move_free(struct moving_io *io)
{ … }
static void move_write_done(struct bch_write_op *op)
{ … }
static void move_write(struct moving_io *io)
{ … }
struct moving_io *bch2_moving_ctxt_next_pending_write(struct moving_context *ctxt)
{ … }
static void move_read_endio(struct bio *bio)
{ … }
void bch2_moving_ctxt_do_pending_writes(struct moving_context *ctxt)
{ … }
void bch2_move_ctxt_wait_for_io(struct moving_context *ctxt)
{ … }
void bch2_moving_ctxt_flush_all(struct moving_context *ctxt)
{ … }
void bch2_moving_ctxt_exit(struct moving_context *ctxt)
{ … }
void bch2_moving_ctxt_init(struct moving_context *ctxt,
struct bch_fs *c,
struct bch_ratelimit *rate,
struct bch_move_stats *stats,
struct write_point_specifier wp,
bool wait_on_copygc)
{ … }
void bch2_move_stats_exit(struct bch_move_stats *stats, struct bch_fs *c)
{ … }
void bch2_move_stats_init(struct bch_move_stats *stats, const char *name)
{ … }
int bch2_move_extent(struct moving_context *ctxt,
struct move_bucket_in_flight *bucket_in_flight,
struct btree_iter *iter,
struct bkey_s_c k,
struct bch_io_opts io_opts,
struct data_update_opts data_opts)
{ … }
struct bch_io_opts *bch2_move_get_io_opts(struct btree_trans *trans,
struct per_snapshot_io_opts *io_opts,
struct bkey_s_c extent_k)
{ … }
int bch2_move_get_io_opts_one(struct btree_trans *trans,
struct bch_io_opts *io_opts,
struct bkey_s_c extent_k)
{ … }
int bch2_move_ratelimit(struct moving_context *ctxt)
{ … }
static int bch2_move_data_btree(struct moving_context *ctxt,
struct bpos start,
struct bpos end,
move_pred_fn pred, void *arg,
enum btree_id btree_id)
{ … }
int __bch2_move_data(struct moving_context *ctxt,
struct bbpos start,
struct bbpos end,
move_pred_fn pred, void *arg)
{ … }
int bch2_move_data(struct bch_fs *c,
struct bbpos start,
struct bbpos end,
struct bch_ratelimit *rate,
struct bch_move_stats *stats,
struct write_point_specifier wp,
bool wait_on_copygc,
move_pred_fn pred, void *arg)
{ … }
int bch2_evacuate_bucket(struct moving_context *ctxt,
struct move_bucket_in_flight *bucket_in_flight,
struct bpos bucket, int gen,
struct data_update_opts _data_opts)
{ … }
move_btree_pred;
static int bch2_move_btree(struct bch_fs *c,
struct bbpos start,
struct bbpos end,
move_btree_pred pred, void *arg,
struct bch_move_stats *stats)
{ … }
static bool rereplicate_pred(struct bch_fs *c, void *arg,
struct bkey_s_c k,
struct bch_io_opts *io_opts,
struct data_update_opts *data_opts)
{ … }
static bool migrate_pred(struct bch_fs *c, void *arg,
struct bkey_s_c k,
struct bch_io_opts *io_opts,
struct data_update_opts *data_opts)
{ … }
static bool rereplicate_btree_pred(struct bch_fs *c, void *arg,
struct btree *b,
struct bch_io_opts *io_opts,
struct data_update_opts *data_opts)
{ … }
static bool migrate_btree_pred(struct bch_fs *c, void *arg,
struct btree *b,
struct bch_io_opts *io_opts,
struct data_update_opts *data_opts)
{ … }
static bool bformat_needs_redo(struct bkey_format *f)
{ … }
static bool rewrite_old_nodes_pred(struct bch_fs *c, void *arg,
struct btree *b,
struct bch_io_opts *io_opts,
struct data_update_opts *data_opts)
{ … }
int bch2_scan_old_btree_nodes(struct bch_fs *c, struct bch_move_stats *stats)
{ … }
static bool drop_extra_replicas_pred(struct bch_fs *c, void *arg,
struct bkey_s_c k,
struct bch_io_opts *io_opts,
struct data_update_opts *data_opts)
{ … }
static bool drop_extra_replicas_btree_pred(struct bch_fs *c, void *arg,
struct btree *b,
struct bch_io_opts *io_opts,
struct data_update_opts *data_opts)
{ … }
int bch2_data_job(struct bch_fs *c,
struct bch_move_stats *stats,
struct bch_ioctl_data op)
{ … }
void bch2_move_stats_to_text(struct printbuf *out, struct bch_move_stats *stats)
{ … }
static void bch2_moving_ctxt_to_text(struct printbuf *out, struct bch_fs *c, struct moving_context *ctxt)
{ … }
void bch2_fs_moving_ctxts_to_text(struct printbuf *out, struct bch_fs *c)
{ … }
void bch2_fs_move_init(struct bch_fs *c)
{ … }