Lines Matching refs:fs_devices

348 static void free_fs_devices(struct btrfs_fs_devices *fs_devices)  in free_fs_devices()  argument
351 WARN_ON(fs_devices->opened); in free_fs_devices()
352 while (!list_empty(&fs_devices->devices)) { in free_fs_devices()
353 device = list_entry(fs_devices->devices.next, in free_fs_devices()
358 kfree(fs_devices); in free_fs_devices()
363 struct btrfs_fs_devices *fs_devices; in btrfs_cleanup_fs_uuids() local
366 fs_devices = list_entry(fs_uuids.next, in btrfs_cleanup_fs_uuids()
368 list_del(&fs_devices->fs_list); in btrfs_cleanup_fs_uuids()
369 free_fs_devices(fs_devices); in btrfs_cleanup_fs_uuids()
415 struct btrfs_fs_devices *fs_devices; in find_fsid() local
426 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid()
427 if (fs_devices->fsid_change && in find_fsid()
428 memcmp(metadata_fsid, fs_devices->fsid, in find_fsid()
430 memcmp(fs_devices->fsid, fs_devices->metadata_uuid, in find_fsid()
432 return fs_devices; in find_fsid()
441 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid()
442 if (fs_devices->fsid_change && in find_fsid()
443 memcmp(fs_devices->metadata_uuid, in find_fsid()
444 fs_devices->fsid, BTRFS_FSID_SIZE) != 0 && in find_fsid()
445 memcmp(metadata_fsid, fs_devices->metadata_uuid, in find_fsid()
447 return fs_devices; in find_fsid()
453 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid()
455 if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0 in find_fsid()
456 && memcmp(metadata_fsid, fs_devices->metadata_uuid, in find_fsid()
458 return fs_devices; in find_fsid()
460 if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0) in find_fsid()
461 return fs_devices; in find_fsid()
650 fs_info->fs_devices->open_devices > 1) { in run_scheduled_bios()
735 struct btrfs_fs_devices *fs_devices, *tmp_fs_devices; in btrfs_free_stale_devices() local
742 list_for_each_entry_safe(fs_devices, tmp_fs_devices, &fs_uuids, fs_list) { in btrfs_free_stale_devices()
744 mutex_lock(&fs_devices->device_list_mutex); in btrfs_free_stale_devices()
746 &fs_devices->devices, dev_list) { in btrfs_free_stale_devices()
753 if (fs_devices->opened) { in btrfs_free_stale_devices()
761 fs_devices->num_devices--; in btrfs_free_stale_devices()
766 if (fs_devices->num_devices == 0) in btrfs_free_stale_devices()
769 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_free_stale_devices()
771 if (fs_devices->num_devices == 0) { in btrfs_free_stale_devices()
772 btrfs_sysfs_remove_fsid(fs_devices); in btrfs_free_stale_devices()
773 list_del(&fs_devices->fs_list); in btrfs_free_stale_devices()
774 free_fs_devices(fs_devices); in btrfs_free_stale_devices()
781 static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices, in btrfs_open_one_device() argument
821 fs_devices->seeding = 1; in btrfs_open_one_device()
831 fs_devices->rotating = 1; in btrfs_open_one_device()
837 fs_devices->open_devices++; in btrfs_open_one_device()
840 fs_devices->rw_devices++; in btrfs_open_one_device()
841 list_add_tail(&device->dev_alloc_list, &fs_devices->alloc_list); in btrfs_open_one_device()
861 struct btrfs_fs_devices *fs_devices; in find_fsid_inprogress() local
863 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_inprogress()
864 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid, in find_fsid_inprogress()
866 memcmp(fs_devices->metadata_uuid, disk_super->fsid, in find_fsid_inprogress()
867 BTRFS_FSID_SIZE) == 0 && !fs_devices->fsid_change) { in find_fsid_inprogress()
868 return fs_devices; in find_fsid_inprogress()
879 struct btrfs_fs_devices *fs_devices; in find_fsid_changed() local
886 list_for_each_entry(fs_devices, &fs_uuids, fs_list) { in find_fsid_changed()
887 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid, in find_fsid_changed()
889 memcmp(fs_devices->metadata_uuid, disk_super->metadata_uuid, in find_fsid_changed()
891 memcmp(fs_devices->fsid, disk_super->fsid, in find_fsid_changed()
893 return fs_devices; in find_fsid_changed()
911 struct btrfs_fs_devices *fs_devices = NULL; in device_list_add() local
928 fs_devices = find_fsid_inprogress(disk_super); in device_list_add()
929 if (!fs_devices) in device_list_add()
930 fs_devices = find_fsid(disk_super->fsid, NULL); in device_list_add()
932 fs_devices = find_fsid_changed(disk_super); in device_list_add()
935 fs_devices = find_fsid(disk_super->fsid, in device_list_add()
938 fs_devices = find_fsid(disk_super->fsid, NULL); in device_list_add()
942 if (!fs_devices) { in device_list_add()
944 fs_devices = alloc_fs_devices(disk_super->fsid, in device_list_add()
947 fs_devices = alloc_fs_devices(disk_super->fsid, NULL); in device_list_add()
949 if (IS_ERR(fs_devices)) in device_list_add()
950 return ERR_CAST(fs_devices); in device_list_add()
952 fs_devices->fsid_change = fsid_change_in_progress; in device_list_add()
954 mutex_lock(&fs_devices->device_list_mutex); in device_list_add()
955 list_add(&fs_devices->fs_list, &fs_uuids); in device_list_add()
959 mutex_lock(&fs_devices->device_list_mutex); in device_list_add()
960 device = btrfs_find_device(fs_devices, devid, in device_list_add()
968 if (has_metadata_uuid && fs_devices->fsid_change && in device_list_add()
969 found_transid > fs_devices->latest_generation) { in device_list_add()
970 memcpy(fs_devices->fsid, disk_super->fsid, in device_list_add()
972 memcpy(fs_devices->metadata_uuid, in device_list_add()
975 fs_devices->fsid_change = false; in device_list_add()
980 if (fs_devices->opened) { in device_list_add()
981 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
988 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
996 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
1001 list_add_rcu(&device->dev_list, &fs_devices->devices); in device_list_add()
1002 fs_devices->num_devices++; in device_list_add()
1004 device->fs_devices = fs_devices; in device_list_add()
1041 if (!fs_devices->opened && found_transid < device->generation) { in device_list_add()
1049 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
1062 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
1068 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
1084 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
1090 fs_devices->missing_devices--; in device_list_add()
1101 if (!fs_devices->opened) { in device_list_add()
1103 fs_devices->latest_generation = max_t(u64, found_transid, in device_list_add()
1104 fs_devices->latest_generation); in device_list_add()
1107 fs_devices->total_devices = btrfs_super_num_devices(disk_super); in device_list_add()
1109 mutex_unlock(&fs_devices->device_list_mutex); in device_list_add()
1115 struct btrfs_fs_devices *fs_devices; in clone_fs_devices() local
1120 fs_devices = alloc_fs_devices(orig->fsid, NULL); in clone_fs_devices()
1121 if (IS_ERR(fs_devices)) in clone_fs_devices()
1122 return fs_devices; in clone_fs_devices()
1125 fs_devices->total_devices = orig->total_devices; in clone_fs_devices()
1152 list_add(&device->dev_list, &fs_devices->devices); in clone_fs_devices()
1153 device->fs_devices = fs_devices; in clone_fs_devices()
1154 fs_devices->num_devices++; in clone_fs_devices()
1157 return fs_devices; in clone_fs_devices()
1160 free_fs_devices(fs_devices); in clone_fs_devices()
1168 void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices, int step) in btrfs_free_extra_devids() argument
1176 list_for_each_entry_safe(device, next, &fs_devices->devices, dev_list) { in btrfs_free_extra_devids()
1207 fs_devices->open_devices--; in btrfs_free_extra_devids()
1214 fs_devices->rw_devices--; in btrfs_free_extra_devids()
1217 fs_devices->num_devices--; in btrfs_free_extra_devids()
1221 if (fs_devices->seed) { in btrfs_free_extra_devids()
1222 fs_devices = fs_devices->seed; in btrfs_free_extra_devids()
1226 fs_devices->latest_bdev = latest_dev->bdev; in btrfs_free_extra_devids()
1246 struct btrfs_fs_devices *fs_devices = device->fs_devices; in btrfs_close_one_device() local
1251 fs_devices->open_devices--; in btrfs_close_one_device()
1256 fs_devices->rw_devices--; in btrfs_close_one_device()
1260 fs_devices->missing_devices--; in btrfs_close_one_device()
1276 new_device->fs_devices = device->fs_devices; in btrfs_close_one_device()
1282 static int close_fs_devices(struct btrfs_fs_devices *fs_devices) in close_fs_devices() argument
1286 if (--fs_devices->opened > 0) in close_fs_devices()
1289 mutex_lock(&fs_devices->device_list_mutex); in close_fs_devices()
1290 list_for_each_entry_safe(device, tmp, &fs_devices->devices, dev_list) { in close_fs_devices()
1293 mutex_unlock(&fs_devices->device_list_mutex); in close_fs_devices()
1295 WARN_ON(fs_devices->open_devices); in close_fs_devices()
1296 WARN_ON(fs_devices->rw_devices); in close_fs_devices()
1297 fs_devices->opened = 0; in close_fs_devices()
1298 fs_devices->seeding = 0; in close_fs_devices()
1303 int btrfs_close_devices(struct btrfs_fs_devices *fs_devices) in btrfs_close_devices() argument
1309 ret = close_fs_devices(fs_devices); in btrfs_close_devices()
1310 if (!fs_devices->opened) { in btrfs_close_devices()
1311 seed_devices = fs_devices->seed; in btrfs_close_devices()
1312 fs_devices->seed = NULL; in btrfs_close_devices()
1317 fs_devices = seed_devices; in btrfs_close_devices()
1318 seed_devices = fs_devices->seed; in btrfs_close_devices()
1319 close_fs_devices(fs_devices); in btrfs_close_devices()
1320 free_fs_devices(fs_devices); in btrfs_close_devices()
1325 static int open_fs_devices(struct btrfs_fs_devices *fs_devices, in open_fs_devices() argument
1334 list_for_each_entry(device, &fs_devices->devices, dev_list) { in open_fs_devices()
1336 if (btrfs_open_one_device(fs_devices, device, flags, holder)) in open_fs_devices()
1343 if (fs_devices->open_devices == 0) { in open_fs_devices()
1347 fs_devices->opened = 1; in open_fs_devices()
1348 fs_devices->latest_bdev = latest_dev->bdev; in open_fs_devices()
1349 fs_devices->total_rw_bytes = 0; in open_fs_devices()
1368 int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, in btrfs_open_devices() argument
1375 mutex_lock(&fs_devices->device_list_mutex); in btrfs_open_devices()
1376 if (fs_devices->opened) { in btrfs_open_devices()
1377 fs_devices->opened++; in btrfs_open_devices()
1380 list_sort(NULL, &fs_devices->devices, devid_cmp); in btrfs_open_devices()
1381 ret = open_fs_devices(fs_devices, flags, holder); in btrfs_open_devices()
1383 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_open_devices()
1927 write_extent_buffer(leaf, trans->fs_info->fs_devices->metadata_uuid, in btrfs_add_dev_item()
2060 next_device = btrfs_find_next_active_device(fs_info->fs_devices, in btrfs_assign_next_active_device()
2068 if (fs_info->fs_devices->latest_bdev == device->bdev) in btrfs_assign_next_active_device()
2069 fs_info->fs_devices->latest_bdev = next_device->bdev; in btrfs_assign_next_active_device()
2078 u64 num_devices = fs_info->fs_devices->num_devices; in btrfs_num_devices()
2095 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_rm_device() local
2132 fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
2140 device->fs_devices->rw_devices--; in btrfs_rm_device()
2177 cur_devices = device->fs_devices; in btrfs_rm_device()
2178 mutex_lock(&fs_devices->device_list_mutex); in btrfs_rm_device()
2184 if (cur_devices != fs_devices) in btrfs_rm_device()
2185 fs_devices->total_devices--; in btrfs_rm_device()
2195 btrfs_sysfs_rm_device_link(fs_devices, device); in btrfs_rm_device()
2200 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_rm_device()
2215 while (fs_devices) { in btrfs_rm_device()
2216 if (fs_devices->seed == cur_devices) { in btrfs_rm_device()
2217 fs_devices->seed = cur_devices->seed; in btrfs_rm_device()
2220 fs_devices = fs_devices->seed; in btrfs_rm_device()
2235 &fs_devices->alloc_list); in btrfs_rm_device()
2236 device->fs_devices->rw_devices++; in btrfs_rm_device()
2244 struct btrfs_fs_devices *fs_devices; in btrfs_rm_dev_replace_remove_srcdev() local
2246 lockdep_assert_held(&srcdev->fs_info->fs_devices->device_list_mutex); in btrfs_rm_dev_replace_remove_srcdev()
2254 fs_devices = srcdev->fs_devices; in btrfs_rm_dev_replace_remove_srcdev()
2258 fs_devices->num_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2260 fs_devices->missing_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2263 fs_devices->rw_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2266 fs_devices->open_devices--; in btrfs_rm_dev_replace_remove_srcdev()
2272 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()
2293 ASSERT(fs_devices->seeding); in btrfs_rm_dev_replace_free_srcdev()
2295 tmp_fs_devices = fs_info->fs_devices; in btrfs_rm_dev_replace_free_srcdev()
2297 if (tmp_fs_devices->seed == fs_devices) { in btrfs_rm_dev_replace_free_srcdev()
2298 tmp_fs_devices->seed = fs_devices->seed; in btrfs_rm_dev_replace_free_srcdev()
2303 fs_devices->seed = NULL; in btrfs_rm_dev_replace_free_srcdev()
2304 close_fs_devices(fs_devices); in btrfs_rm_dev_replace_free_srcdev()
2305 free_fs_devices(fs_devices); in btrfs_rm_dev_replace_free_srcdev()
2311 struct btrfs_fs_devices *fs_devices = tgtdev->fs_info->fs_devices; in btrfs_destroy_dev_replace_tgtdev() local
2314 mutex_lock(&fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
2316 btrfs_sysfs_rm_device_link(fs_devices, tgtdev); in btrfs_destroy_dev_replace_tgtdev()
2319 fs_devices->open_devices--; in btrfs_destroy_dev_replace_tgtdev()
2321 fs_devices->num_devices--; in btrfs_destroy_dev_replace_tgtdev()
2327 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
2362 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in btrfs_find_device_by_path()
2365 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in btrfs_find_device_by_path()
2385 device = btrfs_find_device(fs_info->fs_devices, devid, NULL, in btrfs_find_device_by_devspec()
2397 list_for_each_entry(device, &fs_info->fs_devices->devices, in btrfs_find_device_by_devspec()
2414 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_prepare_sprout() local
2422 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()
2450 list_splice_init(&fs_devices->alloc_list, &seed_devices->alloc_list); in btrfs_prepare_sprout()
2453 fs_devices->seeding = 0; in btrfs_prepare_sprout()
2454 fs_devices->num_devices = 0; in btrfs_prepare_sprout()
2455 fs_devices->open_devices = 0; in btrfs_prepare_sprout()
2456 fs_devices->missing_devices = 0; in btrfs_prepare_sprout()
2457 fs_devices->rotating = 0; in btrfs_prepare_sprout()
2458 fs_devices->seed = seed_devices; in btrfs_prepare_sprout()
2460 generate_random_uuid(fs_devices->fsid); in btrfs_prepare_sprout()
2461 memcpy(fs_devices->metadata_uuid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_prepare_sprout()
2462 memcpy(disk_super->fsid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_prepare_sprout()
2463 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_prepare_sprout()
2528 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in btrfs_finish_sprout()
2532 if (device->fs_devices->seeding) { in btrfs_finish_sprout()
2556 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_new_device() local
2563 if (sb_rdonly(sb) && !fs_devices->seeding) in btrfs_init_new_device()
2571 if (fs_devices->seeding) { in btrfs_init_new_device()
2579 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_new_device()
2580 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_init_new_device()
2584 &fs_devices->device_list_mutex); in btrfs_init_new_device()
2588 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_new_device()
2637 device->fs_devices = fs_devices; in btrfs_init_new_device()
2639 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_new_device()
2641 list_add_rcu(&device->dev_list, &fs_devices->devices); in btrfs_init_new_device()
2642 list_add(&device->dev_alloc_list, &fs_devices->alloc_list); in btrfs_init_new_device()
2643 fs_devices->num_devices++; in btrfs_init_new_device()
2644 fs_devices->open_devices++; in btrfs_init_new_device()
2645 fs_devices->rw_devices++; in btrfs_init_new_device()
2646 fs_devices->total_devices++; in btrfs_init_new_device()
2647 fs_devices->total_rw_bytes += device->total_bytes; in btrfs_init_new_device()
2652 fs_devices->rotating = 1; in btrfs_init_new_device()
2664 btrfs_sysfs_add_device_link(fs_devices, device); in btrfs_init_new_device()
2673 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_new_device()
2698 btrfs_sysfs_update_sprout_fsid(fs_devices, in btrfs_init_new_device()
2699 fs_info->fs_devices->fsid); in btrfs_init_new_device()
2732 btrfs_sysfs_rm_device_link(fs_devices, device); in btrfs_init_new_device()
2733 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2737 fs_info->fs_devices->num_devices--; in btrfs_init_new_device()
2738 fs_info->fs_devices->open_devices--; in btrfs_init_new_device()
2739 fs_info->fs_devices->rw_devices--; in btrfs_init_new_device()
2740 fs_info->fs_devices->total_devices--; in btrfs_init_new_device()
2741 fs_info->fs_devices->total_rw_bytes -= device->total_bytes; in btrfs_init_new_device()
2748 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2836 device->fs_devices->total_rw_bytes += diff; in btrfs_grow_device()
2974 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_remove_chunk() local
2996 mutex_lock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
3003 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
3019 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
3024 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_remove_chunk()
4710 device->fs_devices->total_rw_bytes -= diff; in btrfs_shrink_device()
4842 device->fs_devices->total_rw_bytes += diff; in btrfs_shrink_device()
4909 struct btrfs_fs_devices *fs_devices = info->fs_devices; in __btrfs_alloc_chunk() local
4939 if (list_empty(&fs_devices->alloc_list)) { in __btrfs_alloc_chunk()
4962 if (fs_devices->total_rw_bytes > 50ULL * SZ_1G) in __btrfs_alloc_chunk()
4978 max_chunk_size = min(div_factor(fs_devices->total_rw_bytes, 1), in __btrfs_alloc_chunk()
4981 devices_info = kcalloc(fs_devices->rw_devices, sizeof(*devices_info), in __btrfs_alloc_chunk()
4991 list_for_each_entry(device, &fs_devices->alloc_list, dev_alloc_list) { in __btrfs_alloc_chunk()
5033 if (ndevs == fs_devices->rw_devices) { in __btrfs_alloc_chunk()
5035 __func__, fs_devices->rw_devices); in __btrfs_alloc_chunk()
5225 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
5239 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
5253 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
6590 struct btrfs_device *btrfs_find_device(struct btrfs_fs_devices *fs_devices, in btrfs_find_device() argument
6596 while (fs_devices) { in btrfs_find_device()
6598 !memcmp(fs_devices->metadata_uuid, fsid, BTRFS_FSID_SIZE)) { in btrfs_find_device()
6599 list_for_each_entry(device, &fs_devices->devices, in btrfs_find_device()
6608 fs_devices = fs_devices->seed; in btrfs_find_device()
6615 static struct btrfs_device *add_missing_dev(struct btrfs_fs_devices *fs_devices, in add_missing_dev() argument
6624 list_add(&device->dev_list, &fs_devices->devices); in add_missing_dev()
6625 device->fs_devices = fs_devices; in add_missing_dev()
6626 fs_devices->num_devices++; in add_missing_dev()
6629 fs_devices->missing_devices++; in add_missing_dev()
6790 map->stripes[i].dev = btrfs_find_device(fs_info->fs_devices, in read_one_chunk()
6800 add_missing_dev(fs_info->fs_devices, devid, in read_one_chunk()
6855 struct btrfs_fs_devices *fs_devices; in open_seed_devices() local
6861 fs_devices = fs_info->fs_devices->seed; in open_seed_devices()
6862 while (fs_devices) { in open_seed_devices()
6863 if (!memcmp(fs_devices->fsid, fsid, BTRFS_FSID_SIZE)) in open_seed_devices()
6864 return fs_devices; in open_seed_devices()
6866 fs_devices = fs_devices->seed; in open_seed_devices()
6869 fs_devices = find_fsid(fsid, NULL); in open_seed_devices()
6870 if (!fs_devices) { in open_seed_devices()
6874 fs_devices = alloc_fs_devices(fsid, NULL); in open_seed_devices()
6875 if (IS_ERR(fs_devices)) in open_seed_devices()
6876 return fs_devices; in open_seed_devices()
6878 fs_devices->seeding = 1; in open_seed_devices()
6879 fs_devices->opened = 1; in open_seed_devices()
6880 return fs_devices; in open_seed_devices()
6883 fs_devices = clone_fs_devices(fs_devices); in open_seed_devices()
6884 if (IS_ERR(fs_devices)) in open_seed_devices()
6885 return fs_devices; in open_seed_devices()
6887 ret = open_fs_devices(fs_devices, FMODE_READ, fs_info->bdev_holder); in open_seed_devices()
6889 free_fs_devices(fs_devices); in open_seed_devices()
6890 fs_devices = ERR_PTR(ret); in open_seed_devices()
6894 if (!fs_devices->seeding) { in open_seed_devices()
6895 close_fs_devices(fs_devices); in open_seed_devices()
6896 free_fs_devices(fs_devices); in open_seed_devices()
6897 fs_devices = ERR_PTR(-EINVAL); in open_seed_devices()
6901 fs_devices->seed = fs_info->fs_devices->seed; in open_seed_devices()
6902 fs_info->fs_devices->seed = fs_devices; in open_seed_devices()
6904 return fs_devices; in open_seed_devices()
6911 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in read_one_dev() local
6924 if (memcmp(fs_uuid, fs_devices->metadata_uuid, BTRFS_FSID_SIZE)) { in read_one_dev()
6925 fs_devices = open_seed_devices(fs_info, fs_uuid); in read_one_dev()
6926 if (IS_ERR(fs_devices)) in read_one_dev()
6927 return PTR_ERR(fs_devices); in read_one_dev()
6930 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in read_one_dev()
6939 device = add_missing_dev(fs_devices, devid, dev_uuid); in read_one_dev()
6966 device->fs_devices->missing_devices++; in read_one_dev()
6971 if (device->fs_devices != fs_devices) { in read_one_dev()
6975 list_move(&device->dev_list, &fs_devices->devices); in read_one_dev()
6976 device->fs_devices->num_devices--; in read_one_dev()
6977 fs_devices->num_devices++; in read_one_dev()
6979 device->fs_devices->missing_devices--; in read_one_dev()
6980 fs_devices->missing_devices++; in read_one_dev()
6982 device->fs_devices = fs_devices; in read_one_dev()
6986 if (device->fs_devices != fs_info->fs_devices) { in read_one_dev()
6997 device->fs_devices->total_rw_bytes += device->total_bytes; in read_one_dev()
7258 if (total_dev != fs_info->fs_devices->total_devices) { in btrfs_read_chunk_tree()
7267 fs_info->fs_devices->total_rw_bytes) { in btrfs_read_chunk_tree()
7271 fs_info->fs_devices->total_rw_bytes); in btrfs_read_chunk_tree()
7286 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_devices_late() local
7289 while (fs_devices) { in btrfs_init_devices_late()
7290 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_devices_late()
7291 list_for_each_entry(device, &fs_devices->devices, dev_list) in btrfs_init_devices_late()
7293 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_devices_late()
7295 fs_devices = fs_devices->seed; in btrfs_init_devices_late()
7326 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_dev_stats() local
7338 mutex_lock(&fs_devices->device_list_mutex); in btrfs_init_dev_stats()
7339 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_init_dev_stats()
7373 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_init_dev_stats()
7450 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_run_dev_stats() local
7455 mutex_lock(&fs_devices->device_list_mutex); in btrfs_run_dev_stats()
7456 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_run_dev_stats()
7479 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_run_dev_stats()
7528 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_get_dev_stats() local
7531 mutex_lock(&fs_devices->device_list_mutex); in btrfs_get_dev_stats()
7532 dev = btrfs_find_device(fs_info->fs_devices, stats->devid, NULL, NULL, in btrfs_get_dev_stats()
7534 mutex_unlock(&fs_devices->device_list_mutex); in btrfs_get_dev_stats()
7623 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_set_fs_info_ptr() local
7624 while (fs_devices) { in btrfs_set_fs_info_ptr()
7625 fs_devices->fs_info = fs_info; in btrfs_set_fs_info_ptr()
7626 fs_devices = fs_devices->seed; in btrfs_set_fs_info_ptr()
7632 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_reset_fs_info_ptr() local
7633 while (fs_devices) { in btrfs_reset_fs_info_ptr()
7634 fs_devices->fs_info = NULL; in btrfs_reset_fs_info_ptr()
7635 fs_devices = fs_devices->seed; in btrfs_reset_fs_info_ptr()
7710 dev = btrfs_find_device(fs_info->fs_devices, devid, NULL, NULL, true); in verify_one_dev_extent()
7719 dev = btrfs_find_device(fs_info->fs_devices->seed, devid, NULL, in verify_one_dev_extent()