Lines Matching defs:dev_replace

75 	struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
110 dev_replace->replace_state =
112 dev_replace->cont_reading_from_srcdev_mode =
114 dev_replace->time_started = 0;
115 dev_replace->time_stopped = 0;
116 atomic64_set(&dev_replace->num_write_errors, 0);
117 atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0);
118 dev_replace->cursor_left = 0;
119 dev_replace->committed_cursor_left = 0;
120 dev_replace->cursor_left_last_write_of_item = 0;
121 dev_replace->cursor_right = 0;
122 dev_replace->srcdev = NULL;
123 dev_replace->tgtdev = NULL;
124 dev_replace->is_valid = 0;
125 dev_replace->item_needs_writeback = 0;
135 "dev_replace entry found has unexpected size, ignore entry");
140 dev_replace->cont_reading_from_srcdev_mode =
142 dev_replace->replace_state = btrfs_dev_replace_replace_state(eb, ptr);
143 dev_replace->time_started = btrfs_dev_replace_time_started(eb, ptr);
144 dev_replace->time_stopped =
146 atomic64_set(&dev_replace->num_write_errors,
148 atomic64_set(&dev_replace->num_uncorrectable_read_errors,
150 dev_replace->cursor_left = btrfs_dev_replace_cursor_left(eb, ptr);
151 dev_replace->committed_cursor_left = dev_replace->cursor_left;
152 dev_replace->cursor_left_last_write_of_item = dev_replace->cursor_left;
153 dev_replace->cursor_right = btrfs_dev_replace_cursor_right(eb, ptr);
154 dev_replace->is_valid = 1;
156 dev_replace->item_needs_writeback = 0;
157 switch (dev_replace->replace_state) {
170 dev_replace->srcdev = NULL;
171 dev_replace->tgtdev = NULL;
176 dev_replace->tgtdev = btrfs_find_device(fs_info->fs_devices, &args);
178 dev_replace->srcdev = btrfs_find_device(fs_info->fs_devices, &args);
184 if (!dev_replace->srcdev &&
193 if (!dev_replace->tgtdev &&
202 if (dev_replace->tgtdev) {
203 if (dev_replace->srcdev) {
204 dev_replace->tgtdev->total_bytes =
205 dev_replace->srcdev->total_bytes;
206 dev_replace->tgtdev->disk_total_bytes =
207 dev_replace->srcdev->disk_total_bytes;
208 dev_replace->tgtdev->commit_total_bytes =
209 dev_replace->srcdev->commit_total_bytes;
210 dev_replace->tgtdev->bytes_used =
211 dev_replace->srcdev->bytes_used;
212 dev_replace->tgtdev->commit_bytes_used =
213 dev_replace->srcdev->commit_bytes_used;
216 &dev_replace->tgtdev->dev_state);
219 dev_replace->tgtdev->io_width = fs_info->sectorsize;
220 dev_replace->tgtdev->io_align = fs_info->sectorsize;
221 dev_replace->tgtdev->sector_size = fs_info->sectorsize;
222 dev_replace->tgtdev->fs_info = fs_info;
224 &dev_replace->tgtdev->dev_state);
353 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
355 down_read(&dev_replace->rwsem);
356 if (!dev_replace->is_valid ||
357 !dev_replace->item_needs_writeback) {
358 up_read(&dev_replace->rwsem);
361 up_read(&dev_replace->rwsem);
375 "error %d while searching for dev_replace item!",
385 * dev_replace state is 'running', the data on the target
396 "delete too small dev_replace item failed %d!",
410 "insert dev_replace item failed %d!", ret);
419 down_write(&dev_replace->rwsem);
420 if (dev_replace->srcdev)
422 dev_replace->srcdev->devid);
426 dev_replace->cont_reading_from_srcdev_mode);
428 dev_replace->replace_state);
429 btrfs_set_dev_replace_time_started(eb, ptr, dev_replace->time_started);
430 btrfs_set_dev_replace_time_stopped(eb, ptr, dev_replace->time_stopped);
432 atomic64_read(&dev_replace->num_write_errors));
434 atomic64_read(&dev_replace->num_uncorrectable_read_errors));
435 dev_replace->cursor_left_last_write_of_item =
436 dev_replace->cursor_left;
438 dev_replace->cursor_left_last_write_of_item);
440 dev_replace->cursor_right);
441 dev_replace->item_needs_writeback = 0;
442 up_write(&dev_replace->rwsem);
604 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
643 down_write(&dev_replace->rwsem);
644 switch (dev_replace->replace_state) {
653 up_write(&dev_replace->rwsem);
657 dev_replace->cont_reading_from_srcdev_mode = read_src;
658 dev_replace->srcdev = src_device;
659 dev_replace->tgtdev = tgt_device;
662 "dev_replace from %s (devid %llu) to %s started",
671 dev_replace->replace_state = BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED;
672 dev_replace->time_started = ktime_get_real_seconds();
673 dev_replace->cursor_left = 0;
674 dev_replace->committed_cursor_left = 0;
675 dev_replace->cursor_left_last_write_of_item = 0;
676 dev_replace->cursor_right = 0;
677 dev_replace->is_valid = 1;
678 dev_replace->item_needs_writeback = 1;
679 atomic64_set(&dev_replace->num_write_errors, 0);
680 atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0);
681 up_write(&dev_replace->rwsem);
690 * Commit dev_replace state and reserve 1 item for it.
698 down_write(&dev_replace->rwsem);
699 dev_replace->replace_state =
701 dev_replace->srcdev = NULL;
702 dev_replace->tgtdev = NULL;
703 up_write(&dev_replace->rwsem);
713 &dev_replace->scrub_progress, 0, 1);
778 wait_event(fs_info->dev_replace.replace_wait, !percpu_counter_sum(
779 &fs_info->dev_replace.bio_counter));
788 wake_up(&fs_info->dev_replace.replace_wait);
849 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
859 mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
861 down_read(&dev_replace->rwsem);
863 if (dev_replace->replace_state !=
865 up_read(&dev_replace->rwsem);
866 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
870 tgt_device = dev_replace->tgtdev;
871 src_device = dev_replace->srcdev;
872 up_read(&dev_replace->rwsem);
880 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
893 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
912 down_write(&dev_replace->rwsem);
913 dev_replace->replace_state =
916 dev_replace->tgtdev = NULL;
917 dev_replace->srcdev = NULL;
918 dev_replace->time_stopped = ktime_get_real_seconds();
919 dev_replace->item_needs_writeback = 1;
940 up_write(&dev_replace->rwsem);
947 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
953 "dev_replace from %s (devid %llu) to %s finished",
974 up_write(&dev_replace->rwsem);
988 * this is again a consistent state where no dev_replace procedure
1008 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1022 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1025 switch (dev_replace->replace_state) {
1035 ret = div64_u64(dev_replace->cursor_left,
1037 dev_replace->srcdev), 1000));
1047 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1049 down_read(&dev_replace->rwsem);
1053 args->status.replace_state = dev_replace->replace_state;
1054 args->status.time_started = dev_replace->time_started;
1055 args->status.time_stopped = dev_replace->time_stopped;
1057 atomic64_read(&dev_replace->num_write_errors);
1059 atomic64_read(&dev_replace->num_uncorrectable_read_errors);
1061 up_read(&dev_replace->rwsem);
1066 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1077 mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
1078 down_write(&dev_replace->rwsem);
1079 switch (dev_replace->replace_state) {
1084 up_write(&dev_replace->rwsem);
1087 tgt_device = dev_replace->tgtdev;
1088 src_device = dev_replace->srcdev;
1089 up_write(&dev_replace->rwsem);
1100 "dev_replace from %s (devid %llu) to %s canceled",
1111 tgt_device = dev_replace->tgtdev;
1112 src_device = dev_replace->srcdev;
1113 dev_replace->tgtdev = NULL;
1114 dev_replace->srcdev = NULL;
1115 dev_replace->replace_state =
1117 dev_replace->time_stopped = ktime_get_real_seconds();
1118 dev_replace->item_needs_writeback = 1;
1120 up_write(&dev_replace->rwsem);
1127 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1134 "suspended dev_replace from %s (devid %llu) to %s canceled",
1142 up_write(&dev_replace->rwsem);
1146 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1152 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1154 mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
1155 down_write(&dev_replace->rwsem);
1157 switch (dev_replace->replace_state) {
1164 dev_replace->replace_state =
1166 dev_replace->time_stopped = ktime_get_real_seconds();
1167 dev_replace->item_needs_writeback = 1;
1168 btrfs_info(fs_info, "suspending dev_replace for unmount");
1172 up_write(&dev_replace->rwsem);
1173 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1176 /* resume dev_replace procedure that was interrupted by unmount */
1180 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1182 down_write(&dev_replace->rwsem);
1184 switch (dev_replace->replace_state) {
1188 up_write(&dev_replace->rwsem);
1193 dev_replace->replace_state =
1197 if (!dev_replace->tgtdev || !dev_replace->tgtdev->bdev) {
1199 "cannot continue dev_replace, tgtdev is missing");
1202 dev_replace->replace_state =
1204 up_write(&dev_replace->rwsem);
1207 up_write(&dev_replace->rwsem);
1215 down_write(&dev_replace->rwsem);
1216 dev_replace->replace_state =
1218 up_write(&dev_replace->rwsem);
1231 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1238 "continuing dev_replace from %s (devid %llu) to target %s @%u%%",
1239 btrfs_dev_name(dev_replace->srcdev),
1240 dev_replace->srcdev->devid,
1241 btrfs_dev_name(dev_replace->tgtdev),
1244 ret = btrfs_scrub_dev(fs_info, dev_replace->srcdev->devid,
1245 dev_replace->committed_cursor_left,
1246 btrfs_device_get_total_bytes(dev_replace->srcdev),
1247 &dev_replace->scrub_progress, 0, 1);
1255 int __pure btrfs_dev_replace_is_ongoing(struct btrfs_dev_replace *dev_replace)
1257 if (!dev_replace->is_valid)
1260 switch (dev_replace->replace_state) {
1269 * something that can happen if the dev_replace
1274 * dev_replace procedure. It needs to be canceled
1284 percpu_counter_sub(&fs_info->dev_replace.bio_counter, amount);
1285 cond_wake_up_nomb(&fs_info->dev_replace.replace_wait);
1291 percpu_counter_inc(&fs_info->dev_replace.bio_counter);
1297 wait_event(fs_info->dev_replace.replace_wait,