Lines Matching refs:fs_devices
381 static void free_fs_devices(struct btrfs_fs_devices *fs_devices) in free_fs_devices() argument
384 WARN_ON(fs_devices->opened); in free_fs_devices()
385 while (!list_empty(&fs_devices->devices)) { in free_fs_devices()
386 device = list_entry(fs_devices->devices.next, in free_fs_devices()
391 kfree(fs_devices); in free_fs_devices()
396 struct btrfs_fs_devices *fs_devices; in btrfs_cleanup_fs_uuids() local
399 fs_devices = list_entry(fs_uuids.next, in btrfs_cleanup_fs_uuids()
401 list_del(&fs_devices->fs_list); in btrfs_cleanup_fs_uuids()
402 free_fs_devices(fs_devices); in btrfs_cleanup_fs_uuids()
447 struct btrfs_fs_devices *fs_devices; in find_fsid() local
452 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid()
454 if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0 in find_fsid()
455 && memcmp(metadata_fsid, fs_devices->metadata_uuid, in find_fsid()
457 return fs_devices; in find_fsid()
459 if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0) in find_fsid()
460 return fs_devices; in find_fsid()
470 struct btrfs_fs_devices *fs_devices; in find_fsid_with_metadata_uuid() local
478 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_with_metadata_uuid()
479 if (fs_devices->fsid_change && in find_fsid_with_metadata_uuid()
480 memcmp(disk_super->metadata_uuid, fs_devices->fsid, in find_fsid_with_metadata_uuid()
482 memcmp(fs_devices->fsid, fs_devices->metadata_uuid, in find_fsid_with_metadata_uuid()
484 return fs_devices; in find_fsid_with_metadata_uuid()
493 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_with_metadata_uuid()
494 if (fs_devices->fsid_change && in find_fsid_with_metadata_uuid()
495 memcmp(fs_devices->metadata_uuid, in find_fsid_with_metadata_uuid()
496 fs_devices->fsid, BTRFS_FSID_SIZE) != 0 && in find_fsid_with_metadata_uuid()
497 memcmp(disk_super->metadata_uuid, fs_devices->metadata_uuid, in find_fsid_with_metadata_uuid()
499 return fs_devices; in find_fsid_with_metadata_uuid()
600 struct btrfs_fs_devices *fs_devices, *tmp_fs_devices; in btrfs_free_stale_devices() local
609 list_for_each_entry_safe(fs_devices, tmp_fs_devices, &fs_uuids, fs_list) { in btrfs_free_stale_devices()
611 mutex_lock(&fs_devices->device_list_mutex); in btrfs_free_stale_devices()
613 &fs_devices->devices, dev_list) { in btrfs_free_stale_devices()
618 if (fs_devices->opened) { in btrfs_free_stale_devices()
626 fs_devices->num_devices--; in btrfs_free_stale_devices()
632 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_free_stale_devices()
634 if (fs_devices->num_devices == 0) { in btrfs_free_stale_devices()
635 btrfs_sysfs_remove_fsid(fs_devices); in btrfs_free_stale_devices()
636 list_del(&fs_devices->fs_list); in btrfs_free_stale_devices()
637 free_fs_devices(fs_devices); in btrfs_free_stale_devices()
649 static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices, in btrfs_open_one_device() argument
687 fs_devices->seeding = true; in btrfs_open_one_device()
697 fs_devices->rotating = true; in btrfs_open_one_device()
703 fs_devices->open_devices++; in btrfs_open_one_device()
706 fs_devices->rw_devices++; in btrfs_open_one_device()
707 list_add_tail(&device->dev_alloc_list, &fs_devices->alloc_list); in btrfs_open_one_device()
729 struct btrfs_fs_devices *fs_devices; in find_fsid_inprogress() local
731 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_inprogress()
732 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid, in find_fsid_inprogress()
734 memcmp(fs_devices->metadata_uuid, disk_super->fsid, in find_fsid_inprogress()
735 BTRFS_FSID_SIZE) == 0 && !fs_devices->fsid_change) { in find_fsid_inprogress()
736 return fs_devices; in find_fsid_inprogress()
747 struct btrfs_fs_devices *fs_devices; in find_fsid_changed() local
758 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_changed()
760 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid, in find_fsid_changed()
762 memcmp(fs_devices->metadata_uuid, disk_super->metadata_uuid, in find_fsid_changed()
764 memcmp(fs_devices->fsid, disk_super->fsid, in find_fsid_changed()
766 return fs_devices; in find_fsid_changed()
769 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid, in find_fsid_changed()
771 memcmp(fs_devices->fsid, disk_super->metadata_uuid, in find_fsid_changed()
773 return fs_devices; in find_fsid_changed()
782 struct btrfs_fs_devices *fs_devices; in find_fsid_reverted_metadata() local
793 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_reverted_metadata()
794 if (memcmp(fs_devices->fsid, fs_devices->metadata_uuid, in find_fsid_reverted_metadata()
796 memcmp(fs_devices->metadata_uuid, disk_super->fsid, in find_fsid_reverted_metadata()
798 fs_devices->fsid_change) in find_fsid_reverted_metadata()
799 return fs_devices; in find_fsid_reverted_metadata()
816 struct btrfs_fs_devices *fs_devices = NULL; in device_list_add() local
827 fs_devices = find_fsid_inprogress(disk_super); in device_list_add()
829 fs_devices = find_fsid_changed(disk_super); in device_list_add()
831 fs_devices = find_fsid_with_metadata_uuid(disk_super); in device_list_add()
833 fs_devices = find_fsid_reverted_metadata(disk_super); in device_list_add()
834 if (!fs_devices) in device_list_add()
835 fs_devices = find_fsid(disk_super->fsid, NULL); in device_list_add()
839 if (!fs_devices) { in device_list_add()
841 fs_devices = alloc_fs_devices(disk_super->fsid, in device_list_add()
844 fs_devices = alloc_fs_devices(disk_super->fsid, NULL); in device_list_add()
846 if (IS_ERR(fs_devices)) in device_list_add()
847 return ERR_CAST(fs_devices); in device_list_add()
849 fs_devices->fsid_change = fsid_change_in_progress; in device_list_add()
851 mutex_lock(&fs_devices->device_list_mutex); in device_list_add()
852 list_add(&fs_devices->fs_list, &fs_uuids); in device_list_add()
856 mutex_lock(&fs_devices->device_list_mutex); in device_list_add()
857 device = btrfs_find_device(fs_devices, devid, in device_list_add()
865 if (fs_devices->fsid_change && in device_list_add()
866 found_transid > fs_devices->latest_generation) { in device_list_add()
867 memcpy(fs_devices->fsid, disk_super->fsid, in device_list_add()
871 memcpy(fs_devices->metadata_uuid, in device_list_add()
875 memcpy(fs_devices->metadata_uuid, in device_list_add()
878 fs_devices->fsid_change = false; in device_list_add()
883 if (fs_devices->opened) { in device_list_add()
884 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
891 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
899 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
904 list_add_rcu(&device->dev_list, &fs_devices->devices); in device_list_add()
905 fs_devices->num_devices++; in device_list_add()
907 device->fs_devices = fs_devices; in device_list_add()
948 if (!fs_devices->opened && found_transid < device->generation) { in device_list_add()
956 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
969 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
975 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
999 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
1005 fs_devices->missing_devices--; in device_list_add()
1016 if (!fs_devices->opened) { in device_list_add()
1018 fs_devices->latest_generation = max_t(u64, found_transid, in device_list_add()
1019 fs_devices->latest_generation); in device_list_add()
1022 fs_devices->total_devices = btrfs_super_num_devices(disk_super); in device_list_add()
1024 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
1030 struct btrfs_fs_devices *fs_devices; in clone_fs_devices() local
1037 fs_devices = alloc_fs_devices(orig->fsid, NULL); in clone_fs_devices()
1038 if (IS_ERR(fs_devices)) in clone_fs_devices()
1039 return fs_devices; in clone_fs_devices()
1041 fs_devices->total_devices = orig->total_devices; in clone_fs_devices()
1068 list_add(&device->dev_list, &fs_devices->devices); in clone_fs_devices()
1069 device->fs_devices = fs_devices; in clone_fs_devices()
1070 fs_devices->num_devices++; in clone_fs_devices()
1072 return fs_devices; in clone_fs_devices()
1074 free_fs_devices(fs_devices); in clone_fs_devices()
1078 static void __btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices, in __btrfs_free_extra_devids() argument
1084 list_for_each_entry_safe(device, next, &fs_devices->devices, dev_list) { in __btrfs_free_extra_devids()
1107 fs_devices->open_devices--; in __btrfs_free_extra_devids()
1112 fs_devices->rw_devices--; in __btrfs_free_extra_devids()
1115 fs_devices->num_devices--; in __btrfs_free_extra_devids()
1125 void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices, int step) in btrfs_free_extra_devids() argument
1131 __btrfs_free_extra_devids(fs_devices, step, &latest_dev); in btrfs_free_extra_devids()
1133 list_for_each_entry(seed_dev, &fs_devices->seed_list, seed_list) in btrfs_free_extra_devids()
1136 fs_devices->latest_bdev = latest_dev->bdev; in btrfs_free_extra_devids()
1156 struct btrfs_fs_devices *fs_devices = device->fs_devices; in btrfs_close_one_device() local
1161 fs_devices->rw_devices--; in btrfs_close_one_device()
1169 fs_devices->missing_devices--; in btrfs_close_one_device()
1174 fs_devices->open_devices--; in btrfs_close_one_device()
1204 static void close_fs_devices(struct btrfs_fs_devices *fs_devices) in close_fs_devices() argument
1210 if (--fs_devices->opened > 0) in close_fs_devices()
1213 list_for_each_entry_safe(device, tmp, &fs_devices->devices, dev_list) in close_fs_devices()
1216 WARN_ON(fs_devices->open_devices); in close_fs_devices()
1217 WARN_ON(fs_devices->rw_devices); in close_fs_devices()
1218 fs_devices->opened = 0; in close_fs_devices()
1219 fs_devices->seeding = false; in close_fs_devices()
1220 fs_devices->fs_info = NULL; in close_fs_devices()
1223 void btrfs_close_devices(struct btrfs_fs_devices *fs_devices) in btrfs_close_devices() argument
1229 close_fs_devices(fs_devices); in btrfs_close_devices()
1230 if (!fs_devices->opened) in btrfs_close_devices()
1231 list_splice_init(&fs_devices->seed_list, &list); in btrfs_close_devices()
1233 list_for_each_entry_safe(fs_devices, tmp, &list, seed_list) { in btrfs_close_devices()
1234 close_fs_devices(fs_devices); in btrfs_close_devices()
1235 list_del(&fs_devices->seed_list); in btrfs_close_devices()
1236 free_fs_devices(fs_devices); in btrfs_close_devices()
1241 static int open_fs_devices(struct btrfs_fs_devices *fs_devices, in open_fs_devices() argument
1250 list_for_each_entry_safe(device, tmp_device, &fs_devices->devices, in open_fs_devices()
1254 ret = btrfs_open_one_device(fs_devices, device, flags, holder); in open_fs_devices()
1259 fs_devices->num_devices--; in open_fs_devices()
1264 if (fs_devices->open_devices == 0) in open_fs_devices()
1267 fs_devices->opened = 1; in open_fs_devices()
1268 fs_devices->latest_bdev = latest_dev->bdev; in open_fs_devices()
1269 fs_devices->total_rw_bytes = 0; in open_fs_devices()
1270 fs_devices->chunk_alloc_policy = BTRFS_CHUNK_ALLOC_REGULAR; in open_fs_devices()
1289 int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, in btrfs_open_devices() argument
1303 if (fs_devices->opened) { in btrfs_open_devices()
1304 fs_devices->opened++; in btrfs_open_devices()
1307 list_sort(NULL, &fs_devices->devices, devid_cmp); in btrfs_open_devices()
1308 ret = open_fs_devices(fs_devices, flags, holder); in btrfs_open_devices()
1452 switch (device->fs_devices->chunk_alloc_policy) { in dev_extent_search_start()
1493 switch (device->fs_devices->chunk_alloc_policy) { in dev_extent_hole_check()
1891 write_extent_buffer(leaf, trans->fs_info->fs_devices->metadata_uuid, in btrfs_add_dev_item()
2027 next_device = btrfs_find_next_active_device(fs_info->fs_devices, in btrfs_assign_next_active_device()
2035 if (fs_info->fs_devices->latest_bdev == device->bdev) in btrfs_assign_next_active_device()
2036 fs_info->fs_devices->latest_bdev = next_device->bdev; in btrfs_assign_next_active_device()
2045 u64 num_devices = fs_info->fs_devices->num_devices; in btrfs_num_devices()
2102 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_rm_device() local
2142 fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
2150 device->fs_devices->rw_devices--; in btrfs_rm_device()
2187 cur_devices = device->fs_devices; in btrfs_rm_device()
2188 mutex_lock(&fs_devices->device_list_mutex); in btrfs_rm_device()
2194 if (cur_devices != fs_devices) in btrfs_rm_device()
2195 fs_devices->total_devices--; in btrfs_rm_device()
2210 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_rm_device()
2239 &fs_devices->alloc_list); in btrfs_rm_device()
2240 device->fs_devices->rw_devices++; in btrfs_rm_device()
2248 struct btrfs_fs_devices *fs_devices; in btrfs_rm_dev_replace_remove_srcdev() local
2250 lockdep_assert_held(&srcdev->fs_info->fs_devices->device_list_mutex); in btrfs_rm_dev_replace_remove_srcdev()
2258 fs_devices = srcdev->fs_devices; in btrfs_rm_dev_replace_remove_srcdev()
2262 fs_devices->num_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2264 fs_devices->missing_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2267 fs_devices->rw_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2270 fs_devices->open_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2275 struct btrfs_fs_devices *fs_devices = srcdev->fs_devices; in btrfs_rm_dev_replace_free_srcdev() local
2284 if (!fs_devices->num_devices) { in btrfs_rm_dev_replace_free_srcdev()
2291 ASSERT(fs_devices->seeding); in btrfs_rm_dev_replace_free_srcdev()
2293 list_del_init(&fs_devices->seed_list); in btrfs_rm_dev_replace_free_srcdev()
2294 close_fs_devices(fs_devices); in btrfs_rm_dev_replace_free_srcdev()
2295 free_fs_devices(fs_devices); in btrfs_rm_dev_replace_free_srcdev()
2302 struct btrfs_fs_devices *fs_devices = tgtdev->fs_info->fs_devices; in btrfs_destroy_dev_replace_tgtdev() local
2304 mutex_lock(&fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
2309 fs_devices->open_devices--; in btrfs_destroy_dev_replace_tgtdev()
2311 fs_devices->num_devices--; in btrfs_destroy_dev_replace_tgtdev()
2317 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
2352 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in btrfs_find_device_by_path()
2355 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in btrfs_find_device_by_path()
2375 device = btrfs_find_device(fs_info->fs_devices, devid, NULL, in btrfs_find_device_by_devspec()
2387 list_for_each_entry(device, &fs_info->fs_devices->devices, in btrfs_find_device_by_devspec()
2404 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_prepare_sprout() local
2412 if (!fs_devices->seeding) in btrfs_prepare_sprout()
2429 old_devices = clone_fs_devices(fs_devices); in btrfs_prepare_sprout()
2437 memcpy(seed_devices, fs_devices, sizeof(*seed_devices)); in btrfs_prepare_sprout()
2443 mutex_lock(&fs_devices->device_list_mutex); in btrfs_prepare_sprout()
2444 list_splice_init_rcu(&fs_devices->devices, &seed_devices->devices, in btrfs_prepare_sprout()
2447 device->fs_devices = seed_devices; in btrfs_prepare_sprout()
2449 fs_devices->seeding = false; in btrfs_prepare_sprout()
2450 fs_devices->num_devices = 0; in btrfs_prepare_sprout()
2451 fs_devices->open_devices = 0; in btrfs_prepare_sprout()
2452 fs_devices->missing_devices = 0; in btrfs_prepare_sprout()
2453 fs_devices->rotating = false; in btrfs_prepare_sprout()
2454 list_add(&seed_devices->seed_list, &fs_devices->seed_list); in btrfs_prepare_sprout()
2456 generate_random_uuid(fs_devices->fsid); in btrfs_prepare_sprout()
2457 memcpy(fs_devices->metadata_uuid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_prepare_sprout()
2458 memcpy(disk_super->fsid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_prepare_sprout()
2459 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_prepare_sprout()
2524 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in btrfs_finish_sprout()
2528 if (device->fs_devices->seeding) { in btrfs_finish_sprout()
2552 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_new_device() local
2559 if (sb_rdonly(sb) && !fs_devices->seeding) in btrfs_init_new_device()
2567 if (fs_devices->seeding) { in btrfs_init_new_device()
2577 list_for_each_entry_rcu(device, &fs_devices->devices, dev_list) { in btrfs_init_new_device()
2633 device->fs_devices = fs_devices; in btrfs_init_new_device()
2635 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_new_device()
2637 list_add_rcu(&device->dev_list, &fs_devices->devices); in btrfs_init_new_device()
2638 list_add(&device->dev_alloc_list, &fs_devices->alloc_list); in btrfs_init_new_device()
2639 fs_devices->num_devices++; in btrfs_init_new_device()
2640 fs_devices->open_devices++; in btrfs_init_new_device()
2641 fs_devices->rw_devices++; in btrfs_init_new_device()
2642 fs_devices->total_devices++; in btrfs_init_new_device()
2643 fs_devices->total_rw_bytes += device->total_bytes; in btrfs_init_new_device()
2648 fs_devices->rotating = true; in btrfs_init_new_device()
2670 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_new_device()
2699 btrfs_sysfs_update_sprout_fsid(fs_devices); in btrfs_init_new_device()
2743 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2747 fs_info->fs_devices->num_devices--; in btrfs_init_new_device()
2748 fs_info->fs_devices->open_devices--; in btrfs_init_new_device()
2749 fs_info->fs_devices->rw_devices--; in btrfs_init_new_device()
2750 fs_info->fs_devices->total_devices--; in btrfs_init_new_device()
2751 fs_info->fs_devices->total_rw_bytes -= device->total_bytes; in btrfs_init_new_device()
2758 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2846 device->fs_devices->total_rw_bytes += diff; in btrfs_grow_device()
2984 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_remove_chunk() local
3006 mutex_lock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
3013 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
3029 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
3034 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
4097 num_devices = fs_info->fs_devices->rw_devices; in btrfs_balance()
4668 device->fs_devices->total_rw_bytes -= diff; in btrfs_shrink_device()
4804 device->fs_devices->total_rw_bytes += diff; in btrfs_shrink_device()
4907 struct btrfs_fs_devices *fs_devices, in init_alloc_chunk_ctl_policy_regular() argument
4917 if (fs_devices->total_rw_bytes > 50ULL * SZ_1G) in init_alloc_chunk_ctl_policy_regular()
4932 ctl->max_chunk_size = min(div_factor(fs_devices->total_rw_bytes, 1), in init_alloc_chunk_ctl_policy_regular()
4937 static void init_alloc_chunk_ctl(struct btrfs_fs_devices *fs_devices, in init_alloc_chunk_ctl() argument
4946 ctl->devs_max = BTRFS_MAX_DEVS(fs_devices->fs_info); in init_alloc_chunk_ctl()
4953 switch (fs_devices->chunk_alloc_policy) { in init_alloc_chunk_ctl()
4955 init_alloc_chunk_ctl_policy_regular(fs_devices, ctl); in init_alloc_chunk_ctl()
4962 static int gather_device_info(struct btrfs_fs_devices *fs_devices, in gather_device_info() argument
4966 struct btrfs_fs_info *info = fs_devices->fs_info; in gather_device_info()
4979 list_for_each_entry(device, &fs_devices->alloc_list, dev_alloc_list) { in gather_device_info()
5017 if (ndevs == fs_devices->rw_devices) { in gather_device_info()
5019 __func__, fs_devices->rw_devices); in gather_device_info()
5083 static int decide_stripe_size(struct btrfs_fs_devices *fs_devices, in decide_stripe_size() argument
5087 struct btrfs_fs_info *info = fs_devices->fs_info; in decide_stripe_size()
5107 switch (fs_devices->chunk_alloc_policy) { in decide_stripe_size()
5212 struct btrfs_fs_devices *fs_devices = info->fs_devices; in btrfs_alloc_chunk() local
5224 if (list_empty(&fs_devices->alloc_list)) { in btrfs_alloc_chunk()
5238 init_alloc_chunk_ctl(fs_devices, &ctl); in btrfs_alloc_chunk()
5240 devices_info = kcalloc(fs_devices->rw_devices, sizeof(*devices_info), in btrfs_alloc_chunk()
5245 ret = gather_device_info(fs_devices, &ctl, devices_info); in btrfs_alloc_chunk()
5249 ret = decide_stripe_size(fs_devices, &ctl, devices_info); in btrfs_alloc_chunk()
5306 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
5320 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
5334 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
6510 struct btrfs_device *btrfs_find_device(struct btrfs_fs_devices *fs_devices, in btrfs_find_device() argument
6517 if (!fsid || !memcmp(fs_devices->metadata_uuid, fsid, BTRFS_FSID_SIZE)) { in btrfs_find_device()
6518 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_find_device()
6526 list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) { in btrfs_find_device()
6542 static struct btrfs_device *add_missing_dev(struct btrfs_fs_devices *fs_devices, in add_missing_dev() argument
6560 list_add(&device->dev_list, &fs_devices->devices); in add_missing_dev()
6561 device->fs_devices = fs_devices; in add_missing_dev()
6562 fs_devices->num_devices++; in add_missing_dev()
6565 fs_devices->missing_devices++; in add_missing_dev()
6718 map->stripes[i].dev = btrfs_find_device(fs_info->fs_devices, in read_one_chunk()
6728 add_missing_dev(fs_info->fs_devices, devid, in read_one_chunk()
6783 struct btrfs_fs_devices *fs_devices; in open_seed_devices() local
6790 list_for_each_entry(fs_devices, &fs_info->fs_devices->seed_list, seed_list) in open_seed_devices()
6791 if (!memcmp(fs_devices->fsid, fsid, BTRFS_FSID_SIZE)) in open_seed_devices()
6792 return fs_devices; in open_seed_devices()
6795 fs_devices = find_fsid(fsid, NULL); in open_seed_devices()
6796 if (!fs_devices) { in open_seed_devices()
6800 fs_devices = alloc_fs_devices(fsid, NULL); in open_seed_devices()
6801 if (IS_ERR(fs_devices)) in open_seed_devices()
6802 return fs_devices; in open_seed_devices()
6804 fs_devices->seeding = true; in open_seed_devices()
6805 fs_devices->opened = 1; in open_seed_devices()
6806 return fs_devices; in open_seed_devices()
6813 fs_devices = clone_fs_devices(fs_devices); in open_seed_devices()
6814 if (IS_ERR(fs_devices)) in open_seed_devices()
6815 return fs_devices; in open_seed_devices()
6817 ret = open_fs_devices(fs_devices, FMODE_READ, fs_info->bdev_holder); in open_seed_devices()
6819 free_fs_devices(fs_devices); in open_seed_devices()
6823 if (!fs_devices->seeding) { in open_seed_devices()
6824 close_fs_devices(fs_devices); in open_seed_devices()
6825 free_fs_devices(fs_devices); in open_seed_devices()
6829 list_add(&fs_devices->seed_list, &fs_info->fs_devices->seed_list); in open_seed_devices()
6831 return fs_devices; in open_seed_devices()
6838 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in read_one_dev() local
6851 if (memcmp(fs_uuid, fs_devices->metadata_uuid, BTRFS_FSID_SIZE)) { in read_one_dev()
6852 fs_devices = open_seed_devices(fs_info, fs_uuid); in read_one_dev()
6853 if (IS_ERR(fs_devices)) in read_one_dev()
6854 return PTR_ERR(fs_devices); in read_one_dev()
6857 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in read_one_dev()
6866 device = add_missing_dev(fs_devices, devid, dev_uuid); in read_one_dev()
6893 device->fs_devices->missing_devices++; in read_one_dev()
6898 if (device->fs_devices != fs_devices) { in read_one_dev()
6902 list_move(&device->dev_list, &fs_devices->devices); in read_one_dev()
6903 device->fs_devices->num_devices--; in read_one_dev()
6904 fs_devices->num_devices++; in read_one_dev()
6906 device->fs_devices->missing_devices--; in read_one_dev()
6907 fs_devices->missing_devices++; in read_one_dev()
6909 device->fs_devices = fs_devices; in read_one_dev()
6913 if (device->fs_devices != fs_info->fs_devices) { in read_one_dev()
6924 device->fs_devices->total_rw_bytes += device->total_bytes; in read_one_dev()
7159 fs_info->fs_devices->total_rw_bytes = 0; in btrfs_read_chunk_tree()
7222 if (total_dev != fs_info->fs_devices->total_devices) { in btrfs_read_chunk_tree()
7227 fs_info->fs_devices->total_devices = total_dev; in btrfs_read_chunk_tree()
7231 fs_info->fs_devices->total_rw_bytes) { in btrfs_read_chunk_tree()
7235 fs_info->fs_devices->total_rw_bytes); in btrfs_read_chunk_tree()
7249 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_devices_late() local
7252 fs_devices->fs_info = fs_info; in btrfs_init_devices_late()
7254 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_devices_late()
7255 list_for_each_entry(device, &fs_devices->devices, dev_list) in btrfs_init_devices_late()
7258 list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) { in btrfs_init_devices_late()
7264 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_devices_late()
7333 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_dev_stats() local
7342 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_dev_stats()
7343 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_init_dev_stats()
7348 list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) { in btrfs_init_dev_stats()
7356 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_dev_stats()
7433 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_run_dev_stats() local
7438 mutex_lock(&fs_devices->device_list_mutex); in btrfs_run_dev_stats()
7439 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_run_dev_stats()
7462 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_run_dev_stats()
7511 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_get_dev_stats() local
7514 mutex_lock(&fs_devices->device_list_mutex); in btrfs_get_dev_stats()
7515 dev = btrfs_find_device(fs_info->fs_devices, stats->devid, NULL, NULL, in btrfs_get_dev_stats()
7517 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_get_dev_stats()
7647 dev = btrfs_find_device(fs_info->fs_devices, devid, NULL, NULL, true); in verify_one_dev_extent()
7658 devs = list_first_entry(&fs_info->fs_devices->seed_list, in verify_one_dev_extent()