• Home
  • Raw
  • Download

Lines Matching refs:device

138 				struct btrfs_device *device);
142 static void btrfs_dev_stat_print_on_load(struct btrfs_device *device);
196 struct btrfs_device *device; in free_fs_devices() local
199 device = list_entry(fs_devices->devices.next, in free_fs_devices()
201 list_del(&device->dev_list); in free_fs_devices()
202 rcu_string_free(device->name); in free_fs_devices()
203 kfree(device); in free_fs_devices()
344 static noinline void run_scheduled_bios(struct btrfs_device *device) in run_scheduled_bios() argument
369 bdi = blk_get_backing_dev_info(device->bdev); in run_scheduled_bios()
370 fs_info = device->dev_root->fs_info; in run_scheduled_bios()
375 spin_lock(&device->io_lock); in run_scheduled_bios()
385 if (!force_reg && device->pending_sync_bios.head) { in run_scheduled_bios()
386 pending_bios = &device->pending_sync_bios; in run_scheduled_bios()
389 pending_bios = &device->pending_bios; in run_scheduled_bios()
405 if (device->pending_sync_bios.head == NULL && in run_scheduled_bios()
406 device->pending_bios.head == NULL) { in run_scheduled_bios()
408 device->running_pending = 0; in run_scheduled_bios()
411 device->running_pending = 1; in run_scheduled_bios()
417 spin_unlock(&device->io_lock); in run_scheduled_bios()
426 pending_bios != &device->pending_sync_bios && in run_scheduled_bios()
427 device->pending_sync_bios.head) || in run_scheduled_bios()
428 (num_run > 64 && pending_bios == &device->pending_sync_bios && in run_scheduled_bios()
429 device->pending_bios.head)) { in run_scheduled_bios()
430 spin_lock(&device->io_lock); in run_scheduled_bios()
456 if (pending_bios == &device->pending_sync_bios) { in run_scheduled_bios()
504 spin_lock(&device->io_lock); in run_scheduled_bios()
506 device->running_pending = 1; in run_scheduled_bios()
508 spin_unlock(&device->io_lock); in run_scheduled_bios()
510 &device->work); in run_scheduled_bios()
525 spin_lock(&device->io_lock); in run_scheduled_bios()
526 if (device->pending_bios.head || device->pending_sync_bios.head) in run_scheduled_bios()
528 spin_unlock(&device->io_lock); in run_scheduled_bios()
536 struct btrfs_device *device; in pending_bios_fn() local
538 device = container_of(work, struct btrfs_device, work); in pending_bios_fn()
539 run_scheduled_bios(device); in pending_bios_fn()
610 struct btrfs_device *device; in device_list_add() local
624 device = NULL; in device_list_add()
626 device = __find_device(&fs_devices->devices, devid, in device_list_add()
630 if (!device) { in device_list_add()
634 device = btrfs_alloc_device(NULL, &devid, in device_list_add()
636 if (IS_ERR(device)) { in device_list_add()
638 return PTR_ERR(device); in device_list_add()
643 kfree(device); in device_list_add()
646 rcu_assign_pointer(device->name, name); in device_list_add()
649 list_add_rcu(&device->dev_list, &fs_devices->devices); in device_list_add()
654 device->fs_devices = fs_devices; in device_list_add()
655 } else if (!device->name || strcmp(device->name->str, path)) { in device_list_add()
682 if (!fs_devices->opened && found_transid < device->generation) { in device_list_add()
696 rcu_string_free(device->name); in device_list_add()
697 rcu_assign_pointer(device->name, name); in device_list_add()
698 if (device->missing) { in device_list_add()
700 device->missing = 0; in device_list_add()
711 device->generation = found_transid; in device_list_add()
718 btrfs_free_stale_device(device); in device_list_add()
728 struct btrfs_device *device; in clone_fs_devices() local
742 device = btrfs_alloc_device(NULL, &orig_dev->devid, in clone_fs_devices()
744 if (IS_ERR(device)) in clone_fs_devices()
755 kfree(device); in clone_fs_devices()
758 rcu_assign_pointer(device->name, name); in clone_fs_devices()
761 list_add(&device->dev_list, &fs_devices->devices); in clone_fs_devices()
762 device->fs_devices = fs_devices; in clone_fs_devices()
775 struct btrfs_device *device, *next; in btrfs_close_extra_devices() local
781 list_for_each_entry_safe(device, next, &fs_devices->devices, dev_list) { in btrfs_close_extra_devices()
782 if (device->in_fs_metadata) { in btrfs_close_extra_devices()
783 if (!device->is_tgtdev_for_dev_replace && in btrfs_close_extra_devices()
785 device->generation > latest_dev->generation)) { in btrfs_close_extra_devices()
786 latest_dev = device; in btrfs_close_extra_devices()
791 if (device->devid == BTRFS_DEV_REPLACE_DEVID) { in btrfs_close_extra_devices()
802 if (step == 0 || device->is_tgtdev_for_dev_replace) { in btrfs_close_extra_devices()
806 if (device->bdev) { in btrfs_close_extra_devices()
807 blkdev_put(device->bdev, device->mode); in btrfs_close_extra_devices()
808 device->bdev = NULL; in btrfs_close_extra_devices()
811 if (device->writeable) { in btrfs_close_extra_devices()
812 list_del_init(&device->dev_alloc_list); in btrfs_close_extra_devices()
813 device->writeable = 0; in btrfs_close_extra_devices()
814 if (!device->is_tgtdev_for_dev_replace) in btrfs_close_extra_devices()
817 list_del_init(&device->dev_list); in btrfs_close_extra_devices()
819 rcu_string_free(device->name); in btrfs_close_extra_devices()
820 kfree(device); in btrfs_close_extra_devices()
835 struct btrfs_device *device; in __free_device() local
837 device = container_of(work, struct btrfs_device, rcu_work); in __free_device()
838 rcu_string_free(device->name); in __free_device()
839 kfree(device); in __free_device()
844 struct btrfs_device *device; in free_device() local
846 device = container_of(head, struct btrfs_device, rcu); in free_device()
848 INIT_WORK(&device->rcu_work, __free_device); in free_device()
849 schedule_work(&device->rcu_work); in free_device()
852 static void btrfs_close_bdev(struct btrfs_device *device) in btrfs_close_bdev() argument
854 if (device->bdev && device->writeable) { in btrfs_close_bdev()
855 sync_blockdev(device->bdev); in btrfs_close_bdev()
856 invalidate_bdev(device->bdev); in btrfs_close_bdev()
859 if (device->bdev) in btrfs_close_bdev()
860 blkdev_put(device->bdev, device->mode); in btrfs_close_bdev()
863 static void btrfs_prepare_close_one_device(struct btrfs_device *device) in btrfs_prepare_close_one_device() argument
865 struct btrfs_fs_devices *fs_devices = device->fs_devices; in btrfs_prepare_close_one_device()
869 if (device->bdev) in btrfs_prepare_close_one_device()
872 if (device->writeable && in btrfs_prepare_close_one_device()
873 device->devid != BTRFS_DEV_REPLACE_DEVID) { in btrfs_prepare_close_one_device()
874 list_del_init(&device->dev_alloc_list); in btrfs_prepare_close_one_device()
878 if (device->missing) in btrfs_prepare_close_one_device()
881 new_device = btrfs_alloc_device(NULL, &device->devid, in btrfs_prepare_close_one_device()
882 device->uuid); in btrfs_prepare_close_one_device()
886 if (device->name) { in btrfs_prepare_close_one_device()
887 name = rcu_string_strdup(device->name->str, GFP_NOFS); in btrfs_prepare_close_one_device()
892 list_replace_rcu(&device->dev_list, &new_device->dev_list); in btrfs_prepare_close_one_device()
893 new_device->fs_devices = device->fs_devices; in btrfs_prepare_close_one_device()
898 struct btrfs_device *device, *tmp; in __btrfs_close_devices() local
907 list_for_each_entry_safe(device, tmp, &fs_devices->devices, dev_list) { in __btrfs_close_devices()
908 btrfs_prepare_close_one_device(device); in __btrfs_close_devices()
909 list_add(&device->dev_list, &pending_put); in __btrfs_close_devices()
920 device = list_first_entry(&pending_put, in __btrfs_close_devices()
922 list_del(&device->dev_list); in __btrfs_close_devices()
923 btrfs_close_bdev(device); in __btrfs_close_devices()
924 call_rcu(&device->rcu, free_device); in __btrfs_close_devices()
969 struct btrfs_device *device; in __btrfs_open_devices() local
979 list_for_each_entry(device, head, dev_list) { in __btrfs_open_devices()
980 if (device->bdev) in __btrfs_open_devices()
982 if (!device->name) in __btrfs_open_devices()
986 if (btrfs_get_bdev_and_sb(device->name->str, flags, holder, 1, in __btrfs_open_devices()
992 if (devid != device->devid) in __btrfs_open_devices()
995 if (memcmp(device->uuid, disk_super->dev_item.uuid, in __btrfs_open_devices()
999 device->generation = btrfs_super_generation(disk_super); in __btrfs_open_devices()
1001 device->generation > latest_dev->generation) in __btrfs_open_devices()
1002 latest_dev = device; in __btrfs_open_devices()
1005 device->writeable = 0; in __btrfs_open_devices()
1007 device->writeable = !bdev_read_only(bdev); in __btrfs_open_devices()
1013 device->can_discard = 1; in __btrfs_open_devices()
1015 device->bdev = bdev; in __btrfs_open_devices()
1016 device->in_fs_metadata = 0; in __btrfs_open_devices()
1017 device->mode = flags; in __btrfs_open_devices()
1023 if (device->writeable && in __btrfs_open_devices()
1024 device->devid != BTRFS_DEV_REPLACE_DEVID) { in __btrfs_open_devices()
1026 list_add(&device->dev_alloc_list, in __btrfs_open_devices()
1179 int btrfs_account_dev_extents_size(struct btrfs_device *device, u64 start, in btrfs_account_dev_extents_size() argument
1183 struct btrfs_root *root = device->dev_root; in btrfs_account_dev_extents_size()
1193 if (start >= device->total_bytes || device->is_tgtdev_for_dev_replace) in btrfs_account_dev_extents_size()
1201 key.objectid = device->devid; in btrfs_account_dev_extents_size()
1228 if (key.objectid < device->devid) in btrfs_account_dev_extents_size()
1231 if (key.objectid > device->devid) in btrfs_account_dev_extents_size()
1263 struct btrfs_device *device, in contains_pending_extent() argument
1266 struct btrfs_fs_info *fs_info = device->dev_root->fs_info; in contains_pending_extent()
1283 if (map->stripes[i].dev != device) in contains_pending_extent()
1339 struct btrfs_device *device, u64 num_bytes, in find_free_dev_extent_start() argument
1343 struct btrfs_root *root = device->dev_root; in find_free_dev_extent_start()
1350 u64 search_end = device->total_bytes; in find_free_dev_extent_start()
1372 if (search_start >= search_end || device->is_tgtdev_for_dev_replace) { in find_free_dev_extent_start()
1381 key.objectid = device->devid; in find_free_dev_extent_start()
1408 if (key.objectid < device->devid) in find_free_dev_extent_start()
1411 if (key.objectid > device->devid) in find_free_dev_extent_start()
1424 if (contains_pending_extent(transaction, device, in find_free_dev_extent_start()
1473 if (contains_pending_extent(transaction, device, &search_start, in find_free_dev_extent_start()
1500 struct btrfs_device *device, u64 num_bytes, in find_free_dev_extent() argument
1504 return find_free_dev_extent_start(trans->transaction, device, in find_free_dev_extent()
1509 struct btrfs_device *device, in btrfs_free_dev_extent() argument
1514 struct btrfs_root *root = device->dev_root; in btrfs_free_dev_extent()
1524 key.objectid = device->devid; in btrfs_free_dev_extent()
1567 struct btrfs_device *device, in btrfs_alloc_dev_extent() argument
1573 struct btrfs_root *root = device->dev_root; in btrfs_alloc_dev_extent()
1578 WARN_ON(!device->in_fs_metadata); in btrfs_alloc_dev_extent()
1579 WARN_ON(device->is_tgtdev_for_dev_replace); in btrfs_alloc_dev_extent()
1584 key.objectid = device->devid; in btrfs_alloc_dev_extent()
1672 struct btrfs_device *device) in btrfs_add_device() argument
1689 key.offset = device->devid; in btrfs_add_device()
1699 btrfs_set_device_id(leaf, dev_item, device->devid); in btrfs_add_device()
1701 btrfs_set_device_type(leaf, dev_item, device->type); in btrfs_add_device()
1702 btrfs_set_device_io_align(leaf, dev_item, device->io_align); in btrfs_add_device()
1703 btrfs_set_device_io_width(leaf, dev_item, device->io_width); in btrfs_add_device()
1704 btrfs_set_device_sector_size(leaf, dev_item, device->sector_size); in btrfs_add_device()
1706 btrfs_device_get_disk_total_bytes(device)); in btrfs_add_device()
1708 btrfs_device_get_bytes_used(device)); in btrfs_add_device()
1715 write_extent_buffer(leaf, device->uuid, ptr, BTRFS_UUID_SIZE); in btrfs_add_device()
1742 struct btrfs_device *device) in btrfs_rm_dev_item() argument
1762 key.offset = device->devid; in btrfs_rm_dev_item()
1818 struct btrfs_device *device) in btrfs_find_next_active_device() argument
1823 if (next_device != device && in btrfs_find_next_active_device()
1838 struct btrfs_device *device, struct btrfs_device *this_dev) in btrfs_assign_next_active_device() argument
1846 device); in btrfs_assign_next_active_device()
1850 (fs_info->sb->s_bdev == device->bdev)) in btrfs_assign_next_active_device()
1853 if (fs_info->fs_devices->latest_bdev == device->bdev) in btrfs_assign_next_active_device()
1859 struct btrfs_device *device; in btrfs_rm_device() local
1880 &device); in btrfs_rm_device()
1884 if (device->is_tgtdev_for_dev_replace) { in btrfs_rm_device()
1889 if (device->writeable && root->fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
1894 if (device->writeable) { in btrfs_rm_device()
1896 list_del_init(&device->dev_alloc_list); in btrfs_rm_device()
1897 device->fs_devices->rw_devices--; in btrfs_rm_device()
1903 ret = btrfs_shrink_device(device, 0); in btrfs_rm_device()
1913 ret = btrfs_rm_dev_item(root->fs_info->chunk_root, device); in btrfs_rm_device()
1917 device->in_fs_metadata = 0; in btrfs_rm_device()
1918 btrfs_scrub_cancel_dev(root->fs_info, device); in btrfs_rm_device()
1930 cur_devices = device->fs_devices; in btrfs_rm_device()
1932 list_del_rcu(&device->dev_list); in btrfs_rm_device()
1934 device->fs_devices->num_devices--; in btrfs_rm_device()
1935 device->fs_devices->total_devices--; in btrfs_rm_device()
1937 if (device->missing) in btrfs_rm_device()
1938 device->fs_devices->missing_devices--; in btrfs_rm_device()
1940 btrfs_assign_next_active_device(root->fs_info, device, NULL); in btrfs_rm_device()
1942 if (device->bdev) { in btrfs_rm_device()
1943 device->fs_devices->open_devices--; in btrfs_rm_device()
1945 btrfs_sysfs_rm_device_link(root->fs_info->fs_devices, device); in btrfs_rm_device()
1957 if (device->writeable) in btrfs_rm_device()
1958 btrfs_scratch_superblocks(device->bdev, device->name->str); in btrfs_rm_device()
1960 btrfs_close_bdev(device); in btrfs_rm_device()
1961 call_rcu(&device->rcu, free_device); in btrfs_rm_device()
1986 if (device->writeable) { in btrfs_rm_device()
1988 list_add(&device->dev_alloc_list, in btrfs_rm_device()
1990 device->fs_devices->rw_devices++; in btrfs_rm_device()
2097 struct btrfs_device **device) in btrfs_find_device_by_path() argument
2106 *device = NULL; in btrfs_find_device_by_path()
2114 *device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_find_device_by_path()
2117 if (!*device) in btrfs_find_device_by_path()
2125 struct btrfs_device **device) in btrfs_find_device_missing_or_by_path() argument
2127 *device = NULL; in btrfs_find_device_missing_or_by_path()
2139 *device = tmp; in btrfs_find_device_missing_or_by_path()
2144 if (!*device) in btrfs_find_device_missing_or_by_path()
2149 return btrfs_find_device_by_path(root, device_path, device); in btrfs_find_device_missing_or_by_path()
2158 struct btrfs_device **device) in btrfs_find_device_by_devspec() argument
2164 *device = btrfs_find_device(root->fs_info, devid, NULL, in btrfs_find_device_by_devspec()
2166 if (!*device) in btrfs_find_device_by_devspec()
2173 device); in btrfs_find_device_by_devspec()
2187 struct btrfs_device *device; in btrfs_prepare_sprout() local
2215 list_for_each_entry(device, &seed_devices->devices, dev_list) in btrfs_prepare_sprout()
2216 device->fs_devices = seed_devices; in btrfs_prepare_sprout()
2250 struct btrfs_device *device; in btrfs_finish_sprout() local
2297 device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_finish_sprout()
2299 BUG_ON(!device); /* Logic error */ in btrfs_finish_sprout()
2301 if (device->fs_devices->seeding) { in btrfs_finish_sprout()
2303 device->generation); in btrfs_finish_sprout()
2320 struct btrfs_device *device; in btrfs_init_new_device() local
2348 list_for_each_entry(device, devices, dev_list) { in btrfs_init_new_device()
2349 if (device->bdev == bdev) { in btrfs_init_new_device()
2358 device = btrfs_alloc_device(root->fs_info, NULL, NULL); in btrfs_init_new_device()
2359 if (IS_ERR(device)) { in btrfs_init_new_device()
2361 ret = PTR_ERR(device); in btrfs_init_new_device()
2367 kfree(device); in btrfs_init_new_device()
2371 rcu_assign_pointer(device->name, name); in btrfs_init_new_device()
2375 rcu_string_free(device->name); in btrfs_init_new_device()
2376 kfree(device); in btrfs_init_new_device()
2383 device->can_discard = 1; in btrfs_init_new_device()
2384 device->writeable = 1; in btrfs_init_new_device()
2385 device->generation = trans->transid; in btrfs_init_new_device()
2386 device->io_width = root->sectorsize; in btrfs_init_new_device()
2387 device->io_align = root->sectorsize; in btrfs_init_new_device()
2388 device->sector_size = root->sectorsize; in btrfs_init_new_device()
2389 device->total_bytes = i_size_read(bdev->bd_inode); in btrfs_init_new_device()
2390 device->disk_total_bytes = device->total_bytes; in btrfs_init_new_device()
2391 device->commit_total_bytes = device->total_bytes; in btrfs_init_new_device()
2392 device->dev_root = root->fs_info->dev_root; in btrfs_init_new_device()
2393 device->bdev = bdev; in btrfs_init_new_device()
2394 device->in_fs_metadata = 1; in btrfs_init_new_device()
2395 device->is_tgtdev_for_dev_replace = 0; in btrfs_init_new_device()
2396 device->mode = FMODE_EXCL; in btrfs_init_new_device()
2397 device->dev_stats_valid = 1; in btrfs_init_new_device()
2398 set_blocksize(device->bdev, 4096); in btrfs_init_new_device()
2406 device->fs_devices = root->fs_info->fs_devices; in btrfs_init_new_device()
2410 list_add_rcu(&device->dev_list, &root->fs_info->fs_devices->devices); in btrfs_init_new_device()
2411 list_add(&device->dev_alloc_list, in btrfs_init_new_device()
2417 root->fs_info->fs_devices->total_rw_bytes += device->total_bytes; in btrfs_init_new_device()
2420 root->fs_info->free_chunk_space += device->total_bytes; in btrfs_init_new_device()
2428 tmp + device->total_bytes); in btrfs_init_new_device()
2435 btrfs_sysfs_add_device_link(root->fs_info->fs_devices, device); in btrfs_init_new_device()
2448 ret = init_first_rw_device(trans, root, device); in btrfs_init_new_device()
2456 ret = btrfs_add_device(trans, root, device); in btrfs_init_new_device()
2512 rcu_string_free(device->name); in btrfs_init_new_device()
2513 btrfs_sysfs_rm_device_link(root->fs_info->fs_devices, device); in btrfs_init_new_device()
2514 kfree(device); in btrfs_init_new_device()
2529 struct btrfs_device *device; in btrfs_init_dev_replace_tgtdev() local
2553 list_for_each_entry(device, devices, dev_list) { in btrfs_init_dev_replace_tgtdev()
2554 if (device->bdev == bdev) { in btrfs_init_dev_replace_tgtdev()
2572 device = btrfs_alloc_device(NULL, &devid, NULL); in btrfs_init_dev_replace_tgtdev()
2573 if (IS_ERR(device)) { in btrfs_init_dev_replace_tgtdev()
2574 ret = PTR_ERR(device); in btrfs_init_dev_replace_tgtdev()
2580 kfree(device); in btrfs_init_dev_replace_tgtdev()
2584 rcu_assign_pointer(device->name, name); in btrfs_init_dev_replace_tgtdev()
2588 device->can_discard = 1; in btrfs_init_dev_replace_tgtdev()
2590 device->writeable = 1; in btrfs_init_dev_replace_tgtdev()
2591 device->generation = 0; in btrfs_init_dev_replace_tgtdev()
2592 device->io_width = root->sectorsize; in btrfs_init_dev_replace_tgtdev()
2593 device->io_align = root->sectorsize; in btrfs_init_dev_replace_tgtdev()
2594 device->sector_size = root->sectorsize; in btrfs_init_dev_replace_tgtdev()
2595 device->total_bytes = btrfs_device_get_total_bytes(srcdev); in btrfs_init_dev_replace_tgtdev()
2596 device->disk_total_bytes = btrfs_device_get_disk_total_bytes(srcdev); in btrfs_init_dev_replace_tgtdev()
2597 device->bytes_used = btrfs_device_get_bytes_used(srcdev); in btrfs_init_dev_replace_tgtdev()
2599 device->commit_total_bytes = srcdev->commit_total_bytes; in btrfs_init_dev_replace_tgtdev()
2600 device->commit_bytes_used = device->bytes_used; in btrfs_init_dev_replace_tgtdev()
2601 device->dev_root = fs_info->dev_root; in btrfs_init_dev_replace_tgtdev()
2602 device->bdev = bdev; in btrfs_init_dev_replace_tgtdev()
2603 device->in_fs_metadata = 1; in btrfs_init_dev_replace_tgtdev()
2604 device->is_tgtdev_for_dev_replace = 1; in btrfs_init_dev_replace_tgtdev()
2605 device->mode = FMODE_EXCL; in btrfs_init_dev_replace_tgtdev()
2606 device->dev_stats_valid = 1; in btrfs_init_dev_replace_tgtdev()
2607 set_blocksize(device->bdev, 4096); in btrfs_init_dev_replace_tgtdev()
2608 device->fs_devices = fs_info->fs_devices; in btrfs_init_dev_replace_tgtdev()
2609 list_add(&device->dev_list, &fs_info->fs_devices->devices); in btrfs_init_dev_replace_tgtdev()
2614 *device_out = device; in btrfs_init_dev_replace_tgtdev()
2634 struct btrfs_device *device) in btrfs_update_device() argument
2643 root = device->dev_root->fs_info->chunk_root; in btrfs_update_device()
2651 key.offset = device->devid; in btrfs_update_device()
2665 btrfs_set_device_id(leaf, dev_item, device->devid); in btrfs_update_device()
2666 btrfs_set_device_type(leaf, dev_item, device->type); in btrfs_update_device()
2667 btrfs_set_device_io_align(leaf, dev_item, device->io_align); in btrfs_update_device()
2668 btrfs_set_device_io_width(leaf, dev_item, device->io_width); in btrfs_update_device()
2669 btrfs_set_device_sector_size(leaf, dev_item, device->sector_size); in btrfs_update_device()
2671 btrfs_device_get_disk_total_bytes(device)); in btrfs_update_device()
2673 btrfs_device_get_bytes_used(device)); in btrfs_update_device()
2682 struct btrfs_device *device, u64 new_size) in btrfs_grow_device() argument
2685 device->dev_root->fs_info->super_copy; in btrfs_grow_device()
2690 if (!device->writeable) in btrfs_grow_device()
2693 lock_chunks(device->dev_root); in btrfs_grow_device()
2695 diff = new_size - device->total_bytes; in btrfs_grow_device()
2697 if (new_size <= device->total_bytes || in btrfs_grow_device()
2698 device->is_tgtdev_for_dev_replace) { in btrfs_grow_device()
2699 unlock_chunks(device->dev_root); in btrfs_grow_device()
2703 fs_devices = device->dev_root->fs_info->fs_devices; in btrfs_grow_device()
2706 device->fs_devices->total_rw_bytes += diff; in btrfs_grow_device()
2708 btrfs_device_set_total_bytes(device, new_size); in btrfs_grow_device()
2709 btrfs_device_set_disk_total_bytes(device, new_size); in btrfs_grow_device()
2710 btrfs_clear_space_info_full(device->dev_root->fs_info); in btrfs_grow_device()
2711 if (list_empty(&device->resized_list)) in btrfs_grow_device()
2712 list_add_tail(&device->resized_list, in btrfs_grow_device()
2714 unlock_chunks(device->dev_root); in btrfs_grow_device()
2716 return btrfs_update_device(trans, device); in btrfs_grow_device()
2847 struct btrfs_device *device = map->stripes[i].dev; in btrfs_remove_chunk() local
2848 ret = btrfs_free_dev_extent(trans, device, in btrfs_remove_chunk()
2857 if (device->bytes_used > 0) { in btrfs_remove_chunk()
2859 btrfs_device_set_bytes_used(device, in btrfs_remove_chunk()
2860 device->bytes_used - dev_extent_len); in btrfs_remove_chunk()
3468 struct btrfs_device *device; in __btrfs_balance() local
3494 list_for_each_entry(device, devices, dev_list) { in __btrfs_balance()
3495 old_size = btrfs_device_get_total_bytes(device); in __btrfs_balance()
3498 if (!device->writeable || in __btrfs_balance()
3499 btrfs_device_get_total_bytes(device) - in __btrfs_balance()
3500 btrfs_device_get_bytes_used(device) > size_to_free || in __btrfs_balance()
3501 device->is_tgtdev_for_dev_replace) in __btrfs_balance()
3504 ret = btrfs_shrink_device(device, old_size - size_to_free); in __btrfs_balance()
3518 rcu_str_deref(device->name), ret, in __btrfs_balance()
3523 ret = btrfs_grow_device(trans, device, old_size); in __btrfs_balance()
3530 rcu_str_deref(device->name), ret, in __btrfs_balance()
4363 int btrfs_shrink_device(struct btrfs_device *device, u64 new_size) in btrfs_shrink_device() argument
4366 struct btrfs_root *root = device->dev_root; in btrfs_shrink_device()
4380 u64 old_size = btrfs_device_get_total_bytes(device); in btrfs_shrink_device()
4383 if (device->is_tgtdev_for_dev_replace) in btrfs_shrink_device()
4394 btrfs_device_set_total_bytes(device, new_size); in btrfs_shrink_device()
4395 if (device->writeable) { in btrfs_shrink_device()
4396 device->fs_devices->total_rw_bytes -= diff; in btrfs_shrink_device()
4404 key.objectid = device->devid; in btrfs_shrink_device()
4431 if (key.objectid != device->devid) { in btrfs_shrink_device()
4491 if (contains_pending_extent(trans->transaction, device, in btrfs_shrink_device()
4504 btrfs_device_set_disk_total_bytes(device, new_size); in btrfs_shrink_device()
4505 if (list_empty(&device->resized_list)) in btrfs_shrink_device()
4506 list_add_tail(&device->resized_list, in btrfs_shrink_device()
4514 ret = btrfs_update_device(trans, device); in btrfs_shrink_device()
4520 btrfs_device_set_total_bytes(device, old_size); in btrfs_shrink_device()
4521 if (device->writeable) in btrfs_shrink_device()
4522 device->fs_devices->total_rw_bytes += diff; in btrfs_shrink_device()
4690 struct btrfs_device *device; in __btrfs_alloc_chunk() local
4694 device = list_entry(cur, struct btrfs_device, dev_alloc_list); in __btrfs_alloc_chunk()
4698 if (!device->writeable) { in __btrfs_alloc_chunk()
4704 if (!device->in_fs_metadata || in __btrfs_alloc_chunk()
4705 device->is_tgtdev_for_dev_replace) in __btrfs_alloc_chunk()
4708 if (device->total_bytes > device->bytes_used) in __btrfs_alloc_chunk()
4709 total_avail = device->total_bytes - device->bytes_used; in __btrfs_alloc_chunk()
4717 ret = find_free_dev_extent(trans, device, in __btrfs_alloc_chunk()
4737 devices_info[ndevs].dev = device; in __btrfs_alloc_chunk()
4905 struct btrfs_device *device; in btrfs_finish_chunk_alloc() local
4956 device = map->stripes[i].dev; in btrfs_finish_chunk_alloc()
4959 ret = btrfs_update_device(trans, device); in btrfs_finish_chunk_alloc()
4962 ret = btrfs_alloc_dev_extent(trans, device, in btrfs_finish_chunk_alloc()
4977 device = map->stripes[i].dev; in btrfs_finish_chunk_alloc()
4980 btrfs_set_stack_stripe_devid(stripe, device->devid); in btrfs_finish_chunk_alloc()
4982 memcpy(stripe->dev_uuid, device->uuid, BTRFS_UUID_SIZE); in btrfs_finish_chunk_alloc()
5036 struct btrfs_device *device) in init_first_rw_device() argument
6081 struct btrfs_device *device, in btrfs_schedule_bio() argument
6087 if (device->missing || !device->bdev) { in btrfs_schedule_bio()
6110 spin_lock(&device->io_lock); in btrfs_schedule_bio()
6112 pending_bios = &device->pending_sync_bios; in btrfs_schedule_bio()
6114 pending_bios = &device->pending_bios; in btrfs_schedule_bio()
6122 if (device->running_pending) in btrfs_schedule_bio()
6125 spin_unlock(&device->io_lock); in btrfs_schedule_bio()
6129 &device->work); in btrfs_schedule_bio()
6259 struct btrfs_device *device; in btrfs_find_device() local
6266 device = __find_device(&cur_devices->devices, in btrfs_find_device()
6268 if (device) in btrfs_find_device()
6269 return device; in btrfs_find_device()
6280 struct btrfs_device *device; in add_missing_dev() local
6282 device = btrfs_alloc_device(NULL, &devid, dev_uuid); in add_missing_dev()
6283 if (IS_ERR(device)) in add_missing_dev()
6286 list_add(&device->dev_list, &fs_devices->devices); in add_missing_dev()
6287 device->fs_devices = fs_devices; in add_missing_dev()
6290 device->missing = 1; in add_missing_dev()
6293 return device; in add_missing_dev()
6515 struct btrfs_device *device) in fill_device_from_item() argument
6519 device->devid = btrfs_device_id(leaf, dev_item); in fill_device_from_item()
6520 device->disk_total_bytes = btrfs_device_total_bytes(leaf, dev_item); in fill_device_from_item()
6521 device->total_bytes = device->disk_total_bytes; in fill_device_from_item()
6522 device->commit_total_bytes = device->disk_total_bytes; in fill_device_from_item()
6523 device->bytes_used = btrfs_device_bytes_used(leaf, dev_item); in fill_device_from_item()
6524 device->commit_bytes_used = device->bytes_used; in fill_device_from_item()
6525 device->type = btrfs_device_type(leaf, dev_item); in fill_device_from_item()
6526 device->io_align = btrfs_device_io_align(leaf, dev_item); in fill_device_from_item()
6527 device->io_width = btrfs_device_io_width(leaf, dev_item); in fill_device_from_item()
6528 device->sector_size = btrfs_device_sector_size(leaf, dev_item); in fill_device_from_item()
6529 WARN_ON(device->devid == BTRFS_DEV_REPLACE_DEVID); in fill_device_from_item()
6530 device->is_tgtdev_for_dev_replace = 0; in fill_device_from_item()
6533 read_extent_buffer(leaf, device->uuid, ptr, BTRFS_UUID_SIZE); in fill_device_from_item()
6596 struct btrfs_device *device; in read_one_dev() local
6614 device = btrfs_find_device(root->fs_info, devid, dev_uuid, fs_uuid); in read_one_dev()
6615 if (!device) { in read_one_dev()
6619 device = add_missing_dev(root, fs_devices, devid, dev_uuid); in read_one_dev()
6620 if (!device) in read_one_dev()
6625 if (!device->bdev && !btrfs_test_opt(root->fs_info, DEGRADED)) in read_one_dev()
6628 if(!device->bdev && !device->missing) { in read_one_dev()
6635 device->fs_devices->missing_devices++; in read_one_dev()
6636 device->missing = 1; in read_one_dev()
6640 if (device->fs_devices != fs_devices) { in read_one_dev()
6641 ASSERT(device->missing); in read_one_dev()
6643 list_move(&device->dev_list, &fs_devices->devices); in read_one_dev()
6644 device->fs_devices->num_devices--; in read_one_dev()
6647 device->fs_devices->missing_devices--; in read_one_dev()
6650 device->fs_devices = fs_devices; in read_one_dev()
6654 if (device->fs_devices != root->fs_info->fs_devices) { in read_one_dev()
6655 BUG_ON(device->writeable); in read_one_dev()
6656 if (device->generation != in read_one_dev()
6661 fill_device_from_item(leaf, dev_item, device); in read_one_dev()
6662 device->in_fs_metadata = 1; in read_one_dev()
6663 if (device->writeable && !device->is_tgtdev_for_dev_replace) { in read_one_dev()
6664 device->fs_devices->total_rw_bytes += device->total_bytes; in read_one_dev()
6666 root->fs_info->free_chunk_space += device->total_bytes - in read_one_dev()
6667 device->bytes_used; in read_one_dev()
6888 struct btrfs_device *device; in btrfs_init_devices_late() local
6892 list_for_each_entry(device, &fs_devices->devices, dev_list) in btrfs_init_devices_late()
6893 device->dev_root = fs_info->dev_root; in btrfs_init_devices_late()
6917 struct btrfs_device *device; in btrfs_init_dev_stats() local
6928 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_init_dev_stats()
6934 key.offset = device->devid; in btrfs_init_dev_stats()
6937 __btrfs_reset_dev_stats(device); in btrfs_init_dev_stats()
6938 device->dev_stats_valid = 1; in btrfs_init_dev_stats()
6952 btrfs_dev_stat_set(device, i, in btrfs_init_dev_stats()
6955 btrfs_dev_stat_reset(device, i); in btrfs_init_dev_stats()
6958 device->dev_stats_valid = 1; in btrfs_init_dev_stats()
6959 btrfs_dev_stat_print_on_load(device); in btrfs_init_dev_stats()
6971 struct btrfs_device *device) in update_dev_stat_item() argument
6982 key.offset = device->devid; in update_dev_stat_item()
6990 ret, rcu_str_deref(device->name)); in update_dev_stat_item()
7001 rcu_str_deref(device->name), ret); in update_dev_stat_item()
7015 rcu_str_deref(device->name), ret); in update_dev_stat_item()
7024 btrfs_dev_stat_read(device, i)); in update_dev_stat_item()
7040 struct btrfs_device *device; in btrfs_run_dev_stats() local
7045 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_run_dev_stats()
7046 if (!device->dev_stats_valid || !btrfs_dev_stats_dirty(device)) in btrfs_run_dev_stats()
7049 stats_cnt = atomic_read(&device->dev_stats_ccnt); in btrfs_run_dev_stats()
7050 ret = update_dev_stat_item(trans, dev_root, device); in btrfs_run_dev_stats()
7052 atomic_sub(stats_cnt, &device->dev_stats_ccnt); in btrfs_run_dev_stats()