@@ -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
17171717static const struct block_device_operations null_ops = {
@@ -1869,6 +1869,12 @@ static bool null_setup_fault(void)
18691869
18701870static 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 ),
0 commit comments