@@ -1123,6 +1123,9 @@ typedef struct zvol_queue_limits {
1123
1123
unsigned short zql_max_segments ;
1124
1124
unsigned int zql_max_segment_size ;
1125
1125
unsigned int zql_io_opt ;
1126
+ unsigned int zql_physical_block_size ;
1127
+ unsigned int zql_max_discard_sectors ;
1128
+ unsigned int zql_discard_granularity ;
1126
1129
} zvol_queue_limits_t ;
1127
1130
1128
1131
static void
@@ -1191,6 +1194,11 @@ zvol_queue_limits_init(zvol_queue_limits_t *limits, zvol_state_t *zv,
1191
1194
}
1192
1195
1193
1196
limits -> zql_io_opt = zv -> zv_volblocksize ;
1197
+
1198
+ limits -> zql_physical_block_size = zv -> zv_volblocksize ;
1199
+ limits -> zql_max_discard_sectors =
1200
+ (zvol_max_discard_blocks * zv -> zv_volblocksize ) >> 9 ;
1201
+ limits -> zql_discard_granularity = zv -> zv_volblocksize ;
1194
1202
}
1195
1203
1196
1204
#ifdef HAVE_BLK_ALLOC_DISK_2ARG
@@ -1203,6 +1211,9 @@ zvol_queue_limits_convert(zvol_queue_limits_t *limits,
1203
1211
qlimits -> max_segments = limits -> zql_max_segments ;
1204
1212
qlimits -> max_segment_size = limits -> zql_max_segment_size ;
1205
1213
qlimits -> io_opt = limits -> zql_io_opt ;
1214
+ qlimits -> physical_block_size = limits -> zql_physical_block_size ;
1215
+ qlimits -> max_discard_sectors = limits -> zql_max_discard_sectors ;
1216
+ qlimits -> discard_granularity = limits -> zql_discard_granularity ;
1206
1217
#ifdef HAVE_BLKDEV_QUEUE_LIMITS_FEATURES
1207
1218
qlimits -> features =
1208
1219
BLK_FEAT_WRITE_CACHE | BLK_FEAT_FUA | BLK_FEAT_IO_STAT ;
@@ -1219,6 +1230,10 @@ zvol_queue_limits_apply(zvol_queue_limits_t *limits,
1219
1230
blk_queue_max_segments (queue , limits -> zql_max_segments );
1220
1231
blk_queue_max_segment_size (queue , limits -> zql_max_segment_size );
1221
1232
blk_queue_io_opt (queue , limits -> zql_io_opt );
1233
+ blk_queue_physical_block_size (queue , limits -> zql_physical_block_size );
1234
+ blk_queue_max_discard_sectors (queue , limits -> zql_max_discard_sectors );
1235
+ blk_queue_discard_granularity (queue , limits -> zql_discard_granularity );
1236
+ #endif
1222
1237
#ifndef HAVE_BLKDEV_QUEUE_LIMITS_FEATURES
1223
1238
blk_queue_set_write_cache (queue , B_TRUE );
1224
1239
blk_queue_flag_set (QUEUE_FLAG_IO_STAT , queue );
@@ -1677,14 +1692,6 @@ zvol_os_create_minor(const char *name)
1677
1692
1678
1693
set_capacity (zv -> zv_zso -> zvo_disk , zv -> zv_volsize >> 9 );
1679
1694
1680
-
1681
-
1682
- blk_queue_physical_block_size (zv -> zv_zso -> zvo_queue ,
1683
- zv -> zv_volblocksize );
1684
- blk_queue_max_discard_sectors (zv -> zv_zso -> zvo_queue ,
1685
- (zvol_max_discard_blocks * zv -> zv_volblocksize ) >> 9 );
1686
- blk_queue_discard_granularity (zv -> zv_zso -> zvo_queue ,
1687
- zv -> zv_volblocksize );
1688
1695
#ifdef QUEUE_FLAG_DISCARD
1689
1696
blk_queue_flag_set (QUEUE_FLAG_DISCARD , zv -> zv_zso -> zvo_queue );
1690
1697
#endif
0 commit comments