@@ -101,12 +101,13 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_ZBC);
101101
102102#define SD_MINORS 16
103103
104- static void sd_config_discard (struct scsi_disk * , unsigned int );
105- static void sd_config_write_same (struct scsi_disk * );
104+ static void sd_config_discard (struct scsi_disk * sdkp , struct queue_limits * lim ,
105+ unsigned int mode );
106+ static void sd_config_write_same (struct scsi_disk * sdkp ,
107+ struct queue_limits * lim );
106108static int sd_revalidate_disk (struct gendisk * );
107109static void sd_unlock_native_capacity (struct gendisk * disk );
108110static void sd_shutdown (struct device * );
109- static void sd_read_capacity (struct scsi_disk * sdkp , unsigned char * buffer );
110111static void scsi_disk_release (struct device * cdev );
111112
112113static DEFINE_IDA (sd_index_ida );
@@ -456,7 +457,8 @@ provisioning_mode_store(struct device *dev, struct device_attribute *attr,
456457{
457458 struct scsi_disk * sdkp = to_scsi_disk (dev );
458459 struct scsi_device * sdp = sdkp -> device ;
459- int mode ;
460+ struct queue_limits lim ;
461+ int mode , err ;
460462
461463 if (!capable (CAP_SYS_ADMIN ))
462464 return - EACCES ;
@@ -472,8 +474,13 @@ provisioning_mode_store(struct device *dev, struct device_attribute *attr,
472474 if (mode < 0 )
473475 return - EINVAL ;
474476
475- sd_config_discard (sdkp , mode );
476-
477+ lim = queue_limits_start_update (sdkp -> disk -> queue );
478+ sd_config_discard (sdkp , & lim , mode );
479+ blk_mq_freeze_queue (sdkp -> disk -> queue );
480+ err = queue_limits_commit_update (sdkp -> disk -> queue , & lim );
481+ blk_mq_unfreeze_queue (sdkp -> disk -> queue );
482+ if (err )
483+ return err ;
477484 return count ;
478485}
479486static DEVICE_ATTR_RW (provisioning_mode );
@@ -556,6 +563,7 @@ max_write_same_blocks_store(struct device *dev, struct device_attribute *attr,
556563{
557564 struct scsi_disk * sdkp = to_scsi_disk (dev );
558565 struct scsi_device * sdp = sdkp -> device ;
566+ struct queue_limits lim ;
559567 unsigned long max ;
560568 int err ;
561569
@@ -577,8 +585,13 @@ max_write_same_blocks_store(struct device *dev, struct device_attribute *attr,
577585 sdkp -> max_ws_blocks = max ;
578586 }
579587
580- sd_config_write_same (sdkp );
581-
588+ lim = queue_limits_start_update (sdkp -> disk -> queue );
589+ sd_config_write_same (sdkp , & lim );
590+ blk_mq_freeze_queue (sdkp -> disk -> queue );
591+ err = queue_limits_commit_update (sdkp -> disk -> queue , & lim );
592+ blk_mq_unfreeze_queue (sdkp -> disk -> queue );
593+ if (err )
594+ return err ;
582595 return count ;
583596}
584597static DEVICE_ATTR_RW (max_write_same_blocks );
@@ -827,17 +840,15 @@ static void sd_disable_discard(struct scsi_disk *sdkp)
827840 blk_queue_max_discard_sectors (sdkp -> disk -> queue , 0 );
828841}
829842
830- static void sd_config_discard (struct scsi_disk * sdkp , unsigned int mode )
843+ static void sd_config_discard (struct scsi_disk * sdkp , struct queue_limits * lim ,
844+ unsigned int mode )
831845{
832- struct request_queue * q = sdkp -> disk -> queue ;
833846 unsigned int logical_block_size = sdkp -> device -> sector_size ;
834847 unsigned int max_blocks = 0 ;
835848
836- q -> limits .discard_alignment =
837- sdkp -> unmap_alignment * logical_block_size ;
838- q -> limits .discard_granularity =
839- max (sdkp -> physical_block_size ,
840- sdkp -> unmap_granularity * logical_block_size );
849+ lim -> discard_alignment = sdkp -> unmap_alignment * logical_block_size ;
850+ lim -> discard_granularity = max (sdkp -> physical_block_size ,
851+ sdkp -> unmap_granularity * logical_block_size );
841852 sdkp -> provisioning_mode = mode ;
842853
843854 switch (mode ) {
@@ -875,7 +886,8 @@ static void sd_config_discard(struct scsi_disk *sdkp, unsigned int mode)
875886 break ;
876887 }
877888
878- blk_queue_max_discard_sectors (q , max_blocks * (logical_block_size >> 9 ));
889+ lim -> max_hw_discard_sectors = max_blocks *
890+ (logical_block_size >> SECTOR_SHIFT );
879891}
880892
881893static void * sd_set_special_bvec (struct request * rq , unsigned int data_len )
@@ -1010,9 +1022,9 @@ static void sd_disable_write_same(struct scsi_disk *sdkp)
10101022 blk_queue_max_write_zeroes_sectors (sdkp -> disk -> queue , 0 );
10111023}
10121024
1013- static void sd_config_write_same (struct scsi_disk * sdkp )
1025+ static void sd_config_write_same (struct scsi_disk * sdkp ,
1026+ struct queue_limits * lim )
10141027{
1015- struct request_queue * q = sdkp -> disk -> queue ;
10161028 unsigned int logical_block_size = sdkp -> device -> sector_size ;
10171029
10181030 if (sdkp -> device -> no_write_same ) {
@@ -1066,8 +1078,8 @@ static void sd_config_write_same(struct scsi_disk *sdkp)
10661078 }
10671079
10681080out :
1069- blk_queue_max_write_zeroes_sectors ( q , sdkp -> max_ws_blocks *
1070- (logical_block_size >> 9 ) );
1081+ lim -> max_write_zeroes_sectors =
1082+ sdkp -> max_ws_blocks * (logical_block_size >> SECTOR_SHIFT );
10711083}
10721084
10731085static blk_status_t sd_setup_flush_cmnd (struct scsi_cmnd * cmd )
@@ -2523,7 +2535,7 @@ static void read_capacity_error(struct scsi_disk *sdkp, struct scsi_device *sdp,
25232535#define READ_CAPACITY_RETRIES_ON_RESET 10
25242536
25252537static int read_capacity_16 (struct scsi_disk * sdkp , struct scsi_device * sdp ,
2526- unsigned char * buffer )
2538+ struct queue_limits * lim , unsigned char * buffer )
25272539{
25282540 unsigned char cmd [16 ];
25292541 struct scsi_sense_hdr sshdr ;
@@ -2597,7 +2609,7 @@ static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,
25972609
25982610 /* Lowest aligned logical block */
25992611 alignment = ((buffer [14 ] & 0x3f ) << 8 | buffer [15 ]) * sector_size ;
2600- blk_queue_alignment_offset ( sdp -> request_queue , alignment ) ;
2612+ lim -> alignment_offset = alignment ;
26012613 if (alignment && sdkp -> first_scan )
26022614 sd_printk (KERN_NOTICE , sdkp ,
26032615 "physical block alignment offset: %u\n" , alignment );
@@ -2608,7 +2620,7 @@ static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,
26082620 if (buffer [14 ] & 0x40 ) /* LBPRZ */
26092621 sdkp -> lbprz = 1 ;
26102622
2611- sd_config_discard (sdkp , SD_LBP_WS16 );
2623+ sd_config_discard (sdkp , lim , SD_LBP_WS16 );
26122624 }
26132625
26142626 sdkp -> capacity = lba + 1 ;
@@ -2711,13 +2723,14 @@ static int sd_try_rc16_first(struct scsi_device *sdp)
27112723 * read disk capacity
27122724 */
27132725static void
2714- sd_read_capacity (struct scsi_disk * sdkp , unsigned char * buffer )
2726+ sd_read_capacity (struct scsi_disk * sdkp , struct queue_limits * lim ,
2727+ unsigned char * buffer )
27152728{
27162729 int sector_size ;
27172730 struct scsi_device * sdp = sdkp -> device ;
27182731
27192732 if (sd_try_rc16_first (sdp )) {
2720- sector_size = read_capacity_16 (sdkp , sdp , buffer );
2733+ sector_size = read_capacity_16 (sdkp , sdp , lim , buffer );
27212734 if (sector_size == - EOVERFLOW )
27222735 goto got_data ;
27232736 if (sector_size == - ENODEV )
@@ -2737,7 +2750,7 @@ sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer)
27372750 int old_sector_size = sector_size ;
27382751 sd_printk (KERN_NOTICE , sdkp , "Very big device. "
27392752 "Trying to use READ CAPACITY(16).\n" );
2740- sector_size = read_capacity_16 (sdkp , sdp , buffer );
2753+ sector_size = read_capacity_16 (sdkp , sdp , lim , buffer );
27412754 if (sector_size < 0 ) {
27422755 sd_printk (KERN_NOTICE , sdkp ,
27432756 "Using 0xffffffff as device size\n" );
@@ -2796,9 +2809,8 @@ sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer)
27962809 */
27972810 sector_size = 512 ;
27982811 }
2799- blk_queue_logical_block_size (sdp -> request_queue , sector_size );
2800- blk_queue_physical_block_size (sdp -> request_queue ,
2801- sdkp -> physical_block_size );
2812+ lim -> logical_block_size = sector_size ;
2813+ lim -> physical_block_size = sdkp -> physical_block_size ;
28022814 sdkp -> device -> sector_size = sector_size ;
28032815
28042816 if (sdkp -> capacity > 0xffffffff )
@@ -3220,11 +3232,11 @@ static unsigned int sd_discard_mode(struct scsi_disk *sdkp)
32203232 return SD_LBP_DISABLE ;
32213233}
32223234
3223- /**
3224- * sd_read_block_limits - Query disk device for preferred I/O sizes.
3225- * @sdkp: disk to query
3235+ /*
3236+ * Query disk device for preferred I/O sizes.
32263237 */
3227- static void sd_read_block_limits (struct scsi_disk * sdkp )
3238+ static void sd_read_block_limits (struct scsi_disk * sdkp ,
3239+ struct queue_limits * lim )
32283240{
32293241 struct scsi_vpd * vpd ;
32303242
@@ -3258,7 +3270,7 @@ static void sd_read_block_limits(struct scsi_disk *sdkp)
32583270 sdkp -> unmap_alignment =
32593271 get_unaligned_be32 (& vpd -> data [32 ]) & ~(1 << 31 );
32603272
3261- sd_config_discard (sdkp , sd_discard_mode (sdkp ));
3273+ sd_config_discard (sdkp , lim , sd_discard_mode (sdkp ));
32623274 }
32633275
32643276 out :
@@ -3277,11 +3289,9 @@ static void sd_read_block_limits_ext(struct scsi_disk *sdkp)
32773289 rcu_read_unlock ();
32783290}
32793291
3280- /**
3281- * sd_read_block_characteristics - Query block dev. characteristics
3282- * @sdkp: disk to query
3283- */
3284- static void sd_read_block_characteristics (struct scsi_disk * sdkp )
3292+ /* Query block device characteristics */
3293+ static void sd_read_block_characteristics (struct scsi_disk * sdkp ,
3294+ struct queue_limits * lim )
32853295{
32863296 struct request_queue * q = sdkp -> disk -> queue ;
32873297 struct scsi_vpd * vpd ;
@@ -3307,29 +3317,26 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp)
33073317
33083318#ifdef CONFIG_BLK_DEV_ZONED /* sd_probe rejects ZBD devices early otherwise */
33093319 if (sdkp -> device -> type == TYPE_ZBC ) {
3310- /*
3311- * Host-managed.
3312- */
3313- disk_set_zoned (sdkp -> disk );
3320+ lim -> zoned = true;
33143321
33153322 /*
33163323 * Per ZBC and ZAC specifications, writes in sequential write
33173324 * required zones of host-managed devices must be aligned to
33183325 * the device physical block size.
33193326 */
3320- blk_queue_zone_write_granularity ( q , sdkp -> physical_block_size ) ;
3327+ lim -> zone_write_granularity = sdkp -> physical_block_size ;
33213328 } else {
33223329 /*
33233330 * Host-aware devices are treated as conventional.
33243331 */
3325- WARN_ON_ONCE ( blk_queue_is_zoned ( q )) ;
3332+ lim -> zoned = false ;
33263333 }
33273334#endif /* CONFIG_BLK_DEV_ZONED */
33283335
33293336 if (!sdkp -> first_scan )
33303337 return ;
33313338
3332- if (blk_queue_is_zoned ( q ) )
3339+ if (lim -> zoned )
33333340 sd_printk (KERN_NOTICE , sdkp , "Host-managed zoned block device\n" );
33343341 else if (sdkp -> zoned == 1 )
33353342 sd_printk (KERN_NOTICE , sdkp , "Host-aware SMR disk used as regular disk\n" );
@@ -3605,8 +3612,10 @@ static int sd_revalidate_disk(struct gendisk *disk)
36053612 struct scsi_device * sdp = sdkp -> device ;
36063613 struct request_queue * q = sdkp -> disk -> queue ;
36073614 sector_t old_capacity = sdkp -> capacity ;
3615+ struct queue_limits lim ;
36083616 unsigned char * buffer ;
36093617 unsigned int dev_max ;
3618+ int err ;
36103619
36113620 SCSI_LOG_HLQUEUE (3 , sd_printk (KERN_INFO , sdkp ,
36123621 "sd_revalidate_disk\n" ));
@@ -3627,12 +3636,14 @@ static int sd_revalidate_disk(struct gendisk *disk)
36273636
36283637 sd_spinup_disk (sdkp );
36293638
3639+ lim = queue_limits_start_update (sdkp -> disk -> queue );
3640+
36303641 /*
36313642 * Without media there is no reason to ask; moreover, some devices
36323643 * react badly if we do.
36333644 */
36343645 if (sdkp -> media_present ) {
3635- sd_read_capacity (sdkp , buffer );
3646+ sd_read_capacity (sdkp , & lim , buffer );
36363647 /*
36373648 * Some USB/UAS devices return generic values for mode pages
36383649 * until the media has been accessed. Trigger a READ operation
@@ -3651,10 +3662,10 @@ static int sd_revalidate_disk(struct gendisk *disk)
36513662
36523663 if (scsi_device_supports_vpd (sdp )) {
36533664 sd_read_block_provisioning (sdkp );
3654- sd_read_block_limits (sdkp );
3665+ sd_read_block_limits (sdkp , & lim );
36553666 sd_read_block_limits_ext (sdkp );
3656- sd_read_block_characteristics (sdkp );
3657- sd_zbc_read_zones (sdkp , buffer );
3667+ sd_read_block_characteristics (sdkp , & lim );
3668+ sd_zbc_read_zones (sdkp , & lim , buffer );
36583669 sd_read_cpr (sdkp );
36593670 }
36603671
@@ -3680,31 +3691,36 @@ static int sd_revalidate_disk(struct gendisk *disk)
36803691
36813692 /* Some devices report a maximum block count for READ/WRITE requests. */
36823693 dev_max = min_not_zero (dev_max , sdkp -> max_xfer_blocks );
3683- q -> limits .max_dev_sectors = logical_to_sectors (sdp , dev_max );
3694+ lim .max_dev_sectors = logical_to_sectors (sdp , dev_max );
36843695
36853696 if (sd_validate_min_xfer_size (sdkp ))
3686- blk_queue_io_min (sdkp -> disk -> queue ,
3687- logical_to_bytes (sdp , sdkp -> min_xfer_blocks ));
3697+ lim .io_min = logical_to_bytes (sdp , sdkp -> min_xfer_blocks );
36883698 else
3689- blk_queue_io_min ( sdkp -> disk -> queue , 0 ) ;
3699+ lim . io_min = 0 ;
36903700
36913701 /*
36923702 * Limit default to SCSI host optimal sector limit if set. There may be
36933703 * an impact on performance for when the size of a request exceeds this
36943704 * host limit.
36953705 */
3696- q -> limits .io_opt = sdp -> host -> opt_sectors << SECTOR_SHIFT ;
3706+ lim .io_opt = sdp -> host -> opt_sectors << SECTOR_SHIFT ;
36973707 if (sd_validate_opt_xfer_size (sdkp , dev_max )) {
3698- q -> limits .io_opt = min_not_zero (q -> limits .io_opt ,
3708+ lim .io_opt = min_not_zero (lim .io_opt ,
36993709 logical_to_bytes (sdp , sdkp -> opt_xfer_blocks ));
37003710 }
37013711
37023712 sdkp -> first_scan = 0 ;
37033713
37043714 set_capacity_and_notify (disk , logical_to_sectors (sdp , sdkp -> capacity ));
3705- sd_config_write_same (sdkp );
3715+ sd_config_write_same (sdkp , & lim );
37063716 kfree (buffer );
37073717
3718+ blk_mq_freeze_queue (sdkp -> disk -> queue );
3719+ err = queue_limits_commit_update (sdkp -> disk -> queue , & lim );
3720+ blk_mq_unfreeze_queue (sdkp -> disk -> queue );
3721+ if (err )
3722+ return err ;
3723+
37083724 /*
37093725 * For a zoned drive, revalidating the zones can be done only once
37103726 * the gendisk capacity is set. So if this fails, set back the gendisk
0 commit comments