@@ -150,77 +150,6 @@ int blkdev_report_zones(struct block_device *bdev, sector_t sector,
150
150
}
151
151
EXPORT_SYMBOL_GPL (blkdev_report_zones );
152
152
153
- static inline unsigned long * blk_alloc_zone_bitmap (int node ,
154
- unsigned int nr_zones )
155
- {
156
- return kcalloc_node (BITS_TO_LONGS (nr_zones ), sizeof (unsigned long ),
157
- GFP_NOIO , node );
158
- }
159
-
160
- static int blk_zone_need_reset_cb (struct blk_zone * zone , unsigned int idx ,
161
- void * data )
162
- {
163
- /*
164
- * For an all-zones reset, ignore conventional, empty, read-only
165
- * and offline zones.
166
- */
167
- switch (zone -> cond ) {
168
- case BLK_ZONE_COND_NOT_WP :
169
- case BLK_ZONE_COND_EMPTY :
170
- case BLK_ZONE_COND_READONLY :
171
- case BLK_ZONE_COND_OFFLINE :
172
- return 0 ;
173
- default :
174
- set_bit (idx , (unsigned long * )data );
175
- return 0 ;
176
- }
177
- }
178
-
179
- static int blkdev_zone_reset_all_emulated (struct block_device * bdev )
180
- {
181
- struct gendisk * disk = bdev -> bd_disk ;
182
- sector_t capacity = bdev_nr_sectors (bdev );
183
- sector_t zone_sectors = bdev_zone_sectors (bdev );
184
- unsigned long * need_reset ;
185
- struct bio * bio = NULL ;
186
- sector_t sector = 0 ;
187
- int ret ;
188
-
189
- need_reset = blk_alloc_zone_bitmap (disk -> queue -> node , disk -> nr_zones );
190
- if (!need_reset )
191
- return - ENOMEM ;
192
-
193
- ret = disk -> fops -> report_zones (disk , 0 , disk -> nr_zones ,
194
- blk_zone_need_reset_cb , need_reset );
195
- if (ret < 0 )
196
- goto out_free_need_reset ;
197
-
198
- ret = 0 ;
199
- while (sector < capacity ) {
200
- if (!test_bit (disk_zone_no (disk , sector ), need_reset )) {
201
- sector += zone_sectors ;
202
- continue ;
203
- }
204
-
205
- bio = blk_next_bio (bio , bdev , 0 , REQ_OP_ZONE_RESET | REQ_SYNC ,
206
- GFP_KERNEL );
207
- bio -> bi_iter .bi_sector = sector ;
208
- sector += zone_sectors ;
209
-
210
- /* This may take a while, so be nice to others */
211
- cond_resched ();
212
- }
213
-
214
- if (bio ) {
215
- ret = submit_bio_wait (bio );
216
- bio_put (bio );
217
- }
218
-
219
- out_free_need_reset :
220
- kfree (need_reset );
221
- return ret ;
222
- }
223
-
224
153
static int blkdev_zone_reset_all (struct block_device * bdev )
225
154
{
226
155
struct bio bio ;
@@ -247,7 +176,6 @@ static int blkdev_zone_reset_all(struct block_device *bdev)
247
176
int blkdev_zone_mgmt (struct block_device * bdev , enum req_op op ,
248
177
sector_t sector , sector_t nr_sectors )
249
178
{
250
- struct request_queue * q = bdev_get_queue (bdev );
251
179
sector_t zone_sectors = bdev_zone_sectors (bdev );
252
180
sector_t capacity = bdev_nr_sectors (bdev );
253
181
sector_t end_sector = sector + nr_sectors ;
@@ -275,16 +203,11 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_op op,
275
203
return - EINVAL ;
276
204
277
205
/*
278
- * In the case of a zone reset operation over all zones,
279
- * REQ_OP_ZONE_RESET_ALL can be used with devices supporting this
280
- * command. For other devices, we emulate this command behavior by
281
- * identifying the zones needing a reset.
206
+ * In the case of a zone reset operation over all zones, use
207
+ * REQ_OP_ZONE_RESET_ALL.
282
208
*/
283
- if (op == REQ_OP_ZONE_RESET && sector == 0 && nr_sectors == capacity ) {
284
- if (!blk_queue_zone_resetall (q ))
285
- return blkdev_zone_reset_all_emulated (bdev );
209
+ if (op == REQ_OP_ZONE_RESET && sector == 0 && nr_sectors == capacity )
286
210
return blkdev_zone_reset_all (bdev );
287
- }
288
211
289
212
while (sector < end_sector ) {
290
213
bio = blk_next_bio (bio , bdev , 0 , op | REQ_SYNC , GFP_KERNEL );
@@ -1555,7 +1478,7 @@ void disk_free_zone_resources(struct gendisk *disk)
1555
1478
mempool_destroy (disk -> zone_wplugs_pool );
1556
1479
disk -> zone_wplugs_pool = NULL ;
1557
1480
1558
- kfree (disk -> conv_zones_bitmap );
1481
+ bitmap_free (disk -> conv_zones_bitmap );
1559
1482
disk -> conv_zones_bitmap = NULL ;
1560
1483
disk -> zone_capacity = 0 ;
1561
1484
disk -> last_zone_capacity = 0 ;
@@ -1677,7 +1600,6 @@ static int blk_revalidate_conv_zone(struct blk_zone *zone, unsigned int idx,
1677
1600
struct blk_revalidate_zone_args * args )
1678
1601
{
1679
1602
struct gendisk * disk = args -> disk ;
1680
- struct request_queue * q = disk -> queue ;
1681
1603
1682
1604
if (zone -> capacity != zone -> len ) {
1683
1605
pr_warn ("%s: Invalid conventional zone capacity\n" ,
@@ -1693,7 +1615,7 @@ static int blk_revalidate_conv_zone(struct blk_zone *zone, unsigned int idx,
1693
1615
1694
1616
if (!args -> conv_zones_bitmap ) {
1695
1617
args -> conv_zones_bitmap =
1696
- blk_alloc_zone_bitmap ( q -> node , args -> nr_zones );
1618
+ bitmap_zalloc ( args -> nr_zones , GFP_NOIO );
1697
1619
if (!args -> conv_zones_bitmap )
1698
1620
return - ENOMEM ;
1699
1621
}
0 commit comments