Lines Matching refs:disk
55 void set_capacity(struct gendisk *disk, sector_t sectors) in set_capacity() argument
57 struct block_device *bdev = disk->part0; in set_capacity()
70 bool set_capacity_and_notify(struct gendisk *disk, sector_t size) in set_capacity_and_notify() argument
72 sector_t capacity = get_capacity(disk); in set_capacity_and_notify()
75 set_capacity(disk, size); in set_capacity_and_notify()
83 !disk_live(disk) || in set_capacity_and_notify()
84 (disk->flags & GENHD_FL_HIDDEN)) in set_capacity_and_notify()
88 disk->disk_name, capacity, size); in set_capacity_and_notify()
96 kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp); in set_capacity_and_notify()
354 void disk_uevent(struct gendisk *disk, enum kobject_action action) in disk_uevent() argument
360 xa_for_each(&disk->part_tbl, idx, part) { in disk_uevent()
375 static void disk_scan_partitions(struct gendisk *disk) in disk_scan_partitions() argument
379 if (!get_capacity(disk) || !disk_part_scan_enabled(disk)) in disk_scan_partitions()
382 set_bit(GD_NEED_PART_SCAN, &disk->state); in disk_scan_partitions()
383 bdev = blkdev_get_by_dev(disk_devt(disk), FMODE_READ, NULL); in disk_scan_partitions()
397 int __must_check device_add_disk(struct device *parent, struct gendisk *disk, in device_add_disk() argument
401 struct device *ddev = disk_to_dev(disk); in device_add_disk()
410 elevator_init_mq(disk->queue); in device_add_disk()
419 if (disk->major) { in device_add_disk()
420 if (WARN_ON(!disk->minors)) in device_add_disk()
423 if (disk->minors > DISK_MAX_PARTS) { in device_add_disk()
426 disk->minors = DISK_MAX_PARTS; in device_add_disk()
429 if (WARN_ON(disk->minors)) in device_add_disk()
435 disk->major = BLOCK_EXT_MAJOR; in device_add_disk()
436 disk->first_minor = ret; in device_add_disk()
437 disk->flags |= GENHD_FL_EXT_DEVT; in device_add_disk()
440 ret = disk_alloc_events(disk); in device_add_disk()
449 dev_set_name(ddev, "%s", disk->disk_name); in device_add_disk()
450 if (!(disk->flags & GENHD_FL_HIDDEN)) in device_add_disk()
451 ddev->devt = MKDEV(disk->major, disk->first_minor); in device_add_disk()
469 ret = blk_integrity_add(disk); in device_add_disk()
473 disk->part0->bd_holder_dir = in device_add_disk()
475 if (!disk->part0->bd_holder_dir) { in device_add_disk()
479 disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj); in device_add_disk()
480 if (!disk->slave_dir) { in device_add_disk()
485 ret = bd_register_pending_holders(disk); in device_add_disk()
489 ret = blk_register_queue(disk); in device_add_disk()
493 if (disk->flags & GENHD_FL_HIDDEN) { in device_add_disk()
498 disk->flags |= GENHD_FL_SUPPRESS_PARTITION_INFO; in device_add_disk()
499 disk->flags |= GENHD_FL_NO_PART_SCAN; in device_add_disk()
501 ret = bdi_register(disk->bdi, "%u:%u", in device_add_disk()
502 disk->major, disk->first_minor); in device_add_disk()
505 bdi_set_owner(disk->bdi, ddev); in device_add_disk()
507 &disk->bdi->dev->kobj, "bdi"); in device_add_disk()
511 bdev_add(disk->part0, ddev->devt); in device_add_disk()
512 disk_scan_partitions(disk); in device_add_disk()
519 disk_uevent(disk, KOBJ_ADD); in device_add_disk()
522 disk_update_readahead(disk); in device_add_disk()
523 disk_add_events(disk); in device_add_disk()
527 if (!(disk->flags & GENHD_FL_HIDDEN)) in device_add_disk()
528 bdi_unregister(disk->bdi); in device_add_disk()
530 blk_unregister_queue(disk); 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 disk_release_events(disk); in device_add_disk()
545 if (disk->major == BLOCK_EXT_MAJOR) in device_add_disk()
546 blk_free_ext_minor(disk->first_minor); in device_add_disk()
570 void del_gendisk(struct gendisk *disk) in del_gendisk() argument
572 struct request_queue *q = disk->queue; in del_gendisk()
576 if (WARN_ON_ONCE(!disk_live(disk) && !(disk->flags & GENHD_FL_HIDDEN))) in del_gendisk()
579 blk_integrity_del(disk); in del_gendisk()
580 disk_del_events(disk); in del_gendisk()
582 mutex_lock(&disk->open_mutex); in del_gendisk()
583 remove_inode_hash(disk->part0->bd_inode); in del_gendisk()
584 blk_drop_partitions(disk); in del_gendisk()
585 mutex_unlock(&disk->open_mutex); in del_gendisk()
587 fsync_bdev(disk->part0); in del_gendisk()
588 __invalidate_device(disk->part0, true); in del_gendisk()
593 set_bit(GD_DEAD, &disk->state); in del_gendisk()
594 set_capacity(disk, 0); in del_gendisk()
601 if (!(disk->flags & GENHD_FL_HIDDEN)) { in del_gendisk()
602 sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi"); in del_gendisk()
608 bdi_unregister(disk->bdi); in del_gendisk()
611 blk_unregister_queue(disk); in del_gendisk()
613 kobject_put(disk->part0->bd_holder_dir); in del_gendisk()
614 kobject_put(disk->slave_dir); in del_gendisk()
616 part_stat_set_all(disk->part0, 0); in del_gendisk()
617 disk->part0->bd_stamp = 0; in del_gendisk()
619 sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk))); in del_gendisk()
620 pm_runtime_set_memalloc_noio(disk_to_dev(disk), false); in del_gendisk()
621 device_del(disk_to_dev(disk)); in del_gendisk()
647 void invalidate_disk(struct gendisk *disk) in invalidate_disk() argument
649 struct block_device *bdev = disk->part0; in invalidate_disk()
653 set_capacity(disk, 0); in invalidate_disk()
662 struct gendisk *disk = dev_to_disk(dev); in disk_badblocks_show() local
664 if (!disk->bb) in disk_badblocks_show()
667 return badblocks_show(disk->bb, page, 0); in disk_badblocks_show()
674 struct gendisk *disk = dev_to_disk(dev); in disk_badblocks_store() local
676 if (!disk->bb) in disk_badblocks_store()
679 return badblocks_store(disk->bb, page, len, 0); in disk_badblocks_store()
714 struct gendisk *disk = dev_to_disk(dev); in printk_all_partitions() local
723 if (get_capacity(disk) == 0 || in printk_all_partitions()
724 (disk->flags & GENHD_FL_SUPPRESS_PARTITION_INFO)) in printk_all_partitions()
732 xa_for_each(&disk->part_tbl, idx, part) { in printk_all_partitions()
867 struct gendisk *disk = dev_to_disk(dev); in disk_range_show() local
869 return sprintf(buf, "%d\n", disk->minors); in disk_range_show()
875 struct gendisk *disk = dev_to_disk(dev); in disk_ext_range_show() local
877 return sprintf(buf, "%d\n", disk_max_parts(disk)); in disk_ext_range_show()
883 struct gendisk *disk = dev_to_disk(dev); in disk_removable_show() local
886 (disk->flags & GENHD_FL_REMOVABLE ? 1 : 0)); in disk_removable_show()
892 struct gendisk *disk = dev_to_disk(dev); in disk_hidden_show() local
895 (disk->flags & GENHD_FL_HIDDEN ? 1 : 0)); in disk_hidden_show()
901 struct gendisk *disk = dev_to_disk(dev); in disk_ro_show() local
903 return sprintf(buf, "%d\n", get_disk_ro(disk) ? 1 : 0); in disk_ro_show()
974 struct gendisk *disk = dev_to_disk(dev); in disk_capability_show() local
976 return sprintf(buf, "%x\n", disk->flags); in disk_capability_show()
983 struct gendisk *disk = dev_to_disk(dev); in disk_alignment_offset_show() local
985 return sprintf(buf, "%d\n", queue_alignment_offset(disk->queue)); in disk_alignment_offset_show()
992 struct gendisk *disk = dev_to_disk(dev); in disk_discard_alignment_show() local
994 return sprintf(buf, "%d\n", queue_discard_alignment(disk->queue)); in disk_discard_alignment_show()
1000 struct gendisk *disk = dev_to_disk(dev); in diskseq_show() local
1002 return sprintf(buf, "%llu\n", disk->diskseq); in diskseq_show()
1076 struct gendisk *disk = dev_to_disk(dev); in disk_visible() local
1078 if (a == &dev_attr_badblocks.attr && !disk->bb) in disk_visible()
1109 struct gendisk *disk = dev_to_disk(dev); in disk_release() local
1112 WARN_ON_ONCE(disk_live(disk)); in disk_release()
1114 blk_mq_cancel_work_sync(disk->queue); in disk_release()
1116 disk_release_events(disk); in disk_release()
1117 kfree(disk->random); in disk_release()
1118 xa_destroy(&disk->part_tbl); in disk_release()
1119 disk->queue->disk = NULL; in disk_release()
1120 blk_put_queue(disk->queue); in disk_release()
1121 iput(disk->part0->bd_inode); /* frees the disk */ in disk_release()
1126 struct gendisk *disk = dev_to_disk(dev); in block_uevent() local
1128 return add_uevent_var(env, "DISKSEQ=%llu", disk->diskseq); in block_uevent()
1139 struct gendisk *disk = dev_to_disk(dev); in block_devnode() local
1141 if (disk->fops->devnode) in block_devnode()
1142 return disk->fops->devnode(disk, mode); in block_devnode()
1243 dev_t part_devt(struct gendisk *disk, u8 partno) in part_devt() argument
1249 part = xa_load(&disk->part_tbl, partno); in part_devt()
1265 struct gendisk *disk = dev_to_disk(dev); in blk_lookup_devt() local
1270 if (partno < disk->minors) { in blk_lookup_devt()
1277 devt = part_devt(disk, partno); in blk_lookup_devt()
1289 struct gendisk *disk; in __alloc_disk_node() local
1294 disk = kzalloc_node(sizeof(struct gendisk), GFP_KERNEL, node_id); in __alloc_disk_node()
1295 if (!disk) in __alloc_disk_node()
1298 disk->bdi = bdi_alloc(node_id); in __alloc_disk_node()
1299 if (!disk->bdi) in __alloc_disk_node()
1303 disk->queue = q; in __alloc_disk_node()
1305 disk->part0 = bdev_alloc(disk, 0); in __alloc_disk_node()
1306 if (!disk->part0) in __alloc_disk_node()
1309 disk->node_id = node_id; in __alloc_disk_node()
1310 mutex_init(&disk->open_mutex); in __alloc_disk_node()
1311 xa_init(&disk->part_tbl); in __alloc_disk_node()
1312 if (xa_insert(&disk->part_tbl, 0, disk->part0, GFP_KERNEL)) in __alloc_disk_node()
1315 rand_initialize_disk(disk); in __alloc_disk_node()
1316 disk_to_dev(disk)->class = &block_class; in __alloc_disk_node()
1317 disk_to_dev(disk)->type = &disk_type; in __alloc_disk_node()
1318 device_initialize(disk_to_dev(disk)); in __alloc_disk_node()
1319 inc_diskseq(disk); in __alloc_disk_node()
1320 q->disk = disk; in __alloc_disk_node()
1321 lockdep_init_map(&disk->lockdep_map, "(bio completion)", lkclass, 0); in __alloc_disk_node()
1323 INIT_LIST_HEAD(&disk->slave_bdevs); in __alloc_disk_node()
1325 return disk; in __alloc_disk_node()
1328 xa_destroy(&disk->part_tbl); in __alloc_disk_node()
1329 disk->part0->bd_disk = NULL; in __alloc_disk_node()
1330 iput(disk->part0->bd_inode); in __alloc_disk_node()
1332 bdi_put(disk->bdi); in __alloc_disk_node()
1334 kfree(disk); in __alloc_disk_node()
1344 struct gendisk *disk; in __blk_alloc_disk() local
1350 disk = __alloc_disk_node(q, node, lkclass); in __blk_alloc_disk()
1351 if (!disk) { in __blk_alloc_disk()
1355 return disk; in __blk_alloc_disk()
1369 void put_disk(struct gendisk *disk) in put_disk() argument
1371 if (disk) in put_disk()
1372 put_device(disk_to_dev(disk)); in put_disk()
1385 void blk_cleanup_disk(struct gendisk *disk) in blk_cleanup_disk() argument
1387 blk_cleanup_queue(disk->queue); in blk_cleanup_disk()
1388 put_disk(disk); in blk_cleanup_disk()
1411 void set_disk_ro(struct gendisk *disk, bool read_only) in set_disk_ro() argument
1414 if (test_and_set_bit(GD_READ_ONLY, &disk->state)) in set_disk_ro()
1417 if (!test_and_clear_bit(GD_READ_ONLY, &disk->state)) in set_disk_ro()
1420 set_disk_ro_uevent(disk, read_only); in set_disk_ro()
1424 void inc_diskseq(struct gendisk *disk) in inc_diskseq() argument
1426 disk->diskseq = atomic64_inc_return(&diskseq); in inc_diskseq()