• Home
  • Raw
  • Download

Lines Matching refs:fs_devices

75 static void free_fs_devices(struct btrfs_fs_devices *fs_devices)  in free_fs_devices()  argument
78 WARN_ON(fs_devices->opened); in free_fs_devices()
79 while (!list_empty(&fs_devices->devices)) { in free_fs_devices()
80 device = list_entry(fs_devices->devices.next, in free_fs_devices()
86 kfree(fs_devices); in free_fs_devices()
91 struct btrfs_fs_devices *fs_devices; in btrfs_cleanup_fs_uuids() local
94 fs_devices = list_entry(fs_uuids.next, in btrfs_cleanup_fs_uuids()
96 list_del(&fs_devices->list); in btrfs_cleanup_fs_uuids()
97 free_fs_devices(fs_devices); in btrfs_cleanup_fs_uuids()
118 struct btrfs_fs_devices *fs_devices; in find_fsid() local
120 list_for_each_entry(fs_devices, &fs_uuids, list) { in find_fsid()
121 if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0) in find_fsid()
122 return fs_devices; in find_fsid()
208 fs_info->fs_devices->open_devices > 1) { in run_scheduled_bios()
251 struct btrfs_fs_devices *fs_devices; in device_list_add() local
254 fs_devices = find_fsid(disk_super->fsid); in device_list_add()
255 if (!fs_devices) { in device_list_add()
256 fs_devices = kzalloc(sizeof(*fs_devices), GFP_NOFS); in device_list_add()
257 if (!fs_devices) in device_list_add()
259 INIT_LIST_HEAD(&fs_devices->devices); in device_list_add()
260 INIT_LIST_HEAD(&fs_devices->alloc_list); in device_list_add()
261 list_add(&fs_devices->list, &fs_uuids); in device_list_add()
262 memcpy(fs_devices->fsid, disk_super->fsid, BTRFS_FSID_SIZE); in device_list_add()
263 fs_devices->latest_devid = devid; in device_list_add()
264 fs_devices->latest_trans = found_transid; in device_list_add()
267 device = __find_device(&fs_devices->devices, devid, in device_list_add()
271 if (fs_devices->opened) in device_list_add()
291 list_add(&device->dev_list, &fs_devices->devices); in device_list_add()
292 device->fs_devices = fs_devices; in device_list_add()
293 fs_devices->num_devices++; in device_list_add()
296 if (found_transid > fs_devices->latest_trans) { in device_list_add()
297 fs_devices->latest_devid = devid; in device_list_add()
298 fs_devices->latest_trans = found_transid; in device_list_add()
300 *fs_devices_ret = fs_devices; in device_list_add()
306 struct btrfs_fs_devices *fs_devices; in clone_fs_devices() local
310 fs_devices = kzalloc(sizeof(*fs_devices), GFP_NOFS); in clone_fs_devices()
311 if (!fs_devices) in clone_fs_devices()
314 INIT_LIST_HEAD(&fs_devices->devices); in clone_fs_devices()
315 INIT_LIST_HEAD(&fs_devices->alloc_list); in clone_fs_devices()
316 INIT_LIST_HEAD(&fs_devices->list); in clone_fs_devices()
317 fs_devices->latest_devid = orig->latest_devid; in clone_fs_devices()
318 fs_devices->latest_trans = orig->latest_trans; in clone_fs_devices()
319 memcpy(fs_devices->fsid, orig->fsid, sizeof(fs_devices->fsid)); in clone_fs_devices()
338 list_add(&device->dev_list, &fs_devices->devices); in clone_fs_devices()
339 device->fs_devices = fs_devices; in clone_fs_devices()
340 fs_devices->num_devices++; in clone_fs_devices()
342 return fs_devices; in clone_fs_devices()
344 free_fs_devices(fs_devices); in clone_fs_devices()
348 int btrfs_close_extra_devices(struct btrfs_fs_devices *fs_devices) in btrfs_close_extra_devices() argument
354 list_for_each_entry_safe(device, next, &fs_devices->devices, dev_list) { in btrfs_close_extra_devices()
361 fs_devices->open_devices--; in btrfs_close_extra_devices()
366 fs_devices->rw_devices--; in btrfs_close_extra_devices()
369 fs_devices->num_devices--; in btrfs_close_extra_devices()
374 if (fs_devices->seed) { in btrfs_close_extra_devices()
375 fs_devices = fs_devices->seed; in btrfs_close_extra_devices()
383 static int __btrfs_close_devices(struct btrfs_fs_devices *fs_devices) in __btrfs_close_devices() argument
387 if (--fs_devices->opened > 0) in __btrfs_close_devices()
390 list_for_each_entry(device, &fs_devices->devices, dev_list) { in __btrfs_close_devices()
393 fs_devices->open_devices--; in __btrfs_close_devices()
397 fs_devices->rw_devices--; in __btrfs_close_devices()
404 WARN_ON(fs_devices->open_devices); in __btrfs_close_devices()
405 WARN_ON(fs_devices->rw_devices); in __btrfs_close_devices()
406 fs_devices->opened = 0; in __btrfs_close_devices()
407 fs_devices->seeding = 0; in __btrfs_close_devices()
412 int btrfs_close_devices(struct btrfs_fs_devices *fs_devices) in btrfs_close_devices() argument
418 ret = __btrfs_close_devices(fs_devices); in btrfs_close_devices()
419 if (!fs_devices->opened) { in btrfs_close_devices()
420 seed_devices = fs_devices->seed; in btrfs_close_devices()
421 fs_devices->seed = NULL; in btrfs_close_devices()
426 fs_devices = seed_devices; in btrfs_close_devices()
427 seed_devices = fs_devices->seed; in btrfs_close_devices()
428 __btrfs_close_devices(fs_devices); in btrfs_close_devices()
429 free_fs_devices(fs_devices); in btrfs_close_devices()
434 static int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices, in __btrfs_open_devices() argument
438 struct list_head *head = &fs_devices->devices; in __btrfs_open_devices()
493 fs_devices->open_devices++; in __btrfs_open_devices()
495 fs_devices->rw_devices++; in __btrfs_open_devices()
497 &fs_devices->alloc_list); in __btrfs_open_devices()
508 if (fs_devices->open_devices == 0) { in __btrfs_open_devices()
512 fs_devices->seeding = seeding; in __btrfs_open_devices()
513 fs_devices->opened = 1; in __btrfs_open_devices()
514 fs_devices->latest_bdev = latest_bdev; in __btrfs_open_devices()
515 fs_devices->latest_devid = latest_devid; in __btrfs_open_devices()
516 fs_devices->latest_trans = latest_transid; in __btrfs_open_devices()
517 fs_devices->total_rw_bytes = 0; in __btrfs_open_devices()
522 int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, in btrfs_open_devices() argument
528 if (fs_devices->opened) { in btrfs_open_devices()
529 fs_devices->opened++; in btrfs_open_devices()
532 ret = __btrfs_open_devices(fs_devices, flags, holder); in btrfs_open_devices()
999 root->fs_info->fs_devices->rw_devices <= 4) { in btrfs_rm_device()
1007 root->fs_info->fs_devices->rw_devices <= 2) { in btrfs_rm_device()
1019 devices = &root->fs_info->fs_devices->devices; in btrfs_rm_device()
1059 if (device->writeable && root->fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
1068 root->fs_info->fs_devices->rw_devices--; in btrfs_rm_device()
1081 device->fs_devices->num_devices--; in btrfs_rm_device()
1083 next_device = list_entry(root->fs_info->fs_devices->devices.next, in btrfs_rm_device()
1087 if (device->bdev == root->fs_info->fs_devices->latest_bdev) in btrfs_rm_device()
1088 root->fs_info->fs_devices->latest_bdev = next_device->bdev; in btrfs_rm_device()
1093 device->fs_devices->open_devices--; in btrfs_rm_device()
1099 if (device->fs_devices->open_devices == 0) { in btrfs_rm_device()
1100 struct btrfs_fs_devices *fs_devices; in btrfs_rm_device() local
1101 fs_devices = root->fs_info->fs_devices; in btrfs_rm_device()
1102 while (fs_devices) { in btrfs_rm_device()
1103 if (fs_devices->seed == device->fs_devices) in btrfs_rm_device()
1105 fs_devices = fs_devices->seed; in btrfs_rm_device()
1107 fs_devices->seed = device->fs_devices->seed; in btrfs_rm_device()
1108 device->fs_devices->seed = NULL; in btrfs_rm_device()
1109 __btrfs_close_devices(device->fs_devices); in btrfs_rm_device()
1110 free_fs_devices(device->fs_devices); in btrfs_rm_device()
1147 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in btrfs_prepare_sprout() local
1155 if (!fs_devices->seeding) in btrfs_prepare_sprout()
1158 seed_devices = kzalloc(sizeof(*fs_devices), GFP_NOFS); in btrfs_prepare_sprout()
1162 old_devices = clone_fs_devices(fs_devices); in btrfs_prepare_sprout()
1170 memcpy(seed_devices, fs_devices, sizeof(*seed_devices)); in btrfs_prepare_sprout()
1174 list_splice_init(&fs_devices->devices, &seed_devices->devices); in btrfs_prepare_sprout()
1175 list_splice_init(&fs_devices->alloc_list, &seed_devices->alloc_list); in btrfs_prepare_sprout()
1177 device->fs_devices = seed_devices; in btrfs_prepare_sprout()
1180 fs_devices->seeding = 0; in btrfs_prepare_sprout()
1181 fs_devices->num_devices = 0; in btrfs_prepare_sprout()
1182 fs_devices->open_devices = 0; in btrfs_prepare_sprout()
1183 fs_devices->seed = seed_devices; in btrfs_prepare_sprout()
1185 generate_random_uuid(fs_devices->fsid); in btrfs_prepare_sprout()
1186 memcpy(root->fs_info->fsid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_prepare_sprout()
1187 memcpy(disk_super->fsid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_prepare_sprout()
1256 if (device->fs_devices->seeding) { in btrfs_finish_sprout()
1282 if ((sb->s_flags & MS_RDONLY) && !root->fs_info->fs_devices->seeding) in btrfs_init_new_device()
1289 if (root->fs_info->fs_devices->seeding) { in btrfs_init_new_device()
1298 devices = &root->fs_info->fs_devices->devices; in btrfs_init_new_device()
1351 device->fs_devices = root->fs_info->fs_devices; in btrfs_init_new_device()
1352 list_add(&device->dev_list, &root->fs_info->fs_devices->devices); in btrfs_init_new_device()
1354 &root->fs_info->fs_devices->alloc_list); in btrfs_init_new_device()
1355 root->fs_info->fs_devices->num_devices++; in btrfs_init_new_device()
1356 root->fs_info->fs_devices->open_devices++; in btrfs_init_new_device()
1357 root->fs_info->fs_devices->rw_devices++; in btrfs_init_new_device()
1358 root->fs_info->fs_devices->total_rw_bytes += device->total_bytes; in btrfs_init_new_device()
1465 device->fs_devices->total_rw_bytes += diff; in __btrfs_grow_device()
1706 struct list_head *devices = &dev_root->fs_info->fs_devices->devices; in btrfs_balance()
1838 device->fs_devices->total_rw_bytes -= diff; in btrfs_shrink_device()
1939 struct btrfs_fs_devices *fs_devices = info->fs_devices; in __btrfs_alloc_chunk() local
1965 if (list_empty(&fs_devices->alloc_list)) in __btrfs_alloc_chunk()
1969 num_stripes = fs_devices->rw_devices; in __btrfs_alloc_chunk()
1977 num_stripes = min_t(u64, 2, fs_devices->rw_devices); in __btrfs_alloc_chunk()
1983 num_stripes = fs_devices->rw_devices; in __btrfs_alloc_chunk()
2004 max_chunk_size = min(div_factor(fs_devices->total_rw_bytes, 1), in __btrfs_alloc_chunk()
2028 cur = fs_devices->alloc_list.next; in __btrfs_alloc_chunk()
2072 if (cur == &fs_devices->alloc_list) in __btrfs_alloc_chunk()
2075 list_splice(&private_devs, &fs_devices->alloc_list); in __btrfs_alloc_chunk()
2821 bio->bi_bdev = root->fs_info->fs_devices->latest_bdev; in btrfs_map_bio()
2838 cur_devices = root->fs_info->fs_devices; in btrfs_find_device()
2856 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in add_missing_dev() local
2862 &fs_devices->devices); in add_missing_dev()
2867 device->fs_devices = fs_devices; in add_missing_dev()
2868 fs_devices->num_devices++; in add_missing_dev()
2985 struct btrfs_fs_devices *fs_devices; in open_seed_devices() local
2990 fs_devices = root->fs_info->fs_devices->seed; in open_seed_devices()
2991 while (fs_devices) { in open_seed_devices()
2992 if (!memcmp(fs_devices->fsid, fsid, BTRFS_UUID_SIZE)) { in open_seed_devices()
2996 fs_devices = fs_devices->seed; in open_seed_devices()
2999 fs_devices = find_fsid(fsid); in open_seed_devices()
3000 if (!fs_devices) { in open_seed_devices()
3005 fs_devices = clone_fs_devices(fs_devices); in open_seed_devices()
3006 if (IS_ERR(fs_devices)) { in open_seed_devices()
3007 ret = PTR_ERR(fs_devices); in open_seed_devices()
3011 ret = __btrfs_open_devices(fs_devices, FMODE_READ, in open_seed_devices()
3016 if (!fs_devices->seeding) { in open_seed_devices()
3017 __btrfs_close_devices(fs_devices); in open_seed_devices()
3018 free_fs_devices(fs_devices); in open_seed_devices()
3023 fs_devices->seed = root->fs_info->fs_devices->seed; in open_seed_devices()
3024 root->fs_info->fs_devices->seed = fs_devices; in open_seed_devices()
3068 if (device->fs_devices != root->fs_info->fs_devices) { in read_one_dev()
3079 device->fs_devices->total_rw_bytes += device->total_bytes; in read_one_dev()