Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

null_blk: pass queue_limits to blk_mq_alloc_disk

Pass the queue limits directly to blk_mq_alloc_disk instead of
setting them one at a time.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Tested-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20240220093248.3290292-6-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Christoph Hellwig and committed by
Jens Axboe
e440626b 0a39e550

+29 -31
+20 -21
drivers/block/null_blk/main.c
··· 1694 1694 dev->nullb = NULL; 1695 1695 } 1696 1696 1697 - static void null_config_discard(struct nullb *nullb) 1697 + static void null_config_discard(struct nullb *nullb, struct queue_limits *lim) 1698 1698 { 1699 1699 if (nullb->dev->discard == false) 1700 1700 return; ··· 1711 1711 return; 1712 1712 } 1713 1713 1714 - blk_queue_max_discard_sectors(nullb->q, UINT_MAX >> 9); 1714 + lim->max_hw_discard_sectors = UINT_MAX >> 9; 1715 1715 } 1716 1716 1717 1717 static const struct block_device_operations null_ops = { ··· 1869 1869 1870 1870 static int null_add_dev(struct nullb_device *dev) 1871 1871 { 1872 + struct queue_limits lim = { 1873 + .logical_block_size = dev->blocksize, 1874 + .physical_block_size = dev->blocksize, 1875 + .max_hw_sectors = dev->max_sectors, 1876 + }; 1877 + 1872 1878 struct nullb *nullb; 1873 1879 int rv; 1874 1880 ··· 1900 1894 if (rv) 1901 1895 goto out_cleanup_queues; 1902 1896 1903 - nullb->disk = blk_mq_alloc_disk(nullb->tag_set, NULL, nullb); 1897 + if (dev->virt_boundary) 1898 + lim.virt_boundary_mask = PAGE_SIZE - 1; 1899 + null_config_discard(nullb, &lim); 1900 + if (dev->zoned) { 1901 + rv = null_init_zoned_dev(dev, &lim); 1902 + if (rv) 1903 + goto out_cleanup_tags; 1904 + } 1905 + 1906 + nullb->disk = blk_mq_alloc_disk(nullb->tag_set, &lim, nullb); 1904 1907 if (IS_ERR(nullb->disk)) { 1905 1908 rv = PTR_ERR(nullb->disk); 1906 - goto out_cleanup_tags; 1909 + goto out_cleanup_zone; 1907 1910 } 1908 1911 nullb->q = nullb->disk->queue; 1909 1912 ··· 1926 1911 blk_queue_write_cache(nullb->q, true, true); 1927 1912 } 1928 1913 1929 - if (dev->zoned) { 1930 - rv = null_init_zoned_dev(dev, nullb->q); 1931 - if (rv) 1932 - goto out_cleanup_disk; 1933 - } 1934 - 1935 1914 nullb->q->queuedata = nullb; 1936 1915 blk_queue_flag_set(QUEUE_FLAG_NONROT, nullb->q); 1937 1916 ··· 1933 1924 rv = ida_alloc(&nullb_indexes, GFP_KERNEL); 1934 1925 if (rv < 0) { 1935 1926 mutex_unlock(&lock); 1936 - goto out_cleanup_zone; 1927 + goto out_cleanup_disk; 1937 1928 } 1938 1929 nullb->index = rv; 1939 1930 dev->index = rv; 1940 1931 mutex_unlock(&lock); 1941 - 1942 - blk_queue_logical_block_size(nullb->q, dev->blocksize); 1943 - blk_queue_physical_block_size(nullb->q, dev->blocksize); 1944 - if (dev->max_sectors) 1945 - blk_queue_max_hw_sectors(nullb->q, dev->max_sectors); 1946 - 1947 - if (dev->virt_boundary) 1948 - blk_queue_virt_boundary(nullb->q, PAGE_SIZE - 1); 1949 - 1950 - null_config_discard(nullb); 1951 1932 1952 1933 if (config_item_name(&dev->group.cg_item)) { 1953 1934 /* Use configfs dir name as the device name */
+2 -2
drivers/block/null_blk/null_blk.h
··· 131 131 sector_t sector, unsigned int nr_sectors); 132 132 133 133 #ifdef CONFIG_BLK_DEV_ZONED 134 - int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q); 134 + int null_init_zoned_dev(struct nullb_device *dev, struct queue_limits *lim); 135 135 int null_register_zoned_dev(struct nullb *nullb); 136 136 void null_free_zoned_dev(struct nullb_device *dev); 137 137 int null_report_zones(struct gendisk *disk, sector_t sector, ··· 144 144 size_t count, enum blk_zone_cond cond); 145 145 #else 146 146 static inline int null_init_zoned_dev(struct nullb_device *dev, 147 - struct request_queue *q) 147 + struct queue_limits *lim) 148 148 { 149 149 pr_err("CONFIG_BLK_DEV_ZONED not enabled\n"); 150 150 return -EINVAL;
+7 -8
drivers/block/null_blk/zoned.c
··· 58 58 mutex_unlock(&zone->mutex); 59 59 } 60 60 61 - int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q) 61 + int null_init_zoned_dev(struct nullb_device *dev, 62 + struct queue_limits *lim) 62 63 { 63 64 sector_t dev_capacity_sects, zone_capacity_sects; 64 65 struct nullb_zone *zone; ··· 152 151 sector += dev->zone_size_sects; 153 152 } 154 153 154 + lim->zoned = true; 155 + lim->chunk_sectors = dev->zone_size_sects; 156 + lim->max_zone_append_sectors = dev->zone_size_sects; 157 + lim->max_open_zones = dev->zone_max_open; 158 + lim->max_active_zones = dev->zone_max_active; 155 159 return 0; 156 160 } 157 161 158 162 int null_register_zoned_dev(struct nullb *nullb) 159 163 { 160 - struct nullb_device *dev = nullb->dev; 161 164 struct request_queue *q = nullb->q; 162 165 163 - disk_set_zoned(nullb->disk); 164 166 blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q); 165 167 blk_queue_required_elevator_features(q, ELEVATOR_F_ZBD_SEQ_WRITE); 166 - blk_queue_chunk_sectors(q, dev->zone_size_sects); 167 168 nullb->disk->nr_zones = bdev_nr_zones(nullb->disk->part0); 168 - blk_queue_max_zone_append_sectors(q, dev->zone_size_sects); 169 - disk_set_max_open_zones(nullb->disk, dev->zone_max_open); 170 - disk_set_max_active_zones(nullb->disk, dev->zone_max_active); 171 - 172 169 return blk_revalidate_disk_zones(nullb->disk, NULL); 173 170 } 174 171