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 file = bdev_file_open_by_dev(disk_devt(disk), mode & ~BLK_OPEN_EXCL,
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 * On surprise disk removal, bdev_mark_dead() may call into file
568 * disk->open_mutex.
570 lockdep_assert_not_held(&disk->open_mutex);
573 xa_for_each(&disk->part_tbl, idx, bdev) {
586 static void __blk_mark_disk_dead(struct gendisk *disk)
591 if (test_and_set_bit(GD_DEAD, &disk->state))
594 if (test_bit(GD_OWNS_QUEUE, &disk->state))
595 blk_queue_flag_set(QUEUE_FLAG_DYING, disk->queue);
600 set_capacity(disk, 0);
605 blk_queue_start_drain(disk->queue);
609 * blk_mark_disk_dead - mark a disk as dead
610 * @disk: disk to mark as dead
612 * Mark as disk as dead (e.g. surprise removed) and don't accept any new I/O
613 * to this disk.
615 void blk_mark_disk_dead(struct gendisk *disk)
617 __blk_mark_disk_dead(disk);
618 blk_report_disk_dead(disk, true);
624 * @disk: the struct gendisk to remove
641 void del_gendisk(struct gendisk *disk)
643 struct request_queue *q = disk->queue;
649 if (WARN_ON_ONCE(!disk_live(disk) && !(disk->flags & GENHD_FL_HIDDEN)))
652 disk_del_events(disk);
657 mutex_lock(&disk->open_mutex);
658 xa_for_each(&disk->part_tbl, idx, part)
660 mutex_unlock(&disk->open_mutex);
666 if (!test_bit(GD_DEAD, &disk->state))
667 blk_report_disk_dead(disk, false);
668 __blk_mark_disk_dead(disk);
671 * Drop all partitions now that the disk is marked dead.
673 mutex_lock(&disk->open_mutex);
674 xa_for_each_start(&disk->part_tbl, idx, part, 1)
676 mutex_unlock(&disk->open_mutex);
678 if (!(disk->flags & GENHD_FL_HIDDEN)) {
679 sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi");
685 bdi_unregister(disk->bdi);
688 blk_unregister_queue(disk);
690 kobject_put(disk->part0->bd_holder_dir);
691 kobject_put(disk->slave_dir);
692 disk->slave_dir = NULL;
694 part_stat_set_all(disk->part0, 0);
695 disk->part0->bd_stamp = 0;
696 sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk)));
697 pm_runtime_set_memalloc_noio(disk_to_dev(disk), false);
698 device_del(disk_to_dev(disk));
702 blk_throtl_cancel_bios(disk);
720 * If the disk does not own the queue, allow using passthrough requests
723 if (!test_bit(GD_OWNS_QUEUE, &disk->state)) {
734 * invalidate_disk - invalidate the disk
735 * @disk: the struct gendisk to invalidate
737 * A helper to invalidates the disk. It will clean the disk's associated
738 * buffer/page caches and reset its internal states so that the disk
743 void invalidate_disk(struct gendisk *disk)
745 struct block_device *bdev = disk->part0;
749 set_capacity(disk, 0);
758 struct gendisk *disk = dev_to_disk(dev);
760 if (!disk->bb)
763 return badblocks_show(disk->bb, page, 0);
770 struct gendisk *disk = dev_to_disk(dev);
772 if (!disk->bb)
775 return badblocks_store(disk->bb, page, len, 0);
907 struct gendisk *disk = dev_to_disk(dev);
909 return sprintf(buf, "%d\n", disk->minors);
915 struct gendisk *disk = dev_to_disk(dev);
918 (disk->flags & GENHD_FL_NO_PART) ? 1 : DISK_MAX_PARTS);
924 struct gendisk *disk = dev_to_disk(dev);
927 (disk->flags & GENHD_FL_REMOVABLE ? 1 : 0));
933 struct gendisk *disk = dev_to_disk(dev);
936 (disk->flags & GENHD_FL_HIDDEN ? 1 : 0));
942 struct gendisk *disk = dev_to_disk(dev);
944 return sprintf(buf, "%d\n", get_disk_ro(disk) ? 1 : 0);
1028 struct gendisk *disk = dev_to_disk(dev);
1030 return sprintf(buf, "%d\n", bdev_alignment_offset(disk->part0));
1037 struct gendisk *disk = dev_to_disk(dev);
1039 return sprintf(buf, "%d\n", bdev_alignment_offset(disk->part0));
1045 struct gendisk *disk = dev_to_disk(dev);
1047 return sprintf(buf, "%llu\n", disk->diskseq);
1121 struct gendisk *disk = dev_to_disk(dev);
1123 if (a == &dev_attr_badblocks.attr && !disk->bb)
1146 * @dev: the device representing this disk
1154 * will also be freed prior to the disk.
1160 struct gendisk *disk = dev_to_disk(dev);
1163 WARN_ON_ONCE(disk_live(disk));
1165 blk_trace_remove(disk->queue);
1171 * teardown case (yet) as the tagset can be gone by the time the disk
1174 if (queue_is_mq(disk->queue) &&
1175 test_bit(GD_OWNS_QUEUE, &disk->state) &&
1176 !test_bit(GD_ADDED, &disk->state))
1177 blk_mq_exit_queue(disk->queue);
1179 blkcg_exit_disk(disk);
1181 bioset_exit(&disk->bio_split);
1183 disk_release_events(disk);
1184 kfree(disk->random);
1185 disk_free_zone_bitmaps(disk);
1186 xa_destroy(&disk->part_tbl);
1188 disk->queue->disk = NULL;
1189 blk_put_queue(disk->queue);
1191 if (test_bit(GD_ADDED, &disk->state) && disk->fops->free_disk)
1192 disk->fops->free_disk(disk);
1194 iput(disk->part0->bd_inode); /* frees the disk */
1199 const struct gendisk *disk = dev_to_disk(dev);
1201 return add_uevent_var(env, "DISKSEQ=%llu", disk->diskseq);
1212 struct gendisk *disk = dev_to_disk(dev);
1214 if (disk->fops->devnode)
1215 return disk->fops->devnode(disk, mode);
1220 .name = "disk",
1228 * aggregate disk stat collector. Uses the same stats that the sysfs
1321 dev_t part_devt(struct gendisk *disk, u8 partno)
1327 part = xa_load(&disk->part_tbl, partno);
1338 struct gendisk *disk;
1340 disk = kzalloc_node(sizeof(struct gendisk), GFP_KERNEL, node_id);
1341 if (!disk)
1344 if (bioset_init(&disk->bio_split, BIO_POOL_SIZE, 0, 0))
1347 disk->bdi = bdi_alloc(node_id);
1348 if (!disk->bdi)
1352 disk->queue = q;
1354 disk->part0 = bdev_alloc(disk, 0);
1355 if (!disk->part0)
1358 disk->node_id = node_id;
1359 mutex_init(&disk->open_mutex);
1360 xa_init(&disk->part_tbl);
1361 if (xa_insert(&disk->part_tbl, 0, disk->part0, GFP_KERNEL))
1364 if (blkcg_init_disk(disk))
1367 rand_initialize_disk(disk);
1368 disk_to_dev(disk)->class = &block_class;
1369 disk_to_dev(disk)->type = &disk_type;
1370 device_initialize(disk_to_dev(disk));
1371 inc_diskseq(disk);
1372 q->disk = disk;
1373 lockdep_init_map(&disk->lockdep_map, "(bio completion)", lkclass, 0);
1375 INIT_LIST_HEAD(&disk->slave_bdevs);
1377 return disk;
1380 xa_erase(&disk->part_tbl, 0);
1382 xa_destroy(&disk->part_tbl);
1383 disk->part0->bd_disk = NULL;
1384 iput(disk->part0->bd_inode);
1386 bdi_put(disk->bdi);
1388 bioset_exit(&disk->bio_split);
1390 kfree(disk);
1399 struct gendisk *disk;
1405 disk = __alloc_disk_node(q, node, lkclass);
1406 if (!disk) {
1410 set_bit(GD_OWNS_QUEUE, &disk->state);
1411 return disk;
1417 * @disk: the struct gendisk to decrement the refcount for
1422 * Note: for blk-mq disk put_disk must be called before freeing the tag_set
1428 void put_disk(struct gendisk *disk)
1430 if (disk)
1431 put_device(disk_to_dev(disk));
1447 * @disk: gendisk to operate on
1448 * @read_only: %true to set the disk read-only, %false set the disk read/write
1450 * This function is used to indicate whether a given disk device should have its
1454 void set_disk_ro(struct gendisk *disk, bool read_only)
1457 if (test_and_set_bit(GD_READ_ONLY, &disk->state))
1460 if (!test_and_clear_bit(GD_READ_ONLY, &disk->state))
1463 set_disk_ro_uevent(disk, read_only);
1467 void inc_diskseq(struct gendisk *disk)
1469 disk->diskseq = atomic64_inc_return(&diskseq);