All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [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]
Date: Wed, 16 Mar 2022 01:41:12 +0800	[thread overview]
Message-ID: <202203160140.iGHTGRjA-lkp@intel.com> (raw)

[-- 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

                 reply	other threads:[~2022-03-15 17:41 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202203160140.iGHTGRjA-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.