Lines Matching full:disk

17 	 * Probe partition formats with tables at disk address 0
32 * disk address 0xdc0. Since these may also have stale
132 state->disk = hd; in check_partition()
290 * Must be called either with open_mutex held, before a disk can be opened or
291 * after all disk users are gone.
293 static struct block_device *add_partition(struct gendisk *disk, int partno, in add_partition() argument
298 struct device *ddev = disk_to_dev(disk); in add_partition()
304 lockdep_assert_held(&disk->open_mutex); in add_partition()
313 if (bdev_is_zoned(disk->part0)) { in add_partition()
315 disk->disk_name); in add_partition()
319 if (xa_load(&disk->part_tbl, partno)) in add_partition()
322 /* ensure we always have a reference to the whole disk */ in add_partition()
323 get_device(disk_to_dev(disk)); in add_partition()
326 bdev = bdev_alloc(disk, partno); in add_partition()
346 if (bdev_partno(bdev) < disk->minors) { in add_partition()
347 devt = MKDEV(disk->major, disk->first_minor + bdev_partno(bdev)); in add_partition()
385 err = xa_insert(&disk->part_tbl, partno, bdev, GFP_KERNEL); in add_partition()
390 /* suppress uevent if the disk suppresses it */ in add_partition()
402 put_disk(disk); in add_partition()
406 static bool partition_overlaps(struct gendisk *disk, sector_t start, in partition_overlaps() argument
414 xa_for_each_start(&disk->part_tbl, idx, part, 1) { in partition_overlaps()
427 int bdev_add_partition(struct gendisk *disk, int partno, sector_t start, in bdev_add_partition() argument
433 mutex_lock(&disk->open_mutex); in bdev_add_partition()
434 if (!disk_live(disk)) { in bdev_add_partition()
439 if (disk->flags & GENHD_FL_NO_PART) { in bdev_add_partition()
444 if (partition_overlaps(disk, start, length, -1)) { in bdev_add_partition()
449 part = add_partition(disk, partno, start, length, in bdev_add_partition()
453 mutex_unlock(&disk->open_mutex); in bdev_add_partition()
457 int bdev_del_partition(struct gendisk *disk, int partno) in bdev_del_partition() argument
462 mutex_lock(&disk->open_mutex); in bdev_del_partition()
463 part = xa_load(&disk->part_tbl, partno); in bdev_del_partition()
474 * @disk->open_mutex the device can't be claimed by anyone. in bdev_del_partition()
485 mutex_unlock(&disk->open_mutex); in bdev_del_partition()
489 int bdev_resize_partition(struct gendisk *disk, int partno, sector_t start, in bdev_resize_partition() argument
495 mutex_lock(&disk->open_mutex); in bdev_resize_partition()
496 part = xa_load(&disk->part_tbl, partno); in bdev_resize_partition()
505 if (partition_overlaps(disk, start, length, partno)) in bdev_resize_partition()
512 mutex_unlock(&disk->open_mutex); in bdev_resize_partition()
516 static bool disk_unlock_native_capacity(struct gendisk *disk) in disk_unlock_native_capacity() argument
518 if (!disk->fops->unlock_native_capacity || in disk_unlock_native_capacity()
519 test_and_set_bit(GD_NATIVE_CAPACITY, &disk->state)) { in disk_unlock_native_capacity()
525 disk->fops->unlock_native_capacity(disk); in disk_unlock_native_capacity()
529 static bool blk_add_partition(struct gendisk *disk, in blk_add_partition() argument
539 if (from >= get_capacity(disk)) { in blk_add_partition()
542 disk->disk_name, p, (unsigned long long) from); in blk_add_partition()
543 if (disk_unlock_native_capacity(disk)) in blk_add_partition()
548 if (from + size > get_capacity(disk)) { in blk_add_partition()
551 disk->disk_name, p, (unsigned long long) size); in blk_add_partition()
553 if (disk_unlock_native_capacity(disk)) in blk_add_partition()
559 * disk to avoid creating invalid block devices. in blk_add_partition()
561 size = get_capacity(disk) - from; in blk_add_partition()
564 part = add_partition(disk, p, from, size, state->parts[p].flags, in blk_add_partition()
569 disk->disk_name, p, part); in blk_add_partition()
581 static int blk_add_partitions(struct gendisk *disk) in blk_add_partitions() argument
586 if (!disk_has_partscan(disk)) in blk_add_partitions()
589 state = check_partition(disk); in blk_add_partitions()
599 disk->disk_name); in blk_add_partitions()
600 if (disk_unlock_native_capacity(disk)) in blk_add_partitions()
609 if (bdev_is_zoned(disk->part0)) { in blk_add_partitions()
611 disk->disk_name); in blk_add_partitions()
624 disk->disk_name); in blk_add_partitions()
625 if (disk_unlock_native_capacity(disk)) in blk_add_partitions()
630 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); in blk_add_partitions()
633 if (!blk_add_partition(disk, state, p)) in blk_add_partitions()
642 int bdev_disk_changed(struct gendisk *disk, bool invalidate) in bdev_disk_changed() argument
648 lockdep_assert_held(&disk->open_mutex); in bdev_disk_changed()
650 if (!disk_live(disk)) in bdev_disk_changed()
654 if (disk->open_partitions) in bdev_disk_changed()
656 sync_blockdev(disk->part0); in bdev_disk_changed()
657 invalidate_bdev(disk->part0); in bdev_disk_changed()
659 xa_for_each_start(&disk->part_tbl, idx, part, 1) { in bdev_disk_changed()
668 * If @disk->open_partitions isn't elevated but there's in bdev_disk_changed()
676 clear_bit(GD_NEED_PART_SCAN, &disk->state); in bdev_disk_changed()
687 if (!(disk->flags & GENHD_FL_NO_PART) || in bdev_disk_changed()
688 !(disk->flags & GENHD_FL_REMOVABLE)) in bdev_disk_changed()
689 set_capacity(disk, 0); in bdev_disk_changed()
692 if (get_capacity(disk)) { in bdev_disk_changed()
693 ret = blk_add_partitions(disk); in bdev_disk_changed()
701 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); in bdev_disk_changed()
714 struct address_space *mapping = state->disk->part0->bd_mapping; in read_part_sector()
717 if (n >= get_capacity(state->disk)) { in read_part_sector()