Lines Matching refs:disk

138 	state->disk = hd;  in check_partition()
314 static struct block_device *add_partition(struct gendisk *disk, int partno, in add_partition() argument
319 struct device *ddev = disk_to_dev(disk); in add_partition()
325 lockdep_assert_held(&disk->open_mutex); in add_partition()
327 if (partno >= disk_max_parts(disk)) in add_partition()
334 switch (disk->queue->limits.zoned) { in add_partition()
337 disk->disk_name); in add_partition()
341 disk->disk_name); in add_partition()
342 blk_queue_set_zoned(disk, BLK_ZONED_NONE); in add_partition()
348 if (xa_load(&disk->part_tbl, partno)) in add_partition()
352 get_device(disk_to_dev(disk)); in add_partition()
355 bdev = bdev_alloc(disk, partno); in add_partition()
375 if (bdev->bd_partno < disk->minors) { in add_partition()
376 devt = MKDEV(disk->major, disk->first_minor + bdev->bd_partno); in add_partition()
411 err = xa_insert(&disk->part_tbl, partno, bdev, GFP_KERNEL); in add_partition()
428 put_disk(disk); in add_partition()
432 static bool partition_overlaps(struct gendisk *disk, sector_t start, in partition_overlaps() argument
440 xa_for_each_start(&disk->part_tbl, idx, part, 1) { in partition_overlaps()
453 int bdev_add_partition(struct gendisk *disk, int partno, sector_t start, in bdev_add_partition() argument
459 mutex_lock(&disk->open_mutex); in bdev_add_partition()
460 if (!disk_live(disk)) { in bdev_add_partition()
465 if (partition_overlaps(disk, start, length, -1)) { in bdev_add_partition()
470 part = add_partition(disk, partno, start, length, in bdev_add_partition()
474 mutex_unlock(&disk->open_mutex); in bdev_add_partition()
478 int bdev_del_partition(struct gendisk *disk, int partno) in bdev_del_partition() argument
483 mutex_lock(&disk->open_mutex); in bdev_del_partition()
484 part = xa_load(&disk->part_tbl, partno); in bdev_del_partition()
495 mutex_unlock(&disk->open_mutex); in bdev_del_partition()
499 int bdev_resize_partition(struct gendisk *disk, int partno, sector_t start, in bdev_resize_partition() argument
505 mutex_lock(&disk->open_mutex); in bdev_resize_partition()
506 part = xa_load(&disk->part_tbl, partno); in bdev_resize_partition()
515 if (partition_overlaps(disk, start, length, partno)) in bdev_resize_partition()
522 mutex_unlock(&disk->open_mutex); in bdev_resize_partition()
526 static bool disk_unlock_native_capacity(struct gendisk *disk) in disk_unlock_native_capacity() argument
528 const struct block_device_operations *bdops = disk->fops; in disk_unlock_native_capacity()
531 !(disk->flags & GENHD_FL_NATIVE_CAPACITY)) { in disk_unlock_native_capacity()
533 bdops->unlock_native_capacity(disk); in disk_unlock_native_capacity()
534 disk->flags |= GENHD_FL_NATIVE_CAPACITY; in disk_unlock_native_capacity()
542 void blk_drop_partitions(struct gendisk *disk) in blk_drop_partitions() argument
547 lockdep_assert_held(&disk->open_mutex); in blk_drop_partitions()
549 xa_for_each_start(&disk->part_tbl, idx, part, 1) in blk_drop_partitions()
553 static bool blk_add_partition(struct gendisk *disk, in blk_add_partition() argument
563 if (from >= get_capacity(disk)) { in blk_add_partition()
566 disk->disk_name, p, (unsigned long long) from); in blk_add_partition()
567 if (disk_unlock_native_capacity(disk)) in blk_add_partition()
572 if (from + size > get_capacity(disk)) { in blk_add_partition()
575 disk->disk_name, p, (unsigned long long) size); in blk_add_partition()
577 if (disk_unlock_native_capacity(disk)) in blk_add_partition()
585 size = get_capacity(disk) - from; in blk_add_partition()
588 part = add_partition(disk, p, from, size, state->parts[p].flags, in blk_add_partition()
592 disk->disk_name, p, -PTR_ERR(part)); in blk_add_partition()
603 static int blk_add_partitions(struct gendisk *disk) in blk_add_partitions() argument
608 if (!disk_part_scan_enabled(disk)) in blk_add_partitions()
611 state = check_partition(disk); in blk_add_partitions()
621 disk->disk_name); in blk_add_partitions()
622 if (disk_unlock_native_capacity(disk)) in blk_add_partitions()
631 if (disk->queue->limits.zoned == BLK_ZONED_HM) { in blk_add_partitions()
633 disk->disk_name); in blk_add_partitions()
646 disk->disk_name); in blk_add_partitions()
647 if (disk_unlock_native_capacity(disk)) in blk_add_partitions()
652 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); in blk_add_partitions()
655 if (!blk_add_partition(disk, state, p)) in blk_add_partitions()
664 int bdev_disk_changed(struct gendisk *disk, bool invalidate) in bdev_disk_changed() argument
668 lockdep_assert_held(&disk->open_mutex); in bdev_disk_changed()
670 if (!disk_live(disk)) in bdev_disk_changed()
674 if (disk->open_partitions) in bdev_disk_changed()
676 sync_blockdev(disk->part0); in bdev_disk_changed()
677 invalidate_bdev(disk->part0); in bdev_disk_changed()
678 blk_drop_partitions(disk); in bdev_disk_changed()
680 clear_bit(GD_NEED_PART_SCAN, &disk->state); in bdev_disk_changed()
691 if (disk_part_scan_enabled(disk) || in bdev_disk_changed()
692 !(disk->flags & GENHD_FL_REMOVABLE)) in bdev_disk_changed()
693 set_capacity(disk, 0); in bdev_disk_changed()
696 if (get_capacity(disk)) { in bdev_disk_changed()
697 ret = blk_add_partitions(disk); in bdev_disk_changed()
705 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); in bdev_disk_changed()
718 struct address_space *mapping = state->disk->part0->bd_inode->i_mapping; in read_part_sector()
721 if (n >= get_capacity(state->disk)) { in read_part_sector()