Lines Matching refs:disk
59 void set_capacity(struct gendisk *disk, sector_t sectors)
61 bdev_set_nr_sectors(disk->part0, sectors);
66 * Set disk capacity and notify if the size is not currently zero and will not
69 bool set_capacity_and_notify(struct gendisk *disk, sector_t size)
71 sector_t capacity = get_capacity(disk);
74 set_capacity(disk, size);
82 !disk_live(disk) ||
83 (disk->flags & GENHD_FL_HIDDEN))
87 disk->disk_name, capacity, size);
95 kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp);
322 void disk_uevent(struct gendisk *disk, enum kobject_action action)
328 xa_for_each(&disk->part_tbl, idx, part) {
343 int disk_scan_partitions(struct gendisk *disk, blk_mode_t mode)
348 if (disk->flags & (GENHD_FL_NO_PART | GENHD_FL_HIDDEN))
350 if (test_bit(GD_SUPPRESS_PART_SCAN, &disk->state))
352 if (disk->open_partitions)
362 ret = bd_prepare_to_claim(disk->part0, disk_scan_partitions,
368 set_bit(GD_NEED_PART_SCAN, &disk->state);
369 bdev = blkdev_get_by_dev(disk_devt(disk), mode & ~BLK_OPEN_EXCL, NULL,
379 * creat partition for underlying disk.
381 clear_bit(GD_NEED_PART_SCAN, &disk->state);
383 bd_abort_claiming(disk->part0, disk_scan_partitions);
388 * device_add_disk - add disk information to kernel list
389 * @parent: parent device for the disk
390 * @disk: per-device partitioning information
393 * This function registers the partitioning information in @disk
396 int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
400 struct device *ddev = disk_to_dev(disk);
404 if (queue_is_mq(disk->queue) && disk->fops->poll_bio)
408 * The disk queue should now be all set with enough information about
413 elevator_init_mq(disk->queue);
416 disk->part0->bd_has_submit_bio = disk->fops->submit_bio != NULL;
426 if (disk->major) {
427 if (WARN_ON(!disk->minors))
430 if (disk->minors > DISK_MAX_PARTS) {
433 disk->minors = DISK_MAX_PARTS;
435 if (disk->first_minor > MINORMASK ||
436 disk->minors > MINORMASK + 1 ||
437 disk->first_minor + disk->minors > MINORMASK + 1)
440 if (WARN_ON(disk->minors))
446 disk->major = BLOCK_EXT_MAJOR;
447 disk->first_minor = ret;
455 dev_set_name(ddev, "%s", disk->disk_name);
456 if (!(disk->flags & GENHD_FL_HIDDEN))
457 ddev->devt = MKDEV(disk->major, disk->first_minor);
462 ret = disk_alloc_events(disk);
478 disk->part0->bd_holder_dir =
480 if (!disk->part0->bd_holder_dir) {
484 disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj);
485 if (!disk->slave_dir) {
490 ret = blk_register_queue(disk);
494 if (!(disk->flags & GENHD_FL_HIDDEN)) {
495 ret = bdi_register(disk->bdi, "%u:%u",
496 disk->major, disk->first_minor);
499 bdi_set_owner(disk->bdi, ddev);
501 &disk->bdi->dev->kobj, "bdi");
506 if (get_capacity(disk) && !(disk->flags & GENHD_FL_NO_PART) &&
507 !test_bit(GD_SUPPRESS_PART_SCAN, &disk->state))
508 set_bit(GD_NEED_PART_SCAN, &disk->state);
510 bdev_add(disk->part0, ddev->devt);
511 if (get_capacity(disk))
512 disk_scan_partitions(disk, BLK_OPEN_READ);
515 * Announce the disk and partitions after all partitions are
519 disk_uevent(disk, KOBJ_ADD);
526 disk->part0->bd_dev = MKDEV(disk->major, disk->first_minor);
529 disk_update_readahead(disk);
530 disk_add_events(disk);
531 set_bit(GD_ADDED, &disk->state);
535 if (!(disk->flags & GENHD_FL_HIDDEN))
536 bdi_unregister(disk->bdi);
538 blk_unregister_queue(disk);
539 rq_qos_exit(disk->queue);
541 kobject_put(disk->slave_dir);
542 disk->slave_dir = NULL;
544 kobject_put(disk->part0->bd_holder_dir);
551 if (disk->major == BLOCK_EXT_MAJOR)
552 blk_free_ext_minor(disk->first_minor);
554 if (disk->queue->elevator)
555 elevator_exit(disk->queue);
560 static void blk_report_disk_dead(struct gendisk *disk, bool surprise)
566 xa_for_each(&disk->part_tbl, idx, bdev) {
579 static void __blk_mark_disk_dead(struct gendisk *disk)
584 if (test_and_set_bit(GD_DEAD, &disk->state))
587 if (test_bit(GD_OWNS_QUEUE, &disk->state))
588 blk_queue_flag_set(QUEUE_FLAG_DYING, disk->queue);
593 set_capacity(disk, 0);
598 blk_queue_start_drain(disk->queue);
602 * blk_mark_disk_dead - mark a disk as dead
603 * @disk: disk to mark as dead
605 * Mark as disk as dead (e.g. surprise removed) and don't accept any new I/O
606 * to this disk.
608 void blk_mark_disk_dead(struct gendisk *disk)
610 __blk_mark_disk_dead(disk);
611 blk_report_disk_dead(disk, true);
617 * @disk: the struct gendisk to remove
634 void del_gendisk(struct gendisk *disk)
636 struct request_queue *q = disk->queue;
642 if (WARN_ON_ONCE(!disk_live(disk) && !(disk->flags & GENHD_FL_HIDDEN)))
645 disk_del_events(disk);
650 mutex_lock(&disk->open_mutex);
651 xa_for_each(&disk->part_tbl, idx, part)
653 mutex_unlock(&disk->open_mutex);
659 if (!test_bit(GD_DEAD, &disk->state))
660 blk_report_disk_dead(disk, false);
661 __blk_mark_disk_dead(disk);
664 * Drop all partitions now that the disk is marked dead.
666 mutex_lock(&disk->open_mutex);
667 xa_for_each_start(&disk->part_tbl, idx, part, 1)
669 mutex_unlock(&disk->open_mutex);
671 if (!(disk->flags & GENHD_FL_HIDDEN)) {
672 sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi");
678 bdi_unregister(disk->bdi);
681 blk_unregister_queue(disk);
683 kobject_put(disk->part0->bd_holder_dir);
684 kobject_put(disk->slave_dir);
685 disk->slave_dir = NULL;
687 part_stat_set_all(disk->part0, 0);
688 disk->part0->bd_stamp = 0;
689 sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk)));
690 pm_runtime_set_memalloc_noio(disk_to_dev(disk), false);
691 device_del(disk_to_dev(disk));
695 blk_throtl_cancel_bios(disk);
713 * If the disk does not own the queue, allow using passthrough requests
716 if (!test_bit(GD_OWNS_QUEUE, &disk->state)) {
727 * invalidate_disk - invalidate the disk
728 * @disk: the struct gendisk to invalidate
730 * A helper to invalidates the disk. It will clean the disk's associated
731 * buffer/page caches and reset its internal states so that the disk
736 void invalidate_disk(struct gendisk *disk)
738 struct block_device *bdev = disk->part0;
742 set_capacity(disk, 0);
751 struct gendisk *disk = dev_to_disk(dev);
753 if (!disk->bb)
756 return badblocks_show(disk->bb, page, 0);
763 struct gendisk *disk = dev_to_disk(dev);
765 if (!disk->bb)
768 return badblocks_store(disk->bb, page, len, 0);
900 struct gendisk *disk = dev_to_disk(dev);
902 return sprintf(buf, "%d\n", disk->minors);
908 struct gendisk *disk = dev_to_disk(dev);
911 (disk->flags & GENHD_FL_NO_PART) ? 1 : DISK_MAX_PARTS);
917 struct gendisk *disk = dev_to_disk(dev);
920 (disk->flags & GENHD_FL_REMOVABLE ? 1 : 0));
926 struct gendisk *disk = dev_to_disk(dev);
929 (disk->flags & GENHD_FL_HIDDEN ? 1 : 0));
935 struct gendisk *disk = dev_to_disk(dev);
937 return sprintf(buf, "%d\n", get_disk_ro(disk) ? 1 : 0);
1021 struct gendisk *disk = dev_to_disk(dev);
1023 return sprintf(buf, "%d\n", bdev_alignment_offset(disk->part0));
1030 struct gendisk *disk = dev_to_disk(dev);
1032 return sprintf(buf, "%d\n", bdev_alignment_offset(disk->part0));
1038 struct gendisk *disk = dev_to_disk(dev);
1040 return sprintf(buf, "%llu\n", disk->diskseq);
1114 struct gendisk *disk = dev_to_disk(dev);
1116 if (a == &dev_attr_badblocks.attr && !disk->bb)
1139 * @dev: the device representing this disk
1147 * will also be freed prior to the disk.
1153 struct gendisk *disk = dev_to_disk(dev);
1156 WARN_ON_ONCE(disk_live(disk));
1158 blk_trace_remove(disk->queue);
1164 * teardown case (yet) as the tagset can be gone by the time the disk
1167 if (queue_is_mq(disk->queue) &&
1168 test_bit(GD_OWNS_QUEUE, &disk->state) &&
1169 !test_bit(GD_ADDED, &disk->state))
1170 blk_mq_exit_queue(disk->queue);
1172 blkcg_exit_disk(disk);
1174 bioset_exit(&disk->bio_split);
1176 disk_release_events(disk);
1177 kfree(disk->random);
1178 disk_free_zone_bitmaps(disk);
1179 xa_destroy(&disk->part_tbl);
1181 disk->queue->disk = NULL;
1182 blk_put_queue(disk->queue);
1184 if (test_bit(GD_ADDED, &disk->state) && disk->fops->free_disk)
1185 disk->fops->free_disk(disk);
1187 iput(disk->part0->bd_inode); /* frees the disk */
1192 const struct gendisk *disk = dev_to_disk(dev);
1194 return add_uevent_var(env, "DISKSEQ=%llu", disk->diskseq);
1205 struct gendisk *disk = dev_to_disk(dev);
1207 if (disk->fops->devnode)
1208 return disk->fops->devnode(disk, mode);
1213 .name = "disk",
1221 * aggregate disk stat collector. Uses the same stats that the sysfs
1314 dev_t part_devt(struct gendisk *disk, u8 partno)
1320 part = xa_load(&disk->part_tbl, partno);
1331 struct gendisk *disk;
1333 disk = kzalloc_node(sizeof(struct gendisk), GFP_KERNEL, node_id);
1334 if (!disk)
1337 if (bioset_init(&disk->bio_split, BIO_POOL_SIZE, 0, 0))
1340 disk->bdi = bdi_alloc(node_id);
1341 if (!disk->bdi)
1345 disk->queue = q;
1347 disk->part0 = bdev_alloc(disk, 0);
1348 if (!disk->part0)
1351 disk->node_id = node_id;
1352 mutex_init(&disk->open_mutex);
1353 xa_init(&disk->part_tbl);
1354 if (xa_insert(&disk->part_tbl, 0, disk->part0, GFP_KERNEL))
1357 if (blkcg_init_disk(disk))
1360 rand_initialize_disk(disk);
1361 disk_to_dev(disk)->class = &block_class;
1362 disk_to_dev(disk)->type = &disk_type;
1363 device_initialize(disk_to_dev(disk));
1364 inc_diskseq(disk);
1365 q->disk = disk;
1366 lockdep_init_map(&disk->lockdep_map, "(bio completion)", lkclass, 0);
1368 INIT_LIST_HEAD(&disk->slave_bdevs);
1370 return disk;
1373 xa_erase(&disk->part_tbl, 0);
1375 xa_destroy(&disk->part_tbl);
1376 disk->part0->bd_disk = NULL;
1377 iput(disk->part0->bd_inode);
1379 bdi_put(disk->bdi);
1381 bioset_exit(&disk->bio_split);
1383 kfree(disk);
1390 struct gendisk *disk;
1396 disk = __alloc_disk_node(q, node, lkclass);
1397 if (!disk) {
1401 set_bit(GD_OWNS_QUEUE, &disk->state);
1402 return disk;
1408 * @disk: the struct gendisk to decrement the refcount for
1413 * Note: for blk-mq disk put_disk must be called before freeing the tag_set
1419 void put_disk(struct gendisk *disk)
1421 if (disk)
1422 put_device(disk_to_dev(disk));
1438 * @disk: gendisk to operate on
1439 * @read_only: %true to set the disk read-only, %false set the disk read/write
1441 * This function is used to indicate whether a given disk device should have its
1445 void set_disk_ro(struct gendisk *disk, bool read_only)
1448 if (test_and_set_bit(GD_READ_ONLY, &disk->state))
1451 if (!test_and_clear_bit(GD_READ_ONLY, &disk->state))
1454 set_disk_ro_uevent(disk, read_only);
1458 void inc_diskseq(struct gendisk *disk)
1460 disk->diskseq = atomic64_inc_return(&diskseq);