Lines Matching refs:fs_devices

408 static void free_fs_devices(struct btrfs_fs_devices *fs_devices)  in free_fs_devices()  argument
411 WARN_ON(fs_devices->opened); in free_fs_devices()
412 while (!list_empty(&fs_devices->devices)) { in free_fs_devices()
413 device = list_entry(fs_devices->devices.next, in free_fs_devices()
418 kfree(fs_devices); in free_fs_devices()
423 struct btrfs_fs_devices *fs_devices; in btrfs_cleanup_fs_uuids() local
426 fs_devices = list_entry(fs_uuids.next, in btrfs_cleanup_fs_uuids()
428 list_del(&fs_devices->fs_list); in btrfs_cleanup_fs_uuids()
429 free_fs_devices(fs_devices); in btrfs_cleanup_fs_uuids()
436 struct btrfs_fs_devices *fs_devices; in find_fsid() local
441 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid()
443 if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0 in find_fsid()
444 && memcmp(metadata_fsid, fs_devices->metadata_uuid, in find_fsid()
446 return fs_devices; in find_fsid()
448 if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0) in find_fsid()
449 return fs_devices; in find_fsid()
459 struct btrfs_fs_devices *fs_devices; in find_fsid_with_metadata_uuid() local
467 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_with_metadata_uuid()
468 if (fs_devices->fsid_change && in find_fsid_with_metadata_uuid()
469 memcmp(disk_super->metadata_uuid, fs_devices->fsid, in find_fsid_with_metadata_uuid()
471 memcmp(fs_devices->fsid, fs_devices->metadata_uuid, in find_fsid_with_metadata_uuid()
473 return fs_devices; in find_fsid_with_metadata_uuid()
482 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_with_metadata_uuid()
483 if (fs_devices->fsid_change && in find_fsid_with_metadata_uuid()
484 memcmp(fs_devices->metadata_uuid, in find_fsid_with_metadata_uuid()
485 fs_devices->fsid, BTRFS_FSID_SIZE) != 0 && in find_fsid_with_metadata_uuid()
486 memcmp(disk_super->metadata_uuid, fs_devices->metadata_uuid, in find_fsid_with_metadata_uuid()
488 return fs_devices; in find_fsid_with_metadata_uuid()
547 struct btrfs_fs_devices *fs_devices, *tmp_fs_devices; in btrfs_free_stale_devices() local
556 list_for_each_entry_safe(fs_devices, tmp_fs_devices, &fs_uuids, fs_list) { in btrfs_free_stale_devices()
558 mutex_lock(&fs_devices->device_list_mutex); in btrfs_free_stale_devices()
560 &fs_devices->devices, dev_list) { in btrfs_free_stale_devices()
565 if (fs_devices->opened) { in btrfs_free_stale_devices()
573 fs_devices->num_devices--; in btrfs_free_stale_devices()
579 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_free_stale_devices()
581 if (fs_devices->num_devices == 0) { in btrfs_free_stale_devices()
582 btrfs_sysfs_remove_fsid(fs_devices); in btrfs_free_stale_devices()
583 list_del(&fs_devices->fs_list); in btrfs_free_stale_devices()
584 free_fs_devices(fs_devices); in btrfs_free_stale_devices()
596 static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices, in btrfs_open_one_device() argument
633 fs_devices->seeding = true; in btrfs_open_one_device()
642 fs_devices->rotating = true; in btrfs_open_one_device()
648 fs_devices->open_devices++; in btrfs_open_one_device()
651 fs_devices->rw_devices++; in btrfs_open_one_device()
652 list_add_tail(&device->dev_alloc_list, &fs_devices->alloc_list); in btrfs_open_one_device()
674 struct btrfs_fs_devices *fs_devices; in find_fsid_inprogress() local
676 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_inprogress()
677 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid, in find_fsid_inprogress()
679 memcmp(fs_devices->metadata_uuid, disk_super->fsid, in find_fsid_inprogress()
680 BTRFS_FSID_SIZE) == 0 && !fs_devices->fsid_change) { in find_fsid_inprogress()
681 return fs_devices; in find_fsid_inprogress()
692 struct btrfs_fs_devices *fs_devices; in find_fsid_changed() local
703 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_changed()
705 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid, in find_fsid_changed()
707 memcmp(fs_devices->metadata_uuid, disk_super->metadata_uuid, in find_fsid_changed()
709 memcmp(fs_devices->fsid, disk_super->fsid, in find_fsid_changed()
711 return fs_devices; in find_fsid_changed()
714 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid, in find_fsid_changed()
716 memcmp(fs_devices->fsid, disk_super->metadata_uuid, in find_fsid_changed()
718 return fs_devices; in find_fsid_changed()
727 struct btrfs_fs_devices *fs_devices; in find_fsid_reverted_metadata() local
738 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_reverted_metadata()
739 if (memcmp(fs_devices->fsid, fs_devices->metadata_uuid, in find_fsid_reverted_metadata()
741 memcmp(fs_devices->metadata_uuid, disk_super->fsid, in find_fsid_reverted_metadata()
743 fs_devices->fsid_change) in find_fsid_reverted_metadata()
744 return fs_devices; in find_fsid_reverted_metadata()
761 struct btrfs_fs_devices *fs_devices = NULL; in device_list_add() local
778 fs_devices = find_fsid_inprogress(disk_super); in device_list_add()
780 fs_devices = find_fsid_changed(disk_super); in device_list_add()
782 fs_devices = find_fsid_with_metadata_uuid(disk_super); in device_list_add()
784 fs_devices = find_fsid_reverted_metadata(disk_super); in device_list_add()
785 if (!fs_devices) in device_list_add()
786 fs_devices = find_fsid(disk_super->fsid, NULL); in device_list_add()
790 if (!fs_devices) { in device_list_add()
792 fs_devices = alloc_fs_devices(disk_super->fsid, in device_list_add()
795 fs_devices = alloc_fs_devices(disk_super->fsid, NULL); in device_list_add()
797 if (IS_ERR(fs_devices)) in device_list_add()
798 return ERR_CAST(fs_devices); in device_list_add()
800 fs_devices->fsid_change = fsid_change_in_progress; in device_list_add()
802 mutex_lock(&fs_devices->device_list_mutex); in device_list_add()
803 list_add(&fs_devices->fs_list, &fs_uuids); in device_list_add()
812 mutex_lock(&fs_devices->device_list_mutex); in device_list_add()
813 device = btrfs_find_device(fs_devices, &args); in device_list_add()
820 if (fs_devices->fsid_change && in device_list_add()
821 found_transid > fs_devices->latest_generation) { in device_list_add()
822 memcpy(fs_devices->fsid, disk_super->fsid, in device_list_add()
826 memcpy(fs_devices->metadata_uuid, in device_list_add()
830 memcpy(fs_devices->metadata_uuid, in device_list_add()
833 fs_devices->fsid_change = false; in device_list_add()
838 if (fs_devices->opened) { in device_list_add()
839 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
846 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
854 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
860 list_add_rcu(&device->dev_list, &fs_devices->devices); in device_list_add()
861 fs_devices->num_devices++; in device_list_add()
863 device->fs_devices = fs_devices; in device_list_add()
904 if (!fs_devices->opened && found_transid < device->generation) { in device_list_add()
912 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
927 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
944 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
950 fs_devices->missing_devices--; in device_list_add()
962 if (!fs_devices->opened) { in device_list_add()
964 fs_devices->latest_generation = max_t(u64, found_transid, in device_list_add()
965 fs_devices->latest_generation); in device_list_add()
968 fs_devices->total_devices = btrfs_super_num_devices(disk_super); in device_list_add()
970 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
976 struct btrfs_fs_devices *fs_devices; in clone_fs_devices() local
983 fs_devices = alloc_fs_devices(orig->fsid, NULL); in clone_fs_devices()
984 if (IS_ERR(fs_devices)) in clone_fs_devices()
985 return fs_devices; in clone_fs_devices()
987 fs_devices->total_devices = orig->total_devices; in clone_fs_devices()
1026 list_add(&device->dev_list, &fs_devices->devices); in clone_fs_devices()
1027 device->fs_devices = fs_devices; in clone_fs_devices()
1028 fs_devices->num_devices++; in clone_fs_devices()
1030 return fs_devices; in clone_fs_devices()
1032 free_fs_devices(fs_devices); in clone_fs_devices()
1036 static void __btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices, in __btrfs_free_extra_devids() argument
1042 list_for_each_entry_safe(device, next, &fs_devices->devices, dev_list) { in __btrfs_free_extra_devids()
1065 fs_devices->open_devices--; in __btrfs_free_extra_devids()
1070 fs_devices->rw_devices--; in __btrfs_free_extra_devids()
1073 fs_devices->num_devices--; in __btrfs_free_extra_devids()
1083 void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices) in btrfs_free_extra_devids() argument
1089 __btrfs_free_extra_devids(fs_devices, &latest_dev); in btrfs_free_extra_devids()
1091 list_for_each_entry(seed_dev, &fs_devices->seed_list, seed_list) in btrfs_free_extra_devids()
1094 fs_devices->latest_dev = latest_dev; in btrfs_free_extra_devids()
1114 struct btrfs_fs_devices *fs_devices = device->fs_devices; in btrfs_close_one_device() local
1119 fs_devices->rw_devices--; in btrfs_close_one_device()
1127 fs_devices->missing_devices--; in btrfs_close_one_device()
1132 fs_devices->open_devices--; in btrfs_close_one_device()
1162 static void close_fs_devices(struct btrfs_fs_devices *fs_devices) in close_fs_devices() argument
1168 if (--fs_devices->opened > 0) in close_fs_devices()
1171 list_for_each_entry_safe(device, tmp, &fs_devices->devices, dev_list) in close_fs_devices()
1174 WARN_ON(fs_devices->open_devices); in close_fs_devices()
1175 WARN_ON(fs_devices->rw_devices); in close_fs_devices()
1176 fs_devices->opened = 0; in close_fs_devices()
1177 fs_devices->seeding = false; in close_fs_devices()
1178 fs_devices->fs_info = NULL; in close_fs_devices()
1181 void btrfs_close_devices(struct btrfs_fs_devices *fs_devices) in btrfs_close_devices() argument
1187 close_fs_devices(fs_devices); in btrfs_close_devices()
1188 if (!fs_devices->opened) in btrfs_close_devices()
1189 list_splice_init(&fs_devices->seed_list, &list); in btrfs_close_devices()
1191 list_for_each_entry_safe(fs_devices, tmp, &list, seed_list) { in btrfs_close_devices()
1192 close_fs_devices(fs_devices); in btrfs_close_devices()
1193 list_del(&fs_devices->seed_list); in btrfs_close_devices()
1194 free_fs_devices(fs_devices); in btrfs_close_devices()
1199 static int open_fs_devices(struct btrfs_fs_devices *fs_devices, in open_fs_devices() argument
1208 list_for_each_entry_safe(device, tmp_device, &fs_devices->devices, in open_fs_devices()
1212 ret = btrfs_open_one_device(fs_devices, device, flags, holder); in open_fs_devices()
1217 fs_devices->num_devices--; in open_fs_devices()
1222 if (fs_devices->open_devices == 0) in open_fs_devices()
1225 fs_devices->opened = 1; in open_fs_devices()
1226 fs_devices->latest_dev = latest_dev; in open_fs_devices()
1227 fs_devices->total_rw_bytes = 0; in open_fs_devices()
1228 fs_devices->chunk_alloc_policy = BTRFS_CHUNK_ALLOC_REGULAR; in open_fs_devices()
1229 fs_devices->read_policy = BTRFS_READ_POLICY_PID; in open_fs_devices()
1249 int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, in btrfs_open_devices() argument
1263 if (fs_devices->opened) { in btrfs_open_devices()
1264 fs_devices->opened++; in btrfs_open_devices()
1267 list_sort(NULL, &fs_devices->devices, devid_cmp); in btrfs_open_devices()
1268 ret = open_fs_devices(fs_devices, flags, holder); in btrfs_open_devices()
1417 switch (device->fs_devices->chunk_alloc_policy) { in dev_extent_search_start()
1505 switch (device->fs_devices->chunk_alloc_policy) { in dev_extent_hole_check()
1870 write_extent_buffer(leaf, trans->fs_info->fs_devices->metadata_uuid, in btrfs_add_dev_item()
1990 next_device = btrfs_find_next_active_device(fs_info->fs_devices, in btrfs_assign_next_active_device()
1998 if (fs_info->fs_devices->latest_dev->bdev == device->bdev) in btrfs_assign_next_active_device()
1999 fs_info->fs_devices->latest_dev = next_device; in btrfs_assign_next_active_device()
2008 u64 num_devices = fs_info->fs_devices->num_devices; in btrfs_num_devices()
2072 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_rm_device() local
2092 device = btrfs_find_device(fs_info->fs_devices, args); in btrfs_rm_device()
2112 fs_info->fs_devices->rw_devices == 1) in btrfs_rm_device()
2118 device->fs_devices->rw_devices--; in btrfs_rm_device()
2161 cur_devices = device->fs_devices; in btrfs_rm_device()
2162 mutex_lock(&fs_devices->device_list_mutex); in btrfs_rm_device()
2168 if (cur_devices != fs_devices) in btrfs_rm_device()
2169 fs_devices->total_devices--; in btrfs_rm_device()
2184 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_rm_device()
2232 &fs_devices->alloc_list); in btrfs_rm_device()
2233 device->fs_devices->rw_devices++; in btrfs_rm_device()
2241 struct btrfs_fs_devices *fs_devices; in btrfs_rm_dev_replace_remove_srcdev() local
2243 lockdep_assert_held(&srcdev->fs_info->fs_devices->device_list_mutex); in btrfs_rm_dev_replace_remove_srcdev()
2251 fs_devices = srcdev->fs_devices; in btrfs_rm_dev_replace_remove_srcdev()
2255 fs_devices->num_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2257 fs_devices->missing_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2260 fs_devices->rw_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2263 fs_devices->open_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2268 struct btrfs_fs_devices *fs_devices = srcdev->fs_devices; in btrfs_rm_dev_replace_free_srcdev() local
2277 if (!fs_devices->num_devices) { in btrfs_rm_dev_replace_free_srcdev()
2284 ASSERT(fs_devices->seeding); in btrfs_rm_dev_replace_free_srcdev()
2286 list_del_init(&fs_devices->seed_list); in btrfs_rm_dev_replace_free_srcdev()
2287 close_fs_devices(fs_devices); in btrfs_rm_dev_replace_free_srcdev()
2288 free_fs_devices(fs_devices); in btrfs_rm_dev_replace_free_srcdev()
2295 struct btrfs_fs_devices *fs_devices = tgtdev->fs_info->fs_devices; in btrfs_destroy_dev_replace_tgtdev() local
2297 mutex_lock(&fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
2302 fs_devices->open_devices--; in btrfs_destroy_dev_replace_tgtdev()
2304 fs_devices->num_devices--; in btrfs_destroy_dev_replace_tgtdev()
2310 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
2401 device = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_find_device_by_devspec()
2410 device = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_find_device_by_devspec()
2419 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_sprout() local
2424 if (!fs_devices->seeding) in btrfs_init_sprout()
2441 old_devices = clone_fs_devices(fs_devices); in btrfs_init_sprout()
2449 memcpy(seed_devices, fs_devices, sizeof(*seed_devices)); in btrfs_init_sprout()
2465 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_setup_sprout() local
2488 lockdep_assert_held(&fs_devices->device_list_mutex); in btrfs_setup_sprout()
2490 list_splice_init_rcu(&fs_devices->devices, &seed_devices->devices, in btrfs_setup_sprout()
2493 device->fs_devices = seed_devices; in btrfs_setup_sprout()
2495 fs_devices->seeding = false; in btrfs_setup_sprout()
2496 fs_devices->num_devices = 0; in btrfs_setup_sprout()
2497 fs_devices->open_devices = 0; in btrfs_setup_sprout()
2498 fs_devices->missing_devices = 0; in btrfs_setup_sprout()
2499 fs_devices->rotating = false; in btrfs_setup_sprout()
2500 list_add(&seed_devices->seed_list, &fs_devices->seed_list); in btrfs_setup_sprout()
2502 generate_random_uuid(fs_devices->fsid); in btrfs_setup_sprout()
2503 memcpy(fs_devices->metadata_uuid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_setup_sprout()
2504 memcpy(disk_super->fsid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_setup_sprout()
2571 device = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_finish_sprout()
2574 if (device->fs_devices->seeding) { in btrfs_finish_sprout()
2597 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_new_device() local
2605 if (sb_rdonly(sb) && !fs_devices->seeding) in btrfs_init_new_device()
2618 if (fs_devices->seeding) { in btrfs_init_new_device()
2628 list_for_each_entry_rcu(device, &fs_devices->devices, dev_list) { in btrfs_init_new_device()
2694 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_new_device()
2697 btrfs_assign_next_active_device(fs_info->fs_devices->latest_dev, in btrfs_init_new_device()
2701 device->fs_devices = fs_devices; in btrfs_init_new_device()
2704 list_add_rcu(&device->dev_list, &fs_devices->devices); in btrfs_init_new_device()
2705 list_add(&device->dev_alloc_list, &fs_devices->alloc_list); in btrfs_init_new_device()
2706 fs_devices->num_devices++; in btrfs_init_new_device()
2707 fs_devices->open_devices++; in btrfs_init_new_device()
2708 fs_devices->rw_devices++; in btrfs_init_new_device()
2709 fs_devices->total_devices++; in btrfs_init_new_device()
2710 fs_devices->total_rw_bytes += device->total_bytes; in btrfs_init_new_device()
2715 fs_devices->rotating = true; in btrfs_init_new_device()
2737 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_new_device()
2766 btrfs_sysfs_update_sprout_fsid(fs_devices); in btrfs_init_new_device()
2810 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2814 fs_info->fs_devices->num_devices--; in btrfs_init_new_device()
2815 fs_info->fs_devices->open_devices--; in btrfs_init_new_device()
2816 fs_info->fs_devices->rw_devices--; in btrfs_init_new_device()
2817 fs_info->fs_devices->total_devices--; in btrfs_init_new_device()
2818 fs_info->fs_devices->total_rw_bytes -= device->total_bytes; in btrfs_init_new_device()
2825 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2916 device->fs_devices->total_rw_bytes += diff; in btrfs_grow_device()
3080 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_remove_chunk() local
3104 mutex_lock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
3111 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
3125 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
4282 num_devices = fs_info->fs_devices->rw_devices; in btrfs_balance()
4851 device->fs_devices->total_rw_bytes -= diff; in btrfs_shrink_device()
4988 device->fs_devices->total_rw_bytes += diff; in btrfs_shrink_device()
5089 struct btrfs_fs_devices *fs_devices, in init_alloc_chunk_ctl_policy_regular() argument
5094 space_info = btrfs_find_space_info(fs_devices->fs_info, ctl->type); in init_alloc_chunk_ctl_policy_regular()
5104 ctl->max_chunk_size = min(div_factor(fs_devices->total_rw_bytes, 1), in init_alloc_chunk_ctl_policy_regular()
5110 struct btrfs_fs_devices *fs_devices, in init_alloc_chunk_ctl_policy_zoned() argument
5113 u64 zone_size = fs_devices->fs_info->zone_size; in init_alloc_chunk_ctl_policy_zoned()
5135 limit = max(round_down(div_factor(fs_devices->total_rw_bytes, 1), in init_alloc_chunk_ctl_policy_zoned()
5142 static void init_alloc_chunk_ctl(struct btrfs_fs_devices *fs_devices, in init_alloc_chunk_ctl() argument
5151 ctl->devs_max = BTRFS_MAX_DEVS(fs_devices->fs_info); in init_alloc_chunk_ctl()
5158 switch (fs_devices->chunk_alloc_policy) { in init_alloc_chunk_ctl()
5160 init_alloc_chunk_ctl_policy_regular(fs_devices, ctl); in init_alloc_chunk_ctl()
5163 init_alloc_chunk_ctl_policy_zoned(fs_devices, ctl); in init_alloc_chunk_ctl()
5170 static int gather_device_info(struct btrfs_fs_devices *fs_devices, in gather_device_info() argument
5174 struct btrfs_fs_info *info = fs_devices->fs_info; in gather_device_info()
5187 list_for_each_entry(device, &fs_devices->alloc_list, dev_alloc_list) { in gather_device_info()
5225 if (ndevs == fs_devices->rw_devices) { in gather_device_info()
5227 __func__, fs_devices->rw_devices); in gather_device_info()
5326 static int decide_stripe_size(struct btrfs_fs_devices *fs_devices, in decide_stripe_size() argument
5330 struct btrfs_fs_info *info = fs_devices->fs_info; in decide_stripe_size()
5350 switch (fs_devices->chunk_alloc_policy) { in decide_stripe_size()
5459 struct btrfs_fs_devices *fs_devices = info->fs_devices; in btrfs_create_chunk() local
5472 if (list_empty(&fs_devices->alloc_list)) { in btrfs_create_chunk()
5486 init_alloc_chunk_ctl(fs_devices, &ctl); in btrfs_create_chunk()
5488 devices_info = kcalloc(fs_devices->rw_devices, sizeof(*devices_info), in btrfs_create_chunk()
5493 ret = gather_device_info(fs_devices, &ctl, devices_info); in btrfs_create_chunk()
5499 ret = decide_stripe_size(fs_devices, &ctl, devices_info); in btrfs_create_chunk()
5834 switch (fs_info->fs_devices->read_policy) { in find_live_mirror()
5839 fs_info->fs_devices->read_policy); in find_live_mirror()
5840 fs_info->fs_devices->read_policy = BTRFS_READ_POLICY_PID; in find_live_mirror()
6921 const struct btrfs_fs_devices *fs_devices) in dev_args_match_fs_devices() argument
6925 if (memcmp(fs_devices->metadata_uuid, args->fsid, BTRFS_FSID_SIZE) == 0) in dev_args_match_fs_devices()
6954 struct btrfs_device *btrfs_find_device(const struct btrfs_fs_devices *fs_devices, in btrfs_find_device() argument
6960 if (dev_args_match_fs_devices(args, fs_devices)) { in btrfs_find_device()
6961 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_find_device()
6967 list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) { in btrfs_find_device()
6979 static struct btrfs_device *add_missing_dev(struct btrfs_fs_devices *fs_devices, in add_missing_dev() argument
6997 list_add(&device->dev_list, &fs_devices->devices); in add_missing_dev()
6998 device->fs_devices = fs_devices; in add_missing_dev()
6999 fs_devices->num_devices++; in add_missing_dev()
7002 fs_devices->missing_devices++; in add_missing_dev()
7133 dev = add_missing_dev(fs_info->fs_devices, devid, uuid); in handle_missing_device()
7239 map->stripes[i].dev = btrfs_find_device(fs_info->fs_devices, &args); in read_one_chunk()
7292 struct btrfs_fs_devices *fs_devices; in open_seed_devices() local
7299 list_for_each_entry(fs_devices, &fs_info->fs_devices->seed_list, seed_list) in open_seed_devices()
7300 if (!memcmp(fs_devices->fsid, fsid, BTRFS_FSID_SIZE)) in open_seed_devices()
7301 return fs_devices; in open_seed_devices()
7304 fs_devices = find_fsid(fsid, NULL); in open_seed_devices()
7305 if (!fs_devices) { in open_seed_devices()
7309 fs_devices = alloc_fs_devices(fsid, NULL); in open_seed_devices()
7310 if (IS_ERR(fs_devices)) in open_seed_devices()
7311 return fs_devices; in open_seed_devices()
7313 fs_devices->seeding = true; in open_seed_devices()
7314 fs_devices->opened = 1; in open_seed_devices()
7315 return fs_devices; in open_seed_devices()
7322 fs_devices = clone_fs_devices(fs_devices); in open_seed_devices()
7323 if (IS_ERR(fs_devices)) in open_seed_devices()
7324 return fs_devices; in open_seed_devices()
7326 ret = open_fs_devices(fs_devices, FMODE_READ, fs_info->bdev_holder); in open_seed_devices()
7328 free_fs_devices(fs_devices); in open_seed_devices()
7332 if (!fs_devices->seeding) { in open_seed_devices()
7333 close_fs_devices(fs_devices); in open_seed_devices()
7334 free_fs_devices(fs_devices); in open_seed_devices()
7338 list_add(&fs_devices->seed_list, &fs_info->fs_devices->seed_list); in open_seed_devices()
7340 return fs_devices; in open_seed_devices()
7348 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in read_one_dev() local
7364 if (memcmp(fs_uuid, fs_devices->metadata_uuid, BTRFS_FSID_SIZE)) { in read_one_dev()
7365 fs_devices = open_seed_devices(fs_info, fs_uuid); in read_one_dev()
7366 if (IS_ERR(fs_devices)) in read_one_dev()
7367 return PTR_ERR(fs_devices); in read_one_dev()
7370 device = btrfs_find_device(fs_info->fs_devices, &args); in read_one_dev()
7378 device = add_missing_dev(fs_devices, devid, dev_uuid); in read_one_dev()
7405 device->fs_devices->missing_devices++; in read_one_dev()
7410 if (device->fs_devices != fs_devices) { in read_one_dev()
7414 list_move(&device->dev_list, &fs_devices->devices); in read_one_dev()
7415 device->fs_devices->num_devices--; in read_one_dev()
7416 fs_devices->num_devices++; in read_one_dev()
7418 device->fs_devices->missing_devices--; in read_one_dev()
7419 fs_devices->missing_devices++; in read_one_dev()
7421 device->fs_devices = fs_devices; in read_one_dev()
7425 if (device->fs_devices != fs_info->fs_devices) { in read_one_dev()
7446 device->fs_devices->total_rw_bytes += device->total_bytes; in read_one_dev()
7663 fs_info->fs_devices->total_rw_bytes = 0; in btrfs_read_chunk_tree()
7734 if (total_dev != fs_info->fs_devices->total_devices) { in btrfs_read_chunk_tree()
7739 fs_info->fs_devices->total_devices = total_dev; in btrfs_read_chunk_tree()
7743 fs_info->fs_devices->total_rw_bytes) { in btrfs_read_chunk_tree()
7747 fs_info->fs_devices->total_rw_bytes); in btrfs_read_chunk_tree()
7761 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_devices_late() local
7765 fs_devices->fs_info = fs_info; in btrfs_init_devices_late()
7767 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_devices_late()
7768 list_for_each_entry(device, &fs_devices->devices, dev_list) in btrfs_init_devices_late()
7771 list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) { in btrfs_init_devices_late()
7781 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_devices_late()
7855 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_dev_stats() local
7864 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_dev_stats()
7865 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_init_dev_stats()
7870 list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) { in btrfs_init_dev_stats()
7878 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_dev_stats()
7955 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_run_dev_stats() local
7960 mutex_lock(&fs_devices->device_list_mutex); in btrfs_run_dev_stats()
7961 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_run_dev_stats()
7984 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_run_dev_stats()
8030 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_get_dev_stats() local
8033 mutex_lock(&fs_devices->device_list_mutex); in btrfs_get_dev_stats()
8035 dev = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_get_dev_stats()
8036 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_get_dev_stats()
8177 dev = btrfs_find_device(fs_info->fs_devices, &args); in verify_one_dev_extent()