Lines Matching refs:disk

42 static void disk_alloc_events(struct gendisk *disk);
43 static void disk_add_events(struct gendisk *disk);
44 static void disk_del_events(struct gendisk *disk);
45 static void disk_release_events(struct gendisk *disk);
61 struct hd_struct *disk_get_part(struct gendisk *disk, int partno) in disk_get_part() argument
71 ptbl = rcu_dereference(disk->part_tbl); in disk_get_part()
95 void disk_part_iter_init(struct disk_part_iter *piter, struct gendisk *disk, in disk_part_iter_init() argument
101 ptbl = rcu_dereference(disk->part_tbl); in disk_part_iter_init()
103 piter->disk = disk; in disk_part_iter_init()
139 ptbl = rcu_dereference(piter->disk->part_tbl); in disk_part_iter_next()
216 struct hd_struct *disk_map_sector_rcu(struct gendisk *disk, sector_t sector) in disk_map_sector_rcu() argument
222 ptbl = rcu_dereference(disk->part_tbl); in disk_map_sector_rcu()
236 return &disk->part0; in disk_map_sector_rcu()
414 struct gendisk *disk = part_to_disk(part); in blk_alloc_devt() local
418 if (part->partno < disk->minors) { in blk_alloc_devt()
419 *devt = MKDEV(disk->major, disk->first_minor + part->partno); in blk_alloc_devt()
508 static void register_disk(struct gendisk *disk) in register_disk() argument
510 struct device *ddev = disk_to_dev(disk); in register_disk()
516 ddev->parent = disk->driverfs_dev; in register_disk()
518 dev_set_name(ddev, "%s", disk->disk_name); in register_disk()
541 disk->part0.holder_dir = kobject_create_and_add("holders", &ddev->kobj); in register_disk()
542 disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj); in register_disk()
545 if (!disk_part_scan_enabled(disk)) in register_disk()
549 if (!get_capacity(disk)) in register_disk()
552 bdev = bdget_disk(disk, 0); in register_disk()
568 disk_part_iter_init(&piter, disk, 0); in register_disk()
583 void add_disk(struct gendisk *disk) in add_disk() argument
593 WARN_ON(disk->minors && !(disk->major || disk->first_minor)); in add_disk()
594 WARN_ON(!disk->minors && !(disk->flags & GENHD_FL_EXT_DEVT)); in add_disk()
596 disk->flags |= GENHD_FL_UP; in add_disk()
598 retval = blk_alloc_devt(&disk->part0, &devt); in add_disk()
603 disk_to_dev(disk)->devt = devt; in add_disk()
608 disk->major = MAJOR(devt); in add_disk()
609 disk->first_minor = MINOR(devt); in add_disk()
611 disk_alloc_events(disk); in add_disk()
614 bdi = &disk->queue->backing_dev_info; in add_disk()
615 bdi_register_dev(bdi, disk_devt(disk)); in add_disk()
617 blk_register_region(disk_devt(disk), disk->minors, NULL, in add_disk()
618 exact_match, exact_lock, disk); in add_disk()
619 register_disk(disk); in add_disk()
620 blk_register_queue(disk); in add_disk()
626 WARN_ON_ONCE(!blk_get_queue(disk->queue)); in add_disk()
628 retval = sysfs_create_link(&disk_to_dev(disk)->kobj, &bdi->dev->kobj, in add_disk()
632 disk_add_events(disk); in add_disk()
633 blk_integrity_add(disk); in add_disk()
637 void del_gendisk(struct gendisk *disk) in del_gendisk() argument
642 blk_integrity_del(disk); in del_gendisk()
643 disk_del_events(disk); in del_gendisk()
646 disk_part_iter_init(&piter, disk, in del_gendisk()
649 invalidate_partition(disk, part->partno); in del_gendisk()
650 delete_partition(disk, part->partno); in del_gendisk()
654 invalidate_partition(disk, 0); in del_gendisk()
655 set_capacity(disk, 0); in del_gendisk()
656 disk->flags &= ~GENHD_FL_UP; in del_gendisk()
658 sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi"); in del_gendisk()
659 blk_unregister_queue(disk); in del_gendisk()
660 blk_unregister_region(disk_devt(disk), disk->minors); in del_gendisk()
662 part_stat_set_all(&disk->part0, 0); in del_gendisk()
663 disk->part0.stamp = 0; in del_gendisk()
665 kobject_put(disk->part0.holder_dir); in del_gendisk()
666 kobject_put(disk->slave_dir); in del_gendisk()
667 disk->driverfs_dev = NULL; in del_gendisk()
669 sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk))); in del_gendisk()
670 pm_runtime_set_memalloc_noio(disk_to_dev(disk), false); in del_gendisk()
671 device_del(disk_to_dev(disk)); in del_gendisk()
685 struct gendisk *disk = NULL; in get_gendisk() local
692 disk = dev_to_disk(kobj_to_dev(kobj)); in get_gendisk()
700 disk = part_to_disk(part); in get_gendisk()
705 return disk; in get_gendisk()
722 struct block_device *bdget_disk(struct gendisk *disk, int partno) in bdget_disk() argument
727 part = disk_get_part(disk, partno); in bdget_disk()
748 struct gendisk *disk = dev_to_disk(dev); in printk_all_partitions() local
758 if (get_capacity(disk) == 0 || in printk_all_partitions()
759 (disk->flags & GENHD_FL_SUPPRESS_PARTITION_INFO)) in printk_all_partitions()
767 disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0); in printk_all_partitions()
769 bool is_part0 = part == &disk->part0; in printk_all_partitions()
774 , disk_name(disk, part->partno, name_buf), in printk_all_partitions()
777 if (disk->driverfs_dev != NULL && in printk_all_partitions()
778 disk->driverfs_dev->driver != NULL) in printk_all_partitions()
780 disk->driverfs_dev->driver->name); in printk_all_partitions()
926 struct gendisk *disk = dev_to_disk(dev); in disk_range_show() local
928 return sprintf(buf, "%d\n", disk->minors); in disk_range_show()
934 struct gendisk *disk = dev_to_disk(dev); in disk_ext_range_show() local
936 return sprintf(buf, "%d\n", disk_max_parts(disk)); in disk_ext_range_show()
942 struct gendisk *disk = dev_to_disk(dev); in disk_removable_show() local
945 (disk->flags & GENHD_FL_REMOVABLE ? 1 : 0)); in disk_removable_show()
951 struct gendisk *disk = dev_to_disk(dev); in disk_ro_show() local
953 return sprintf(buf, "%d\n", get_disk_ro(disk) ? 1 : 0); in disk_ro_show()
959 struct gendisk *disk = dev_to_disk(dev); in disk_capability_show() local
961 return sprintf(buf, "%x\n", disk->flags); in disk_capability_show()
968 struct gendisk *disk = dev_to_disk(dev); in disk_alignment_offset_show() local
970 return sprintf(buf, "%d\n", queue_alignment_offset(disk->queue)); in disk_alignment_offset_show()
977 struct gendisk *disk = dev_to_disk(dev); in disk_discard_alignment_show() local
979 return sprintf(buf, "%d\n", queue_discard_alignment(disk->queue)); in disk_discard_alignment_show()
1043 static void disk_replace_part_tbl(struct gendisk *disk, in disk_replace_part_tbl() argument
1046 struct disk_part_tbl *old_ptbl = disk->part_tbl; in disk_replace_part_tbl()
1048 rcu_assign_pointer(disk->part_tbl, new_ptbl); in disk_replace_part_tbl()
1070 int disk_expand_part_tbl(struct gendisk *disk, int partno) in disk_expand_part_tbl() argument
1072 struct disk_part_tbl *old_ptbl = disk->part_tbl; in disk_expand_part_tbl()
1087 if (disk_max_parts(disk) && target > disk_max_parts(disk)) in disk_expand_part_tbl()
1094 new_ptbl = kzalloc_node(size, GFP_KERNEL, disk->node_id); in disk_expand_part_tbl()
1103 disk_replace_part_tbl(disk, new_ptbl); in disk_expand_part_tbl()
1109 struct gendisk *disk = dev_to_disk(dev); in disk_release() local
1112 disk_release_events(disk); in disk_release()
1113 kfree(disk->random); in disk_release()
1114 disk_replace_part_tbl(disk, NULL); in disk_release()
1115 hd_free_part(&disk->part0); in disk_release()
1116 if (disk->queue) in disk_release()
1117 blk_put_queue(disk->queue); in disk_release()
1118 kfree(disk); in disk_release()
1127 struct gendisk *disk = dev_to_disk(dev); in block_devnode() local
1129 if (disk->devnode) in block_devnode()
1130 return disk->devnode(disk, mode); in block_devnode()
1228 struct gendisk *disk = dev_to_disk(dev); in blk_lookup_devt() local
1234 if (partno < disk->minors) { in blk_lookup_devt()
1242 part = disk_get_part(disk, partno); in blk_lookup_devt()
1263 struct gendisk *disk; in alloc_disk_node() local
1265 disk = kzalloc_node(sizeof(struct gendisk), GFP_KERNEL, node_id); in alloc_disk_node()
1266 if (disk) { in alloc_disk_node()
1267 if (!init_part_stats(&disk->part0)) { in alloc_disk_node()
1268 kfree(disk); in alloc_disk_node()
1271 disk->node_id = node_id; in alloc_disk_node()
1272 if (disk_expand_part_tbl(disk, 0)) { in alloc_disk_node()
1273 free_part_stats(&disk->part0); in alloc_disk_node()
1274 kfree(disk); in alloc_disk_node()
1277 disk->part_tbl->part[0] = &disk->part0; in alloc_disk_node()
1288 seqcount_init(&disk->part0.nr_sects_seq); in alloc_disk_node()
1289 if (hd_ref_init(&disk->part0)) { in alloc_disk_node()
1290 hd_free_part(&disk->part0); in alloc_disk_node()
1291 kfree(disk); in alloc_disk_node()
1295 disk->minors = minors; in alloc_disk_node()
1296 rand_initialize_disk(disk); in alloc_disk_node()
1297 disk_to_dev(disk)->class = &block_class; in alloc_disk_node()
1298 disk_to_dev(disk)->type = &disk_type; in alloc_disk_node()
1299 device_initialize(disk_to_dev(disk)); in alloc_disk_node()
1301 return disk; in alloc_disk_node()
1305 struct kobject *get_disk(struct gendisk *disk) in get_disk() argument
1310 if (!disk->fops) in get_disk()
1312 owner = disk->fops->owner; in get_disk()
1315 kobj = kobject_get(&disk_to_dev(disk)->kobj); in get_disk()
1326 void put_disk(struct gendisk *disk) in put_disk() argument
1328 if (disk) in put_disk()
1329 kobject_put(&disk_to_dev(disk)->kobj); in put_disk()
1351 void set_disk_ro(struct gendisk *disk, int flag) in set_disk_ro() argument
1356 if (disk->part0.policy != flag) { in set_disk_ro()
1357 set_disk_ro_uevent(disk, flag); in set_disk_ro()
1358 disk->part0.policy = flag; in set_disk_ro()
1361 disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY); in set_disk_ro()
1378 int invalidate_partition(struct gendisk *disk, int partno) in invalidate_partition() argument
1381 struct block_device *bdev = bdget_disk(disk, partno); in invalidate_partition()
1397 struct gendisk *disk; /* the associated disk */ member
1426 static unsigned long disk_events_poll_jiffies(struct gendisk *disk) in disk_events_poll_jiffies() argument
1428 struct disk_events *ev = disk->ev; in disk_events_poll_jiffies()
1438 else if (disk->events & ~disk->async_events) in disk_events_poll_jiffies()
1459 void disk_block_events(struct gendisk *disk) in disk_block_events() argument
1461 struct disk_events *ev = disk->ev; in disk_block_events()
1479 cancel_delayed_work_sync(&disk->ev->dwork); in disk_block_events()
1484 static void __disk_unblock_events(struct gendisk *disk, bool check_now) in __disk_unblock_events() argument
1486 struct disk_events *ev = disk->ev; in __disk_unblock_events()
1502 intv = disk_events_poll_jiffies(disk); in __disk_unblock_events()
1524 void disk_unblock_events(struct gendisk *disk) in disk_unblock_events() argument
1526 if (disk->ev) in disk_unblock_events()
1527 __disk_unblock_events(disk, false); in disk_unblock_events()
1542 void disk_flush_events(struct gendisk *disk, unsigned int mask) in disk_flush_events() argument
1544 struct disk_events *ev = disk->ev; in disk_flush_events()
1568 unsigned int disk_clear_events(struct gendisk *disk, unsigned int mask) in disk_clear_events() argument
1570 const struct block_device_operations *bdops = disk->fops; in disk_clear_events()
1571 struct disk_events *ev = disk->ev; in disk_clear_events()
1578 bdops->media_changed && bdops->media_changed(disk)) in disk_clear_events()
1583 disk_block_events(disk); in disk_clear_events()
1600 __disk_unblock_events(disk, ev->clearing ? true : false); in disk_clear_events()
1627 struct gendisk *disk = ev->disk; in disk_check_events() local
1635 events = disk->fops->check_events(disk, clearing); in disk_check_events()
1644 intv = disk_events_poll_jiffies(disk); in disk_check_events()
1657 if (events & disk->events & (1 << i)) in disk_check_events()
1661 kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp); in disk_check_events()
1692 struct gendisk *disk = dev_to_disk(dev); in disk_events_show() local
1694 return __disk_events_show(disk->events, buf); in disk_events_show()
1700 struct gendisk *disk = dev_to_disk(dev); in disk_events_async_show() local
1702 return __disk_events_show(disk->async_events, buf); in disk_events_async_show()
1709 struct gendisk *disk = dev_to_disk(dev); in disk_events_poll_msecs_show() local
1711 return sprintf(buf, "%ld\n", disk->ev->poll_msecs); in disk_events_poll_msecs_show()
1718 struct gendisk *disk = dev_to_disk(dev); in disk_events_poll_msecs_store() local
1727 disk_block_events(disk); in disk_events_poll_msecs_store()
1728 disk->ev->poll_msecs = intv; in disk_events_poll_msecs_store()
1729 __disk_unblock_events(disk, true); in disk_events_poll_msecs_store()
1766 disk_flush_events(ev->disk, 0); in disk_events_set_dfl_poll_msecs()
1787 static void disk_alloc_events(struct gendisk *disk) in disk_alloc_events() argument
1791 if (!disk->fops->check_events) in disk_alloc_events()
1796 pr_warn("%s: failed to initialize events\n", disk->disk_name); in disk_alloc_events()
1801 ev->disk = disk; in disk_alloc_events()
1808 disk->ev = ev; in disk_alloc_events()
1811 static void disk_add_events(struct gendisk *disk) in disk_add_events() argument
1813 if (!disk->ev) in disk_add_events()
1817 if (sysfs_create_files(&disk_to_dev(disk)->kobj, disk_events_attrs) < 0) in disk_add_events()
1819 disk->disk_name); in disk_add_events()
1822 list_add_tail(&disk->ev->node, &disk_events); in disk_add_events()
1829 __disk_unblock_events(disk, true); in disk_add_events()
1832 static void disk_del_events(struct gendisk *disk) in disk_del_events() argument
1834 if (!disk->ev) in disk_del_events()
1837 disk_block_events(disk); in disk_del_events()
1840 list_del_init(&disk->ev->node); in disk_del_events()
1843 sysfs_remove_files(&disk_to_dev(disk)->kobj, disk_events_attrs); in disk_del_events()
1846 static void disk_release_events(struct gendisk *disk) in disk_release_events() argument
1849 WARN_ON_ONCE(disk->ev && disk->ev->block != 1); in disk_release_events()
1850 kfree(disk->ev); in disk_release_events()