zbd: fixup ->zone_size_log2 if zone size is not power of 2
authorAlexey Dobriyan <adobriyan@gmail.com>
Mon, 6 Apr 2020 19:56:10 +0000 (22:56 +0300)
committerJens Axboe <axboe@kernel.dk>
Tue, 7 Apr 2020 01:41:45 +0000 (19:41 -0600)
Code like this doesn't work if log2 is 0xffffffff.

if (f->zbd_info->zone_size_log2 > 0)
                zone_idx = offset >> f->zbd_info->zone_size_log2;
        else
                zone_idx = offset / f->zbd_info->zone_size;

Other than that everything else works!

Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Alexey Dobriyan (SK hynix) <adobriyan@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
zbd.c

diff --git a/zbd.c b/zbd.c
index d12d6a7ac3f0f66b2c21b9f5ab7925ace427bd97..e2f3f52f2ac7795ccbc0a79c5ce90e713a8f5316 100644 (file)
--- a/zbd.c
+++ b/zbd.c
@@ -398,7 +398,7 @@ static int init_zone_info(struct thread_data *td, struct fio_file *f)
        f->zbd_info = zbd_info;
        f->zbd_info->zone_size = zone_size;
        f->zbd_info->zone_size_log2 = is_power_of_2(zone_size) ?
-               ilog2(zone_size) : -1;
+               ilog2(zone_size) : 0;
        f->zbd_info->nr_zones = nr_zones;
        pthread_mutexattr_destroy(&attr);
        return 0;
@@ -515,7 +515,7 @@ static int parse_zone_info(struct thread_data *td, struct fio_file *f)
        f->zbd_info = zbd_info;
        f->zbd_info->zone_size = zone_size;
        f->zbd_info->zone_size_log2 = is_power_of_2(zone_size) ?
-               ilog2(zone_size) : -1;
+               ilog2(zone_size) : 0;
        f->zbd_info->nr_zones = nr_zones;
        zbd_info = NULL;
        ret = 0;