All of lore.kernel.org
 help / color / mirror / Atom feed
* [jlayton:ceph-fscrypt-sparse 72/74] fs/ceph/file.c:1032:9: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign]
@ 2022-03-15 17:41 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-03-15 17:41 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 26382 bytes --]

CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: Jeff Layton <jlayton@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git ceph-fscrypt-sparse
head:   0d355bda666e44314f11974167e8d9bb010a539e
commit: cbe05f4053d9f2f72668b9385e0e14c11c9adf32 [72/74] ceph: use r_pp for sparse reads
:::::: branch date: 21 hours ago
:::::: commit date: 22 hours ago
config: x86_64-randconfig-c007 (https://download.01.org/0day-ci/archive/20220316/202203160140.iGHTGRjA-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project a6b2f50fb47da3baeee10b1906da6e30ac5d26ec)
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://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git/commit/?id=cbe05f4053d9f2f72668b9385e0e14c11c9adf32
        git remote add jlayton https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git
        git fetch --no-tags jlayton ceph-fscrypt-sparse
        git checkout cbe05f4053d9f2f72668b9385e0e14c11c9adf32
        # 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 <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
                            ^
   kernel/time/ntp.c:315:2: note: The value -500000000 is assigned to 'offset'
           offset = clamp(offset, -MAXPHASE, MAXPHASE);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/time/ntp.c:322:6: note: Assuming the condition is true
           if (unlikely(time_status & STA_FREQHOLD))
               ^
   include/linux/compiler.h:78:40: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                             ^~~~
   kernel/time/ntp.c:322:2: note: Taking false branch
           if (unlikely(time_status & STA_FREQHOLD))
           ^
   kernel/time/ntp.c:327:2: note: The value -500000000 is assigned to 'offset64'
           offset64    = offset;
           ^~~~~~~~~~~~~~~~~~~~
   kernel/time/ntp.c:335:15: note: Assuming the condition is false
           if (unlikely(secs > 1 << (SHIFT_PLL + 1 + time_constant)))
                        ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   kernel/time/ntp.c:335:2: note: Taking false branch
           if (unlikely(secs > 1 << (SHIFT_PLL + 1 + time_constant)))
           ^
   kernel/time/ntp.c:341:16: note: Assuming '__UNIQUE_ID___x366' is >= '__UNIQUE_ID___y367'
           freq_adj    = min(freq_adj + time_freq, MAXFREQ_SCALED);
                         ^
   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: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))
                            ^~~~~~~~~~
   kernel/time/ntp.c:341:16: note: '?' condition is false
           freq_adj    = min(freq_adj + time_freq, MAXFREQ_SCALED);
                         ^
   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: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))
                            ^
   kernel/time/ntp.c:343:16: note: '__UNIQUE_ID___x368' is > '__UNIQUE_ID___y369'
           time_freq   = max(freq_adj, -MAXFREQ_SCALED);
                         ^
   include/linux/minmax.h:52:19: note: expanded from macro 'max'
   #define max(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: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))
                            ^~~
   kernel/time/ntp.c:343:16: note: '?' condition is true
           time_freq   = max(freq_adj, -MAXFREQ_SCALED);
                         ^
   include/linux/minmax.h:52:19: note: expanded from macro 'max'
   #define max(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: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))
                            ^
   kernel/time/ntp.c:345:33: note: The result of the left shift is undefined because the left operand is negative
           time_offset = div_s64(offset64 << NTP_SCALE_SHIFT, NTP_INTERVAL_FREQ);
                                 ~~~~~~~~ ^
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   5 warnings generated.
   Suppressed 5 warnings (5 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.
   fs/ceph/file.c:314:7: warning: Value stored to 'issued' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
                   int issued = __ceph_caps_issued(ci, NULL);
                       ^~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ceph/file.c:314:7: note: Value stored to 'issued' during its initialization is never read
                   int issued = __ceph_caps_issued(ci, NULL);
                       ^~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> fs/ceph/file.c:1032:9: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign]
                           fret -= (off - read_off);
                                ^
   fs/ceph/file.c:1886:2: note: Taking false branch
           dout("aio_read %p %llx.%llx %llu~%u trying to get caps on %p\n",
           ^
   include/linux/ceph/ceph_debug.h:35:25: note: expanded from macro 'dout'
   # define dout(fmt, ...) pr_debug(" " fmt, ##__VA_ARGS__)
                           ^
   include/linux/printk.h:576:2: note: expanded from macro 'pr_debug'
           no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
           ^
   include/linux/printk.h:131:2: note: expanded from macro 'no_printk'
           if (0)                                          \
           ^
   fs/ceph/file.c:1889:2: note: Taking false branch
           if (ceph_inode_is_shutdown(inode))
           ^
   fs/ceph/file.c:1892:6: note: Assuming 'direct_lock' is false
           if (direct_lock)
               ^~~~~~~~~~~
   fs/ceph/file.c:1892:2: note: Taking false branch
           if (direct_lock)
           ^
   fs/ceph/file.c:1897:6: note: Assuming the condition is false
           if (!(fi->flags & CEPH_F_SYNC) && !direct_lock)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ceph/file.c:1897:33: note: Left side of '&&' is false
           if (!(fi->flags & CEPH_F_SYNC) && !direct_lock)
                                          ^
   fs/ceph/file.c:1899:6: note: Assuming the condition is false
           if (fi->fmode & CEPH_FILE_MODE_LAZY)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ceph/file.c:1899:2: note: Taking false branch
           if (fi->fmode & CEPH_FILE_MODE_LAZY)
           ^
   fs/ceph/file.c:1903:6: note: Assuming 'ret' is >= 0
           if (ret < 0) {
               ^~~~~~~
   fs/ceph/file.c:1903:2: note: Taking false branch
           if (ret < 0) {
           ^
   fs/ceph/file.c:1911:6: note: Assuming the condition is true
           if ((got & (CEPH_CAP_FILE_CACHE|CEPH_CAP_FILE_LAZYIO)) == 0 ||
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ceph/file.c:1911:62: note: Left side of '||' is true
           if ((got & (CEPH_CAP_FILE_CACHE|CEPH_CAP_FILE_LAZYIO)) == 0 ||
                                                                       ^
   fs/ceph/file.c:1915:3: note: Taking false branch
                   dout("aio_sync_read %p %llx.%llx %llu~%u got cap refs on %s\n",
                   ^
   include/linux/ceph/ceph_debug.h:35:25: note: expanded from macro 'dout'
   # define dout(fmt, ...) pr_debug(" " fmt, ##__VA_ARGS__)
                           ^
   include/linux/printk.h:576:2: note: expanded from macro 'pr_debug'
           no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
           ^
   include/linux/printk.h:131:2: note: expanded from macro 'no_printk'
           if (0)                                          \
           ^
   fs/ceph/file.c:1919:7: note: Assuming the condition is true
                   if (ci->i_inline_version == CEPH_INLINE_NONE) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ceph/file.c:1919:3: note: Taking true branch
                   if (ci->i_inline_version == CEPH_INLINE_NONE) {
                   ^
   fs/ceph/file.c:1920:9: note: 'retry_op' is 0
                           if (!retry_op &&
                                ^~~~~~~~
   fs/ceph/file.c:1920:8: note: Left side of '&&' is true
                           if (!retry_op &&
                               ^
   fs/ceph/file.c:1921:39: note: Left side of '&&' is false
                               (iocb->ki_flags & IOCB_DIRECT) &&
                                                              ^
   fs/ceph/file.c:1928:11: note: Calling 'ceph_sync_read'
                                   ret = ceph_sync_read(iocb, to, &retry_op);
                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ceph/file.c:1108:2: note: Taking false branch
           dout("sync_read on file %p %llu~%u %s\n", file, iocb->ki_pos,
           ^
   include/linux/ceph/ceph_debug.h:35:25: note: expanded from macro 'dout'
   # define dout(fmt, ...) pr_debug(" " fmt, ##__VA_ARGS__)
                           ^
   include/linux/printk.h:576:2: note: expanded from macro 'pr_debug'
           no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
           ^
   include/linux/printk.h:131:2: note: expanded from macro 'no_printk'
           if (0)                                          \
           ^
   fs/ceph/file.c:1112:9: note: Calling '__ceph_sync_read'
           return __ceph_sync_read(inode, &iocb->ki_pos, to, retry_op, NULL);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ceph/file.c:945:2: note: Taking false branch
           dout("sync_read on inode %p %llu~%u\n", inode, *ki_pos, (unsigned)len);
           ^
   include/linux/ceph/ceph_debug.h:35:25: note: expanded from macro 'dout'
   # define dout(fmt, ...) pr_debug(" " fmt, ##__VA_ARGS__)
                           ^
   include/linux/printk.h:576:2: note: expanded from macro 'pr_debug'
           no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)

vim +1032 fs/ceph/file.c

83701246aee8f83 Yan, Zheng   2014-11-14   921  
124e68e74099090 Sage Weil    2009-10-06   922  /*
124e68e74099090 Sage Weil    2009-10-06   923   * Completely synchronous read and write methods.  Direct from __user
124e68e74099090 Sage Weil    2009-10-06   924   * buffer to osd, or directly to user pages (if O_DIRECT).
124e68e74099090 Sage Weil    2009-10-06   925   *
fce7a9744bdf3ba Yan, Zheng   2018-09-29   926   * If the read spans object boundary, just do multiple reads.  (That's not
fce7a9744bdf3ba Yan, Zheng   2018-09-29   927   * atomic, but good enough for now.)
fce7a9744bdf3ba Yan, Zheng   2018-09-29   928   *
fce7a9744bdf3ba Yan, Zheng   2018-09-29   929   * If we get a short result from the OSD, check against i_size; we need to
fce7a9744bdf3ba Yan, Zheng   2018-09-29   930   * only return a short read to the caller if we hit EOF.
124e68e74099090 Sage Weil    2009-10-06   931   */
1c3b32d36296389 Xiubo Li     2021-11-05   932  ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
cd6ba7d365023a0 Xiubo Li     2021-12-08   933  			 struct iov_iter *to, int *retry_op,
cd6ba7d365023a0 Xiubo Li     2021-12-08   934  			 u64 *last_objver)
124e68e74099090 Sage Weil    2009-10-06   935  {
fce7a9744bdf3ba Yan, Zheng   2018-09-29   936  	struct ceph_inode_info *ci = ceph_inode(inode);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   937  	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   938  	struct ceph_osd_client *osdc = &fsc->client->osdc;
7ce469a53e7106a Yan, Zheng   2016-11-08   939  	ssize_t ret;
1c3b32d36296389 Xiubo Li     2021-11-05   940  	u64 off = *ki_pos;
fce7a9744bdf3ba Yan, Zheng   2018-09-29   941  	u64 len = iov_iter_count(to);
e485d028bb1075d Jeff Layton  2021-11-23   942  	u64 i_size = i_size_read(inode);
cd6ba7d365023a0 Xiubo Li     2021-12-08   943  	u64 objver = 0;
124e68e74099090 Sage Weil    2009-10-06   944  
1c3b32d36296389 Xiubo Li     2021-11-05   945  	dout("sync_read on inode %p %llu~%u\n", inode, *ki_pos, (unsigned)len);
d0d0db2268cc343 Yan, Zheng   2014-07-21   946  
d0d0db2268cc343 Yan, Zheng   2014-07-21   947  	if (!len)
d0d0db2268cc343 Yan, Zheng   2014-07-21   948  		return 0;
124e68e74099090 Sage Weil    2009-10-06   949  	/*
124e68e74099090 Sage Weil    2009-10-06   950  	 * flush any page cache pages in this range.  this
e98b6fed84d0f01 Sage Weil    2010-11-09   951  	 * will make concurrent normal and sync io slow,
124e68e74099090 Sage Weil    2009-10-06   952  	 * but it will at least behave sensibly when they are
124e68e74099090 Sage Weil    2009-10-06   953  	 * in sequence.
124e68e74099090 Sage Weil    2009-10-06   954  	 */
e450f4d1a5d633d zhengbin     2019-02-01   955  	ret = filemap_write_and_wait_range(inode->i_mapping,
e450f4d1a5d633d zhengbin     2019-02-01   956  					   off, off + len - 1);
29065a513aa4c7e Yehuda Sadeh 2010-02-09   957  	if (ret < 0)
8eb4efb091c8d8f majianpeng   2013-09-26   958  		return ret;
29065a513aa4c7e Yehuda Sadeh 2010-02-09   959  
fce7a9744bdf3ba Yan, Zheng   2018-09-29   960  	ret = 0;
fce7a9744bdf3ba Yan, Zheng   2018-09-29   961  	while ((len = iov_iter_count(to)) > 0) {
fce7a9744bdf3ba Yan, Zheng   2018-09-29   962  		struct ceph_osd_request *req;
fce7a9744bdf3ba Yan, Zheng   2018-09-29   963  		struct page **pages;
fce7a9744bdf3ba Yan, Zheng   2018-09-29   964  		int num_pages;
7ce469a53e7106a Yan, Zheng   2016-11-08   965  		size_t page_off;
fce7a9744bdf3ba Yan, Zheng   2018-09-29   966  		bool more;
c5f575ed08c38d0 Jeff Layton  2020-08-21   967  		int idx;
c5f575ed08c38d0 Jeff Layton  2020-08-21   968  		size_t left;
7b8289467f2eaaf Jeff Layton  2021-01-28   969  		u64 read_off = off;
7b8289467f2eaaf Jeff Layton  2021-01-28   970  		u64 read_len = len;
7b8289467f2eaaf Jeff Layton  2021-01-28   971  
7b8289467f2eaaf Jeff Layton  2021-01-28   972  		/* determine new offset/length if encrypted */
7b8289467f2eaaf Jeff Layton  2021-01-28   973  		ceph_fscrypt_adjust_off_and_len(inode, &read_off, &read_len);
7b8289467f2eaaf Jeff Layton  2021-01-28   974  
7b8289467f2eaaf Jeff Layton  2021-01-28   975  		dout("sync_read orig %llu~%llu reading %llu~%llu",
7b8289467f2eaaf Jeff Layton  2021-01-28   976  		     off, len, read_off, read_len);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   977  
fce7a9744bdf3ba Yan, Zheng   2018-09-29   978  		req = ceph_osdc_new_request(osdc, &ci->i_layout,
7b8289467f2eaaf Jeff Layton  2021-01-28   979  					ci->i_vino, read_off, &read_len, 0, 1,
5020f1a5464bf0c Jeff Layton  2022-02-26   980  					CEPH_OSD_OP_SPARSE_READ, CEPH_OSD_FLAG_READ,
fce7a9744bdf3ba Yan, Zheng   2018-09-29   981  					NULL, ci->i_truncate_seq,
fce7a9744bdf3ba Yan, Zheng   2018-09-29   982  					ci->i_truncate_size, false);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   983  		if (IS_ERR(req)) {
fce7a9744bdf3ba Yan, Zheng   2018-09-29   984  			ret = PTR_ERR(req);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   985  			break;
fce7a9744bdf3ba Yan, Zheng   2018-09-29   986  		}
fce7a9744bdf3ba Yan, Zheng   2018-09-29   987  
7b8289467f2eaaf Jeff Layton  2021-01-28   988  		/* adjust len downward if the request truncated the len */
7b8289467f2eaaf Jeff Layton  2021-01-28   989  		if (off + len > read_off + read_len)
7b8289467f2eaaf Jeff Layton  2021-01-28   990  			len = read_off + read_len - off;
fce7a9744bdf3ba Yan, Zheng   2018-09-29   991  		more = len < iov_iter_count(to);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   992  
7b8289467f2eaaf Jeff Layton  2021-01-28   993  		num_pages = calc_pages_for(read_off, read_len);
7b8289467f2eaaf Jeff Layton  2021-01-28   994  		page_off = offset_in_page(off);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   995  		pages = ceph_alloc_page_vector(num_pages, GFP_KERNEL);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   996  		if (IS_ERR(pages)) {
fce7a9744bdf3ba Yan, Zheng   2018-09-29   997  			ceph_osdc_put_request(req);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   998  			ret = PTR_ERR(pages);
fce7a9744bdf3ba Yan, Zheng   2018-09-29   999  			break;
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1000  		}
7ce469a53e7106a Yan, Zheng   2016-11-08  1001  
7b8289467f2eaaf Jeff Layton  2021-01-28  1002  		osd_req_op_extent_osd_data_pages(req, 0, pages, read_len,
7b8289467f2eaaf Jeff Layton  2021-01-28  1003  						 offset_in_page(read_off),
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1004  						 false, false);
cbe05f4053d9f2f Jeff Layton  2022-03-11  1005  		ihold(inode);
cbe05f4053d9f2f Jeff Layton  2022-03-11  1006  		req->r_inode = inode;
cbe05f4053d9f2f Jeff Layton  2022-03-11  1007  		req->r_pp = ceph_sparse_read_pp;
cbe05f4053d9f2f Jeff Layton  2022-03-11  1008  
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1009  		ret = ceph_osdc_start_request(osdc, req, false);
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1010  		if (!ret)
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1011  			ret = ceph_osdc_wait_request(osdc, req);
97e27aaa9a2cbd6 Xiubo Li     2020-03-19  1012  
8ae99ae2b40766a Xiubo Li     2021-03-22  1013  		ceph_update_read_metrics(&fsc->mdsc->metric,
97e27aaa9a2cbd6 Xiubo Li     2020-03-19  1014  					 req->r_start_latency,
97e27aaa9a2cbd6 Xiubo Li     2020-03-19  1015  					 req->r_end_latency,
7b8289467f2eaaf Jeff Layton  2021-01-28  1016  					 read_len, ret);
97e27aaa9a2cbd6 Xiubo Li     2020-03-19  1017  
cd6ba7d365023a0 Xiubo Li     2021-12-08  1018  		if (ret > 0)
cd6ba7d365023a0 Xiubo Li     2021-12-08  1019  			objver = req->r_version;
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1020  		ceph_osdc_put_request(req);
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1021  		i_size = i_size_read(inode);
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1022  		dout("sync_read %llu~%llu got %zd i_size %llu%s\n",
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1023  		     off, len, ret, i_size, (more ? " MORE" : ""));
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1024  
7b8289467f2eaaf Jeff Layton  2021-01-28  1025  		if (ret == -ENOENT) {
7b8289467f2eaaf Jeff Layton  2021-01-28  1026  			/* No object? Then this is a hole */
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1027  			ret = 0;
7b8289467f2eaaf Jeff Layton  2021-01-28  1028  		} else if (ret > 0 && IS_ENCRYPTED(inode)) {
7b8289467f2eaaf Jeff Layton  2021-01-28  1029  			int fret;
7b8289467f2eaaf Jeff Layton  2021-01-28  1030  
7b8289467f2eaaf Jeff Layton  2021-01-28  1031  			/* account for any partial block at the beginning */
7b8289467f2eaaf Jeff Layton  2021-01-28 @1032  			fret -= (off - read_off);
7b8289467f2eaaf Jeff Layton  2021-01-28  1033  
7b8289467f2eaaf Jeff Layton  2021-01-28  1034  			/*
7b8289467f2eaaf Jeff Layton  2021-01-28  1035  			 * Short read after big offset adjustment?
7b8289467f2eaaf Jeff Layton  2021-01-28  1036  			 * Nothing is usable, just call it a zero
7b8289467f2eaaf Jeff Layton  2021-01-28  1037  			 * len read.
7b8289467f2eaaf Jeff Layton  2021-01-28  1038  			 */
7b8289467f2eaaf Jeff Layton  2021-01-28  1039  			fret = max(fret, 0);
7b8289467f2eaaf Jeff Layton  2021-01-28  1040  
7b8289467f2eaaf Jeff Layton  2021-01-28  1041  			/* account for partial block at the end */
7b8289467f2eaaf Jeff Layton  2021-01-28  1042  			ret = min_t(ssize_t, fret, len);
7b8289467f2eaaf Jeff Layton  2021-01-28  1043  		}
7b8289467f2eaaf Jeff Layton  2021-01-28  1044  
7b8289467f2eaaf Jeff Layton  2021-01-28  1045  		/* Short read but not EOF? Zero out the remainder. */
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1046  		if (ret >= 0 && ret < len && (off + ret < i_size)) {
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1047  			int zlen = min(len - ret, i_size - off - ret);
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1048  			int zoff = page_off + ret;
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1049  			dout("sync_read zero gap %llu~%llu\n",
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1050  			     off + ret, off + ret + zlen);
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1051  			ceph_zero_page_vector_range(zoff, zlen, pages);
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1052  			ret += zlen;
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1053  		}
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1054  
c5f575ed08c38d0 Jeff Layton  2020-08-21  1055  		idx = 0;
c5f575ed08c38d0 Jeff Layton  2020-08-21  1056  		left = ret > 0 ? ret : 0;
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1057  		while (left > 0) {
7b8289467f2eaaf Jeff Layton  2021-01-28  1058  			size_t plen, copied;
7b8289467f2eaaf Jeff Layton  2021-01-28  1059  			plen = min_t(size_t, left, PAGE_SIZE - page_off);
c5f575ed08c38d0 Jeff Layton  2020-08-21  1060  			SetPageUptodate(pages[idx]);
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1061  			copied = copy_page_to_iter(pages[idx++],
7b8289467f2eaaf Jeff Layton  2021-01-28  1062  						   page_off, plen, to);
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1063  			off += copied;
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1064  			left -= copied;
7b8289467f2eaaf Jeff Layton  2021-01-28  1065  			page_off = 0;
7b8289467f2eaaf Jeff Layton  2021-01-28  1066  			if (copied < plen) {
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1067  				ret = -EFAULT;
8eb4efb091c8d8f majianpeng   2013-09-26  1068  				break;
8eb4efb091c8d8f majianpeng   2013-09-26  1069  			}
8eb4efb091c8d8f majianpeng   2013-09-26  1070  		}
124e68e74099090 Sage Weil    2009-10-06  1071  		ceph_release_page_vector(pages, num_pages);
8eb4efb091c8d8f majianpeng   2013-09-26  1072  
131d7eb4faa1fc0 Yan, Zheng   2019-07-25  1073  		if (ret < 0) {
0b98acd61883093 Ilya Dryomov 2020-09-14  1074  			if (ret == -EBLOCKLISTED)
0b98acd61883093 Ilya Dryomov 2020-09-14  1075  				fsc->blocklisted = true;
131d7eb4faa1fc0 Yan, Zheng   2019-07-25  1076  			break;
131d7eb4faa1fc0 Yan, Zheng   2019-07-25  1077  		}
131d7eb4faa1fc0 Yan, Zheng   2019-07-25  1078  
131d7eb4faa1fc0 Yan, Zheng   2019-07-25  1079  		if (off >= i_size || !more)
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1080  			break;
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1081  	}
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1082  
7b8289467f2eaaf Jeff Layton  2021-01-28  1083  	if (ret > 0) {
1c3b32d36296389 Xiubo Li     2021-11-05  1084  		if (off > *ki_pos) {
c3d8e0b5de487a7 Xiubo Li     2021-10-30  1085  			if (off >= i_size) {
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1086  				*retry_op = CHECK_EOF;
1c3b32d36296389 Xiubo Li     2021-11-05  1087  				ret = i_size - *ki_pos;
1c3b32d36296389 Xiubo Li     2021-11-05  1088  				*ki_pos = i_size;
c3d8e0b5de487a7 Xiubo Li     2021-10-30  1089  			} else {
1c3b32d36296389 Xiubo Li     2021-11-05  1090  				ret = off - *ki_pos;
1c3b32d36296389 Xiubo Li     2021-11-05  1091  				*ki_pos = off;
8eb4efb091c8d8f majianpeng   2013-09-26  1092  			}
c3d8e0b5de487a7 Xiubo Li     2021-10-30  1093  		}
8eb4efb091c8d8f majianpeng   2013-09-26  1094  
7b8289467f2eaaf Jeff Layton  2021-01-28  1095  		if (last_objver)
cd6ba7d365023a0 Xiubo Li     2021-12-08  1096  			*last_objver = objver;
7b8289467f2eaaf Jeff Layton  2021-01-28  1097  	}
fce7a9744bdf3ba Yan, Zheng   2018-09-29  1098  	dout("sync_read result %zd retry_op %d\n", ret, *retry_op);
124e68e74099090 Sage Weil    2009-10-06  1099  	return ret;
124e68e74099090 Sage Weil    2009-10-06  1100  }
124e68e74099090 Sage Weil    2009-10-06  1101  

:::::: The code at line 1032 was first introduced by commit
:::::: 7b8289467f2eaafe662a32ddc148c8302b4c1ef6 ceph: plumb in decryption during sync reads

:::::: TO: Jeff Layton <jlayton@kernel.org>
:::::: CC: Jeff Layton <jlayton@kernel.org>

---
0-DAY CI Kernel Test Service
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-03-15 17:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-15 17:41 [jlayton:ceph-fscrypt-sparse 72/74] fs/ceph/file.c:1032:9: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign] kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.