Skip to content

Commit e440626

Browse files
Christoph Hellwigaxboe
authored andcommitted
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>
1 parent 0a39e55 commit e440626

File tree

3 files changed

+29
-31
lines changed

3 files changed

+29
-31
lines changed

drivers/block/null_blk/main.c

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1694,7 +1694,7 @@ static void null_del_dev(struct nullb *nullb)
16941694
dev->nullb = NULL;
16951695
}
16961696

1697-
static void null_config_discard(struct nullb *nullb)
1697+
static void null_config_discard(struct nullb *nullb, struct queue_limits *lim)
16981698
{
16991699
if (nullb->dev->discard == false)
17001700
return;
@@ -1711,7 +1711,7 @@ static void null_config_discard(struct nullb *nullb)
17111711
return;
17121712
}
17131713

1714-
blk_queue_max_discard_sectors(nullb->q, UINT_MAX >> 9);
1714+
lim->max_hw_discard_sectors = UINT_MAX >> 9;
17151715
}
17161716

17171717
static const struct block_device_operations null_ops = {
@@ -1869,6 +1869,12 @@ static bool null_setup_fault(void)
18691869

18701870
static int null_add_dev(struct nullb_device *dev)
18711871
{
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+
18721878
struct nullb *nullb;
18731879
int rv;
18741880

@@ -1894,10 +1900,19 @@ static int null_add_dev(struct nullb_device *dev)
18941900
if (rv)
18951901
goto out_cleanup_queues;
18961902

1897-
nullb->disk = blk_mq_alloc_disk(nullb->tag_set, NULL, nullb);
1903+
if (dev->virt_boundary)
1904+
lim.virt_boundary_mask = PAGE_SIZE - 1;
1905+
null_config_discard(nullb, &lim);
1906+
if (dev->zoned) {
1907+
rv = null_init_zoned_dev(dev, &lim);
1908+
if (rv)
1909+
goto out_cleanup_tags;
1910+
}
1911+
1912+
nullb->disk = blk_mq_alloc_disk(nullb->tag_set, &lim, nullb);
18981913
if (IS_ERR(nullb->disk)) {
18991914
rv = PTR_ERR(nullb->disk);
1900-
goto out_cleanup_tags;
1915+
goto out_cleanup_zone;
19011916
}
19021917
nullb->q = nullb->disk->queue;
19031918

@@ -1911,35 +1926,19 @@ static int null_add_dev(struct nullb_device *dev)
19111926
blk_queue_write_cache(nullb->q, true, true);
19121927
}
19131928

1914-
if (dev->zoned) {
1915-
rv = null_init_zoned_dev(dev, nullb->q);
1916-
if (rv)
1917-
goto out_cleanup_disk;
1918-
}
1919-
19201929
nullb->q->queuedata = nullb;
19211930
blk_queue_flag_set(QUEUE_FLAG_NONROT, nullb->q);
19221931

19231932
mutex_lock(&lock);
19241933
rv = ida_alloc(&nullb_indexes, GFP_KERNEL);
19251934
if (rv < 0) {
19261935
mutex_unlock(&lock);
1927-
goto out_cleanup_zone;
1936+
goto out_cleanup_disk;
19281937
}
19291938
nullb->index = rv;
19301939
dev->index = rv;
19311940
mutex_unlock(&lock);
19321941

1933-
blk_queue_logical_block_size(nullb->q, dev->blocksize);
1934-
blk_queue_physical_block_size(nullb->q, dev->blocksize);
1935-
if (dev->max_sectors)
1936-
blk_queue_max_hw_sectors(nullb->q, dev->max_sectors);
1937-
1938-
if (dev->virt_boundary)
1939-
blk_queue_virt_boundary(nullb->q, PAGE_SIZE - 1);
1940-
1941-
null_config_discard(nullb);
1942-
19431942
if (config_item_name(&dev->group.cg_item)) {
19441943
/* Use configfs dir name as the device name */
19451944
snprintf(nullb->disk_name, sizeof(nullb->disk_name),

drivers/block/null_blk/null_blk.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ blk_status_t null_process_cmd(struct nullb_cmd *cmd, enum req_op op,
131131
sector_t sector, unsigned int nr_sectors);
132132

133133
#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);
135135
int null_register_zoned_dev(struct nullb *nullb);
136136
void null_free_zoned_dev(struct nullb_device *dev);
137137
int null_report_zones(struct gendisk *disk, sector_t sector,
@@ -144,7 +144,7 @@ ssize_t zone_cond_store(struct nullb_device *dev, const char *page,
144144
size_t count, enum blk_zone_cond cond);
145145
#else
146146
static inline int null_init_zoned_dev(struct nullb_device *dev,
147-
struct request_queue *q)
147+
struct queue_limits *lim)
148148
{
149149
pr_err("CONFIG_BLK_DEV_ZONED not enabled\n");
150150
return -EINVAL;

drivers/block/null_blk/zoned.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ static inline void null_unlock_zone(struct nullb_device *dev,
5858
mutex_unlock(&zone->mutex);
5959
}
6060

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)
6263
{
6364
sector_t dev_capacity_sects, zone_capacity_sects;
6465
struct nullb_zone *zone;
@@ -151,23 +152,21 @@ int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q)
151152
sector += dev->zone_size_sects;
152153
}
153154

155+
lim->zoned = true;
156+
lim->chunk_sectors = dev->zone_size_sects;
157+
lim->max_zone_append_sectors = dev->zone_size_sects;
158+
lim->max_open_zones = dev->zone_max_open;
159+
lim->max_active_zones = dev->zone_max_active;
154160
return 0;
155161
}
156162

157163
int null_register_zoned_dev(struct nullb *nullb)
158164
{
159-
struct nullb_device *dev = nullb->dev;
160165
struct request_queue *q = nullb->q;
161166

162-
disk_set_zoned(nullb->disk);
163167
blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q);
164168
blk_queue_required_elevator_features(q, ELEVATOR_F_ZBD_SEQ_WRITE);
165-
blk_queue_chunk_sectors(q, dev->zone_size_sects);
166169
nullb->disk->nr_zones = bdev_nr_zones(nullb->disk->part0);
167-
blk_queue_max_zone_append_sectors(q, dev->zone_size_sects);
168-
disk_set_max_open_zones(nullb->disk, dev->zone_max_open);
169-
disk_set_max_active_zones(nullb->disk, dev->zone_max_active);
170-
171170
return blk_revalidate_disk_zones(nullb->disk, NULL);
172171
}
173172

0 commit comments

Comments
 (0)