On 5/20/21 20:01, Damien Le Moal wrote: > +static int blkdev_zone_reset_all_emulated(struct block_device *bdev, > + gfp_t gfp_mask) > +{ > + struct request_queue *q = bdev_get_queue(bdev); > + sector_t capacity = get_capacity(bdev->bd_disk); > + sector_t zone_sectors = blk_queue_zone_sectors(q); > + unsigned long *need_reset; > + struct bio *bio = NULL; > + sector_t sector; > + int ret; > + > + need_reset = blk_alloc_zone_bitmap(q->node, q->nr_zones); > + if (!need_reset) > + return -ENOMEM; > + > + ret = bdev->bd_disk->fops->report_zones(bdev->bd_disk, 0, > + q->nr_zones, blk_zone_need_reset_cb, > + need_reset); > + if (ret < 0) > + goto out_free_need_reset; > + > + ret = 0; > + while (sector < capacity) { Garbage value of sector variable used in above comparison ? If so consider initializing at the time of declaration. > + if (!test_bit(blk_queue_zone_no(q, sector), need_reset)) { > + sector += zone_sectors; > + continue; > + } > + bio = blk_next_bio(bio, 0, gfp_mask); > + bio_set_dev(bio, bdev); > + bio->bi_opf = REQ_OP_ZONE_RESET | REQ_SYNC; > + bio->bi_iter.bi_sector = sector; > + sector += zone_sectors; > + > + /* This may take a while, so be nice to others */ > + cond_resched(); > + } > + > + if (bio) { > + ret = submit_bio_wait(bio); > + bio_put(bio); > + } > + > +out_free_need_reset: > + kfree(need_reset); > + return ret; > +}