[dm-devel] [PATCH v3 01/11] block: improve handling of all zones reset operation
Chaitanya Kulkarni
Chaitanya.Kulkarni at wdc.com
Mon May 24 00:30:26 UTC 2021
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;
> +}
More information about the dm-devel
mailing list