Lines Matching defs:dev_replace
78 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
113 dev_replace->replace_state =
115 dev_replace->cont_reading_from_srcdev_mode =
117 dev_replace->time_started = 0;
118 dev_replace->time_stopped = 0;
119 atomic64_set(&dev_replace->num_write_errors, 0);
120 atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0);
121 dev_replace->cursor_left = 0;
122 dev_replace->committed_cursor_left = 0;
123 dev_replace->cursor_left_last_write_of_item = 0;
124 dev_replace->cursor_right = 0;
125 dev_replace->srcdev = NULL;
126 dev_replace->tgtdev = NULL;
127 dev_replace->is_valid = 0;
128 dev_replace->item_needs_writeback = 0;
138 "dev_replace entry found has unexpected size, ignore entry");
143 dev_replace->cont_reading_from_srcdev_mode =
145 dev_replace->replace_state = btrfs_dev_replace_replace_state(eb, ptr);
146 dev_replace->time_started = btrfs_dev_replace_time_started(eb, ptr);
147 dev_replace->time_stopped =
149 atomic64_set(&dev_replace->num_write_errors,
151 atomic64_set(&dev_replace->num_uncorrectable_read_errors,
153 dev_replace->cursor_left = btrfs_dev_replace_cursor_left(eb, ptr);
154 dev_replace->committed_cursor_left = dev_replace->cursor_left;
155 dev_replace->cursor_left_last_write_of_item = dev_replace->cursor_left;
156 dev_replace->cursor_right = btrfs_dev_replace_cursor_right(eb, ptr);
157 dev_replace->is_valid = 1;
159 dev_replace->item_needs_writeback = 0;
160 switch (dev_replace->replace_state) {
173 dev_replace->srcdev = NULL;
174 dev_replace->tgtdev = NULL;
179 dev_replace->tgtdev = btrfs_find_device(fs_info->fs_devices, &args);
181 dev_replace->srcdev = btrfs_find_device(fs_info->fs_devices, &args);
187 if (!dev_replace->srcdev &&
196 if (!dev_replace->tgtdev &&
205 if (dev_replace->tgtdev) {
206 if (dev_replace->srcdev) {
207 dev_replace->tgtdev->total_bytes =
208 dev_replace->srcdev->total_bytes;
209 dev_replace->tgtdev->disk_total_bytes =
210 dev_replace->srcdev->disk_total_bytes;
211 dev_replace->tgtdev->commit_total_bytes =
212 dev_replace->srcdev->commit_total_bytes;
213 dev_replace->tgtdev->bytes_used =
214 dev_replace->srcdev->bytes_used;
215 dev_replace->tgtdev->commit_bytes_used =
216 dev_replace->srcdev->commit_bytes_used;
219 &dev_replace->tgtdev->dev_state);
222 dev_replace->tgtdev->io_width = fs_info->sectorsize;
223 dev_replace->tgtdev->io_align = fs_info->sectorsize;
224 dev_replace->tgtdev->sector_size = fs_info->sectorsize;
225 dev_replace->tgtdev->fs_info = fs_info;
227 &dev_replace->tgtdev->dev_state);
354 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
356 down_read(&dev_replace->rwsem);
357 if (!dev_replace->is_valid ||
358 !dev_replace->item_needs_writeback) {
359 up_read(&dev_replace->rwsem);
362 up_read(&dev_replace->rwsem);
376 "error %d while searching for dev_replace item!",
386 * dev_replace state is 'running', the data on the target
397 "delete too small dev_replace item failed %d!",
411 "insert dev_replace item failed %d!", ret);
420 down_write(&dev_replace->rwsem);
421 if (dev_replace->srcdev)
423 dev_replace->srcdev->devid);
427 dev_replace->cont_reading_from_srcdev_mode);
429 dev_replace->replace_state);
430 btrfs_set_dev_replace_time_started(eb, ptr, dev_replace->time_started);
431 btrfs_set_dev_replace_time_stopped(eb, ptr, dev_replace->time_stopped);
433 atomic64_read(&dev_replace->num_write_errors));
435 atomic64_read(&dev_replace->num_uncorrectable_read_errors));
436 dev_replace->cursor_left_last_write_of_item =
437 dev_replace->cursor_left;
439 dev_replace->cursor_left_last_write_of_item);
441 dev_replace->cursor_right);
442 dev_replace->item_needs_writeback = 0;
443 up_write(&dev_replace->rwsem);
607 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
646 down_write(&dev_replace->rwsem);
647 switch (dev_replace->replace_state) {
656 up_write(&dev_replace->rwsem);
660 dev_replace->cont_reading_from_srcdev_mode = read_src;
661 dev_replace->srcdev = src_device;
662 dev_replace->tgtdev = tgt_device;
665 "dev_replace from %s (devid %llu) to %s started",
674 dev_replace->replace_state = BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED;
675 dev_replace->time_started = ktime_get_real_seconds();
676 dev_replace->cursor_left = 0;
677 dev_replace->committed_cursor_left = 0;
678 dev_replace->cursor_left_last_write_of_item = 0;
679 dev_replace->cursor_right = 0;
680 dev_replace->is_valid = 1;
681 dev_replace->item_needs_writeback = 1;
682 atomic64_set(&dev_replace->num_write_errors, 0);
683 atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0);
684 up_write(&dev_replace->rwsem);
693 * Commit dev_replace state and reserve 1 item for it.
701 down_write(&dev_replace->rwsem);
702 dev_replace->replace_state =
704 dev_replace->srcdev = NULL;
705 dev_replace->tgtdev = NULL;
706 up_write(&dev_replace->rwsem);
716 &dev_replace->scrub_progress, 0, 1);
781 wait_event(fs_info->dev_replace.replace_wait, !percpu_counter_sum(
782 &fs_info->dev_replace.bio_counter));
791 wake_up(&fs_info->dev_replace.replace_wait);
854 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
864 mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
866 down_read(&dev_replace->rwsem);
868 if (dev_replace->replace_state !=
870 up_read(&dev_replace->rwsem);
871 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
875 tgt_device = dev_replace->tgtdev;
876 src_device = dev_replace->srcdev;
877 up_read(&dev_replace->rwsem);
885 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
898 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
917 down_write(&dev_replace->rwsem);
918 dev_replace->replace_state =
921 dev_replace->tgtdev = NULL;
922 dev_replace->srcdev = NULL;
923 dev_replace->time_stopped = ktime_get_real_seconds();
924 dev_replace->item_needs_writeback = 1;
945 up_write(&dev_replace->rwsem);
952 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
958 "dev_replace from %s (devid %llu) to %s finished",
979 up_write(&dev_replace->rwsem);
993 * this is again a consistent state where no dev_replace procedure
1014 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1028 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1031 switch (dev_replace->replace_state) {
1041 ret = div64_u64(dev_replace->cursor_left,
1043 dev_replace->srcdev), 1000));
1053 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1055 down_read(&dev_replace->rwsem);
1059 args->status.replace_state = dev_replace->replace_state;
1060 args->status.time_started = dev_replace->time_started;
1061 args->status.time_stopped = dev_replace->time_stopped;
1063 atomic64_read(&dev_replace->num_write_errors);
1065 atomic64_read(&dev_replace->num_uncorrectable_read_errors);
1067 up_read(&dev_replace->rwsem);
1072 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1083 mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
1084 down_write(&dev_replace->rwsem);
1085 switch (dev_replace->replace_state) {
1090 up_write(&dev_replace->rwsem);
1093 tgt_device = dev_replace->tgtdev;
1094 src_device = dev_replace->srcdev;
1095 up_write(&dev_replace->rwsem);
1106 "dev_replace from %s (devid %llu) to %s canceled",
1117 tgt_device = dev_replace->tgtdev;
1118 src_device = dev_replace->srcdev;
1119 dev_replace->tgtdev = NULL;
1120 dev_replace->srcdev = NULL;
1121 dev_replace->replace_state =
1123 dev_replace->time_stopped = ktime_get_real_seconds();
1124 dev_replace->item_needs_writeback = 1;
1126 up_write(&dev_replace->rwsem);
1133 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1140 "suspended dev_replace from %s (devid %llu) to %s canceled",
1148 up_write(&dev_replace->rwsem);
1152 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1158 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1160 mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
1161 down_write(&dev_replace->rwsem);
1163 switch (dev_replace->replace_state) {
1170 dev_replace->replace_state =
1172 dev_replace->time_stopped = ktime_get_real_seconds();
1173 dev_replace->item_needs_writeback = 1;
1174 btrfs_info(fs_info, "suspending dev_replace for unmount");
1178 up_write(&dev_replace->rwsem);
1179 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1182 /* resume dev_replace procedure that was interrupted by unmount */
1186 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1188 down_write(&dev_replace->rwsem);
1190 switch (dev_replace->replace_state) {
1194 up_write(&dev_replace->rwsem);
1199 dev_replace->replace_state =
1203 if (!dev_replace->tgtdev || !dev_replace->tgtdev->bdev) {
1205 "cannot continue dev_replace, tgtdev is missing");
1208 dev_replace->replace_state =
1210 up_write(&dev_replace->rwsem);
1213 up_write(&dev_replace->rwsem);
1221 down_write(&dev_replace->rwsem);
1222 dev_replace->replace_state =
1224 up_write(&dev_replace->rwsem);
1237 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1244 "continuing dev_replace from %s (devid %llu) to target %s @%u%%",
1245 btrfs_dev_name(dev_replace->srcdev),
1246 dev_replace->srcdev->devid,
1247 btrfs_dev_name(dev_replace->tgtdev),
1250 ret = btrfs_scrub_dev(fs_info, dev_replace->srcdev->devid,
1251 dev_replace->committed_cursor_left,
1252 btrfs_device_get_total_bytes(dev_replace->srcdev),
1253 &dev_replace->scrub_progress, 0, 1);
1261 int __pure btrfs_dev_replace_is_ongoing(struct btrfs_dev_replace *dev_replace)
1263 if (!dev_replace->is_valid)
1266 switch (dev_replace->replace_state) {
1275 * something that can happen if the dev_replace
1280 * dev_replace procedure. It needs to be canceled
1290 percpu_counter_sub(&fs_info->dev_replace.bio_counter, amount);
1291 cond_wake_up_nomb(&fs_info->dev_replace.replace_wait);
1297 percpu_counter_inc(&fs_info->dev_replace.bio_counter);
1303 wait_event(fs_info->dev_replace.replace_wait,