Re: [PATCH v13 9/9] null_blk: add support for copy offload

kernel test robot
2023-06-28T12:55:15Z

Hi Nitesh,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 53cdf865f90ba922a854c65ed05b519f9d728424]

url: https://github.com/intel-lab-lkp/linux/commits/Nitesh-Shetty/block-Introduce-queue-limits-for-copy-offload-support/20230628-163126
base: 53cdf865f90ba922a854c65ed05b519f9d728424
patch link: https://lore.kernel.org/r/20230627183629.26571-10-nj.shetty%40samsung.com
patch subject: [PATCH v13 9/9] null_blk: add support for copy offload
config: i386-randconfig-i006-20230628 (https://download.01.org/0day-ci/archive/20230628/202306282001.ba1qWTf0-lkp@intel.com/config)
compiler: clang version 15.0.7 (https://github.com/llvm/llvm-project.git 8dfdcc7b7bf66834a761bd8de445840ef68e4d1a)
reproduce: (https://download.01.org/0day-ci/archive/20230628/202306282001.ba1qWTf0-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202306282001.ba1qWTf0-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/block/null_blk/main.c:1295:2: warning: variable 'rem' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
__rq_for_each_bio(bio, req) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/blk-mq.h:1012:6: note: expanded from macro '__rq_for_each_bio'
if ((rq->bio)) \
^~~~~~~~~
drivers/block/null_blk/main.c:1300:15: note: uninitialized use occurs here
if (WARN_ON(!rem))
^~~
include/asm-generic/bug.h:123:25: note: expanded from macro 'WARN_ON'
int __ret_warn_on = !!(condition); \
^~~~~~~~~
drivers/block/null_blk/main.c:1295:2: note: remove the 'if' if its condition is always true
__rq_for_each_bio(bio, req) {
^
include/linux/blk-mq.h:1012:2: note: expanded from macro '__rq_for_each_bio'
if ((rq->bio)) \
^
drivers/block/null_blk/main.c:1287:12: note: initialize the variable 'rem' to silence this warning
size_t rem, temp;
^
= 0
1 warning generated.

vim +1295 drivers/block/null_blk/main.c

1281
1282 static inline int nullb_setup_copy_write(struct nullb *nullb,
1283 struct request *req, bool is_fua)
1284 {
1285 sector_t sector_in, sector_out;
1286 void *in, *out;
1287 size_t rem, temp;
1288 struct bio *bio;
1289 unsigned long offset_in, offset_out;
1290 struct nullb_page *t_page_in, *t_page_out;
1291 int ret = -EIO;
1292
1293 sector_out = blk_rq_pos(req);
1294
> 1295 __rq_for_each_bio(bio, req) {
1296 sector_in = bio->bi_iter.bi_sector;
1297 rem = bio->bi_iter.bi_size;
1298 }
1299
1300 if (WARN_ON(!rem))
1301 return BLK_STS_NOTSUPP;
1302
1303 spin_lock_irq(&nullb->lock);
1304 while (rem > 0) {
1305 temp = min_t(size_t, nullb->dev->blocksize, rem);
1306 offset_in = (sector_in & SECTOR_MASK) << SECTOR_SHIFT;
1307 offset_out = (sector_out & SECTOR_MASK) << SECTOR_SHIFT;
1308
1309 if (null_cache_active(nullb) && !is_fua)
1310 null_make_cache_space(nullb, PAGE_SIZE);
1311
1312 t_page_in = null_lookup_page(nullb, sector_in, false,
1313 !null_cache_active(nullb));
1314 if (!t_page_in)
1315 goto err;
1316 t_page_out = null_insert_page(nullb, sector_out,
1317 !null_cache_active(nullb) || is_fua);
1318 if (!t_page_out)
1319 goto err;
1320
1321 in = kmap_local_page(t_page_in->page);
1322 out = kmap_local_page(t_page_out->page);
1323
1324 memcpy(out + offset_out, in + offset_in, temp);
1325 kunmap_local(out);
1326 kunmap_local(in);
1327 __set_bit(sector_out & SECTOR_MASK, t_page_out->bitmap);
1328
1329 if (is_fua)
1330 null_free_sector(nullb, sector_out, true);
1331
1332 rem -= temp;
1333 sector_in += temp >> SECTOR_SHIFT;
1334 sector_out += temp >> SECTOR_SHIFT;
1335 }
1336
1337 ret = 0;
1338 err:
1339 spin_unlock_irq(&nullb->lock);
1340 return ret;
1341 }
1342

--
0-DAY CI Kernel Test Service