Lines Matching full:disk
59 void set_capacity(struct gendisk *disk, sector_t sectors)
63 disk->disk_name, sectors,
68 bdev_set_nr_sectors(disk->part0, sectors);
73 * Set disk capacity and notify if the size is not currently zero and will not
76 bool set_capacity_and_notify(struct gendisk *disk, sector_t size)
78 sector_t capacity = get_capacity(disk);
81 set_capacity(disk, size);
89 !disk_live(disk) ||
90 (disk->flags & GENHD_FL_HIDDEN))
94 disk->disk_name, capacity, size);
102 kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp);
329 void disk_uevent(struct gendisk *disk, enum kobject_action action)
335 xa_for_each(&disk->part_tbl, idx, part) {
350 int disk_scan_partitions(struct gendisk *disk, blk_mode_t mode)
355 if (!disk_has_partscan(disk))
357 if (disk->open_partitions)
367 ret = bd_prepare_to_claim(disk->part0, disk_scan_partitions,
373 set_bit(GD_NEED_PART_SCAN, &disk->state);
374 file = bdev_file_open_by_dev(disk_devt(disk), mode & ~BLK_OPEN_EXCL,
384 * creat partition for underlying disk.
386 clear_bit(GD_NEED_PART_SCAN, &disk->state);
388 bd_abort_claiming(disk->part0, disk_scan_partitions);
393 * add_disk_fwnode - add disk information to kernel list with fwnode
394 * @parent: parent device for the disk
395 * @disk: per-device partitioning information
397 * @fwnode: attached disk fwnode
399 * This function registers the partitioning information in @disk
400 * with the kernel. Also attach a fwnode to the disk device.
402 int __must_check add_disk_fwnode(struct device *parent, struct gendisk *disk,
407 struct device *ddev = disk_to_dev(disk);
410 if (WARN_ON_ONCE(bdev_nr_sectors(disk->part0) > BLK_DEV_MAX_SECTORS))
413 if (queue_is_mq(disk->queue)) {
417 if (disk->fops->submit_bio || disk->fops->poll_bio)
424 elevator_init_mq(disk->queue);
426 if (!disk->fops->submit_bio)
428 bdev_set_flag(disk->part0, BD_HAS_SUBMIT_BIO);
439 if (disk->major) {
440 if (WARN_ON(!disk->minors))
443 if (disk->minors > DISK_MAX_PARTS) {
446 disk->minors = DISK_MAX_PARTS;
448 if (disk->first_minor > MINORMASK ||
449 disk->minors > MINORMASK + 1 ||
450 disk->first_minor + disk->minors > MINORMASK + 1)
453 if (WARN_ON(disk->minors))
459 disk->major = BLOCK_EXT_MAJOR;
460 disk->first_minor = ret;
468 dev_set_name(ddev, "%s", disk->disk_name);
471 if (!(disk->flags & GENHD_FL_HIDDEN))
472 ddev->devt = MKDEV(disk->major, disk->first_minor);
477 ret = disk_alloc_events(disk);
493 disk->part0->bd_holder_dir =
495 if (!disk->part0->bd_holder_dir) {
499 disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj);
500 if (!disk->slave_dir) {
505 ret = blk_register_queue(disk);
509 if (!(disk->flags & GENHD_FL_HIDDEN)) {
510 ret = bdi_register(disk->bdi, "%u:%u",
511 disk->major, disk->first_minor);
514 bdi_set_owner(disk->bdi, ddev);
516 &disk->bdi->dev->kobj, "bdi");
521 if (get_capacity(disk) && disk_has_partscan(disk))
522 set_bit(GD_NEED_PART_SCAN, &disk->state);
524 bdev_add(disk->part0, ddev->devt);
525 if (get_capacity(disk))
526 disk_scan_partitions(disk, BLK_OPEN_READ);
529 * Announce the disk and partitions after all partitions are
533 disk_uevent(disk, KOBJ_ADD);
540 disk->part0->bd_dev = MKDEV(disk->major, disk->first_minor);
543 blk_apply_bdi_limits(disk->bdi, &disk->queue->limits);
544 disk_add_events(disk);
545 set_bit(GD_ADDED, &disk->state);
549 if (!(disk->flags & GENHD_FL_HIDDEN))
550 bdi_unregister(disk->bdi);
552 blk_unregister_queue(disk);
553 rq_qos_exit(disk->queue);
555 kobject_put(disk->slave_dir);
556 disk->slave_dir = NULL;
558 kobject_put(disk->part0->bd_holder_dir);
565 if (disk->major == BLOCK_EXT_MAJOR)
566 blk_free_ext_minor(disk->first_minor);
568 if (disk->queue->elevator)
569 elevator_exit(disk->queue);
575 * device_add_disk - add disk information to kernel list
576 * @parent: parent device for the disk
577 * @disk: per-device partitioning information
580 * This function registers the partitioning information in @disk
583 int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
586 return add_disk_fwnode(parent, disk, groups, NULL);
590 static void blk_report_disk_dead(struct gendisk *disk, bool surprise)
596 * On surprise disk removal, bdev_mark_dead() may call into file
598 * disk->open_mutex.
600 lockdep_assert_not_held(&disk->open_mutex);
603 xa_for_each(&disk->part_tbl, idx, bdev) {
616 static bool __blk_mark_disk_dead(struct gendisk *disk)
621 if (test_and_set_bit(GD_DEAD, &disk->state))
624 if (test_bit(GD_OWNS_QUEUE, &disk->state))
625 blk_queue_flag_set(QUEUE_FLAG_DYING, disk->queue);
630 set_capacity(disk, 0);
635 return blk_queue_start_drain(disk->queue);
639 * blk_mark_disk_dead - mark a disk as dead
640 * @disk: disk to mark as dead
642 * Mark as disk as dead (e.g. surprise removed) and don't accept any new I/O
643 * to this disk.
645 void blk_mark_disk_dead(struct gendisk *disk)
647 __blk_mark_disk_dead(disk);
648 blk_report_disk_dead(disk, true);
654 * @disk: the struct gendisk to remove
671 void del_gendisk(struct gendisk *disk)
673 struct request_queue *q = disk->queue;
680 if (WARN_ON_ONCE(!disk_live(disk) && !(disk->flags & GENHD_FL_HIDDEN)))
683 disk_del_events(disk);
688 mutex_lock(&disk->open_mutex);
689 xa_for_each(&disk->part_tbl, idx, part)
691 mutex_unlock(&disk->open_mutex);
697 if (!test_bit(GD_DEAD, &disk->state))
698 blk_report_disk_dead(disk, false);
701 * Drop all partitions now that the disk is marked dead.
703 mutex_lock(&disk->open_mutex);
704 start_drain = __blk_mark_disk_dead(disk);
707 xa_for_each_start(&disk->part_tbl, idx, part, 1)
709 mutex_unlock(&disk->open_mutex);
711 if (!(disk->flags & GENHD_FL_HIDDEN)) {
712 sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi");
718 bdi_unregister(disk->bdi);
721 blk_unregister_queue(disk);
723 kobject_put(disk->part0->bd_holder_dir);
724 kobject_put(disk->slave_dir);
725 disk->slave_dir = NULL;
727 part_stat_set_all(disk->part0, 0);
728 disk->part0->bd_stamp = 0;
729 sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk)));
730 pm_runtime_set_memalloc_noio(disk_to_dev(disk), false);
731 device_del(disk_to_dev(disk));
735 blk_throtl_cancel_bios(disk);
753 * If the disk does not own the queue, allow using passthrough requests
756 if (!test_bit(GD_OWNS_QUEUE, &disk->state))
767 * invalidate_disk - invalidate the disk
768 * @disk: the struct gendisk to invalidate
770 * A helper to invalidates the disk. It will clean the disk's associated
771 * buffer/page caches and reset its internal states so that the disk
776 void invalidate_disk(struct gendisk *disk)
778 struct block_device *bdev = disk->part0;
782 set_capacity(disk, 0);
791 struct gendisk *disk = dev_to_disk(dev);
793 if (!disk->bb)
796 return badblocks_show(disk->bb, page, 0);
803 struct gendisk *disk = dev_to_disk(dev);
805 if (!disk->bb)
808 return badblocks_store(disk->bb, page, len, 0);
952 struct gendisk *disk = dev_to_disk(dev);
954 return sysfs_emit(buf, "%d\n", disk->minors);
960 struct gendisk *disk = dev_to_disk(dev);
963 (disk->flags & GENHD_FL_NO_PART) ? 1 : DISK_MAX_PARTS);
969 struct gendisk *disk = dev_to_disk(dev);
972 (disk->flags & GENHD_FL_REMOVABLE ? 1 : 0));
978 struct gendisk *disk = dev_to_disk(dev);
981 (disk->flags & GENHD_FL_HIDDEN ? 1 : 0));
987 struct gendisk *disk = dev_to_disk(dev);
989 return sysfs_emit(buf, "%d\n", get_disk_ro(disk) ? 1 : 0);
1068 struct gendisk *disk = dev_to_disk(dev);
1070 return sysfs_emit(buf, "%d\n", bdev_alignment_offset(disk->part0));
1077 struct gendisk *disk = dev_to_disk(dev);
1079 return sysfs_emit(buf, "%d\n", bdev_alignment_offset(disk->part0));
1085 struct gendisk *disk = dev_to_disk(dev);
1087 return sysfs_emit(buf, "%llu\n", disk->diskseq);
1173 struct gendisk *disk = dev_to_disk(dev);
1175 if (a == &dev_attr_badblocks.attr && !disk->bb)
1198 * @dev: the device representing this disk
1206 * will also be freed prior to the disk.
1212 struct gendisk *disk = dev_to_disk(dev);
1215 WARN_ON_ONCE(disk_live(disk));
1217 blk_trace_remove(disk->queue);
1223 * teardown case (yet) as the tagset can be gone by the time the disk
1226 if (queue_is_mq(disk->queue) &&
1227 test_bit(GD_OWNS_QUEUE, &disk->state) &&
1228 !test_bit(GD_ADDED, &disk->state))
1229 blk_mq_exit_queue(disk->queue);
1231 blkcg_exit_disk(disk);
1233 bioset_exit(&disk->bio_split);
1235 disk_release_events(disk);
1236 kfree(disk->random);
1237 disk_free_zone_resources(disk);
1238 xa_destroy(&disk->part_tbl);
1240 disk->queue->disk = NULL;
1241 blk_put_queue(disk->queue);
1243 if (test_bit(GD_ADDED, &disk->state) && disk->fops->free_disk)
1244 disk->fops->free_disk(disk);
1246 bdev_drop(disk->part0); /* frees the disk */
1251 const struct gendisk *disk = dev_to_disk(dev);
1253 return add_uevent_var(env, "DISKSEQ=%llu", disk->diskseq);
1264 struct gendisk *disk = dev_to_disk(dev);
1266 if (disk->fops->devnode)
1267 return disk->fops->devnode(disk, mode);
1272 .name = "disk",
1280 * aggregate disk stat collector. Uses the same stats that the sysfs
1365 dev_t part_devt(struct gendisk *disk, u8 partno)
1371 part = xa_load(&disk->part_tbl, partno);
1382 struct gendisk *disk;
1384 disk = kzalloc_node(sizeof(struct gendisk), GFP_KERNEL, node_id);
1385 if (!disk)
1388 if (bioset_init(&disk->bio_split, BIO_POOL_SIZE, 0, 0))
1391 disk->bdi = bdi_alloc(node_id);
1392 if (!disk->bdi)
1396 disk->queue = q;
1398 disk->part0 = bdev_alloc(disk, 0);
1399 if (!disk->part0)
1402 disk->node_id = node_id;
1403 mutex_init(&disk->open_mutex);
1404 xa_init(&disk->part_tbl);
1405 if (xa_insert(&disk->part_tbl, 0, disk->part0, GFP_KERNEL))
1408 if (blkcg_init_disk(disk))
1411 disk_init_zone_resources(disk);
1412 rand_initialize_disk(disk);
1413 disk_to_dev(disk)->class = &block_class;
1414 disk_to_dev(disk)->type = &disk_type;
1415 device_initialize(disk_to_dev(disk));
1416 inc_diskseq(disk);
1417 q->disk = disk;
1418 lockdep_init_map(&disk->lockdep_map, "(bio completion)", lkclass, 0);
1420 INIT_LIST_HEAD(&disk->slave_bdevs);
1422 return disk;
1425 xa_erase(&disk->part_tbl, 0);
1427 xa_destroy(&disk->part_tbl);
1428 disk->part0->bd_disk = NULL;
1429 bdev_drop(disk->part0);
1431 bdi_put(disk->bdi);
1433 bioset_exit(&disk->bio_split);
1435 kfree(disk);
1444 struct gendisk *disk;
1450 disk = __alloc_disk_node(q, node, lkclass);
1451 if (!disk) {
1455 set_bit(GD_OWNS_QUEUE, &disk->state);
1456 return disk;
1462 * @disk: the struct gendisk to decrement the refcount for
1467 * Note: for blk-mq disk put_disk must be called before freeing the tag_set
1473 void put_disk(struct gendisk *disk)
1475 if (disk)
1476 put_device(disk_to_dev(disk));
1492 * @disk: gendisk to operate on
1493 * @read_only: %true to set the disk read-only, %false set the disk read/write
1495 * This function is used to indicate whether a given disk device should have its
1499 void set_disk_ro(struct gendisk *disk, bool read_only)
1502 if (test_and_set_bit(GD_READ_ONLY, &disk->state))
1505 if (!test_and_clear_bit(GD_READ_ONLY, &disk->state))
1508 set_disk_ro_uevent(disk, read_only);
1512 void inc_diskseq(struct gendisk *disk)
1514 disk->diskseq = atomic64_inc_return(&diskseq);