CC: [email protected]
CC: [email protected]
CC: [email protected]
TO: Omar Sandoval <[email protected]>
CC: David Sterba <[email protected]>

tree:   https://github.com/kdave/btrfs-devel.git for-next-20220120
head:   6fb735a475ecc1022d6f3013418f4ca597eb80fb
commit: dfd0277dca6c45b201724f16417e49f638bd04b4 [42/50] btrfs: add 
BTRFS_IOC_ENCODED_READ
:::::: branch date: 5 days ago
:::::: commit date: 5 days ago
config: x86_64-randconfig-c007-20220124 
(https://download.01.org/0day-ci/archive/20220125/[email protected]/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
997e128e2a78f5a5434fc75997441ae1ee76f8a4)
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
        # 
https://github.com/kdave/btrfs-devel/commit/dfd0277dca6c45b201724f16417e49f638bd04b4
        git remote add kdave-btrfs-devel 
https://github.com/kdave/btrfs-devel.git
        git fetch --no-tags kdave-btrfs-devel for-next-20220120
        git checkout dfd0277dca6c45b201724f16417e49f638bd04b4
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
   include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^
   include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^
   fs/btrfs/inode.c:7606:6: note: 'write' is true
           if (write) {
               ^~~~~
   fs/btrfs/inode.c:7606:2: note: Taking true branch
           if (write) {
           ^
   fs/btrfs/inode.c:7607:9: note: Calling 'btrfs_get_blocks_direct_write'
                   ret = btrfs_get_blocks_direct_write(&em, inode, dio_data,
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:7427:6: note: Assuming the condition is false
           if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags) ||
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:7427:6: note: Left side of '||' is false
   fs/btrfs/inode.c:7428:8: note: Assuming the condition is false
               ((BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) &&
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:7428:55: note: Left side of '&&' is false
               ((BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) &&
                                                                ^
   fs/btrfs/inode.c:7443:6: note: 'can_nocow' is false
           if (can_nocow) {
               ^~~~~~~~~
   fs/btrfs/inode.c:7443:2: note: Taking false branch
           if (can_nocow) {
           ^
   fs/btrfs/inode.c:7476:3: note: Null pointer value stored to 'em'
                   *map = NULL;
                   ^~~~~~~~~~~
   fs/btrfs/inode.c:7482:7: note: Assuming 'ret' is >= 0
                   if (ret < 0)
                       ^~~~~~~
   fs/btrfs/inode.c:7482:3: note: Taking false branch
                   if (ret < 0)
                   ^
   fs/btrfs/inode.c:7487:3: note: Taking true branch
                   if (IS_ERR(em)) {
                   ^
   fs/btrfs/inode.c:7489:4: note: Control jumps to line 7513
                           goto out;
                           ^
   fs/btrfs/inode.c:7513:6: note: Assuming 'ret' is 0
           if (ret && space_reserved) {
               ^~~
   fs/btrfs/inode.c:7513:10: note: Left side of '&&' is false
           if (ret && space_reserved) {
                   ^
   fs/btrfs/inode.c:7607:9: note: Returning from 'btrfs_get_blocks_direct_write'
                   ret = btrfs_get_blocks_direct_write(&em, inode, dio_data,
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:7609:7: note: 'ret' is >= 0
                   if (ret < 0)
                       ^~~
   fs/btrfs/inode.c:7609:3: note: Taking false branch
                   if (ret < 0)
                   ^
   fs/btrfs/inode.c:7613:18: note: Access to field 'len' results in a 
dereference of a null pointer (loaded from variable 'em')
                   len = min(len, em->len - (start - em->start));
                                  ^
   include/linux/minmax.h:45:36: note: expanded from macro 'min'
   #define min(x, y)       __careful_cmp(x, y, <)
                                            ^
   include/linux/minmax.h:38:17: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                                 ^
   include/linux/minmax.h:32:25: note: expanded from macro '__cmp_once'
                   typeof(y) unique_y = (y);               \
                                         ^
   fs/btrfs/inode.c:9227:4: warning: Value stored to 'root_log_pinned' is never 
read [clang-analyzer-deadcode.DeadStores]
                           root_log_pinned = false;
                           ^                 ~~~~~
   fs/btrfs/inode.c:9227:4: note: Value stored to 'root_log_pinned' is never 
read
                           root_log_pinned = false;
                           ^                 ~~~~~
   fs/btrfs/inode.c:9231:4: warning: Value stored to 'dest_log_pinned' is never 
read [clang-analyzer-deadcode.DeadStores]
                           dest_log_pinned = false;
                           ^                 ~~~~~
   fs/btrfs/inode.c:9231:4: note: Value stored to 'dest_log_pinned' is never 
read
                           dest_log_pinned = false;
                           ^                 ~~~~~
   fs/btrfs/inode.c:9347:2: warning: Value stored to 'ret' is never read 
[clang-analyzer-deadcode.DeadStores]
           ret = 0;
           ^     ~
   fs/btrfs/inode.c:9347:2: note: Value stored to 'ret' is never read
           ret = 0;
           ^     ~
   fs/btrfs/inode.c:9518:3: warning: Value stored to 'log_pinned' is never read 
[clang-analyzer-deadcode.DeadStores]
                   log_pinned = false;
                   ^            ~~~~~
   fs/btrfs/inode.c:9518:3: note: Value stored to 'log_pinned' is never read
                   log_pinned = false;
                   ^            ~~~~~
>> fs/btrfs/inode.c:10433:15: warning: Assigned value is garbage or undefined 
>> [clang-analyzer-core.uninitialized.Assign]
                   remaining = min(geom.len, disk_io_size - cur);
                               ^
   include/linux/minmax.h:45:19: note: expanded from macro 'min'
   #define min(x, y)       __careful_cmp(x, y, <)
                           ^
   include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^
   include/linux/minmax.h:31:3: note: expanded from macro '__cmp_once'
                   typeof(x) unique_x = (x);               \
                   ^
   fs/btrfs/inode.c:10559:6: note: Assuming field 'ki_pos' is < field 'i_size'
           if (iocb->ki_pos >= inode->i_size) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:10559:2: note: Taking false branch
           if (iocb->ki_pos >= inode->i_size) {
           ^
   fs/btrfs/inode.c:10570:2: note: Loop condition is true.  Entering loop body
           for (;;) {
           ^
   fs/btrfs/inode.c:10575:7: note: Assuming 'ret' is 0
                   if (ret)
                       ^~~
   fs/btrfs/inode.c:10575:3: note: Taking false branch
                   if (ret)
                   ^
   fs/btrfs/inode.c:10580:7: note: Assuming 'ordered' is null
                   if (!ordered)
                       ^~~~~~~~
   fs/btrfs/inode.c:10580:3: note: Taking true branch
                   if (!ordered)
                   ^
   fs/btrfs/inode.c:10581:4: note:  Execution continues on line 10587
                           break;
                           ^
   fs/btrfs/inode.c:10589:2: note: Taking false branch
           if (IS_ERR(em)) {
           ^
   fs/btrfs/inode.c:10594:6: note: Assuming the condition is false
           if (em->block_start == EXTENT_MAP_INLINE) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:10594:2: note: Taking false branch
           if (em->block_start == EXTENT_MAP_INLINE) {
           ^
   fs/btrfs/inode.c:10613:18: note: '__UNIQUE_ID___x1569' is >= 
'__UNIQUE_ID___y1570'
           encoded->len = (min_t(u64, extent_map_end(em), inode->i_size) -
                           ^
   include/linux/minmax.h:104:27: note: expanded from macro 'min_t'
   #define min_t(type, x, y)       __careful_cmp((type)(x), (type)(y), <)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^~~
   fs/btrfs/inode.c:10613:18: note: '?' condition is false
           encoded->len = (min_t(u64, extent_map_end(em), inode->i_size) -
                           ^
   include/linux/minmax.h:104:27: note: expanded from macro 'min_t'
   #define min_t(type, x, y)       __careful_cmp((type)(x), (type)(y), <)
                                   ^
   include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^
   include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^
   fs/btrfs/inode.c:10615:6: note: Assuming the condition is false
           if (em->block_start == EXTENT_MAP_HOLE ||
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:10615:6: note: Left side of '||' is false
   fs/btrfs/inode.c:10616:6: note: Assuming the condition is false
               test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:10615:2: note: Taking false branch
           if (em->block_start == EXTENT_MAP_HOLE ||
           ^
   fs/btrfs/inode.c:10620:13: note: Assuming the condition is true
           } else if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags)) {
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:10620:9: note: Taking true branch
           } else if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags)) {
                  ^
   fs/btrfs/inode.c:10626:7: note: Assuming 'count' is >= field 'block_len'
                   if (em->block_len > count) {
                       ^~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/inode.c:10626:3: note: Taking false branch
                   if (em->block_len > count) {
                   ^
   fs/btrfs/inode.c:10635:7: note: 'ret' is >= 0
                   if (ret < 0)
                       ^~~
   fs/btrfs/inode.c:10635:3: note: Taking false branch

vim +10433 fs/btrfs/inode.c

dfd0277dca6c45 Omar Sandoval 2021-11-17  10391  
dfd0277dca6c45 Omar Sandoval 2021-11-17  10392  static int 
btrfs_encoded_read_regular_fill_pages(struct inode *inode,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10393                                  
                 u64 file_offset,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10394                                  
                 u64 disk_bytenr,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10395                                  
                 u64 disk_io_size,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10396                                  
                 struct page **pages)
dfd0277dca6c45 Omar Sandoval 2021-11-17  10397  {
dfd0277dca6c45 Omar Sandoval 2021-11-17  10398          struct btrfs_fs_info 
*fs_info = btrfs_sb(inode->i_sb);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10399          struct 
btrfs_encoded_read_private priv = {
dfd0277dca6c45 Omar Sandoval 2021-11-17  10400                  .inode = inode,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10401                  .file_offset = 
file_offset,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10402                  .pending = 
ATOMIC_INIT(1),
dfd0277dca6c45 Omar Sandoval 2021-11-17  10403                  .skip_csum = 
BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10404          };
dfd0277dca6c45 Omar Sandoval 2021-11-17  10405          unsigned long i = 0;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10406          u64 cur = 0;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10407          int ret;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10408  
dfd0277dca6c45 Omar Sandoval 2021-11-17  10409          
init_waitqueue_head(&priv.wait);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10410          /*
dfd0277dca6c45 Omar Sandoval 2021-11-17  10411           * Submit bios for the 
extent, splitting due to bio or stripe limits as
dfd0277dca6c45 Omar Sandoval 2021-11-17  10412           * necessary.
dfd0277dca6c45 Omar Sandoval 2021-11-17  10413           */
dfd0277dca6c45 Omar Sandoval 2021-11-17  10414          while (cur < 
disk_io_size) {
dfd0277dca6c45 Omar Sandoval 2021-11-17  10415                  struct 
extent_map *em;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10416                  struct 
btrfs_io_geometry geom;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10417                  struct bio *bio 
= NULL;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10418                  u64 remaining;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10419  
dfd0277dca6c45 Omar Sandoval 2021-11-17  10420                  em = 
btrfs_get_chunk_map(fs_info, disk_bytenr + cur,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10421                                  
         disk_io_size - cur);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10422                  if (IS_ERR(em)) 
{
dfd0277dca6c45 Omar Sandoval 2021-11-17  10423                          ret = 
PTR_ERR(em);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10424                  } else {
dfd0277dca6c45 Omar Sandoval 2021-11-17  10425                          ret = 
btrfs_get_io_geometry(fs_info, em, BTRFS_MAP_READ,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10426                                  
                    disk_bytenr + cur, &geom);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10427                          
free_extent_map(em);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10428                  }
dfd0277dca6c45 Omar Sandoval 2021-11-17  10429                  if (ret) {
dfd0277dca6c45 Omar Sandoval 2021-11-17  10430                          
WRITE_ONCE(priv.status, errno_to_blk_status(ret));
dfd0277dca6c45 Omar Sandoval 2021-11-17  10431                          break;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10432                  }
dfd0277dca6c45 Omar Sandoval 2021-11-17 @10433                  remaining = 
min(geom.len, disk_io_size - cur);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10434                  while (bio || 
remaining) {
dfd0277dca6c45 Omar Sandoval 2021-11-17  10435                          size_t 
bytes = min_t(u64, remaining, PAGE_SIZE);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10436  
dfd0277dca6c45 Omar Sandoval 2021-11-17  10437                          if 
(!bio) {
dfd0277dca6c45 Omar Sandoval 2021-11-17  10438                                  
bio = btrfs_bio_alloc(BIO_MAX_VECS);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10439                                  
bio->bi_iter.bi_sector =
dfd0277dca6c45 Omar Sandoval 2021-11-17  10440                                  
        (disk_bytenr + cur) >> SECTOR_SHIFT;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10441                                  
bio->bi_end_io = btrfs_encoded_read_endio;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10442                                  
bio->bi_private = &priv;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10443                                  
bio->bi_opf = REQ_OP_READ;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10444                          }
dfd0277dca6c45 Omar Sandoval 2021-11-17  10445  
dfd0277dca6c45 Omar Sandoval 2021-11-17  10446                          if 
(!bytes ||
dfd0277dca6c45 Omar Sandoval 2021-11-17  10447                              
bio_add_page(bio, pages[i], bytes, 0) < bytes) {
dfd0277dca6c45 Omar Sandoval 2021-11-17  10448                                  
blk_status_t status;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10449  
dfd0277dca6c45 Omar Sandoval 2021-11-17  10450                                  
status = submit_encoded_read_bio(inode, bio, 0,
dfd0277dca6c45 Omar Sandoval 2021-11-17  10451                                  
                                 0);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10452                                  
if (status) {
dfd0277dca6c45 Omar Sandoval 2021-11-17  10453                                  
        WRITE_ONCE(priv.status, status);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10454                                  
        bio_put(bio);
dfd0277dca6c45 Omar Sandoval 2021-11-17  10455                                  
        goto out;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10456                                  
}
dfd0277dca6c45 Omar Sandoval 2021-11-17  10457                                  
bio = NULL;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10458                                  
continue;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10459                          }
dfd0277dca6c45 Omar Sandoval 2021-11-17  10460  
dfd0277dca6c45 Omar Sandoval 2021-11-17  10461                          i++;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10462                          cur += 
bytes;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10463                          
remaining -= bytes;
dfd0277dca6c45 Omar Sandoval 2021-11-17  10464                  }
dfd0277dca6c45 Omar Sandoval 2021-11-17  10465          }
dfd0277dca6c45 Omar Sandoval 2021-11-17  10466  
dfd0277dca6c45 Omar Sandoval 2021-11-17  10467  out:
dfd0277dca6c45 Omar Sandoval 2021-11-17  10468          if 
(atomic_dec_return(&priv.pending))
dfd0277dca6c45 Omar Sandoval 2021-11-17  10469                  
io_wait_event(priv.wait, !atomic_read(&priv.pending));
dfd0277dca6c45 Omar Sandoval 2021-11-17  10470          /* See 
btrfs_encoded_read_endio() for ordering. */
dfd0277dca6c45 Omar Sandoval 2021-11-17  10471          return 
blk_status_to_errno(READ_ONCE(priv.status));
dfd0277dca6c45 Omar Sandoval 2021-11-17  10472  }
dfd0277dca6c45 Omar Sandoval 2021-11-17  10473  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to