Lines Matching refs:device
47 struct btrfs_device *device);
51 static void btrfs_dev_stat_print_on_load(struct btrfs_device *device);
101 struct btrfs_device *device; in free_fs_devices() local
104 device = list_entry(fs_devices->devices.next, in free_fs_devices()
106 list_del(&device->dev_list); in free_fs_devices()
107 rcu_string_free(device->name); in free_fs_devices()
108 kfree(device); in free_fs_devices()
250 static noinline void run_scheduled_bios(struct btrfs_device *device) in run_scheduled_bios() argument
275 bdi = blk_get_backing_dev_info(device->bdev); in run_scheduled_bios()
276 fs_info = device->dev_root->fs_info; in run_scheduled_bios()
281 spin_lock(&device->io_lock); in run_scheduled_bios()
291 if (!force_reg && device->pending_sync_bios.head) { in run_scheduled_bios()
292 pending_bios = &device->pending_sync_bios; in run_scheduled_bios()
295 pending_bios = &device->pending_bios; in run_scheduled_bios()
311 if (device->pending_sync_bios.head == NULL && in run_scheduled_bios()
312 device->pending_bios.head == NULL) { in run_scheduled_bios()
314 device->running_pending = 0; in run_scheduled_bios()
317 device->running_pending = 1; in run_scheduled_bios()
323 spin_unlock(&device->io_lock); in run_scheduled_bios()
332 pending_bios != &device->pending_sync_bios && in run_scheduled_bios()
333 device->pending_sync_bios.head) || in run_scheduled_bios()
334 (num_run > 64 && pending_bios == &device->pending_sync_bios && in run_scheduled_bios()
335 device->pending_bios.head)) { in run_scheduled_bios()
336 spin_lock(&device->io_lock); in run_scheduled_bios()
359 if (pending_bios == &device->pending_sync_bios) { in run_scheduled_bios()
407 spin_lock(&device->io_lock); in run_scheduled_bios()
409 device->running_pending = 1; in run_scheduled_bios()
411 spin_unlock(&device->io_lock); in run_scheduled_bios()
413 &device->work); in run_scheduled_bios()
428 spin_lock(&device->io_lock); in run_scheduled_bios()
429 if (device->pending_bios.head || device->pending_sync_bios.head) in run_scheduled_bios()
431 spin_unlock(&device->io_lock); in run_scheduled_bios()
439 struct btrfs_device *device; in pending_bios_fn() local
441 device = container_of(work, struct btrfs_device, work); in pending_bios_fn()
442 run_scheduled_bios(device); in pending_bios_fn()
457 struct btrfs_device *device; in device_list_add() local
471 device = NULL; in device_list_add()
473 device = __find_device(&fs_devices->devices, devid, in device_list_add()
477 if (!device) { in device_list_add()
481 device = btrfs_alloc_device(NULL, &devid, in device_list_add()
483 if (IS_ERR(device)) { in device_list_add()
485 return PTR_ERR(device); in device_list_add()
490 kfree(device); in device_list_add()
493 rcu_assign_pointer(device->name, name); in device_list_add()
496 list_add_rcu(&device->dev_list, &fs_devices->devices); in device_list_add()
501 device->fs_devices = fs_devices; in device_list_add()
502 } else if (!device->name || strcmp(device->name->str, path)) { in device_list_add()
529 if (!fs_devices->opened && found_transid < device->generation) { in device_list_add()
543 rcu_string_free(device->name); in device_list_add()
544 rcu_assign_pointer(device->name, name); in device_list_add()
545 if (device->missing) { in device_list_add()
547 device->missing = 0; in device_list_add()
558 device->generation = found_transid; in device_list_add()
568 struct btrfs_device *device; in clone_fs_devices() local
582 device = btrfs_alloc_device(NULL, &orig_dev->devid, in clone_fs_devices()
584 if (IS_ERR(device)) in clone_fs_devices()
594 kfree(device); in clone_fs_devices()
597 rcu_assign_pointer(device->name, name); in clone_fs_devices()
600 list_add(&device->dev_list, &fs_devices->devices); in clone_fs_devices()
601 device->fs_devices = fs_devices; in clone_fs_devices()
614 struct btrfs_device *device, *next; in btrfs_close_extra_devices() local
620 list_for_each_entry_safe(device, next, &fs_devices->devices, dev_list) { in btrfs_close_extra_devices()
621 if (device->in_fs_metadata) { in btrfs_close_extra_devices()
622 if (!device->is_tgtdev_for_dev_replace && in btrfs_close_extra_devices()
624 device->generation > latest_dev->generation)) { in btrfs_close_extra_devices()
625 latest_dev = device; in btrfs_close_extra_devices()
630 if (device->devid == BTRFS_DEV_REPLACE_DEVID) { in btrfs_close_extra_devices()
641 if (step == 0 || device->is_tgtdev_for_dev_replace) { in btrfs_close_extra_devices()
645 if (device->bdev) { in btrfs_close_extra_devices()
646 blkdev_put(device->bdev, device->mode); in btrfs_close_extra_devices()
647 device->bdev = NULL; in btrfs_close_extra_devices()
650 if (device->writeable) { in btrfs_close_extra_devices()
651 list_del_init(&device->dev_alloc_list); in btrfs_close_extra_devices()
652 device->writeable = 0; in btrfs_close_extra_devices()
653 if (!device->is_tgtdev_for_dev_replace) in btrfs_close_extra_devices()
656 list_del_init(&device->dev_list); in btrfs_close_extra_devices()
658 rcu_string_free(device->name); in btrfs_close_extra_devices()
659 kfree(device); in btrfs_close_extra_devices()
674 struct btrfs_device *device; in __free_device() local
676 device = container_of(work, struct btrfs_device, rcu_work); in __free_device()
678 if (device->bdev) in __free_device()
679 blkdev_put(device->bdev, device->mode); in __free_device()
681 rcu_string_free(device->name); in __free_device()
682 kfree(device); in __free_device()
687 struct btrfs_device *device; in free_device() local
689 device = container_of(head, struct btrfs_device, rcu); in free_device()
691 INIT_WORK(&device->rcu_work, __free_device); in free_device()
692 schedule_work(&device->rcu_work); in free_device()
697 struct btrfs_device *device; in __btrfs_close_devices() local
703 list_for_each_entry(device, &fs_devices->devices, dev_list) { in __btrfs_close_devices()
707 if (device->bdev) in __btrfs_close_devices()
710 if (device->writeable && in __btrfs_close_devices()
711 device->devid != BTRFS_DEV_REPLACE_DEVID) { in __btrfs_close_devices()
712 list_del_init(&device->dev_alloc_list); in __btrfs_close_devices()
716 if (device->missing) in __btrfs_close_devices()
719 new_device = btrfs_alloc_device(NULL, &device->devid, in __btrfs_close_devices()
720 device->uuid); in __btrfs_close_devices()
724 if (device->name) { in __btrfs_close_devices()
725 name = rcu_string_strdup(device->name->str, GFP_NOFS); in __btrfs_close_devices()
730 list_replace_rcu(&device->dev_list, &new_device->dev_list); in __btrfs_close_devices()
731 new_device->fs_devices = device->fs_devices; in __btrfs_close_devices()
733 call_rcu(&device->rcu, free_device); in __btrfs_close_devices()
779 struct btrfs_device *device; in __btrfs_open_devices() local
789 list_for_each_entry(device, head, dev_list) { in __btrfs_open_devices()
790 if (device->bdev) in __btrfs_open_devices()
792 if (!device->name) in __btrfs_open_devices()
796 if (btrfs_get_bdev_and_sb(device->name->str, flags, holder, 1, in __btrfs_open_devices()
802 if (devid != device->devid) in __btrfs_open_devices()
805 if (memcmp(device->uuid, disk_super->dev_item.uuid, in __btrfs_open_devices()
809 device->generation = btrfs_super_generation(disk_super); in __btrfs_open_devices()
811 device->generation > latest_dev->generation) in __btrfs_open_devices()
812 latest_dev = device; in __btrfs_open_devices()
815 device->writeable = 0; in __btrfs_open_devices()
817 device->writeable = !bdev_read_only(bdev); in __btrfs_open_devices()
823 device->can_discard = 1; in __btrfs_open_devices()
825 device->bdev = bdev; in __btrfs_open_devices()
826 device->in_fs_metadata = 0; in __btrfs_open_devices()
827 device->mode = flags; in __btrfs_open_devices()
833 if (device->writeable && in __btrfs_open_devices()
834 device->devid != BTRFS_DEV_REPLACE_DEVID) { in __btrfs_open_devices()
836 list_add(&device->dev_alloc_list, in __btrfs_open_devices()
972 int btrfs_account_dev_extents_size(struct btrfs_device *device, u64 start, in btrfs_account_dev_extents_size() argument
976 struct btrfs_root *root = device->dev_root; in btrfs_account_dev_extents_size()
986 if (start >= device->total_bytes || device->is_tgtdev_for_dev_replace) in btrfs_account_dev_extents_size()
994 key.objectid = device->devid; in btrfs_account_dev_extents_size()
1021 if (key.objectid < device->devid) in btrfs_account_dev_extents_size()
1024 if (key.objectid > device->devid) in btrfs_account_dev_extents_size()
1056 struct btrfs_device *device, in contains_pending_extent() argument
1071 if (map->stripes[i].dev != device) in contains_pending_extent()
1112 struct btrfs_device *device, u64 num_bytes, in find_free_dev_extent() argument
1116 struct btrfs_root *root = device->dev_root; in find_free_dev_extent()
1124 u64 search_end = device->total_bytes; in find_free_dev_extent()
1144 if (search_start >= search_end || device->is_tgtdev_for_dev_replace) { in find_free_dev_extent()
1153 key.objectid = device->devid; in find_free_dev_extent()
1180 if (key.objectid < device->devid) in find_free_dev_extent()
1183 if (key.objectid > device->devid) in find_free_dev_extent()
1196 if (contains_pending_extent(trans, device, in find_free_dev_extent()
1245 if (contains_pending_extent(trans, device, &search_start, in find_free_dev_extent()
1272 struct btrfs_device *device, in btrfs_free_dev_extent() argument
1277 struct btrfs_root *root = device->dev_root; in btrfs_free_dev_extent()
1287 key.objectid = device->devid; in btrfs_free_dev_extent()
1330 struct btrfs_device *device, in btrfs_alloc_dev_extent() argument
1336 struct btrfs_root *root = device->dev_root; in btrfs_alloc_dev_extent()
1341 WARN_ON(!device->in_fs_metadata); in btrfs_alloc_dev_extent()
1342 WARN_ON(device->is_tgtdev_for_dev_replace); in btrfs_alloc_dev_extent()
1347 key.objectid = device->devid; in btrfs_alloc_dev_extent()
1435 struct btrfs_device *device) in btrfs_add_device() argument
1452 key.offset = device->devid; in btrfs_add_device()
1462 btrfs_set_device_id(leaf, dev_item, device->devid); in btrfs_add_device()
1464 btrfs_set_device_type(leaf, dev_item, device->type); in btrfs_add_device()
1465 btrfs_set_device_io_align(leaf, dev_item, device->io_align); in btrfs_add_device()
1466 btrfs_set_device_io_width(leaf, dev_item, device->io_width); in btrfs_add_device()
1467 btrfs_set_device_sector_size(leaf, dev_item, device->sector_size); in btrfs_add_device()
1469 btrfs_device_get_disk_total_bytes(device)); in btrfs_add_device()
1471 btrfs_device_get_bytes_used(device)); in btrfs_add_device()
1478 write_extent_buffer(leaf, device->uuid, ptr, BTRFS_UUID_SIZE); in btrfs_add_device()
1506 struct btrfs_device *device) in btrfs_rm_dev_item() argument
1526 key.offset = device->devid; in btrfs_rm_dev_item()
1548 struct btrfs_device *device; in btrfs_rm_device() local
1605 device = NULL; in btrfs_rm_device()
1615 device = tmp; in btrfs_rm_device()
1622 if (!device) { in btrfs_rm_device()
1636 device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_rm_device()
1638 if (!device) { in btrfs_rm_device()
1644 if (device->is_tgtdev_for_dev_replace) { in btrfs_rm_device()
1649 if (device->writeable && root->fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
1654 if (device->writeable) { in btrfs_rm_device()
1656 list_del_init(&device->dev_alloc_list); in btrfs_rm_device()
1657 device->fs_devices->rw_devices--; in btrfs_rm_device()
1663 ret = btrfs_shrink_device(device, 0); in btrfs_rm_device()
1673 ret = btrfs_rm_dev_item(root->fs_info->chunk_root, device); in btrfs_rm_device()
1677 device->in_fs_metadata = 0; in btrfs_rm_device()
1678 btrfs_scrub_cancel_dev(root->fs_info, device); in btrfs_rm_device()
1690 cur_devices = device->fs_devices; in btrfs_rm_device()
1692 list_del_rcu(&device->dev_list); in btrfs_rm_device()
1694 device->fs_devices->num_devices--; in btrfs_rm_device()
1695 device->fs_devices->total_devices--; in btrfs_rm_device()
1697 if (device->missing) in btrfs_rm_device()
1698 device->fs_devices->missing_devices--; in btrfs_rm_device()
1702 if (device->bdev == root->fs_info->sb->s_bdev) in btrfs_rm_device()
1704 if (device->bdev == root->fs_info->fs_devices->latest_bdev) in btrfs_rm_device()
1707 if (device->bdev) { in btrfs_rm_device()
1708 device->fs_devices->open_devices--; in btrfs_rm_device()
1710 btrfs_kobj_rm_device(root->fs_info, device); in btrfs_rm_device()
1713 call_rcu(&device->rcu, free_device); in btrfs_rm_device()
1799 if (device->writeable) { in btrfs_rm_device()
1801 list_add(&device->dev_alloc_list, in btrfs_rm_device()
1803 device->fs_devices->rw_devices++; in btrfs_rm_device()
1900 struct btrfs_device **device) in btrfs_find_device_by_path() argument
1909 *device = NULL; in btrfs_find_device_by_path()
1917 *device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_find_device_by_path()
1920 if (!*device) in btrfs_find_device_by_path()
1928 struct btrfs_device **device) in btrfs_find_device_missing_or_by_path() argument
1930 *device = NULL; in btrfs_find_device_missing_or_by_path()
1942 *device = tmp; in btrfs_find_device_missing_or_by_path()
1947 if (!*device) { in btrfs_find_device_missing_or_by_path()
1954 return btrfs_find_device_by_path(root, device_path, device); in btrfs_find_device_missing_or_by_path()
1967 struct btrfs_device *device; in btrfs_prepare_sprout() local
1995 list_for_each_entry(device, &seed_devices->devices, dev_list) in btrfs_prepare_sprout()
1996 device->fs_devices = seed_devices; in btrfs_prepare_sprout()
2030 struct btrfs_device *device; in btrfs_finish_sprout() local
2077 device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_finish_sprout()
2079 BUG_ON(!device); /* Logic error */ in btrfs_finish_sprout()
2081 if (device->fs_devices->seeding) { in btrfs_finish_sprout()
2083 device->generation); in btrfs_finish_sprout()
2100 struct btrfs_device *device; in btrfs_init_new_device() local
2128 list_for_each_entry(device, devices, dev_list) { in btrfs_init_new_device()
2129 if (device->bdev == bdev) { in btrfs_init_new_device()
2138 device = btrfs_alloc_device(root->fs_info, NULL, NULL); in btrfs_init_new_device()
2139 if (IS_ERR(device)) { in btrfs_init_new_device()
2141 ret = PTR_ERR(device); in btrfs_init_new_device()
2147 kfree(device); in btrfs_init_new_device()
2151 rcu_assign_pointer(device->name, name); in btrfs_init_new_device()
2155 rcu_string_free(device->name); in btrfs_init_new_device()
2156 kfree(device); in btrfs_init_new_device()
2163 device->can_discard = 1; in btrfs_init_new_device()
2164 device->writeable = 1; in btrfs_init_new_device()
2165 device->generation = trans->transid; in btrfs_init_new_device()
2166 device->io_width = root->sectorsize; in btrfs_init_new_device()
2167 device->io_align = root->sectorsize; in btrfs_init_new_device()
2168 device->sector_size = root->sectorsize; in btrfs_init_new_device()
2169 device->total_bytes = i_size_read(bdev->bd_inode); in btrfs_init_new_device()
2170 device->disk_total_bytes = device->total_bytes; in btrfs_init_new_device()
2171 device->commit_total_bytes = device->total_bytes; in btrfs_init_new_device()
2172 device->dev_root = root->fs_info->dev_root; in btrfs_init_new_device()
2173 device->bdev = bdev; in btrfs_init_new_device()
2174 device->in_fs_metadata = 1; in btrfs_init_new_device()
2175 device->is_tgtdev_for_dev_replace = 0; in btrfs_init_new_device()
2176 device->mode = FMODE_EXCL; in btrfs_init_new_device()
2177 device->dev_stats_valid = 1; in btrfs_init_new_device()
2178 set_blocksize(device->bdev, 4096); in btrfs_init_new_device()
2186 device->fs_devices = root->fs_info->fs_devices; in btrfs_init_new_device()
2190 list_add_rcu(&device->dev_list, &root->fs_info->fs_devices->devices); in btrfs_init_new_device()
2191 list_add(&device->dev_alloc_list, in btrfs_init_new_device()
2197 root->fs_info->fs_devices->total_rw_bytes += device->total_bytes; in btrfs_init_new_device()
2200 root->fs_info->free_chunk_space += device->total_bytes; in btrfs_init_new_device()
2208 tmp + device->total_bytes); in btrfs_init_new_device()
2215 btrfs_kobj_add_device(root->fs_info, device); in btrfs_init_new_device()
2228 ret = init_first_rw_device(trans, root, device); in btrfs_init_new_device()
2236 ret = btrfs_add_device(trans, root, device); in btrfs_init_new_device()
2292 rcu_string_free(device->name); in btrfs_init_new_device()
2293 btrfs_kobj_rm_device(root->fs_info, device); in btrfs_init_new_device()
2294 kfree(device); in btrfs_init_new_device()
2309 struct btrfs_device *device; in btrfs_init_dev_replace_tgtdev() local
2333 list_for_each_entry(device, devices, dev_list) { in btrfs_init_dev_replace_tgtdev()
2334 if (device->bdev == bdev) { in btrfs_init_dev_replace_tgtdev()
2350 device = btrfs_alloc_device(NULL, &devid, NULL); in btrfs_init_dev_replace_tgtdev()
2351 if (IS_ERR(device)) { in btrfs_init_dev_replace_tgtdev()
2352 ret = PTR_ERR(device); in btrfs_init_dev_replace_tgtdev()
2358 kfree(device); in btrfs_init_dev_replace_tgtdev()
2362 rcu_assign_pointer(device->name, name); in btrfs_init_dev_replace_tgtdev()
2366 device->can_discard = 1; in btrfs_init_dev_replace_tgtdev()
2368 device->writeable = 1; in btrfs_init_dev_replace_tgtdev()
2369 device->generation = 0; in btrfs_init_dev_replace_tgtdev()
2370 device->io_width = root->sectorsize; in btrfs_init_dev_replace_tgtdev()
2371 device->io_align = root->sectorsize; in btrfs_init_dev_replace_tgtdev()
2372 device->sector_size = root->sectorsize; in btrfs_init_dev_replace_tgtdev()
2373 device->total_bytes = btrfs_device_get_total_bytes(srcdev); in btrfs_init_dev_replace_tgtdev()
2374 device->disk_total_bytes = btrfs_device_get_disk_total_bytes(srcdev); in btrfs_init_dev_replace_tgtdev()
2375 device->bytes_used = btrfs_device_get_bytes_used(srcdev); in btrfs_init_dev_replace_tgtdev()
2377 device->commit_total_bytes = srcdev->commit_total_bytes; in btrfs_init_dev_replace_tgtdev()
2378 device->commit_bytes_used = device->bytes_used; in btrfs_init_dev_replace_tgtdev()
2379 device->dev_root = fs_info->dev_root; in btrfs_init_dev_replace_tgtdev()
2380 device->bdev = bdev; in btrfs_init_dev_replace_tgtdev()
2381 device->in_fs_metadata = 1; in btrfs_init_dev_replace_tgtdev()
2382 device->is_tgtdev_for_dev_replace = 1; in btrfs_init_dev_replace_tgtdev()
2383 device->mode = FMODE_EXCL; in btrfs_init_dev_replace_tgtdev()
2384 device->dev_stats_valid = 1; in btrfs_init_dev_replace_tgtdev()
2385 set_blocksize(device->bdev, 4096); in btrfs_init_dev_replace_tgtdev()
2386 device->fs_devices = fs_info->fs_devices; in btrfs_init_dev_replace_tgtdev()
2387 list_add(&device->dev_list, &fs_info->fs_devices->devices); in btrfs_init_dev_replace_tgtdev()
2392 *device_out = device; in btrfs_init_dev_replace_tgtdev()
2412 struct btrfs_device *device) in btrfs_update_device() argument
2421 root = device->dev_root->fs_info->chunk_root; in btrfs_update_device()
2429 key.offset = device->devid; in btrfs_update_device()
2443 btrfs_set_device_id(leaf, dev_item, device->devid); in btrfs_update_device()
2444 btrfs_set_device_type(leaf, dev_item, device->type); in btrfs_update_device()
2445 btrfs_set_device_io_align(leaf, dev_item, device->io_align); in btrfs_update_device()
2446 btrfs_set_device_io_width(leaf, dev_item, device->io_width); in btrfs_update_device()
2447 btrfs_set_device_sector_size(leaf, dev_item, device->sector_size); in btrfs_update_device()
2449 btrfs_device_get_disk_total_bytes(device)); in btrfs_update_device()
2451 btrfs_device_get_bytes_used(device)); in btrfs_update_device()
2460 struct btrfs_device *device, u64 new_size) in btrfs_grow_device() argument
2463 device->dev_root->fs_info->super_copy; in btrfs_grow_device()
2468 if (!device->writeable) in btrfs_grow_device()
2471 lock_chunks(device->dev_root); in btrfs_grow_device()
2473 diff = new_size - device->total_bytes; in btrfs_grow_device()
2475 if (new_size <= device->total_bytes || in btrfs_grow_device()
2476 device->is_tgtdev_for_dev_replace) { in btrfs_grow_device()
2477 unlock_chunks(device->dev_root); in btrfs_grow_device()
2481 fs_devices = device->dev_root->fs_info->fs_devices; in btrfs_grow_device()
2484 device->fs_devices->total_rw_bytes += diff; in btrfs_grow_device()
2486 btrfs_device_set_total_bytes(device, new_size); in btrfs_grow_device()
2487 btrfs_device_set_disk_total_bytes(device, new_size); in btrfs_grow_device()
2488 btrfs_clear_space_info_full(device->dev_root->fs_info); in btrfs_grow_device()
2489 if (list_empty(&device->resized_list)) in btrfs_grow_device()
2490 list_add_tail(&device->resized_list, in btrfs_grow_device()
2492 unlock_chunks(device->dev_root); in btrfs_grow_device()
2494 return btrfs_update_device(trans, device); in btrfs_grow_device()
2615 struct btrfs_device *device = map->stripes[i].dev; in btrfs_remove_chunk() local
2616 ret = btrfs_free_dev_extent(trans, device, in btrfs_remove_chunk()
2624 if (device->bytes_used > 0) { in btrfs_remove_chunk()
2626 btrfs_device_set_bytes_used(device, in btrfs_remove_chunk()
2627 device->bytes_used - dev_extent_len); in btrfs_remove_chunk()
3144 struct btrfs_device *device; in __btrfs_balance() local
3163 list_for_each_entry(device, devices, dev_list) { in __btrfs_balance()
3164 old_size = btrfs_device_get_total_bytes(device); in __btrfs_balance()
3167 if (!device->writeable || in __btrfs_balance()
3168 btrfs_device_get_total_bytes(device) - in __btrfs_balance()
3169 btrfs_device_get_bytes_used(device) > size_to_free || in __btrfs_balance()
3170 device->is_tgtdev_for_dev_replace) in __btrfs_balance()
3173 ret = btrfs_shrink_device(device, old_size - size_to_free); in __btrfs_balance()
3181 ret = btrfs_grow_device(trans, device, old_size); in __btrfs_balance()
3956 int btrfs_shrink_device(struct btrfs_device *device, u64 new_size) in btrfs_shrink_device() argument
3959 struct btrfs_root *root = device->dev_root; in btrfs_shrink_device()
3973 u64 old_size = btrfs_device_get_total_bytes(device); in btrfs_shrink_device()
3976 if (device->is_tgtdev_for_dev_replace) in btrfs_shrink_device()
3987 btrfs_device_set_total_bytes(device, new_size); in btrfs_shrink_device()
3988 if (device->writeable) { in btrfs_shrink_device()
3989 device->fs_devices->total_rw_bytes -= diff; in btrfs_shrink_device()
3997 key.objectid = device->devid; in btrfs_shrink_device()
4019 if (key.objectid != device->devid) { in btrfs_shrink_device()
4051 btrfs_device_set_total_bytes(device, old_size); in btrfs_shrink_device()
4052 if (device->writeable) in btrfs_shrink_device()
4053 device->fs_devices->total_rw_bytes += diff; in btrfs_shrink_device()
4069 btrfs_device_set_disk_total_bytes(device, new_size); in btrfs_shrink_device()
4070 if (list_empty(&device->resized_list)) in btrfs_shrink_device()
4071 list_add_tail(&device->resized_list, in btrfs_shrink_device()
4079 ret = btrfs_update_device(trans, device); in btrfs_shrink_device()
4305 struct btrfs_device *device; in __btrfs_alloc_chunk() local
4309 device = list_entry(cur, struct btrfs_device, dev_alloc_list); in __btrfs_alloc_chunk()
4313 if (!device->writeable) { in __btrfs_alloc_chunk()
4319 if (!device->in_fs_metadata || in __btrfs_alloc_chunk()
4320 device->is_tgtdev_for_dev_replace) in __btrfs_alloc_chunk()
4323 if (device->total_bytes > device->bytes_used) in __btrfs_alloc_chunk()
4324 total_avail = device->total_bytes - device->bytes_used; in __btrfs_alloc_chunk()
4332 ret = find_free_dev_extent(trans, device, in __btrfs_alloc_chunk()
4352 devices_info[ndevs].dev = device; in __btrfs_alloc_chunk()
4519 struct btrfs_device *device; in btrfs_finish_chunk_alloc() local
4561 device = map->stripes[i].dev; in btrfs_finish_chunk_alloc()
4564 ret = btrfs_update_device(trans, device); in btrfs_finish_chunk_alloc()
4567 ret = btrfs_alloc_dev_extent(trans, device, in btrfs_finish_chunk_alloc()
4578 device = map->stripes[i].dev; in btrfs_finish_chunk_alloc()
4581 btrfs_set_stack_stripe_devid(stripe, device->devid); in btrfs_finish_chunk_alloc()
4583 memcpy(stripe->dev_uuid, device->uuid, BTRFS_UUID_SIZE); in btrfs_finish_chunk_alloc()
4636 struct btrfs_device *device) in init_first_rw_device() argument
5668 struct btrfs_device *device, in btrfs_schedule_bio() argument
5674 if (device->missing || !device->bdev) { in btrfs_schedule_bio()
5698 spin_lock(&device->io_lock); in btrfs_schedule_bio()
5700 pending_bios = &device->pending_sync_bios; in btrfs_schedule_bio()
5702 pending_bios = &device->pending_bios; in btrfs_schedule_bio()
5710 if (device->running_pending) in btrfs_schedule_bio()
5713 spin_unlock(&device->io_lock); in btrfs_schedule_bio()
5717 &device->work); in btrfs_schedule_bio()
5918 struct btrfs_device *device; in btrfs_find_device() local
5925 device = __find_device(&cur_devices->devices, in btrfs_find_device()
5927 if (device) in btrfs_find_device()
5928 return device; in btrfs_find_device()
5939 struct btrfs_device *device; in add_missing_dev() local
5941 device = btrfs_alloc_device(NULL, &devid, dev_uuid); in add_missing_dev()
5942 if (IS_ERR(device)) in add_missing_dev()
5945 list_add(&device->dev_list, &fs_devices->devices); in add_missing_dev()
5946 device->fs_devices = fs_devices; in add_missing_dev()
5949 device->missing = 1; in add_missing_dev()
5952 return device; in add_missing_dev()
6097 struct btrfs_device *device) in fill_device_from_item() argument
6101 device->devid = btrfs_device_id(leaf, dev_item); in fill_device_from_item()
6102 device->disk_total_bytes = btrfs_device_total_bytes(leaf, dev_item); in fill_device_from_item()
6103 device->total_bytes = device->disk_total_bytes; in fill_device_from_item()
6104 device->commit_total_bytes = device->disk_total_bytes; in fill_device_from_item()
6105 device->bytes_used = btrfs_device_bytes_used(leaf, dev_item); in fill_device_from_item()
6106 device->commit_bytes_used = device->bytes_used; in fill_device_from_item()
6107 device->type = btrfs_device_type(leaf, dev_item); in fill_device_from_item()
6108 device->io_align = btrfs_device_io_align(leaf, dev_item); in fill_device_from_item()
6109 device->io_width = btrfs_device_io_width(leaf, dev_item); in fill_device_from_item()
6110 device->sector_size = btrfs_device_sector_size(leaf, dev_item); in fill_device_from_item()
6111 WARN_ON(device->devid == BTRFS_DEV_REPLACE_DEVID); in fill_device_from_item()
6112 device->is_tgtdev_for_dev_replace = 0; in fill_device_from_item()
6115 read_extent_buffer(leaf, device->uuid, ptr, BTRFS_UUID_SIZE); in fill_device_from_item()
6178 struct btrfs_device *device; in read_one_dev() local
6196 device = btrfs_find_device(root->fs_info, devid, dev_uuid, fs_uuid); in read_one_dev()
6197 if (!device) { in read_one_dev()
6202 device = add_missing_dev(root, fs_devices, devid, dev_uuid); in read_one_dev()
6203 if (!device) in read_one_dev()
6206 if (!device->bdev && !btrfs_test_opt(root, DEGRADED)) in read_one_dev()
6209 if(!device->bdev && !device->missing) { in read_one_dev()
6216 device->fs_devices->missing_devices++; in read_one_dev()
6217 device->missing = 1; in read_one_dev()
6221 if (device->fs_devices != fs_devices) { in read_one_dev()
6222 ASSERT(device->missing); in read_one_dev()
6224 list_move(&device->dev_list, &fs_devices->devices); in read_one_dev()
6225 device->fs_devices->num_devices--; in read_one_dev()
6228 device->fs_devices->missing_devices--; in read_one_dev()
6231 device->fs_devices = fs_devices; in read_one_dev()
6235 if (device->fs_devices != root->fs_info->fs_devices) { in read_one_dev()
6236 BUG_ON(device->writeable); in read_one_dev()
6237 if (device->generation != in read_one_dev()
6242 fill_device_from_item(leaf, dev_item, device); in read_one_dev()
6243 device->in_fs_metadata = 1; in read_one_dev()
6244 if (device->writeable && !device->is_tgtdev_for_dev_replace) { in read_one_dev()
6245 device->fs_devices->total_rw_bytes += device->total_bytes; in read_one_dev()
6247 root->fs_info->free_chunk_space += device->total_bytes - in read_one_dev()
6248 device->bytes_used; in read_one_dev()
6429 struct btrfs_device *device; in btrfs_init_devices_late() local
6433 list_for_each_entry(device, &fs_devices->devices, dev_list) in btrfs_init_devices_late()
6434 device->dev_root = fs_info->dev_root; in btrfs_init_devices_late()
6458 struct btrfs_device *device; in btrfs_init_dev_stats() local
6469 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_init_dev_stats()
6475 key.offset = device->devid; in btrfs_init_dev_stats()
6478 __btrfs_reset_dev_stats(device); in btrfs_init_dev_stats()
6479 device->dev_stats_valid = 1; in btrfs_init_dev_stats()
6493 btrfs_dev_stat_set(device, i, in btrfs_init_dev_stats()
6496 btrfs_dev_stat_reset(device, i); in btrfs_init_dev_stats()
6499 device->dev_stats_valid = 1; in btrfs_init_dev_stats()
6500 btrfs_dev_stat_print_on_load(device); in btrfs_init_dev_stats()
6512 struct btrfs_device *device) in update_dev_stat_item() argument
6523 key.offset = device->devid; in update_dev_stat_item()
6531 ret, rcu_str_deref(device->name)); in update_dev_stat_item()
6542 rcu_str_deref(device->name), ret); in update_dev_stat_item()
6556 rcu_str_deref(device->name), ret); in update_dev_stat_item()
6565 btrfs_dev_stat_read(device, i)); in update_dev_stat_item()
6581 struct btrfs_device *device; in btrfs_run_dev_stats() local
6586 list_for_each_entry(device, &fs_devices->devices, dev_list) { in btrfs_run_dev_stats()
6587 if (!device->dev_stats_valid || !btrfs_dev_stats_dirty(device)) in btrfs_run_dev_stats()
6590 stats_cnt = atomic_read(&device->dev_stats_ccnt); in btrfs_run_dev_stats()
6591 ret = update_dev_stat_item(trans, dev_root, device); in btrfs_run_dev_stats()
6593 atomic_sub(stats_cnt, &device->dev_stats_ccnt); in btrfs_run_dev_stats()
6675 int btrfs_scratch_superblock(struct btrfs_device *device) in btrfs_scratch_superblock() argument
6680 bh = btrfs_read_dev_super(device->bdev); in btrfs_scratch_superblock()