From 5ec39af8eaba49aee7bafa44c661da39e2f40dc3 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sun, 19 Mar 2017 15:56:34 -0800 Subject: Rename from bcache-tools to bcachefs-tools --- libbcachefs/move.h | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 libbcachefs/move.h (limited to 'libbcachefs/move.h') diff --git a/libbcachefs/move.h b/libbcachefs/move.h new file mode 100644 index 00000000..548f0f0a --- /dev/null +++ b/libbcachefs/move.h @@ -0,0 +1,87 @@ +#ifndef _BCACHE_MOVE_H +#define _BCACHE_MOVE_H + +#include "buckets.h" +#include "io_types.h" +#include "move_types.h" + +enum moving_flag_bitnos { + MOVING_FLAG_BITNO_READ = 0, + MOVING_FLAG_BITNO_WRITE, +}; + +#define MOVING_FLAG_READ (1U << MOVING_FLAG_BITNO_READ) +#define MOVING_FLAG_WRITE (1U << MOVING_FLAG_BITNO_WRITE) + +struct migrate_write { + BKEY_PADDED(key); + bool promote; + bool move; + struct bch_extent_ptr move_ptr; + struct bch_write_op op; + struct bch_write_bio wbio; +}; + +void bch2_migrate_write_init(struct bch_fs *, + struct migrate_write *, + struct write_point *, + struct bkey_s_c, + const struct bch_extent_ptr *, + unsigned); + +#define SECTORS_IN_FLIGHT_PER_DEVICE 2048 + +struct moving_context { + /* Closure for waiting on all reads and writes to complete */ + struct closure cl; + + /* Number and types of errors reported */ + atomic_t error_count; + atomic_t error_flags; + + /* Key and sector moves issued, updated from submission context */ + u64 keys_moved; + u64 sectors_moved; + + /* Rate-limiter counting submitted reads */ + struct bch_ratelimit *rate; + + /* Try to avoid reading the following device */ + struct bch_dev *avoid; + + struct list_head reads; + + /* Configuration */ + unsigned max_sectors_in_flight; + atomic_t sectors_in_flight; + + wait_queue_head_t wait; +}; + +struct moving_io { + struct list_head list; + struct rb_node node; + struct closure cl; + struct moving_context *ctxt; + struct migrate_write write; + bool read_completed; + + struct bch_read_bio rbio; + /* Must be last since it is variable size */ + struct bio_vec bi_inline_vecs[0]; +}; + +int bch2_data_move(struct bch_fs *, + struct moving_context *, + struct write_point *, + struct bkey_s_c, + const struct bch_extent_ptr *); + +int bch2_move_ctxt_wait(struct moving_context *); +void bch2_move_ctxt_wait_for_io(struct moving_context *); + +void bch2_move_ctxt_exit(struct moving_context *); +void bch2_move_ctxt_init(struct moving_context *, struct bch_ratelimit *, + unsigned); + +#endif /* _BCACHE_MOVE_H */ -- cgit v1.2.3