@@ -93,6 +93,7 @@ MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK15_MAJOR);
93
93
MODULE_ALIAS_SCSI_DEVICE (TYPE_DISK );
94
94
MODULE_ALIAS_SCSI_DEVICE (TYPE_MOD );
95
95
MODULE_ALIAS_SCSI_DEVICE (TYPE_RBC );
96
+ MODULE_ALIAS_SCSI_DEVICE (TYPE_ZBC );
96
97
97
98
#if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT )
98
99
#define SD_MINORS 16
@@ -163,7 +164,7 @@ cache_type_store(struct device *dev, struct device_attribute *attr,
163
164
static const char temp [] = "temporary " ;
164
165
int len ;
165
166
166
- if (sdp -> type != TYPE_DISK )
167
+ if (sdp -> type != TYPE_DISK && sdp -> type != TYPE_ZBC )
167
168
/* no cache control on RBC devices; theoretically they
168
169
* can do it, but there's probably so many exceptions
169
170
* it's not worth the risk */
@@ -262,7 +263,7 @@ allow_restart_store(struct device *dev, struct device_attribute *attr,
262
263
if (!capable (CAP_SYS_ADMIN ))
263
264
return - EACCES ;
264
265
265
- if (sdp -> type != TYPE_DISK )
266
+ if (sdp -> type != TYPE_DISK && sdp -> type != TYPE_ZBC )
266
267
return - EINVAL ;
267
268
268
269
sdp -> allow_restart = simple_strtoul (buf , NULL , 10 );
@@ -392,6 +393,11 @@ provisioning_mode_store(struct device *dev, struct device_attribute *attr,
392
393
if (!capable (CAP_SYS_ADMIN ))
393
394
return - EACCES ;
394
395
396
+ if (sd_is_zoned (sdkp )) {
397
+ sd_config_discard (sdkp , SD_LBP_DISABLE );
398
+ return count ;
399
+ }
400
+
395
401
if (sdp -> type != TYPE_DISK )
396
402
return - EINVAL ;
397
403
@@ -459,7 +465,7 @@ max_write_same_blocks_store(struct device *dev, struct device_attribute *attr,
459
465
if (!capable (CAP_SYS_ADMIN ))
460
466
return - EACCES ;
461
467
462
- if (sdp -> type != TYPE_DISK )
468
+ if (sdp -> type != TYPE_DISK && sdp -> type != TYPE_ZBC )
463
469
return - EINVAL ;
464
470
465
471
err = kstrtoul (buf , 10 , & max );
@@ -844,6 +850,12 @@ static int sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
844
850
845
851
BUG_ON (bio_offset (bio ) || bio_iovec (bio ).bv_len != sdp -> sector_size );
846
852
853
+ if (sd_is_zoned (sdkp )) {
854
+ ret = sd_zbc_setup_write_cmnd (cmd );
855
+ if (ret != BLKPREP_OK )
856
+ return ret ;
857
+ }
858
+
847
859
sector >>= ilog2 (sdp -> sector_size ) - 9 ;
848
860
nr_sectors >>= ilog2 (sdp -> sector_size ) - 9 ;
849
861
@@ -901,19 +913,25 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
901
913
struct request * rq = SCpnt -> request ;
902
914
struct scsi_device * sdp = SCpnt -> device ;
903
915
struct gendisk * disk = rq -> rq_disk ;
904
- struct scsi_disk * sdkp ;
916
+ struct scsi_disk * sdkp = scsi_disk ( disk ) ;
905
917
sector_t block = blk_rq_pos (rq );
906
918
sector_t threshold ;
907
919
unsigned int this_count = blk_rq_sectors (rq );
908
920
unsigned int dif , dix ;
921
+ bool zoned_write = sd_is_zoned (sdkp ) && rq_data_dir (rq ) == WRITE ;
909
922
int ret ;
910
923
unsigned char protect ;
911
924
925
+ if (zoned_write ) {
926
+ ret = sd_zbc_setup_write_cmnd (SCpnt );
927
+ if (ret != BLKPREP_OK )
928
+ return ret ;
929
+ }
930
+
912
931
ret = scsi_init_io (SCpnt );
913
932
if (ret != BLKPREP_OK )
914
933
goto out ;
915
934
SCpnt = rq -> special ;
916
- sdkp = scsi_disk (disk );
917
935
918
936
/* from here on until we're complete, any goto out
919
937
* is used for a killable error condition */
@@ -1132,6 +1150,9 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
1132
1150
*/
1133
1151
ret = BLKPREP_OK ;
1134
1152
out :
1153
+ if (zoned_write && ret != BLKPREP_OK )
1154
+ sd_zbc_cancel_write_cmnd (SCpnt );
1155
+
1135
1156
return ret ;
1136
1157
}
1137
1158
@@ -1149,6 +1170,10 @@ static int sd_init_command(struct scsi_cmnd *cmd)
1149
1170
case REQ_OP_READ :
1150
1171
case REQ_OP_WRITE :
1151
1172
return sd_setup_read_write_cmnd (cmd );
1173
+ case REQ_OP_ZONE_REPORT :
1174
+ return sd_zbc_setup_report_cmnd (cmd );
1175
+ case REQ_OP_ZONE_RESET :
1176
+ return sd_zbc_setup_reset_cmnd (cmd );
1152
1177
default :
1153
1178
BUG ();
1154
1179
}
@@ -1780,14 +1805,28 @@ static int sd_done(struct scsi_cmnd *SCpnt)
1780
1805
unsigned char op = SCpnt -> cmnd [0 ];
1781
1806
unsigned char unmap = SCpnt -> cmnd [1 ] & 8 ;
1782
1807
1783
- if (req_op (req ) == REQ_OP_DISCARD || req_op (req ) == REQ_OP_WRITE_SAME ) {
1808
+ switch (req_op (req )) {
1809
+ case REQ_OP_DISCARD :
1810
+ case REQ_OP_WRITE_SAME :
1811
+ case REQ_OP_ZONE_RESET :
1784
1812
if (!result ) {
1785
1813
good_bytes = blk_rq_bytes (req );
1786
1814
scsi_set_resid (SCpnt , 0 );
1787
1815
} else {
1788
1816
good_bytes = 0 ;
1789
1817
scsi_set_resid (SCpnt , blk_rq_bytes (req ));
1790
1818
}
1819
+ break ;
1820
+ case REQ_OP_ZONE_REPORT :
1821
+ if (!result ) {
1822
+ good_bytes = scsi_bufflen (SCpnt )
1823
+ - scsi_get_resid (SCpnt );
1824
+ scsi_set_resid (SCpnt , 0 );
1825
+ } else {
1826
+ good_bytes = 0 ;
1827
+ scsi_set_resid (SCpnt , blk_rq_bytes (req ));
1828
+ }
1829
+ break ;
1791
1830
}
1792
1831
1793
1832
if (result ) {
@@ -1848,7 +1887,11 @@ static int sd_done(struct scsi_cmnd *SCpnt)
1848
1887
default :
1849
1888
break ;
1850
1889
}
1890
+
1851
1891
out :
1892
+ if (sd_is_zoned (sdkp ))
1893
+ sd_zbc_complete (SCpnt , good_bytes , & sshdr );
1894
+
1852
1895
SCSI_LOG_HLCOMPLETE (1 , scmd_printk (KERN_INFO , SCpnt ,
1853
1896
"sd_done: completed %d of %d bytes\n" ,
1854
1897
good_bytes , scsi_bufflen (SCpnt )));
@@ -1983,7 +2026,6 @@ sd_spinup_disk(struct scsi_disk *sdkp)
1983
2026
}
1984
2027
}
1985
2028
1986
-
1987
2029
/*
1988
2030
* Determine whether disk supports Data Integrity Field.
1989
2031
*/
@@ -2133,6 +2175,9 @@ static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,
2133
2175
/* Logical blocks per physical block exponent */
2134
2176
sdkp -> physical_block_size = (1 << (buffer [13 ] & 0xf )) * sector_size ;
2135
2177
2178
+ /* RC basis */
2179
+ sdkp -> rc_basis = (buffer [12 ] >> 4 ) & 0x3 ;
2180
+
2136
2181
/* Lowest aligned logical block */
2137
2182
alignment = ((buffer [14 ] & 0x3f ) << 8 | buffer [15 ]) * sector_size ;
2138
2183
blk_queue_alignment_offset (sdp -> request_queue , alignment );
@@ -2242,7 +2287,6 @@ sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer)
2242
2287
{
2243
2288
int sector_size ;
2244
2289
struct scsi_device * sdp = sdkp -> device ;
2245
- sector_t old_capacity = sdkp -> capacity ;
2246
2290
2247
2291
if (sd_try_rc16_first (sdp )) {
2248
2292
sector_size = read_capacity_16 (sdkp , sdp , buffer );
@@ -2323,35 +2367,44 @@ sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer)
2323
2367
sector_size = 512 ;
2324
2368
}
2325
2369
blk_queue_logical_block_size (sdp -> request_queue , sector_size );
2370
+ blk_queue_physical_block_size (sdp -> request_queue ,
2371
+ sdkp -> physical_block_size );
2372
+ sdkp -> device -> sector_size = sector_size ;
2326
2373
2327
- {
2328
- char cap_str_2 [ 10 ], cap_str_10 [ 10 ] ;
2374
+ if ( sdkp -> capacity > 0xffffffff )
2375
+ sdp -> use_16_for_rw = 1 ;
2329
2376
2330
- string_get_size (sdkp -> capacity , sector_size ,
2331
- STRING_UNITS_2 , cap_str_2 , sizeof (cap_str_2 ));
2332
- string_get_size (sdkp -> capacity , sector_size ,
2333
- STRING_UNITS_10 , cap_str_10 ,
2334
- sizeof (cap_str_10 ));
2377
+ }
2335
2378
2336
- if (sdkp -> first_scan || old_capacity != sdkp -> capacity ) {
2337
- sd_printk (KERN_NOTICE , sdkp ,
2338
- "%llu %d-byte logical blocks: (%s/%s)\n" ,
2339
- (unsigned long long )sdkp -> capacity ,
2340
- sector_size , cap_str_10 , cap_str_2 );
2379
+ /*
2380
+ * Print disk capacity
2381
+ */
2382
+ static void
2383
+ sd_print_capacity (struct scsi_disk * sdkp ,
2384
+ sector_t old_capacity )
2385
+ {
2386
+ int sector_size = sdkp -> device -> sector_size ;
2387
+ char cap_str_2 [10 ], cap_str_10 [10 ];
2341
2388
2342
- if (sdkp -> physical_block_size != sector_size )
2343
- sd_printk (KERN_NOTICE , sdkp ,
2344
- "%u-byte physical blocks\n" ,
2345
- sdkp -> physical_block_size );
2346
- }
2347
- }
2389
+ string_get_size (sdkp -> capacity , sector_size ,
2390
+ STRING_UNITS_2 , cap_str_2 , sizeof (cap_str_2 ));
2391
+ string_get_size (sdkp -> capacity , sector_size ,
2392
+ STRING_UNITS_10 , cap_str_10 ,
2393
+ sizeof (cap_str_10 ));
2348
2394
2349
- if (sdkp -> capacity > 0xffffffff )
2350
- sdp -> use_16_for_rw = 1 ;
2395
+ if (sdkp -> first_scan || old_capacity != sdkp -> capacity ) {
2396
+ sd_printk (KERN_NOTICE , sdkp ,
2397
+ "%llu %d-byte logical blocks: (%s/%s)\n" ,
2398
+ (unsigned long long )sdkp -> capacity ,
2399
+ sector_size , cap_str_10 , cap_str_2 );
2351
2400
2352
- blk_queue_physical_block_size (sdp -> request_queue ,
2353
- sdkp -> physical_block_size );
2354
- sdkp -> device -> sector_size = sector_size ;
2401
+ if (sdkp -> physical_block_size != sector_size )
2402
+ sd_printk (KERN_NOTICE , sdkp ,
2403
+ "%u-byte physical blocks\n" ,
2404
+ sdkp -> physical_block_size );
2405
+
2406
+ sd_zbc_print_zones (sdkp );
2407
+ }
2355
2408
}
2356
2409
2357
2410
/* called with buffer of length 512 */
@@ -2613,7 +2666,7 @@ static void sd_read_app_tag_own(struct scsi_disk *sdkp, unsigned char *buffer)
2613
2666
struct scsi_mode_data data ;
2614
2667
struct scsi_sense_hdr sshdr ;
2615
2668
2616
- if (sdp -> type != TYPE_DISK )
2669
+ if (sdp -> type != TYPE_DISK && sdp -> type != TYPE_ZBC )
2617
2670
return ;
2618
2671
2619
2672
if (sdkp -> protection_type == 0 )
@@ -2720,6 +2773,7 @@ static void sd_read_block_limits(struct scsi_disk *sdkp)
2720
2773
*/
2721
2774
static void sd_read_block_characteristics (struct scsi_disk * sdkp )
2722
2775
{
2776
+ struct request_queue * q = sdkp -> disk -> queue ;
2723
2777
unsigned char * buffer ;
2724
2778
u16 rot ;
2725
2779
const int vpd_len = 64 ;
@@ -2734,10 +2788,21 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp)
2734
2788
rot = get_unaligned_be16 (& buffer [4 ]);
2735
2789
2736
2790
if (rot == 1 ) {
2737
- queue_flag_set_unlocked (QUEUE_FLAG_NONROT , sdkp -> disk -> queue );
2738
- queue_flag_clear_unlocked (QUEUE_FLAG_ADD_RANDOM , sdkp -> disk -> queue );
2791
+ queue_flag_set_unlocked (QUEUE_FLAG_NONROT , q );
2792
+ queue_flag_clear_unlocked (QUEUE_FLAG_ADD_RANDOM , q );
2739
2793
}
2740
2794
2795
+ sdkp -> zoned = (buffer [8 ] >> 4 ) & 3 ;
2796
+ if (sdkp -> zoned == 1 )
2797
+ q -> limits .zoned = BLK_ZONED_HA ;
2798
+ else if (sdkp -> device -> type == TYPE_ZBC )
2799
+ q -> limits .zoned = BLK_ZONED_HM ;
2800
+ else
2801
+ q -> limits .zoned = BLK_ZONED_NONE ;
2802
+ if (blk_queue_is_zoned (q ) && sdkp -> first_scan )
2803
+ sd_printk (KERN_NOTICE , sdkp , "Host-%s zoned block device\n" ,
2804
+ q -> limits .zoned == BLK_ZONED_HM ? "managed" : "aware" );
2805
+
2741
2806
out :
2742
2807
kfree (buffer );
2743
2808
}
@@ -2809,6 +2874,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
2809
2874
struct scsi_disk * sdkp = scsi_disk (disk );
2810
2875
struct scsi_device * sdp = sdkp -> device ;
2811
2876
struct request_queue * q = sdkp -> disk -> queue ;
2877
+ sector_t old_capacity = sdkp -> capacity ;
2812
2878
unsigned char * buffer ;
2813
2879
unsigned int dev_max , rw_max ;
2814
2880
@@ -2842,8 +2908,11 @@ static int sd_revalidate_disk(struct gendisk *disk)
2842
2908
sd_read_block_provisioning (sdkp );
2843
2909
sd_read_block_limits (sdkp );
2844
2910
sd_read_block_characteristics (sdkp );
2911
+ sd_zbc_read_zones (sdkp , buffer );
2845
2912
}
2846
2913
2914
+ sd_print_capacity (sdkp , old_capacity );
2915
+
2847
2916
sd_read_write_protect_flag (sdkp , buffer );
2848
2917
sd_read_cache_type (sdkp , buffer );
2849
2918
sd_read_app_tag_own (sdkp , buffer );
@@ -3041,9 +3110,16 @@ static int sd_probe(struct device *dev)
3041
3110
3042
3111
scsi_autopm_get_device (sdp );
3043
3112
error = - ENODEV ;
3044
- if (sdp -> type != TYPE_DISK && sdp -> type != TYPE_MOD && sdp -> type != TYPE_RBC )
3113
+ if (sdp -> type != TYPE_DISK &&
3114
+ sdp -> type != TYPE_ZBC &&
3115
+ sdp -> type != TYPE_MOD &&
3116
+ sdp -> type != TYPE_RBC )
3045
3117
goto out ;
3046
3118
3119
+ #ifndef CONFIG_BLK_DEV_ZONED
3120
+ if (sdp -> type == TYPE_ZBC )
3121
+ goto out ;
3122
+ #endif
3047
3123
SCSI_LOG_HLQUEUE (3 , sdev_printk (KERN_INFO , sdp ,
3048
3124
"sd_probe\n" ));
3049
3125
@@ -3147,6 +3223,8 @@ static int sd_remove(struct device *dev)
3147
3223
del_gendisk (sdkp -> disk );
3148
3224
sd_shutdown (dev );
3149
3225
3226
+ sd_zbc_remove (sdkp );
3227
+
3150
3228
blk_register_region (devt , SD_MINORS , NULL ,
3151
3229
sd_default_probe , NULL , NULL );
3152
3230
0 commit comments