Lines Matching refs:disk
129 state->disk = hd; in check_partition()
288 static struct block_device *add_partition(struct gendisk *disk, int partno, in add_partition() argument
293 struct device *ddev = disk_to_dev(disk); in add_partition()
299 lockdep_assert_held(&disk->open_mutex); in add_partition()
308 if (bdev_is_zoned(disk->part0)) { in add_partition()
310 disk->disk_name); in add_partition()
314 if (xa_load(&disk->part_tbl, partno)) in add_partition()
318 get_device(disk_to_dev(disk)); in add_partition()
321 bdev = bdev_alloc(disk, partno); in add_partition()
341 if (bdev_partno(bdev) < disk->minors) { in add_partition()
342 devt = MKDEV(disk->major, disk->first_minor + bdev_partno(bdev)); in add_partition()
377 err = xa_insert(&disk->part_tbl, partno, bdev, GFP_KERNEL); in add_partition()
394 put_disk(disk); in add_partition()
398 static bool partition_overlaps(struct gendisk *disk, sector_t start, in partition_overlaps() argument
406 xa_for_each_start(&disk->part_tbl, idx, part, 1) { in partition_overlaps()
419 int bdev_add_partition(struct gendisk *disk, int partno, sector_t start, in bdev_add_partition() argument
425 mutex_lock(&disk->open_mutex); in bdev_add_partition()
426 if (!disk_live(disk)) { in bdev_add_partition()
431 if (disk->flags & GENHD_FL_NO_PART) { in bdev_add_partition()
436 if (partition_overlaps(disk, start, length, -1)) { in bdev_add_partition()
441 part = add_partition(disk, partno, start, length, in bdev_add_partition()
445 mutex_unlock(&disk->open_mutex); in bdev_add_partition()
449 int bdev_del_partition(struct gendisk *disk, int partno) in bdev_del_partition() argument
454 mutex_lock(&disk->open_mutex); in bdev_del_partition()
455 part = xa_load(&disk->part_tbl, partno); in bdev_del_partition()
477 mutex_unlock(&disk->open_mutex); in bdev_del_partition()
481 int bdev_resize_partition(struct gendisk *disk, int partno, sector_t start, in bdev_resize_partition() argument
487 mutex_lock(&disk->open_mutex); in bdev_resize_partition()
488 part = xa_load(&disk->part_tbl, partno); in bdev_resize_partition()
497 if (partition_overlaps(disk, start, length, partno)) in bdev_resize_partition()
504 mutex_unlock(&disk->open_mutex); in bdev_resize_partition()
508 static bool disk_unlock_native_capacity(struct gendisk *disk) in disk_unlock_native_capacity() argument
510 if (!disk->fops->unlock_native_capacity || in disk_unlock_native_capacity()
511 test_and_set_bit(GD_NATIVE_CAPACITY, &disk->state)) { in disk_unlock_native_capacity()
517 disk->fops->unlock_native_capacity(disk); in disk_unlock_native_capacity()
521 static bool blk_add_partition(struct gendisk *disk, in blk_add_partition() argument
531 if (from >= get_capacity(disk)) { in blk_add_partition()
534 disk->disk_name, p, (unsigned long long) from); in blk_add_partition()
535 if (disk_unlock_native_capacity(disk)) in blk_add_partition()
540 if (from + size > get_capacity(disk)) { in blk_add_partition()
543 disk->disk_name, p, (unsigned long long) size); in blk_add_partition()
545 if (disk_unlock_native_capacity(disk)) in blk_add_partition()
553 size = get_capacity(disk) - from; in blk_add_partition()
556 part = add_partition(disk, p, from, size, state->parts[p].flags, in blk_add_partition()
561 disk->disk_name, p, part); in blk_add_partition()
573 static int blk_add_partitions(struct gendisk *disk) in blk_add_partitions() argument
578 if (!disk_has_partscan(disk)) in blk_add_partitions()
581 state = check_partition(disk); in blk_add_partitions()
591 disk->disk_name); in blk_add_partitions()
592 if (disk_unlock_native_capacity(disk)) in blk_add_partitions()
601 if (bdev_is_zoned(disk->part0)) { in blk_add_partitions()
603 disk->disk_name); in blk_add_partitions()
616 disk->disk_name); in blk_add_partitions()
617 if (disk_unlock_native_capacity(disk)) in blk_add_partitions()
622 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); in blk_add_partitions()
625 if (!blk_add_partition(disk, state, p)) in blk_add_partitions()
634 int bdev_disk_changed(struct gendisk *disk, bool invalidate) in bdev_disk_changed() argument
640 lockdep_assert_held(&disk->open_mutex); in bdev_disk_changed()
642 if (!disk_live(disk)) in bdev_disk_changed()
646 if (disk->open_partitions) in bdev_disk_changed()
648 sync_blockdev(disk->part0); in bdev_disk_changed()
649 invalidate_bdev(disk->part0); in bdev_disk_changed()
651 xa_for_each_start(&disk->part_tbl, idx, part, 1) { in bdev_disk_changed()
668 clear_bit(GD_NEED_PART_SCAN, &disk->state); in bdev_disk_changed()
679 if (!(disk->flags & GENHD_FL_NO_PART) || in bdev_disk_changed()
680 !(disk->flags & GENHD_FL_REMOVABLE)) in bdev_disk_changed()
681 set_capacity(disk, 0); in bdev_disk_changed()
684 if (get_capacity(disk)) { in bdev_disk_changed()
685 ret = blk_add_partitions(disk); in bdev_disk_changed()
693 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); in bdev_disk_changed()
706 struct address_space *mapping = state->disk->part0->bd_mapping; in read_part_sector()
709 if (n >= get_capacity(state->disk)) { in read_part_sector()