Lines Matching refs:dev_replace

76 	struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;  in btrfs_init_dev_replace()  local
111 dev_replace->replace_state = in btrfs_init_dev_replace()
113 dev_replace->cont_reading_from_srcdev_mode = in btrfs_init_dev_replace()
115 dev_replace->time_started = 0; in btrfs_init_dev_replace()
116 dev_replace->time_stopped = 0; in btrfs_init_dev_replace()
117 atomic64_set(&dev_replace->num_write_errors, 0); in btrfs_init_dev_replace()
118 atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0); in btrfs_init_dev_replace()
119 dev_replace->cursor_left = 0; in btrfs_init_dev_replace()
120 dev_replace->committed_cursor_left = 0; in btrfs_init_dev_replace()
121 dev_replace->cursor_left_last_write_of_item = 0; in btrfs_init_dev_replace()
122 dev_replace->cursor_right = 0; in btrfs_init_dev_replace()
123 dev_replace->srcdev = NULL; in btrfs_init_dev_replace()
124 dev_replace->tgtdev = NULL; in btrfs_init_dev_replace()
125 dev_replace->is_valid = 0; in btrfs_init_dev_replace()
126 dev_replace->item_needs_writeback = 0; in btrfs_init_dev_replace()
141 dev_replace->cont_reading_from_srcdev_mode = in btrfs_init_dev_replace()
143 dev_replace->replace_state = btrfs_dev_replace_replace_state(eb, ptr); in btrfs_init_dev_replace()
144 dev_replace->time_started = btrfs_dev_replace_time_started(eb, ptr); in btrfs_init_dev_replace()
145 dev_replace->time_stopped = in btrfs_init_dev_replace()
147 atomic64_set(&dev_replace->num_write_errors, in btrfs_init_dev_replace()
149 atomic64_set(&dev_replace->num_uncorrectable_read_errors, in btrfs_init_dev_replace()
151 dev_replace->cursor_left = btrfs_dev_replace_cursor_left(eb, ptr); in btrfs_init_dev_replace()
152 dev_replace->committed_cursor_left = dev_replace->cursor_left; in btrfs_init_dev_replace()
153 dev_replace->cursor_left_last_write_of_item = dev_replace->cursor_left; in btrfs_init_dev_replace()
154 dev_replace->cursor_right = btrfs_dev_replace_cursor_right(eb, ptr); in btrfs_init_dev_replace()
155 dev_replace->is_valid = 1; in btrfs_init_dev_replace()
157 dev_replace->item_needs_writeback = 0; in btrfs_init_dev_replace()
158 switch (dev_replace->replace_state) { in btrfs_init_dev_replace()
171 dev_replace->srcdev = NULL; in btrfs_init_dev_replace()
172 dev_replace->tgtdev = NULL; in btrfs_init_dev_replace()
177 dev_replace->tgtdev = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_init_dev_replace()
179 dev_replace->srcdev = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_init_dev_replace()
185 if (!dev_replace->srcdev && in btrfs_init_dev_replace()
194 if (!dev_replace->tgtdev && in btrfs_init_dev_replace()
203 if (dev_replace->tgtdev) { in btrfs_init_dev_replace()
204 if (dev_replace->srcdev) { in btrfs_init_dev_replace()
205 dev_replace->tgtdev->total_bytes = in btrfs_init_dev_replace()
206 dev_replace->srcdev->total_bytes; in btrfs_init_dev_replace()
207 dev_replace->tgtdev->disk_total_bytes = in btrfs_init_dev_replace()
208 dev_replace->srcdev->disk_total_bytes; in btrfs_init_dev_replace()
209 dev_replace->tgtdev->commit_total_bytes = in btrfs_init_dev_replace()
210 dev_replace->srcdev->commit_total_bytes; in btrfs_init_dev_replace()
211 dev_replace->tgtdev->bytes_used = in btrfs_init_dev_replace()
212 dev_replace->srcdev->bytes_used; in btrfs_init_dev_replace()
213 dev_replace->tgtdev->commit_bytes_used = in btrfs_init_dev_replace()
214 dev_replace->srcdev->commit_bytes_used; in btrfs_init_dev_replace()
217 &dev_replace->tgtdev->dev_state); in btrfs_init_dev_replace()
220 dev_replace->tgtdev->io_width = fs_info->sectorsize; in btrfs_init_dev_replace()
221 dev_replace->tgtdev->io_align = fs_info->sectorsize; in btrfs_init_dev_replace()
222 dev_replace->tgtdev->sector_size = fs_info->sectorsize; in btrfs_init_dev_replace()
223 dev_replace->tgtdev->fs_info = fs_info; in btrfs_init_dev_replace()
225 &dev_replace->tgtdev->dev_state); in btrfs_init_dev_replace()
356 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_run_dev_replace() local
358 down_read(&dev_replace->rwsem); in btrfs_run_dev_replace()
359 if (!dev_replace->is_valid || in btrfs_run_dev_replace()
360 !dev_replace->item_needs_writeback) { in btrfs_run_dev_replace()
361 up_read(&dev_replace->rwsem); in btrfs_run_dev_replace()
364 up_read(&dev_replace->rwsem); in btrfs_run_dev_replace()
422 down_write(&dev_replace->rwsem); in btrfs_run_dev_replace()
423 if (dev_replace->srcdev) in btrfs_run_dev_replace()
425 dev_replace->srcdev->devid); in btrfs_run_dev_replace()
429 dev_replace->cont_reading_from_srcdev_mode); in btrfs_run_dev_replace()
431 dev_replace->replace_state); in btrfs_run_dev_replace()
432 btrfs_set_dev_replace_time_started(eb, ptr, dev_replace->time_started); in btrfs_run_dev_replace()
433 btrfs_set_dev_replace_time_stopped(eb, ptr, dev_replace->time_stopped); in btrfs_run_dev_replace()
435 atomic64_read(&dev_replace->num_write_errors)); in btrfs_run_dev_replace()
437 atomic64_read(&dev_replace->num_uncorrectable_read_errors)); in btrfs_run_dev_replace()
438 dev_replace->cursor_left_last_write_of_item = in btrfs_run_dev_replace()
439 dev_replace->cursor_left; in btrfs_run_dev_replace()
441 dev_replace->cursor_left_last_write_of_item); in btrfs_run_dev_replace()
443 dev_replace->cursor_right); in btrfs_run_dev_replace()
444 dev_replace->item_needs_writeback = 0; in btrfs_run_dev_replace()
445 up_write(&dev_replace->rwsem); in btrfs_run_dev_replace()
648 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_dev_replace_start() local
687 down_write(&dev_replace->rwsem); in btrfs_dev_replace_start()
688 switch (dev_replace->replace_state) { in btrfs_dev_replace_start()
697 up_write(&dev_replace->rwsem); in btrfs_dev_replace_start()
701 dev_replace->cont_reading_from_srcdev_mode = read_src; in btrfs_dev_replace_start()
702 dev_replace->srcdev = src_device; in btrfs_dev_replace_start()
703 dev_replace->tgtdev = tgt_device; in btrfs_dev_replace_start()
715 dev_replace->replace_state = BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED; in btrfs_dev_replace_start()
716 dev_replace->time_started = ktime_get_real_seconds(); in btrfs_dev_replace_start()
717 dev_replace->cursor_left = 0; in btrfs_dev_replace_start()
718 dev_replace->committed_cursor_left = 0; in btrfs_dev_replace_start()
719 dev_replace->cursor_left_last_write_of_item = 0; in btrfs_dev_replace_start()
720 dev_replace->cursor_right = 0; in btrfs_dev_replace_start()
721 dev_replace->is_valid = 1; in btrfs_dev_replace_start()
722 dev_replace->item_needs_writeback = 1; in btrfs_dev_replace_start()
723 atomic64_set(&dev_replace->num_write_errors, 0); in btrfs_dev_replace_start()
724 atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0); in btrfs_dev_replace_start()
725 up_write(&dev_replace->rwsem); in btrfs_dev_replace_start()
737 down_write(&dev_replace->rwsem); in btrfs_dev_replace_start()
738 dev_replace->replace_state = in btrfs_dev_replace_start()
740 dev_replace->srcdev = NULL; in btrfs_dev_replace_start()
741 dev_replace->tgtdev = NULL; in btrfs_dev_replace_start()
742 up_write(&dev_replace->rwsem); in btrfs_dev_replace_start()
752 &dev_replace->scrub_progress, 0, 1); in btrfs_dev_replace_start()
801 wait_event(fs_info->dev_replace.replace_wait, !percpu_counter_sum( in btrfs_rm_dev_replace_blocked()
802 &fs_info->dev_replace.bio_counter)); in btrfs_rm_dev_replace_blocked()
811 wake_up(&fs_info->dev_replace.replace_wait); in btrfs_rm_dev_replace_unblocked()
874 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_dev_replace_finishing() local
883 mutex_lock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_finishing()
885 down_read(&dev_replace->rwsem); in btrfs_dev_replace_finishing()
887 if (dev_replace->replace_state != in btrfs_dev_replace_finishing()
889 up_read(&dev_replace->rwsem); in btrfs_dev_replace_finishing()
890 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_finishing()
894 tgt_device = dev_replace->tgtdev; in btrfs_dev_replace_finishing()
895 src_device = dev_replace->srcdev; in btrfs_dev_replace_finishing()
896 up_read(&dev_replace->rwsem); in btrfs_dev_replace_finishing()
904 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_finishing()
921 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_finishing()
940 down_write(&dev_replace->rwsem); in btrfs_dev_replace_finishing()
941 dev_replace->replace_state = in btrfs_dev_replace_finishing()
944 dev_replace->tgtdev = NULL; in btrfs_dev_replace_finishing()
945 dev_replace->srcdev = NULL; in btrfs_dev_replace_finishing()
946 dev_replace->time_stopped = ktime_get_real_seconds(); in btrfs_dev_replace_finishing()
947 dev_replace->item_needs_writeback = 1; in btrfs_dev_replace_finishing()
968 up_write(&dev_replace->rwsem); in btrfs_dev_replace_finishing()
976 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_finishing()
1003 up_write(&dev_replace->rwsem); in btrfs_dev_replace_finishing()
1038 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_finishing()
1052 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_dev_replace_progress() local
1055 switch (dev_replace->replace_state) { in btrfs_dev_replace_progress()
1065 ret = div64_u64(dev_replace->cursor_left, in btrfs_dev_replace_progress()
1067 dev_replace->srcdev), 1000)); in btrfs_dev_replace_progress()
1077 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_dev_replace_status() local
1079 down_read(&dev_replace->rwsem); in btrfs_dev_replace_status()
1083 args->status.replace_state = dev_replace->replace_state; in btrfs_dev_replace_status()
1084 args->status.time_started = dev_replace->time_started; in btrfs_dev_replace_status()
1085 args->status.time_stopped = dev_replace->time_stopped; in btrfs_dev_replace_status()
1087 atomic64_read(&dev_replace->num_write_errors); in btrfs_dev_replace_status()
1089 atomic64_read(&dev_replace->num_uncorrectable_read_errors); in btrfs_dev_replace_status()
1091 up_read(&dev_replace->rwsem); in btrfs_dev_replace_status()
1096 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_dev_replace_cancel() local
1107 mutex_lock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_cancel()
1108 down_write(&dev_replace->rwsem); in btrfs_dev_replace_cancel()
1109 switch (dev_replace->replace_state) { in btrfs_dev_replace_cancel()
1114 up_write(&dev_replace->rwsem); in btrfs_dev_replace_cancel()
1117 tgt_device = dev_replace->tgtdev; in btrfs_dev_replace_cancel()
1118 src_device = dev_replace->srcdev; in btrfs_dev_replace_cancel()
1119 up_write(&dev_replace->rwsem); in btrfs_dev_replace_cancel()
1141 tgt_device = dev_replace->tgtdev; in btrfs_dev_replace_cancel()
1142 src_device = dev_replace->srcdev; in btrfs_dev_replace_cancel()
1143 dev_replace->tgtdev = NULL; in btrfs_dev_replace_cancel()
1144 dev_replace->srcdev = NULL; in btrfs_dev_replace_cancel()
1145 dev_replace->replace_state = in btrfs_dev_replace_cancel()
1147 dev_replace->time_stopped = ktime_get_real_seconds(); in btrfs_dev_replace_cancel()
1148 dev_replace->item_needs_writeback = 1; in btrfs_dev_replace_cancel()
1150 up_write(&dev_replace->rwsem); in btrfs_dev_replace_cancel()
1158 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_cancel()
1173 up_write(&dev_replace->rwsem); in btrfs_dev_replace_cancel()
1177 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_cancel()
1183 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_dev_replace_suspend_for_unmount() local
1185 mutex_lock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_suspend_for_unmount()
1186 down_write(&dev_replace->rwsem); in btrfs_dev_replace_suspend_for_unmount()
1188 switch (dev_replace->replace_state) { in btrfs_dev_replace_suspend_for_unmount()
1195 dev_replace->replace_state = in btrfs_dev_replace_suspend_for_unmount()
1197 dev_replace->time_stopped = ktime_get_real_seconds(); in btrfs_dev_replace_suspend_for_unmount()
1198 dev_replace->item_needs_writeback = 1; in btrfs_dev_replace_suspend_for_unmount()
1203 up_write(&dev_replace->rwsem); in btrfs_dev_replace_suspend_for_unmount()
1204 mutex_unlock(&dev_replace->lock_finishing_cancel_unmount); in btrfs_dev_replace_suspend_for_unmount()
1211 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_resume_dev_replace_async() local
1213 down_write(&dev_replace->rwsem); in btrfs_resume_dev_replace_async()
1215 switch (dev_replace->replace_state) { in btrfs_resume_dev_replace_async()
1219 up_write(&dev_replace->rwsem); in btrfs_resume_dev_replace_async()
1224 dev_replace->replace_state = in btrfs_resume_dev_replace_async()
1228 if (!dev_replace->tgtdev || !dev_replace->tgtdev->bdev) { in btrfs_resume_dev_replace_async()
1233 dev_replace->replace_state = in btrfs_resume_dev_replace_async()
1235 up_write(&dev_replace->rwsem); in btrfs_resume_dev_replace_async()
1238 up_write(&dev_replace->rwsem); in btrfs_resume_dev_replace_async()
1246 down_write(&dev_replace->rwsem); in btrfs_resume_dev_replace_async()
1247 dev_replace->replace_state = in btrfs_resume_dev_replace_async()
1249 up_write(&dev_replace->rwsem); in btrfs_resume_dev_replace_async()
1262 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_dev_replace_kthread() local
1270 btrfs_dev_name(dev_replace->srcdev), in btrfs_dev_replace_kthread()
1271 dev_replace->srcdev->devid, in btrfs_dev_replace_kthread()
1272 btrfs_dev_name(dev_replace->tgtdev), in btrfs_dev_replace_kthread()
1275 ret = btrfs_scrub_dev(fs_info, dev_replace->srcdev->devid, in btrfs_dev_replace_kthread()
1276 dev_replace->committed_cursor_left, in btrfs_dev_replace_kthread()
1277 btrfs_device_get_total_bytes(dev_replace->srcdev), in btrfs_dev_replace_kthread()
1278 &dev_replace->scrub_progress, 0, 1); in btrfs_dev_replace_kthread()
1286 int __pure btrfs_dev_replace_is_ongoing(struct btrfs_dev_replace *dev_replace) in btrfs_dev_replace_is_ongoing() argument
1288 if (!dev_replace->is_valid) in btrfs_dev_replace_is_ongoing()
1291 switch (dev_replace->replace_state) { in btrfs_dev_replace_is_ongoing()
1315 percpu_counter_inc(&fs_info->dev_replace.bio_counter); in btrfs_bio_counter_inc_noblocked()
1320 percpu_counter_sub(&fs_info->dev_replace.bio_counter, amount); in btrfs_bio_counter_sub()
1321 cond_wake_up_nomb(&fs_info->dev_replace.replace_wait); in btrfs_bio_counter_sub()
1327 percpu_counter_inc(&fs_info->dev_replace.bio_counter); in btrfs_bio_counter_inc_blocked()
1333 wait_event(fs_info->dev_replace.replace_wait, in btrfs_bio_counter_inc_blocked()