oslib: Fix blkzoned_get_max_open_zones()
authorDamien Le Moal <damien.lemoal@wdc.com>
Wed, 1 Sep 2021 06:41:53 +0000 (15:41 +0900)
committerJens Axboe <axboe@kernel.dk>
Fri, 3 Sep 2021 02:56:19 +0000 (20:56 -0600)
When the kernel does not have the sysfs atttribute file
queue/max_open_zones, blkzoned_get_max_open_zones() returns success
without initializing the max_open_zones value to 0 to indicate to the
caller (zbd_get_max_open_zones() in zbd.c) that the device limit is
unknown. If the max_open_zones variable in zbd_get_max_open_zones() is
not already 0 (depending on the memory status), the missing
initialization in blkzoned_get_max_open_zones() can cause errors or
misbehavior as an incorrect, random, limit may be used.

Fix this by always initializing max_open_zones to 0 when the
max_open_zones sysfs attribute file does not exist.

Reported-by: Bao-Hua Li <baohua.li@wdc.com>
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
oslib/linux-blkzoned.c

index 4e441d29b8de2b4173684f8f5d79744192dd0bff..185bd5011bbc5105e7bf67a171b0d93a93727ae2 100644 (file)
@@ -169,8 +169,10 @@ int blkzoned_get_max_open_zones(struct thread_data *td, struct fio_file *f,
                return -EIO;
 
        max_open_str = blkzoned_get_sysfs_attr(f->file_name, "queue/max_open_zones");
-       if (!max_open_str)
+       if (!max_open_str) {
+               *max_open_zones = 0;
                return 0;
+       }
 
        dprint(FD_ZBD, "%s: max open zones supported by device: %s\n",
               f->file_name, max_open_str);