@@ -150,77 +150,6 @@ int blkdev_report_zones(struct block_device *bdev, sector_t sector,
150150}
151151EXPORT_SYMBOL_GPL (blkdev_report_zones );
152152
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-
224153static int blkdev_zone_reset_all (struct block_device * bdev )
225154{
226155 struct bio bio ;
@@ -247,7 +176,6 @@ static int blkdev_zone_reset_all(struct block_device *bdev)
247176int blkdev_zone_mgmt (struct block_device * bdev , enum req_op op ,
248177 sector_t sector , sector_t nr_sectors )
249178{
250- struct request_queue * q = bdev_get_queue (bdev );
251179 sector_t zone_sectors = bdev_zone_sectors (bdev );
252180 sector_t capacity = bdev_nr_sectors (bdev );
253181 sector_t end_sector = sector + nr_sectors ;
@@ -275,16 +203,11 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_op op,
275203 return - EINVAL ;
276204
277205 /*
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.
282208 */
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 )
286210 return blkdev_zone_reset_all (bdev );
287- }
288211
289212 while (sector < end_sector ) {
290213 bio = blk_next_bio (bio , bdev , 0 , op | REQ_SYNC , GFP_KERNEL );
@@ -1555,7 +1478,7 @@ void disk_free_zone_resources(struct gendisk *disk)
15551478 mempool_destroy (disk -> zone_wplugs_pool );
15561479 disk -> zone_wplugs_pool = NULL ;
15571480
1558- kfree (disk -> conv_zones_bitmap );
1481+ bitmap_free (disk -> conv_zones_bitmap );
15591482 disk -> conv_zones_bitmap = NULL ;
15601483 disk -> zone_capacity = 0 ;
15611484 disk -> last_zone_capacity = 0 ;
@@ -1677,7 +1600,6 @@ static int blk_revalidate_conv_zone(struct blk_zone *zone, unsigned int idx,
16771600 struct blk_revalidate_zone_args * args )
16781601{
16791602 struct gendisk * disk = args -> disk ;
1680- struct request_queue * q = disk -> queue ;
16811603
16821604 if (zone -> capacity != zone -> len ) {
16831605 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,
16931615
16941616 if (!args -> conv_zones_bitmap ) {
16951617 args -> conv_zones_bitmap =
1696- blk_alloc_zone_bitmap ( q -> node , args -> nr_zones );
1618+ bitmap_zalloc ( args -> nr_zones , GFP_NOIO );
16971619 if (!args -> conv_zones_bitmap )
16981620 return - ENOMEM ;
16991621 }
0 commit comments