null_blk: remove duplicate check for report zone
authorChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Tue, 11 Jun 2019 22:10:17 +0000 (15:10 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 13 Jun 2019 09:00:30 +0000 (03:00 -0600)
This patch removes the check in the null_blk_zoned for report zone
command, where it checks for the dev-,>zoned before executing the report
zone.

The null_zone_report() function is a block_device operation callback
which is initialized in the null_blk_main.c and gets called as a part
of blkdev for report zone IOCTL (BLKREPORTZONE).

blkdev_ioctl()
blkdev_report_zones_ioctl()
        blkdev_report_zones()
                blk_report_zones()
                        disk->fops->report_zones()
                                nullb_zone_report();

The null_zone_report() will never get executed on the non-zoned block
device, in the non zoned block device blk_queue_is_zoned() will always
be false which is first check the blkdev_report_zones_ioctl()
before actual low level driver report zone callback is executed.

Here is the detailed scenario:-

1. modprobe null_blk
null_init
null_alloc_dev
        dev->zoned = 0
null_add_dev
        dev->zoned == 0
                so we don't set the q->limits.zoned = BLK_ZONED_HR

2. blkzone report /dev/nullb0

blkdev_ioctl()
blkdev_report_zones_ioctl()
        blk_queue_is_zoned()
                blk_queue_is_zoned
                        q->limits.zoned == 0
                        return false
        if (!blk_queue_is_zoned(q)) <--- true
                return -ENOTTY;

Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
Reviewed-by: Bob Liu <bob.liu@oracle.com>
Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/null_blk_zoned.c

index 5d1c261a2cfd588b04284c3e18548e3b812d918e..fca0c97ff1aa09925cbf50ae8e199c5d91963386 100644 (file)
@@ -74,10 +74,6 @@ int null_zone_report(struct gendisk *disk, sector_t sector,
        struct nullb_device *dev = nullb->dev;
        unsigned int zno, nrz = 0;
 
-       if (!dev->zoned)
-               /* Not a zoned null device */
-               return -EOPNOTSUPP;
-
        zno = null_zone_no(dev, sector);
        if (zno < dev->nr_zones) {
                nrz = min_t(unsigned int, *nr_zones, dev->nr_zones - zno);