[dhowells-fs:fscache-rewrite-indexing 76/77] fs/cachefiles/io.c:480:6: error: variable 'ret' is used uninitialized whenever 'if' condition is false

From: kernel test robot
Date: Sat Nov 06 2021 - 16:11:30 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git fscache-rewrite-indexing
head: 77d7cb0fca08e72544d242d6897dede22de6bc20
commit: 0790bec522903af7ee7281721e037bee2e8c6284 [76/77] cachefiles: Add error injection support
config: arm-buildonly-randconfig-r005-20211019 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project d245f2e8597bfb52c34810a328d42b990e4af1a4)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/commit/?id=0790bec522903af7ee7281721e037bee2e8c6284
git remote add dhowells-fs https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git
git fetch --no-tags dhowells-fs fscache-rewrite-indexing
git checkout 0790bec522903af7ee7281721e037bee2e8c6284
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=arm

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

>> fs/cachefiles/io.c:480:6: error: variable 'ret' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
if (pos == 0)
^~~~~~~~
fs/cachefiles/io.c:483:6: note: uninitialized use occurs here
if (ret < 0) {
^~~
fs/cachefiles/io.c:480:2: note: remove the 'if' if its condition is always true
if (pos == 0)
^~~~~~~~~~~~~
fs/cachefiles/io.c:433:9: note: initialize the variable 'ret' to silence this warning
int ret;
^
= 0
1 error generated.


vim +480 fs/cachefiles/io.c

420
421 /*
422 * Prepare for a write to occur.
423 */
424 static int __cachefiles_prepare_write(struct netfs_cache_resources *cres,
425 loff_t *_start, size_t *_len, loff_t i_size,
426 bool no_space_allocated_yet)
427 {
428 struct cachefiles_object *object = cachefiles_cres_object(cres);
429 struct cachefiles_cache *cache = object->volume->cache;
430 struct file *file = cachefiles_cres_file(cres);
431 loff_t start = *_start, pos;
432 size_t len = *_len, down;
433 int ret;
434
435 /* Round to DIO size */
436 down = start - round_down(start, PAGE_SIZE);
437 *_start = start - down;
438 *_len = round_up(down + len, PAGE_SIZE);
439
440 /* We need to work out whether there's sufficient disk space to perform
441 * the write - but we can skip that check if we have space already
442 * allocated.
443 */
444 if (no_space_allocated_yet)
445 goto check_space;
446
447 pos = cachefiles_inject_read_error();
448 if (pos == 0)
449 pos = vfs_llseek(file, *_start, SEEK_DATA);
450 if (pos < 0 && pos >= (loff_t)-MAX_ERRNO) {
451 if (pos == -ENXIO)
452 goto check_space; /* Unallocated tail */
453 trace_cachefiles_io_error(object, file_inode(file), pos,
454 cachefiles_trace_seek_error);
455 return pos;
456 }
457 if ((u64)pos >= (u64)*_start + *_len)
458 goto check_space; /* Unallocated region */
459
460 /* We have a block that's at least partially filled - if we're low on
461 * space, we need to see if it's fully allocated. If it's not, we may
462 * want to cull it.
463 */
464 if (cachefiles_has_space(cache, 0, *_len / PAGE_SIZE) == 0)
465 return 0; /* Enough space to simply overwrite the whole block */
466
467 pos = cachefiles_inject_read_error();
468 if (pos == 0)
469 pos = vfs_llseek(file, *_start, SEEK_HOLE);
470 if (pos < 0 && pos >= (loff_t)-MAX_ERRNO) {
471 trace_cachefiles_io_error(object, file_inode(file), pos,
472 cachefiles_trace_seek_error);
473 return pos;
474 }
475 if ((u64)pos >= (u64)*_start + *_len)
476 return 0; /* Fully allocated */
477
478 /* Partially allocated, but insufficient space: cull. */
479 pos = cachefiles_inject_remove_error();
> 480 if (pos == 0)
481 ret = vfs_fallocate(file, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
482 *_start, *_len);
483 if (ret < 0) {
484 trace_cachefiles_io_error(object, file_inode(file), ret,
485 cachefiles_trace_fallocate_error);
486 cachefiles_io_error_obj(object,
487 "CacheFiles: fallocate failed (%d)\n", ret);
488 ret = -EIO;
489 }
490
491 return ret;
492
493 check_space:
494 return cachefiles_has_space(cache, 0, *_len / PAGE_SIZE);
495 }
496

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip