Lines Matching refs:zone_info
185 struct btrfs_zoned_device_info *zone_info) in zone_start_physical() argument
187 return (u64)zone_number << zone_info->zone_size_shift; in zone_start_physical()
223 struct btrfs_zoned_device_info *zinfo = device->zone_info; in btrfs_get_dev_zones()
249 struct blk_zone *zone_info; in btrfs_get_dev_zones() local
251 zone_info = &zinfo->zone_cache[zno + i]; in btrfs_get_dev_zones()
252 if (!zone_info->len) in btrfs_get_dev_zones()
360 struct btrfs_zoned_device_info *zone_info = NULL; in btrfs_get_dev_zone_info() local
379 if (device->zone_info) in btrfs_get_dev_zone_info()
382 zone_info = kzalloc(sizeof(*zone_info), GFP_KERNEL); in btrfs_get_dev_zone_info()
383 if (!zone_info) in btrfs_get_dev_zone_info()
386 device->zone_info = zone_info; in btrfs_get_dev_zone_info()
402 zone_info->zone_size = zone_sectors << SECTOR_SHIFT; in btrfs_get_dev_zone_info()
405 if (zone_info->zone_size > BTRFS_MAX_ZONE_SIZE) { in btrfs_get_dev_zone_info()
409 zone_info->zone_size, BTRFS_MAX_ZONE_SIZE); in btrfs_get_dev_zone_info()
412 } else if (zone_info->zone_size < BTRFS_MIN_ZONE_SIZE) { in btrfs_get_dev_zone_info()
416 zone_info->zone_size, BTRFS_MIN_ZONE_SIZE); in btrfs_get_dev_zone_info()
422 zone_info->zone_size_shift = ilog2(zone_info->zone_size); in btrfs_get_dev_zone_info()
423 zone_info->nr_zones = nr_sectors >> ilog2(zone_sectors); in btrfs_get_dev_zone_info()
425 zone_info->nr_zones++; in btrfs_get_dev_zone_info()
436 zone_info->max_active_zones = max_active_zones; in btrfs_get_dev_zone_info()
438 zone_info->seq_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL); in btrfs_get_dev_zone_info()
439 if (!zone_info->seq_zones) { in btrfs_get_dev_zone_info()
444 zone_info->empty_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL); in btrfs_get_dev_zone_info()
445 if (!zone_info->empty_zones) { in btrfs_get_dev_zone_info()
450 zone_info->active_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL); in btrfs_get_dev_zone_info()
451 if (!zone_info->active_zones) { in btrfs_get_dev_zone_info()
468 zone_info->zone_cache = vzalloc(sizeof(struct blk_zone) * in btrfs_get_dev_zone_info()
469 zone_info->nr_zones); in btrfs_get_dev_zone_info()
470 if (!zone_info->zone_cache) { in btrfs_get_dev_zone_info()
490 __set_bit(nreported, zone_info->seq_zones); in btrfs_get_dev_zone_info()
493 __set_bit(nreported, zone_info->empty_zones); in btrfs_get_dev_zone_info()
498 __set_bit(nreported, zone_info->active_zones); in btrfs_get_dev_zone_info()
507 if (nreported != zone_info->nr_zones) { in btrfs_get_dev_zone_info()
511 zone_info->nr_zones); in btrfs_get_dev_zone_info()
525 atomic_set(&zone_info->active_zones_left, in btrfs_get_dev_zone_info()
538 sb_zone = sb_zone_number(zone_info->zone_size_shift, i); in btrfs_get_dev_zone_info()
539 if (sb_zone + 1 >= zone_info->nr_zones) in btrfs_get_dev_zone_info()
543 zone_start_physical(sb_zone, zone_info), in btrfs_get_dev_zone_info()
544 &zone_info->sb_zones[sb_pos], in btrfs_get_dev_zone_info()
561 if (zone_info->sb_zones[BTRFS_NR_SB_LOG_ZONES * i].type == in btrfs_get_dev_zone_info()
566 &zone_info->sb_zones[sb_pos], &sb_wp); in btrfs_get_dev_zone_info()
603 model, rcu_str_deref(device->name), zone_info->nr_zones, in btrfs_get_dev_zone_info()
604 emulated, zone_info->zone_size); in btrfs_get_dev_zone_info()
618 struct btrfs_zoned_device_info *zone_info = device->zone_info; in btrfs_destroy_dev_zone_info() local
620 if (!zone_info) in btrfs_destroy_dev_zone_info()
623 bitmap_free(zone_info->active_zones); in btrfs_destroy_dev_zone_info()
624 bitmap_free(zone_info->seq_zones); in btrfs_destroy_dev_zone_info()
625 bitmap_free(zone_info->empty_zones); in btrfs_destroy_dev_zone_info()
626 vfree(zone_info->zone_cache); in btrfs_destroy_dev_zone_info()
627 kfree(zone_info); in btrfs_destroy_dev_zone_info()
628 device->zone_info = NULL; in btrfs_destroy_dev_zone_info()
633 struct btrfs_zoned_device_info *zone_info; in btrfs_clone_dev_zone_info() local
635 zone_info = kmemdup(orig_dev->zone_info, sizeof(*zone_info), GFP_KERNEL); in btrfs_clone_dev_zone_info()
636 if (!zone_info) in btrfs_clone_dev_zone_info()
639 zone_info->seq_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL); in btrfs_clone_dev_zone_info()
640 if (!zone_info->seq_zones) in btrfs_clone_dev_zone_info()
643 bitmap_copy(zone_info->seq_zones, orig_dev->zone_info->seq_zones, in btrfs_clone_dev_zone_info()
644 zone_info->nr_zones); in btrfs_clone_dev_zone_info()
646 zone_info->empty_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL); in btrfs_clone_dev_zone_info()
647 if (!zone_info->empty_zones) in btrfs_clone_dev_zone_info()
650 bitmap_copy(zone_info->empty_zones, orig_dev->zone_info->empty_zones, in btrfs_clone_dev_zone_info()
651 zone_info->nr_zones); in btrfs_clone_dev_zone_info()
653 zone_info->active_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL); in btrfs_clone_dev_zone_info()
654 if (!zone_info->active_zones) in btrfs_clone_dev_zone_info()
657 bitmap_copy(zone_info->active_zones, orig_dev->zone_info->active_zones, in btrfs_clone_dev_zone_info()
658 zone_info->nr_zones); in btrfs_clone_dev_zone_info()
659 zone_info->zone_cache = NULL; in btrfs_clone_dev_zone_info()
661 return zone_info; in btrfs_clone_dev_zone_info()
664 bitmap_free(zone_info->seq_zones); in btrfs_clone_dev_zone_info()
665 bitmap_free(zone_info->empty_zones); in btrfs_clone_dev_zone_info()
666 bitmap_free(zone_info->active_zones); in btrfs_clone_dev_zone_info()
667 kfree(zone_info); in btrfs_clone_dev_zone_info()
718 struct btrfs_zoned_device_info *zone_info = device->zone_info; in btrfs_check_zoned_mode() local
724 zone_size = zone_info->zone_size; in btrfs_check_zoned_mode()
725 } else if (zone_info->zone_size != zone_size) { in btrfs_check_zoned_mode()
728 zone_info->zone_size, zone_size); in btrfs_check_zoned_mode()
913 struct btrfs_zoned_device_info *zinfo = device->zone_info; in btrfs_sb_log_location()
956 struct btrfs_zoned_device_info *zinfo = device->zone_info; in btrfs_advance_sb_log()
1042 struct btrfs_zoned_device_info *zinfo = device->zone_info; in btrfs_find_allocatable_zones()
1100 struct btrfs_zoned_device_info *zone_info = device->zone_info; in btrfs_dev_set_active_zone() local
1101 unsigned int zno = (pos >> zone_info->zone_size_shift); in btrfs_dev_set_active_zone()
1104 if (zone_info->max_active_zones == 0) in btrfs_dev_set_active_zone()
1107 if (!test_bit(zno, zone_info->active_zones)) { in btrfs_dev_set_active_zone()
1109 if (atomic_dec_if_positive(&zone_info->active_zones_left) < 0) in btrfs_dev_set_active_zone()
1111 if (test_and_set_bit(zno, zone_info->active_zones)) { in btrfs_dev_set_active_zone()
1113 atomic_inc(&zone_info->active_zones_left); in btrfs_dev_set_active_zone()
1122 struct btrfs_zoned_device_info *zone_info = device->zone_info; in btrfs_dev_clear_active_zone() local
1123 unsigned int zno = (pos >> zone_info->zone_size_shift); in btrfs_dev_clear_active_zone()
1126 if (zone_info->max_active_zones == 0) in btrfs_dev_clear_active_zone()
1129 if (test_and_clear_bit(zno, zone_info->active_zones)) in btrfs_dev_clear_active_zone()
1130 atomic_inc(&zone_info->active_zones_left); in btrfs_dev_clear_active_zone()
1149 physical += device->zone_info->zone_size; in btrfs_reset_device_zone()
1150 length -= device->zone_info->zone_size; in btrfs_reset_device_zone()
1158 struct btrfs_zoned_device_info *zinfo = device->zone_info; in btrfs_ensure_empty_zones()
1374 if (!device->zone_info->max_active_zones) in btrfs_load_block_group_zone_info()
1426 physical[i] >> device->zone_info->zone_size_shift, in btrfs_load_block_group_zone_info()
1893 if (device->zone_info->max_active_zones == 0) in btrfs_zone_activate()
2034 if (device->zone_info->max_active_zones == 0) in do_zone_finish()
2039 device->zone_info->zone_size >> SECTOR_SHIFT, in do_zone_finish()
2084 struct btrfs_zoned_device_info *zinfo = device->zone_info; in btrfs_can_activate_zone()
2183 if (device->zone_info) { in btrfs_free_zone_cache()
2184 vfree(device->zone_info->zone_cache); in btrfs_free_zone_cache()
2185 device->zone_info->zone_cache = NULL; in btrfs_free_zone_cache()