struct blk_zone *zones, unsigned int *nr_zones)
 {
        struct btrfs_zoned_device_info *zinfo = device->zone_info;
-       u32 zno;
        int ret;
 
        if (!*nr_zones)
        /* Check cache */
        if (zinfo->zone_cache) {
                unsigned int i;
+               u32 zno;
 
                ASSERT(IS_ALIGNED(pos, zinfo->zone_size));
                zno = pos >> zinfo->zone_size_shift;
                return -EIO;
 
        /* Populate cache */
-       if (zinfo->zone_cache)
+       if (zinfo->zone_cache) {
+               u32 zno = pos >> zinfo->zone_size_shift;
+
                memcpy(zinfo->zone_cache + zno, zones,
                       sizeof(*zinfo->zone_cache) * *nr_zones);
+       }
 
        return 0;
 }