|
@@ -885,6 +885,42 @@ struct btrfs_dev_stats_item {
|
|
|
__le64 values[BTRFS_DEV_STAT_VALUES_MAX];
|
|
|
} __attribute__ ((__packed__));
|
|
|
|
|
|
+#define BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_ALWAYS 0
|
|
|
+#define BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_AVOID 1
|
|
|
+#define BTRFS_DEV_REPLACE_ITEM_STATE_NEVER_STARTED 0
|
|
|
+#define BTRFS_DEV_REPLACE_ITEM_STATE_STARTED 1
|
|
|
+#define BTRFS_DEV_REPLACE_ITEM_STATE_SUSPENDED 2
|
|
|
+#define BTRFS_DEV_REPLACE_ITEM_STATE_FINISHED 3
|
|
|
+#define BTRFS_DEV_REPLACE_ITEM_STATE_CANCELED 4
|
|
|
+
|
|
|
+struct btrfs_dev_replace {
|
|
|
+ u64 replace_state; /* see #define above */
|
|
|
+ u64 time_started; /* seconds since 1-Jan-1970 */
|
|
|
+ u64 time_stopped; /* seconds since 1-Jan-1970 */
|
|
|
+ atomic64_t num_write_errors;
|
|
|
+ atomic64_t num_uncorrectable_read_errors;
|
|
|
+
|
|
|
+ u64 cursor_left;
|
|
|
+ u64 committed_cursor_left;
|
|
|
+ u64 cursor_left_last_write_of_item;
|
|
|
+ u64 cursor_right;
|
|
|
+
|
|
|
+ u64 cont_reading_from_srcdev_mode; /* see #define above */
|
|
|
+
|
|
|
+ int is_valid;
|
|
|
+ int item_needs_writeback;
|
|
|
+ struct btrfs_device *srcdev;
|
|
|
+ struct btrfs_device *tgtdev;
|
|
|
+
|
|
|
+ pid_t lock_owner;
|
|
|
+ atomic_t nesting_level;
|
|
|
+ struct mutex lock_finishing_cancel_unmount;
|
|
|
+ struct mutex lock_management_lock;
|
|
|
+ struct mutex lock;
|
|
|
+
|
|
|
+ struct btrfs_scrub_progress scrub_progress;
|
|
|
+};
|
|
|
+
|
|
|
/* different types of block groups (and chunks) */
|
|
|
#define BTRFS_BLOCK_GROUP_DATA (1ULL << 0)
|
|
|
#define BTRFS_BLOCK_GROUP_SYSTEM (1ULL << 1)
|
|
@@ -1471,6 +1507,9 @@ struct btrfs_fs_info {
|
|
|
int backup_root_index;
|
|
|
|
|
|
int num_tolerated_disk_barrier_failures;
|
|
|
+
|
|
|
+ /* device replace state */
|
|
|
+ struct btrfs_dev_replace dev_replace;
|
|
|
};
|
|
|
|
|
|
/*
|