Lines Matching defs:dev_replace
73 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
106 dev_replace->replace_state =
108 dev_replace->cont_reading_from_srcdev_mode =
110 dev_replace->time_started = 0;
111 dev_replace->time_stopped = 0;
112 atomic64_set(&dev_replace->num_write_errors, 0);
113 atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0);
114 dev_replace->cursor_left = 0;
115 dev_replace->committed_cursor_left = 0;
116 dev_replace->cursor_left_last_write_of_item = 0;
117 dev_replace->cursor_right = 0;
118 dev_replace->srcdev = NULL;
119 dev_replace->tgtdev = NULL;
120 dev_replace->is_valid = 0;
121 dev_replace->item_needs_writeback = 0;
131 "dev_replace entry found has unexpected size, ignore entry");
136 dev_replace->cont_reading_from_srcdev_mode =
138 dev_replace->replace_state = btrfs_dev_replace_replace_state(eb, ptr);
139 dev_replace->time_started = btrfs_dev_replace_time_started(eb, ptr);
140 dev_replace->time_stopped =
142 atomic64_set(&dev_replace->num_write_errors,
144 atomic64_set(&dev_replace->num_uncorrectable_read_errors,
146 dev_replace->cursor_left = btrfs_dev_replace_cursor_left(eb, ptr);
147 dev_replace->committed_cursor_left = dev_replace->cursor_left;
148 dev_replace->cursor_left_last_write_of_item = dev_replace->cursor_left;
149 dev_replace->cursor_right = btrfs_dev_replace_cursor_right(eb, ptr);
150 dev_replace->is_valid = 1;
152 dev_replace->item_needs_writeback = 0;
153 switch (dev_replace->replace_state) {
167 dev_replace->srcdev = NULL;
168 dev_replace->tgtdev = NULL;
173 dev_replace->srcdev = btrfs_find_device(fs_info->fs_devices,
175 dev_replace->tgtdev = btrfs_find_device(fs_info->fs_devices,
182 if (!dev_replace->srcdev &&
191 if (!dev_replace->tgtdev &&
200 if (dev_replace->tgtdev) {
201 if (dev_replace->srcdev) {
202 dev_replace->tgtdev->total_bytes =
203 dev_replace->srcdev->total_bytes;
204 dev_replace->tgtdev->disk_total_bytes =
205 dev_replace->srcdev->disk_total_bytes;
206 dev_replace->tgtdev->commit_total_bytes =
207 dev_replace->srcdev->commit_total_bytes;
208 dev_replace->tgtdev->bytes_used =
209 dev_replace->srcdev->bytes_used;
210 dev_replace->tgtdev->commit_bytes_used =
211 dev_replace->srcdev->commit_bytes_used;
214 &dev_replace->tgtdev->dev_state);
217 dev_replace->tgtdev->io_width = fs_info->sectorsize;
218 dev_replace->tgtdev->io_align = fs_info->sectorsize;
219 dev_replace->tgtdev->sector_size = fs_info->sectorsize;
220 dev_replace->tgtdev->fs_info = fs_info;
222 &dev_replace->tgtdev->dev_state);
343 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
345 down_read(&dev_replace->rwsem);
346 if (!dev_replace->is_valid ||
347 !dev_replace->item_needs_writeback) {
348 up_read(&dev_replace->rwsem);
351 up_read(&dev_replace->rwsem);
365 "error %d while searching for dev_replace item!",
375 * dev_replace state is 'running', the data on the target
386 "delete too small dev_replace item failed %d!",
400 "insert dev_replace item failed %d!", ret);
409 down_write(&dev_replace->rwsem);
410 if (dev_replace->srcdev)
412 dev_replace->srcdev->devid);
416 dev_replace->cont_reading_from_srcdev_mode);
418 dev_replace->replace_state);
419 btrfs_set_dev_replace_time_started(eb, ptr, dev_replace->time_started);
420 btrfs_set_dev_replace_time_stopped(eb, ptr, dev_replace->time_stopped);
422 atomic64_read(&dev_replace->num_write_errors));
424 atomic64_read(&dev_replace->num_uncorrectable_read_errors));
425 dev_replace->cursor_left_last_write_of_item =
426 dev_replace->cursor_left;
428 dev_replace->cursor_left_last_write_of_item);
430 dev_replace->cursor_right);
431 dev_replace->item_needs_writeback = 0;
432 up_write(&dev_replace->rwsem);
456 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
491 down_write(&dev_replace->rwsem);
492 switch (dev_replace->replace_state) {
501 up_write(&dev_replace->rwsem);
505 dev_replace->cont_reading_from_srcdev_mode = read_src;
506 dev_replace->srcdev = src_device;
507 dev_replace->tgtdev = tgt_device;
510 "dev_replace from %s (devid %llu) to %s started",
519 dev_replace->replace_state = BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED;
520 dev_replace->time_started = ktime_get_real_seconds();
521 dev_replace->cursor_left = 0;
522 dev_replace->committed_cursor_left = 0;
523 dev_replace->cursor_left_last_write_of_item = 0;
524 dev_replace->cursor_right = 0;
525 dev_replace->is_valid = 1;
526 dev_replace->item_needs_writeback = 1;
527 atomic64_set(&dev_replace->num_write_errors, 0);
528 atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0);
529 up_write(&dev_replace->rwsem);
537 /* Commit dev_replace state and reserve 1 item for it. */
541 down_write(&dev_replace->rwsem);
542 dev_replace->replace_state =
544 dev_replace->srcdev = NULL;
545 dev_replace->tgtdev = NULL;
546 up_write(&dev_replace->rwsem);
556 &dev_replace->scrub_progress, 0, 1);
605 wait_event(fs_info->dev_replace.replace_wait, !percpu_counter_sum(
606 &fs_info->dev_replace.bio_counter));
615 wake_up(&fs_info->dev_replace.replace_wait);
678 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
687 mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
689 down_read(&dev_replace->rwsem);
691 if (dev_replace->replace_state !=
693 up_read(&dev_replace->rwsem);
694 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
698 tgt_device = dev_replace->tgtdev;
699 src_device = dev_replace->srcdev;
700 up_read(&dev_replace->rwsem);
708 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
725 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
744 down_write(&dev_replace->rwsem);
745 dev_replace->replace_state =
748 dev_replace->tgtdev = NULL;
749 dev_replace->srcdev = NULL;
750 dev_replace->time_stopped = ktime_get_real_seconds();
751 dev_replace->item_needs_writeback = 1;
772 up_write(&dev_replace->rwsem);
780 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
786 "dev_replace from %s (devid %llu) to %s finished",
807 up_write(&dev_replace->rwsem);
821 * this is again a consistent state where no dev_replace procedure
842 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
856 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
859 switch (dev_replace->replace_state) {
869 ret = div64_u64(dev_replace->cursor_left,
871 dev_replace->srcdev), 1000));
881 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
883 down_read(&dev_replace->rwsem);
887 args->status.replace_state = dev_replace->replace_state;
888 args->status.time_started = dev_replace->time_started;
889 args->status.time_stopped = dev_replace->time_stopped;
891 atomic64_read(&dev_replace->num_write_errors);
893 atomic64_read(&dev_replace->num_uncorrectable_read_errors);
895 up_read(&dev_replace->rwsem);
900 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
911 mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
912 down_write(&dev_replace->rwsem);
913 switch (dev_replace->replace_state) {
918 up_write(&dev_replace->rwsem);
921 tgt_device = dev_replace->tgtdev;
922 src_device = dev_replace->srcdev;
923 up_write(&dev_replace->rwsem);
934 "dev_replace from %s (devid %llu) to %s canceled",
945 tgt_device = dev_replace->tgtdev;
946 src_device = dev_replace->srcdev;
947 dev_replace->tgtdev = NULL;
948 dev_replace->srcdev = NULL;
949 dev_replace->replace_state =
951 dev_replace->time_stopped = ktime_get_real_seconds();
952 dev_replace->item_needs_writeback = 1;
954 up_write(&dev_replace->rwsem);
961 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
968 "suspended dev_replace from %s (devid %llu) to %s canceled",
976 up_write(&dev_replace->rwsem);
980 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
986 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
988 mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
989 down_write(&dev_replace->rwsem);
991 switch (dev_replace->replace_state) {
998 dev_replace->replace_state =
1000 dev_replace->time_stopped = ktime_get_real_seconds();
1001 dev_replace->item_needs_writeback = 1;
1002 btrfs_info(fs_info, "suspending dev_replace for unmount");
1006 up_write(&dev_replace->rwsem);
1007 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1010 /* resume dev_replace procedure that was interrupted by unmount */
1014 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1016 down_write(&dev_replace->rwsem);
1018 switch (dev_replace->replace_state) {
1022 up_write(&dev_replace->rwsem);
1027 dev_replace->replace_state =
1031 if (!dev_replace->tgtdev || !dev_replace->tgtdev->bdev) {
1033 "cannot continue dev_replace, tgtdev is missing");
1036 dev_replace->replace_state =
1038 up_write(&dev_replace->rwsem);
1041 up_write(&dev_replace->rwsem);
1049 down_write(&dev_replace->rwsem);
1050 dev_replace->replace_state =
1052 up_write(&dev_replace->rwsem);
1065 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1072 "continuing dev_replace from %s (devid %llu) to target %s @%u%%",
1073 btrfs_dev_name(dev_replace->srcdev),
1074 dev_replace->srcdev->devid,
1075 btrfs_dev_name(dev_replace->tgtdev),
1078 ret = btrfs_scrub_dev(fs_info, dev_replace->srcdev->devid,
1079 dev_replace->committed_cursor_left,
1080 btrfs_device_get_total_bytes(dev_replace->srcdev),
1081 &dev_replace->scrub_progress, 0, 1);
1089 int __pure btrfs_dev_replace_is_ongoing(struct btrfs_dev_replace *dev_replace)
1091 if (!dev_replace->is_valid)
1094 switch (dev_replace->replace_state) {
1103 * something that can happen if the dev_replace
1108 * dev_replace procedure. It needs to be canceled
1118 percpu_counter_inc(&fs_info->dev_replace.bio_counter);
1123 percpu_counter_sub(&fs_info->dev_replace.bio_counter, amount);
1124 cond_wake_up_nomb(&fs_info->dev_replace.replace_wait);
1130 percpu_counter_inc(&fs_info->dev_replace.bio_counter);
1136 wait_event(fs_info->dev_replace.replace_wait,