Lines Matching full:disk
58 void set_capacity(struct gendisk *disk, sector_t sectors) in set_capacity() argument
60 struct block_device *bdev = disk->part0; in set_capacity()
70 * Set disk capacity and notify if the size is not currently zero and will not
73 bool set_capacity_and_notify(struct gendisk *disk, sector_t size) in set_capacity_and_notify() argument
75 sector_t capacity = get_capacity(disk); in set_capacity_and_notify()
78 set_capacity(disk, size); in set_capacity_and_notify()
86 !disk_live(disk) || in set_capacity_and_notify()
87 (disk->flags & GENHD_FL_HIDDEN)) in set_capacity_and_notify()
91 disk->disk_name, capacity, size); in set_capacity_and_notify()
99 kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp); in set_capacity_and_notify()
338 void disk_uevent(struct gendisk *disk, enum kobject_action action) in disk_uevent() argument
344 xa_for_each(&disk->part_tbl, idx, part) { in disk_uevent()
359 int disk_scan_partitions(struct gendisk *disk, fmode_t mode) in disk_scan_partitions() argument
363 if (disk->flags & (GENHD_FL_NO_PART | GENHD_FL_HIDDEN)) in disk_scan_partitions()
365 if (test_bit(GD_SUPPRESS_PART_SCAN, &disk->state)) in disk_scan_partitions()
367 if (disk->open_partitions) in disk_scan_partitions()
370 set_bit(GD_NEED_PART_SCAN, &disk->state); in disk_scan_partitions()
371 bdev = blkdev_get_by_dev(disk_devt(disk), mode, NULL); in disk_scan_partitions()
379 * device_add_disk - add disk information to kernel list
380 * @parent: parent device for the disk
381 * @disk: per-device partitioning information
384 * This function registers the partitioning information in @disk
387 int __must_check device_add_disk(struct device *parent, struct gendisk *disk, in device_add_disk() argument
391 struct device *ddev = disk_to_dev(disk); in device_add_disk()
395 if (queue_is_mq(disk->queue) && disk->fops->poll_bio) in device_add_disk()
399 * The disk queue should now be all set with enough information about in device_add_disk()
404 elevator_init_mq(disk->queue); in device_add_disk()
414 if (disk->major) { in device_add_disk()
415 if (WARN_ON(!disk->minors)) in device_add_disk()
418 if (disk->minors > DISK_MAX_PARTS) { in device_add_disk()
421 disk->minors = DISK_MAX_PARTS; in device_add_disk()
423 if (disk->first_minor + disk->minors > MINORMASK + 1) in device_add_disk()
426 if (WARN_ON(disk->minors)) in device_add_disk()
432 disk->major = BLOCK_EXT_MAJOR; in device_add_disk()
433 disk->first_minor = ret; in device_add_disk()
441 dev_set_name(ddev, "%s", disk->disk_name); in device_add_disk()
442 if (!(disk->flags & GENHD_FL_HIDDEN)) in device_add_disk()
443 ddev->devt = MKDEV(disk->major, disk->first_minor); in device_add_disk()
448 ret = disk_alloc_events(disk); in device_add_disk()
466 ret = blk_integrity_add(disk); in device_add_disk()
470 disk->part0->bd_holder_dir = in device_add_disk()
472 if (!disk->part0->bd_holder_dir) { in device_add_disk()
476 disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj); in device_add_disk()
477 if (!disk->slave_dir) { in device_add_disk()
482 ret = bd_register_pending_holders(disk); in device_add_disk()
486 ret = blk_register_queue(disk); in device_add_disk()
490 if (!(disk->flags & GENHD_FL_HIDDEN)) { in device_add_disk()
491 ret = bdi_register(disk->bdi, "%u:%u", in device_add_disk()
492 disk->major, disk->first_minor); in device_add_disk()
495 bdi_set_owner(disk->bdi, ddev); in device_add_disk()
497 &disk->bdi->dev->kobj, "bdi"); in device_add_disk()
501 bdev_add(disk->part0, ddev->devt); in device_add_disk()
502 if (get_capacity(disk)) in device_add_disk()
503 disk_scan_partitions(disk, FMODE_READ); in device_add_disk()
506 * Announce the disk and partitions after all partitions are in device_add_disk()
510 disk_uevent(disk, KOBJ_ADD); in device_add_disk()
517 disk->part0->bd_dev = MKDEV(disk->major, disk->first_minor); in device_add_disk()
520 disk_update_readahead(disk); in device_add_disk()
521 disk_add_events(disk); in device_add_disk()
522 set_bit(GD_ADDED, &disk->state); in device_add_disk()
526 if (!(disk->flags & GENHD_FL_HIDDEN)) in device_add_disk()
527 bdi_unregister(disk->bdi); in device_add_disk()
529 blk_unregister_queue(disk); in device_add_disk()
530 rq_qos_exit(disk->queue); in device_add_disk()
532 kobject_put(disk->slave_dir); in device_add_disk()
534 kobject_put(disk->part0->bd_holder_dir); in device_add_disk()
536 blk_integrity_del(disk); in device_add_disk()
543 if (disk->major == BLOCK_EXT_MAJOR) in device_add_disk()
544 blk_free_ext_minor(disk->first_minor); in device_add_disk()
546 if (disk->queue->elevator) in device_add_disk()
547 elevator_exit(disk->queue); in device_add_disk()
553 * blk_mark_disk_dead - mark a disk as dead
554 * @disk: disk to mark as dead
556 * Mark as disk as dead (e.g. surprise removed) and don't accept any new I/O
557 * to this disk.
559 void blk_mark_disk_dead(struct gendisk *disk) in blk_mark_disk_dead() argument
561 set_bit(GD_DEAD, &disk->state); in blk_mark_disk_dead()
562 blk_queue_start_drain(disk->queue); in blk_mark_disk_dead()
568 * @disk: the struct gendisk to remove
585 void del_gendisk(struct gendisk *disk) in del_gendisk() argument
587 struct request_queue *q = disk->queue; in del_gendisk()
591 if (WARN_ON_ONCE(!disk_live(disk) && !(disk->flags & GENHD_FL_HIDDEN))) in del_gendisk()
594 blk_integrity_del(disk); in del_gendisk()
595 disk_del_events(disk); in del_gendisk()
597 mutex_lock(&disk->open_mutex); in del_gendisk()
598 remove_inode_hash(disk->part0->bd_inode); in del_gendisk()
599 blk_drop_partitions(disk); in del_gendisk()
600 mutex_unlock(&disk->open_mutex); in del_gendisk()
602 fsync_bdev(disk->part0); in del_gendisk()
603 __invalidate_device(disk->part0, true); in del_gendisk()
608 set_bit(GD_DEAD, &disk->state); in del_gendisk()
609 if (test_bit(GD_OWNS_QUEUE, &disk->state)) in del_gendisk()
611 set_capacity(disk, 0); in del_gendisk()
618 if (!(disk->flags & GENHD_FL_HIDDEN)) { in del_gendisk()
619 sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi"); in del_gendisk()
625 bdi_unregister(disk->bdi); in del_gendisk()
628 blk_unregister_queue(disk); in del_gendisk()
630 kobject_put(disk->part0->bd_holder_dir); in del_gendisk()
631 kobject_put(disk->slave_dir); in del_gendisk()
633 part_stat_set_all(disk->part0, 0); in del_gendisk()
634 disk->part0->bd_stamp = 0; in del_gendisk()
636 sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk))); in del_gendisk()
637 pm_runtime_set_memalloc_noio(disk_to_dev(disk), false); in del_gendisk()
638 device_del(disk_to_dev(disk)); in del_gendisk()
642 blk_throtl_cancel_bios(disk); in del_gendisk()
658 * If the disk does not own the queue, allow using passthrough requests in del_gendisk()
661 if (!test_bit(GD_OWNS_QUEUE, &disk->state)) { in del_gendisk()
672 * invalidate_disk - invalidate the disk
673 * @disk: the struct gendisk to invalidate
675 * A helper to invalidates the disk. It will clean the disk's associated
676 * buffer/page caches and reset its internal states so that the disk
681 void invalidate_disk(struct gendisk *disk) in invalidate_disk() argument
683 struct block_device *bdev = disk->part0; in invalidate_disk()
687 set_capacity(disk, 0); in invalidate_disk()
696 struct gendisk *disk = dev_to_disk(dev); in disk_badblocks_show() local
698 if (!disk->bb) in disk_badblocks_show()
701 return badblocks_show(disk->bb, page, 0); in disk_badblocks_show()
708 struct gendisk *disk = dev_to_disk(dev); in disk_badblocks_store() local
710 if (!disk->bb) in disk_badblocks_store()
713 return badblocks_store(disk->bb, page, len, 0); in disk_badblocks_store()
750 struct gendisk *disk = dev_to_disk(dev); in printk_all_partitions() local
759 if (get_capacity(disk) == 0 || (disk->flags & GENHD_FL_HIDDEN)) in printk_all_partitions()
767 xa_for_each(&disk->part_tbl, idx, part) { in printk_all_partitions()
898 struct gendisk *disk = dev_to_disk(dev); in disk_range_show() local
900 return sprintf(buf, "%d\n", disk->minors); in disk_range_show()
906 struct gendisk *disk = dev_to_disk(dev); in disk_ext_range_show() local
909 (disk->flags & GENHD_FL_NO_PART) ? 1 : DISK_MAX_PARTS); in disk_ext_range_show()
915 struct gendisk *disk = dev_to_disk(dev); in disk_removable_show() local
918 (disk->flags & GENHD_FL_REMOVABLE ? 1 : 0)); in disk_removable_show()
924 struct gendisk *disk = dev_to_disk(dev); in disk_hidden_show() local
927 (disk->flags & GENHD_FL_HIDDEN ? 1 : 0)); in disk_hidden_show()
933 struct gendisk *disk = dev_to_disk(dev); in disk_ro_show() local
935 return sprintf(buf, "%d\n", get_disk_ro(disk) ? 1 : 0); in disk_ro_show()
1011 struct gendisk *disk = dev_to_disk(dev); in disk_capability_show() local
1013 return sprintf(buf, "%x\n", disk->flags); in disk_capability_show()
1020 struct gendisk *disk = dev_to_disk(dev); in disk_alignment_offset_show() local
1022 return sprintf(buf, "%d\n", bdev_alignment_offset(disk->part0)); in disk_alignment_offset_show()
1029 struct gendisk *disk = dev_to_disk(dev); in disk_discard_alignment_show() local
1031 return sprintf(buf, "%d\n", bdev_alignment_offset(disk->part0)); in disk_discard_alignment_show()
1037 struct gendisk *disk = dev_to_disk(dev); in diskseq_show() local
1039 return sprintf(buf, "%llu\n", disk->diskseq); in diskseq_show()
1113 struct gendisk *disk = dev_to_disk(dev); in disk_visible() local
1115 if (a == &dev_attr_badblocks.attr && !disk->bb) in disk_visible()
1135 * @dev: the device representing this disk
1143 * will also be freed prior to the disk.
1149 struct gendisk *disk = dev_to_disk(dev); in disk_release() local
1152 WARN_ON_ONCE(disk_live(disk)); in disk_release()
1158 * teardown case (yet) as the tagset can be gone by the time the disk in disk_release()
1161 if (queue_is_mq(disk->queue) && in disk_release()
1162 test_bit(GD_OWNS_QUEUE, &disk->state) && in disk_release()
1163 !test_bit(GD_ADDED, &disk->state)) in disk_release()
1164 blk_mq_exit_queue(disk->queue); in disk_release()
1166 blkcg_exit_disk(disk); in disk_release()
1168 bioset_exit(&disk->bio_split); in disk_release()
1170 disk_release_events(disk); in disk_release()
1171 kfree(disk->random); in disk_release()
1172 disk_free_zone_bitmaps(disk); in disk_release()
1173 xa_destroy(&disk->part_tbl); in disk_release()
1175 disk->queue->disk = NULL; in disk_release()
1176 blk_put_queue(disk->queue); in disk_release()
1178 if (test_bit(GD_ADDED, &disk->state) && disk->fops->free_disk) in disk_release()
1179 disk->fops->free_disk(disk); in disk_release()
1181 iput(disk->part0->bd_inode); /* frees the disk */ in disk_release()
1186 struct gendisk *disk = dev_to_disk(dev); in block_uevent() local
1188 return add_uevent_var(env, "DISKSEQ=%llu", disk->diskseq); in block_uevent()
1199 struct gendisk *disk = dev_to_disk(dev); in block_devnode() local
1201 if (disk->fops->devnode) in block_devnode()
1202 return disk->fops->devnode(disk, mode); in block_devnode()
1207 .name = "disk",
1215 * aggregate disk stat collector. Uses the same stats that the sysfs
1308 dev_t part_devt(struct gendisk *disk, u8 partno) in part_devt() argument
1314 part = xa_load(&disk->part_tbl, partno); in part_devt()
1330 struct gendisk *disk = dev_to_disk(dev); in blk_lookup_devt() local
1335 if (partno < disk->minors) { in blk_lookup_devt()
1342 devt = part_devt(disk, partno); in blk_lookup_devt()
1354 struct gendisk *disk; in __alloc_disk_node() local
1356 disk = kzalloc_node(sizeof(struct gendisk), GFP_KERNEL, node_id); in __alloc_disk_node()
1357 if (!disk) in __alloc_disk_node()
1360 if (bioset_init(&disk->bio_split, BIO_POOL_SIZE, 0, 0)) in __alloc_disk_node()
1363 disk->bdi = bdi_alloc(node_id); in __alloc_disk_node()
1364 if (!disk->bdi) in __alloc_disk_node()
1368 disk->queue = q; in __alloc_disk_node()
1370 disk->part0 = bdev_alloc(disk, 0); in __alloc_disk_node()
1371 if (!disk->part0) in __alloc_disk_node()
1374 disk->node_id = node_id; in __alloc_disk_node()
1375 mutex_init(&disk->open_mutex); in __alloc_disk_node()
1376 xa_init(&disk->part_tbl); in __alloc_disk_node()
1377 if (xa_insert(&disk->part_tbl, 0, disk->part0, GFP_KERNEL)) in __alloc_disk_node()
1380 if (blkcg_init_disk(disk)) in __alloc_disk_node()
1383 rand_initialize_disk(disk); in __alloc_disk_node()
1384 disk_to_dev(disk)->class = &block_class; in __alloc_disk_node()
1385 disk_to_dev(disk)->type = &disk_type; in __alloc_disk_node()
1386 device_initialize(disk_to_dev(disk)); in __alloc_disk_node()
1387 inc_diskseq(disk); in __alloc_disk_node()
1388 q->disk = disk; in __alloc_disk_node()
1389 lockdep_init_map(&disk->lockdep_map, "(bio completion)", lkclass, 0); in __alloc_disk_node()
1391 INIT_LIST_HEAD(&disk->slave_bdevs); in __alloc_disk_node()
1393 return disk; in __alloc_disk_node()
1396 xa_erase(&disk->part_tbl, 0); in __alloc_disk_node()
1398 xa_destroy(&disk->part_tbl); in __alloc_disk_node()
1399 disk->part0->bd_disk = NULL; in __alloc_disk_node()
1400 iput(disk->part0->bd_inode); in __alloc_disk_node()
1402 bdi_put(disk->bdi); in __alloc_disk_node()
1404 bioset_exit(&disk->bio_split); in __alloc_disk_node()
1406 kfree(disk); in __alloc_disk_node()
1413 struct gendisk *disk; in __blk_alloc_disk() local
1419 disk = __alloc_disk_node(q, node, lkclass); in __blk_alloc_disk()
1420 if (!disk) { in __blk_alloc_disk()
1424 set_bit(GD_OWNS_QUEUE, &disk->state); in __blk_alloc_disk()
1425 return disk; in __blk_alloc_disk()
1431 * @disk: the struct gendisk to decrement the refcount for
1436 * Note: for blk-mq disk put_disk must be called before freeing the tag_set
1442 void put_disk(struct gendisk *disk) in put_disk() argument
1444 if (disk) in put_disk()
1445 put_device(disk_to_dev(disk)); in put_disk()
1461 * @disk: gendisk to operate on
1462 * @read_only: %true to set the disk read-only, %false set the disk read/write
1464 * This function is used to indicate whether a given disk device should have its
1468 void set_disk_ro(struct gendisk *disk, bool read_only) in set_disk_ro() argument
1471 if (test_and_set_bit(GD_READ_ONLY, &disk->state)) in set_disk_ro()
1474 if (!test_and_clear_bit(GD_READ_ONLY, &disk->state)) in set_disk_ro()
1477 set_disk_ro_uevent(disk, read_only); in set_disk_ro()
1481 void inc_diskseq(struct gendisk *disk) in inc_diskseq() argument
1483 disk->diskseq = atomic64_inc_return(&diskseq); in inc_diskseq()