CC: [email protected] CC: [email protected] CC: Omar Sandoval <[email protected]> CC: [email protected] TO: Omar Sandoval <[email protected]>
tree: https://github.com/osandov/linux.git btrfs-send-encoded-v10 head: a87f8dd5b9e777c136ab986baa9b751f9c1909a6 commit: 6716dfd581687f8662d3c828ca2f9911ba58c721 [8/14] btrfs: add BTRFS_IOC_ENCODED_READ :::::: branch date: 2 days ago :::::: commit date: 2 days ago config: powerpc-randconfig-c003-20210818 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project d2b574a4dea5b718e4386bf2e26af0126e5978ce) 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 powerpc cross compiling tool for clang build # apt-get install binutils-powerpc64-linux-gnu # https://github.com/osandov/linux/commit/6716dfd581687f8662d3c828ca2f9911ba58c721 git remote add osandov https://github.com/osandov/linux.git git fetch --no-tags osandov btrfs-send-encoded-v10 git checkout 6716dfd581687f8662d3c828ca2f9911ba58c721 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc 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 >>) ^~~~ fs/btrfs/inode.c:6469:2: note: Taking true branch if (dir && name) { ^ fs/btrfs/inode.c:6472:9: note: Calling 'btrfs_set_inode_index' ret = btrfs_set_inode_index(BTRFS_I(dir), index); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:6365:6: note: Assuming the condition is true if (dir->index_cnt == (u64)-1) { ^~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:6365:2: note: Taking true branch if (dir->index_cnt == (u64)-1) { ^ fs/btrfs/inode.c:6367:7: note: Assuming 'ret' is not equal to 0 if (ret) { ^~~ fs/btrfs/inode.c:6367:3: note: Taking true branch if (ret) { ^ fs/btrfs/inode.c:6369:8: note: 'ret' is not equal to 0 if (ret) ^~~ fs/btrfs/inode.c:6369:4: note: Taking true branch if (ret) ^ fs/btrfs/inode.c:6370:5: note: Returning without writing to '*index' return ret; ^ fs/btrfs/inode.c:6472:9: note: Returning from 'btrfs_set_inode_index' ret = btrfs_set_inode_index(BTRFS_I(dir), index); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:6473:7: note: 'ret' is not equal to 0 if (ret) { ^~~ fs/btrfs/inode.c:6473:3: note: Taking true branch if (ret) { ^ fs/btrfs/inode.c:6476:4: note: Returning without writing to '*index' return ERR_PTR(ret); ^ fs/btrfs/inode.c:9570:10: note: Returning from 'btrfs_new_inode' inode = btrfs_new_inode(trans, root, mnt_userns, dir, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:9578:6: note: Calling 'IS_ERR' if (IS_ERR(inode)) { ^~~~~~~~~~~~~ include/linux/err.h:36:9: note: Assuming the condition is false return IS_ERR_VALUE((unsigned long)ptr); ^ include/linux/err.h:22:34: note: expanded from macro 'IS_ERR_VALUE' #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO) ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/err.h:36:2: note: Returning zero, which participates in a condition later return IS_ERR_VALUE((unsigned long)ptr); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:9578:6: note: Returning from 'IS_ERR' if (IS_ERR(inode)) { ^~~~~~~~~~~~~ fs/btrfs/inode.c:9578:2: note: Taking false branch if (IS_ERR(inode)) { ^ fs/btrfs/inode.c:9587:8: note: Calling 'btrfs_init_inode_security' ret = btrfs_init_inode_security(trans, inode, dir, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:226:6: note: Assuming 'err' is 0, which participates in a condition later if (!err) ^~~~ fs/btrfs/inode.c:226:2: note: Taking true branch if (!err) ^ fs/btrfs/inode.c:228:2: note: Returning value (loaded from 'err'), which participates in a condition later return err; ^~~~~~~~~~ fs/btrfs/inode.c:9587:8: note: Returning from 'btrfs_init_inode_security' ret = btrfs_init_inode_security(trans, inode, dir, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:9589:6: note: Assuming 'ret' is 0 if (ret) ^~~ fs/btrfs/inode.c:9589:2: note: Taking false branch if (ret) ^ fs/btrfs/inode.c:9592:8: note: 6th function call argument is an uninitialized value ret = btrfs_add_nondir(trans, BTRFS_I(dir), dentry, ^ fs/btrfs/inode.c:9658:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = 0; ^ ~ fs/btrfs/inode.c:9658:2: note: Value stored to 'ret' is never read ret = 0; ^ ~ fs/btrfs/inode.c:9829:3: warning: Value stored to 'log_pinned' is never read [clang-analyzer-deadcode.DeadStores] log_pinned = false; ^ ~~~~~ fs/btrfs/inode.c:9829:3: note: Value stored to 'log_pinned' is never read log_pinned = false; ^ ~~~~~ >> fs/btrfs/inode.c:10739: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:10863:6: note: Assuming field 'ki_pos' is < field 'i_size' if (iocb->ki_pos >= inode->i_size) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:10863:2: note: Taking false branch if (iocb->ki_pos >= inode->i_size) { ^ fs/btrfs/inode.c:10874:2: note: Loop condition is true. Entering loop body for (;;) { ^ fs/btrfs/inode.c:10879:7: note: Assuming 'ret' is 0 if (ret) ^~~ fs/btrfs/inode.c:10879:3: note: Taking false branch if (ret) ^ fs/btrfs/inode.c:10884:7: note: Assuming 'ordered' is null if (!ordered) ^~~~~~~~ fs/btrfs/inode.c:10884:3: note: Taking true branch if (!ordered) ^ fs/btrfs/inode.c:10885:4: note: Execution continues on line 10891 break; ^ fs/btrfs/inode.c:10893:2: note: Taking false branch if (IS_ERR(em)) { ^ fs/btrfs/inode.c:10898:6: note: Assuming the condition is false if (em->block_start == EXTENT_MAP_INLINE) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:10898:2: note: Taking false branch if (em->block_start == EXTENT_MAP_INLINE) { ^ fs/btrfs/inode.c:10917:18: note: '__UNIQUE_ID___x899' is >= '__UNIQUE_ID___y900' 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:10917: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:10919:6: note: Assuming the condition is false if (em->block_start == EXTENT_MAP_HOLE || ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:10919:6: note: Left side of '||' is false fs/btrfs/inode.c:10920:6: note: Assuming the condition is false test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:10919:2: note: Taking false branch if (em->block_start == EXTENT_MAP_HOLE || ^ fs/btrfs/inode.c:10924:13: note: Assuming the condition is true } else if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags)) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:10924:9: note: Taking true branch } else if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags)) { ^ fs/btrfs/inode.c:10930:7: note: Assuming 'count' is >= field 'block_len' if (em->block_len > count) { ^~~~~~~~~~~~~~~~~~~~~ fs/btrfs/inode.c:10930:3: note: Taking false branch if (em->block_len > count) { ^ fs/btrfs/inode.c:10939:7: note: 'ret' is >= 0 if (ret < 0) ^~~ fs/btrfs/inode.c:10939:3: note: Taking false branch vim +10739 fs/btrfs/inode.c 6716dfd581687f Omar Sandoval 2019-10-09 10701 6716dfd581687f Omar Sandoval 2019-10-09 10702 static int btrfs_encoded_read_regular_fill_pages(struct inode *inode, u64 offset, 6716dfd581687f Omar Sandoval 2019-10-09 10703 u64 disk_io_size, struct page **pages) 6716dfd581687f Omar Sandoval 2019-10-09 10704 { 6716dfd581687f Omar Sandoval 2019-10-09 10705 struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 6716dfd581687f Omar Sandoval 2019-10-09 10706 struct btrfs_encoded_read_private priv = { 6716dfd581687f Omar Sandoval 2019-10-09 10707 .inode = inode, 6716dfd581687f Omar Sandoval 2019-10-09 10708 .pending = ATOMIC_INIT(1), 6716dfd581687f Omar Sandoval 2019-10-09 10709 .skip_csum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM, 6716dfd581687f Omar Sandoval 2019-10-09 10710 }; 6716dfd581687f Omar Sandoval 2019-10-09 10711 unsigned long i = 0; 6716dfd581687f Omar Sandoval 2019-10-09 10712 u64 cur = 0; 6716dfd581687f Omar Sandoval 2019-10-09 10713 int ret; 6716dfd581687f Omar Sandoval 2019-10-09 10714 6716dfd581687f Omar Sandoval 2019-10-09 10715 init_waitqueue_head(&priv.wait); 6716dfd581687f Omar Sandoval 2019-10-09 10716 /* 6716dfd581687f Omar Sandoval 2019-10-09 10717 * Submit bios for the extent, splitting due to bio or stripe limits as 6716dfd581687f Omar Sandoval 2019-10-09 10718 * necessary. 6716dfd581687f Omar Sandoval 2019-10-09 10719 */ 6716dfd581687f Omar Sandoval 2019-10-09 10720 while (cur < disk_io_size) { 6716dfd581687f Omar Sandoval 2019-10-09 10721 struct extent_map *em; 6716dfd581687f Omar Sandoval 2019-10-09 10722 struct btrfs_io_geometry geom; 6716dfd581687f Omar Sandoval 2019-10-09 10723 struct bio *bio = NULL; 6716dfd581687f Omar Sandoval 2019-10-09 10724 u64 remaining; 6716dfd581687f Omar Sandoval 2019-10-09 10725 6716dfd581687f Omar Sandoval 2019-10-09 10726 em = btrfs_get_chunk_map(fs_info, offset + cur, 6716dfd581687f Omar Sandoval 2019-10-09 10727 disk_io_size - cur); 6716dfd581687f Omar Sandoval 2019-10-09 10728 if (IS_ERR(em)) { 6716dfd581687f Omar Sandoval 2019-10-09 10729 ret = PTR_ERR(em); 6716dfd581687f Omar Sandoval 2019-10-09 10730 } else { 6716dfd581687f Omar Sandoval 2019-10-09 10731 ret = btrfs_get_io_geometry(fs_info, em, BTRFS_MAP_READ, 6716dfd581687f Omar Sandoval 2019-10-09 10732 offset + cur, &geom); 6716dfd581687f Omar Sandoval 2019-10-09 10733 free_extent_map(em); 6716dfd581687f Omar Sandoval 2019-10-09 10734 } 6716dfd581687f Omar Sandoval 2019-10-09 10735 if (ret) { 6716dfd581687f Omar Sandoval 2019-10-09 10736 WRITE_ONCE(priv.status, errno_to_blk_status(ret)); 6716dfd581687f Omar Sandoval 2019-10-09 10737 break; 6716dfd581687f Omar Sandoval 2019-10-09 10738 } 6716dfd581687f Omar Sandoval 2019-10-09 @10739 remaining = min(geom.len, disk_io_size - cur); 6716dfd581687f Omar Sandoval 2019-10-09 10740 while (bio || remaining) { 6716dfd581687f Omar Sandoval 2019-10-09 10741 size_t bytes = min_t(u64, remaining, PAGE_SIZE); 6716dfd581687f Omar Sandoval 2019-10-09 10742 6716dfd581687f Omar Sandoval 2019-10-09 10743 if (!bio) { 6716dfd581687f Omar Sandoval 2019-10-09 10744 bio = btrfs_bio_alloc(offset + cur); 6716dfd581687f Omar Sandoval 2019-10-09 10745 bio->bi_end_io = btrfs_encoded_read_endio; 6716dfd581687f Omar Sandoval 2019-10-09 10746 bio->bi_private = &priv; 6716dfd581687f Omar Sandoval 2019-10-09 10747 bio->bi_opf = REQ_OP_READ; 6716dfd581687f Omar Sandoval 2019-10-09 10748 } 6716dfd581687f Omar Sandoval 2019-10-09 10749 6716dfd581687f Omar Sandoval 2019-10-09 10750 if (!bytes || 6716dfd581687f Omar Sandoval 2019-10-09 10751 bio_add_page(bio, pages[i], bytes, 0) < bytes) { 6716dfd581687f Omar Sandoval 2019-10-09 10752 blk_status_t status; 6716dfd581687f Omar Sandoval 2019-10-09 10753 6716dfd581687f Omar Sandoval 2019-10-09 10754 status = submit_encoded_read_bio(inode, bio, 0, 6716dfd581687f Omar Sandoval 2019-10-09 10755 0); 6716dfd581687f Omar Sandoval 2019-10-09 10756 if (status) { 6716dfd581687f Omar Sandoval 2019-10-09 10757 WRITE_ONCE(priv.status, status); 6716dfd581687f Omar Sandoval 2019-10-09 10758 bio_put(bio); 6716dfd581687f Omar Sandoval 2019-10-09 10759 goto out; 6716dfd581687f Omar Sandoval 2019-10-09 10760 } 6716dfd581687f Omar Sandoval 2019-10-09 10761 bio = NULL; 6716dfd581687f Omar Sandoval 2019-10-09 10762 continue; 6716dfd581687f Omar Sandoval 2019-10-09 10763 } 6716dfd581687f Omar Sandoval 2019-10-09 10764 6716dfd581687f Omar Sandoval 2019-10-09 10765 i++; 6716dfd581687f Omar Sandoval 2019-10-09 10766 cur += bytes; 6716dfd581687f Omar Sandoval 2019-10-09 10767 remaining -= bytes; 6716dfd581687f Omar Sandoval 2019-10-09 10768 } 6716dfd581687f Omar Sandoval 2019-10-09 10769 } 6716dfd581687f Omar Sandoval 2019-10-09 10770 6716dfd581687f Omar Sandoval 2019-10-09 10771 out: 6716dfd581687f Omar Sandoval 2019-10-09 10772 if (atomic_dec_return(&priv.pending)) 6716dfd581687f Omar Sandoval 2019-10-09 10773 io_wait_event(priv.wait, !atomic_read(&priv.pending)); 6716dfd581687f Omar Sandoval 2019-10-09 10774 /* See btrfs_encoded_read_endio() for ordering. */ 6716dfd581687f Omar Sandoval 2019-10-09 10775 return blk_status_to_errno(READ_ONCE(priv.status)); 6716dfd581687f Omar Sandoval 2019-10-09 10776 } 6716dfd581687f Omar Sandoval 2019-10-09 10777 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
