From: kernel test robot <lkp@intel.com>
To: David Howells <dhowells@redhat.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org
Subject: Re: [PATCH v2 2/3] cifs: Reverse the way iov_iters are used in reading
Date: Fri, 7 Jan 2022 22:35:08 +0800 [thread overview]
Message-ID: <202201072209.NObYCbNl-lkp@intel.com> (raw)
In-Reply-To: <164150473942.2994594.17245822903445858488.stgit@warthog.procyon.org.uk>
Hi David,
I love your patch! Perhaps something to improve:
[auto build test WARNING on next-20220106]
[cannot apply to cifs/for-next linus/master v5.16-rc8 v5.16-rc7 v5.16-rc6 v5.16-rc8]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/David-Howells/cifs-In-progress-conversion-to-use-iov_iters-instead-of-page-lists/20220107-053700
base: 3770333b3f8cb7c9110889853afaa49777c26ea7
config: i386-randconfig-r026-20220107 (https://download.01.org/0day-ci/archive/20220107/202201072209.NObYCbNl-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 32167bfe64a4c5dd4eb3f7a58e24f4cba76f5ac2)
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/0day-ci/linux/commit/f6d9da3b96ace245edc0dcdb78607b58edef4dcb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review David-Howells/cifs-In-progress-conversion-to-use-iov_iters-instead-of-page-lists/20220107-053700
git checkout f6d9da3b96ace245edc0dcdb78607b58edef4dcb
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/gpu/drm/amd/amdgpu/ drivers/gpu/drm/i810/ drivers/i2c/busses/ drivers/pci/endpoint/functions/ fs/cifs/ sound/pci/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> fs/cifs/smb2ops.c:4902:7: warning: variable 'length' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
if (rdata->result != 0) {
^~~~~~~~~~~~~~~~~~
fs/cifs/smb2ops.c:4931:9: note: uninitialized use occurs here
return length;
^~~~~~
fs/cifs/smb2ops.c:4902:3: note: remove the 'if' if its condition is always true
if (rdata->result != 0) {
^~~~~~~~~~~~~~~~~~~~~~~~
fs/cifs/smb2ops.c:4801:12: note: initialize the variable 'length' to silence this warning
int length;
^
= 0
1 warning generated.
vim +4902 fs/cifs/smb2ops.c
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4787
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4788 static int
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4789 handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4790 char *buf, unsigned int buf_len, struct page **pages,
de9ac0a6e9efdff Rohith Surabattula 2020-10-28 4791 unsigned int npages, unsigned int page_data_size,
de9ac0a6e9efdff Rohith Surabattula 2020-10-28 4792 bool is_offloaded)
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4793 {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4794 unsigned int data_offset;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4795 unsigned int data_len;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4796 unsigned int cur_off;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4797 unsigned int cur_page_idx;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4798 unsigned int pad_len;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4799 struct cifs_readdata *rdata = mid->callback_data;
0d35e382e4e96a4 Ronnie Sahlberg 2021-11-05 4800 struct smb2_hdr *shdr = (struct smb2_hdr *)buf;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4801 int length;
74dcf418fe34465 Long Li 2017-11-22 4802 bool use_rdma_mr = false;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4803
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4804 if (shdr->Command != SMB2_READ) {
3175eb9b577e82b Ronnie Sahlberg 2019-09-04 4805 cifs_server_dbg(VFS, "only big read responses are supported\n");
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4806 return -ENOTSUPP;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4807 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4808
511c54a2f69195b Pavel Shilovsky 2017-07-08 4809 if (server->ops->is_session_expired &&
511c54a2f69195b Pavel Shilovsky 2017-07-08 4810 server->ops->is_session_expired(buf)) {
de9ac0a6e9efdff Rohith Surabattula 2020-10-28 4811 if (!is_offloaded)
183eea2ee5ba968 Shyam Prasad N 2021-07-19 4812 cifs_reconnect(server, true);
511c54a2f69195b Pavel Shilovsky 2017-07-08 4813 return -1;
511c54a2f69195b Pavel Shilovsky 2017-07-08 4814 }
511c54a2f69195b Pavel Shilovsky 2017-07-08 4815
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4816 if (server->ops->is_status_pending &&
66265f134acfb20 Pavel Shilovsky 2019-01-23 4817 server->ops->is_status_pending(buf, server))
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4818 return -1;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4819
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4820 /* set up first two iov to get credits */
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4821 rdata->iov[0].iov_base = buf;
bb1bccb60c2ebd9 Pavel Shilovsky 2019-01-17 4822 rdata->iov[0].iov_len = 0;
bb1bccb60c2ebd9 Pavel Shilovsky 2019-01-17 4823 rdata->iov[1].iov_base = buf;
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4824 rdata->iov[1].iov_len =
bb1bccb60c2ebd9 Pavel Shilovsky 2019-01-17 4825 min_t(unsigned int, buf_len, server->vals->read_rsp_size);
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4826 cifs_dbg(FYI, "0: iov_base=%p iov_len=%zu\n",
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4827 rdata->iov[0].iov_base, rdata->iov[0].iov_len);
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4828 cifs_dbg(FYI, "1: iov_base=%p iov_len=%zu\n",
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4829 rdata->iov[1].iov_base, rdata->iov[1].iov_len);
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4830
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4831 rdata->result = server->ops->map_error(buf, true);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4832 if (rdata->result != 0) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4833 cifs_dbg(FYI, "%s: server returned error %d\n",
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4834 __func__, rdata->result);
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4835 /* normal error on read response */
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4836 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4837 mid->mid_state = MID_RESPONSE_RECEIVED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4838 else
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4839 dequeue_mid(mid, false);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4840 return 0;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4841 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4842
1fc6ad2f10ad6f5 Ronnie Sahlberg 2018-06-01 4843 data_offset = server->ops->read_data_offset(buf);
74dcf418fe34465 Long Li 2017-11-22 4844 #ifdef CONFIG_CIFS_SMB_DIRECT
74dcf418fe34465 Long Li 2017-11-22 4845 use_rdma_mr = rdata->mr;
74dcf418fe34465 Long Li 2017-11-22 4846 #endif
74dcf418fe34465 Long Li 2017-11-22 4847 data_len = server->ops->read_data_length(buf, use_rdma_mr);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4848
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4849 if (data_offset < server->vals->read_rsp_size) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4850 /*
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4851 * win2k8 sometimes sends an offset of 0 when the read
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4852 * is beyond the EOF. Treat it as if the data starts just after
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4853 * the header.
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4854 */
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4855 cifs_dbg(FYI, "%s: data offset (%u) inside read response header\n",
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4856 __func__, data_offset);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4857 data_offset = server->vals->read_rsp_size;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4858 } else if (data_offset > MAX_CIFS_SMALL_BUFFER_SIZE) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4859 /* data_offset is beyond the end of smallbuf */
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4860 cifs_dbg(FYI, "%s: data offset (%u) beyond end of smallbuf\n",
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4861 __func__, data_offset);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4862 rdata->result = -EIO;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4863 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4864 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4865 else
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4866 dequeue_mid(mid, rdata->result);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4867 return 0;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4868 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4869
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4870 pad_len = data_offset - server->vals->read_rsp_size;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4871
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4872 if (buf_len <= data_offset) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4873 /* read response payload is in pages */
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4874 cur_page_idx = pad_len / PAGE_SIZE;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4875 cur_off = pad_len % PAGE_SIZE;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4876
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4877 if (cur_page_idx != 0) {
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4878 /* data offset is beyond the 1st page of response */
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4879 cifs_dbg(FYI, "%s: data offset (%u) beyond 1st page of response\n",
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4880 __func__, data_offset);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4881 rdata->result = -EIO;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4882 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4883 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4884 else
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4885 dequeue_mid(mid, rdata->result);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4886 return 0;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4887 }
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4888
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4889 if (data_len > page_data_size - pad_len) {
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4890 /* data_len is corrupt -- discard frame */
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4891 rdata->result = -EIO;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4892 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4893 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4894 else
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4895 dequeue_mid(mid, rdata->result);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4896 return 0;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4897 }
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4898
f6d9da3b96ace24 David Howells 2022-01-06 4899 /* Copy the data to the output I/O iterator. */
f6d9da3b96ace24 David Howells 2022-01-06 4900 rdata->result = cifs_copy_pages_to_iter(pages, npages, page_data_size,
f6d9da3b96ace24 David Howells 2022-01-06 4901 cur_off, &rdata->iter);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 @4902 if (rdata->result != 0) {
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4903 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4904 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4905 else
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4906 dequeue_mid(mid, rdata->result);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4907 return 0;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4908 }
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4909
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4910 } else if (buf_len >= data_offset + data_len) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4911 /* read response payload is in buf */
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4912 WARN_ONCE(npages > 0, "read data can be either in buf or in pages");
f6d9da3b96ace24 David Howells 2022-01-06 4913 length = copy_to_iter(buf + data_offset, data_len, &rdata->iter);
f6d9da3b96ace24 David Howells 2022-01-06 4914 if (length < 0)
f6d9da3b96ace24 David Howells 2022-01-06 4915 return length;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4916 } else {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4917 /* read response payload cannot be in both buf and pages */
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4918 WARN_ONCE(1, "buf can not contain only a part of read data");
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4919 rdata->result = -EIO;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4920 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4921 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4922 else
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4923 dequeue_mid(mid, rdata->result);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4924 return 0;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4925 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4926
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4927 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4928 mid->mid_state = MID_RESPONSE_RECEIVED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4929 else
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4930 dequeue_mid(mid, false);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4931 return length;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4932 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4933
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH v2 2/3] cifs: Reverse the way iov_iters are used in reading
Date: Fri, 07 Jan 2022 22:35:08 +0800 [thread overview]
Message-ID: <202201072209.NObYCbNl-lkp@intel.com> (raw)
In-Reply-To: <164150473942.2994594.17245822903445858488.stgit@warthog.procyon.org.uk>
[-- Attachment #1: Type: text/plain, Size: 14861 bytes --]
Hi David,
I love your patch! Perhaps something to improve:
[auto build test WARNING on next-20220106]
[cannot apply to cifs/for-next linus/master v5.16-rc8 v5.16-rc7 v5.16-rc6 v5.16-rc8]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/David-Howells/cifs-In-progress-conversion-to-use-iov_iters-instead-of-page-lists/20220107-053700
base: 3770333b3f8cb7c9110889853afaa49777c26ea7
config: i386-randconfig-r026-20220107 (https://download.01.org/0day-ci/archive/20220107/202201072209.NObYCbNl-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 32167bfe64a4c5dd4eb3f7a58e24f4cba76f5ac2)
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/0day-ci/linux/commit/f6d9da3b96ace245edc0dcdb78607b58edef4dcb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review David-Howells/cifs-In-progress-conversion-to-use-iov_iters-instead-of-page-lists/20220107-053700
git checkout f6d9da3b96ace245edc0dcdb78607b58edef4dcb
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/gpu/drm/amd/amdgpu/ drivers/gpu/drm/i810/ drivers/i2c/busses/ drivers/pci/endpoint/functions/ fs/cifs/ sound/pci/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> fs/cifs/smb2ops.c:4902:7: warning: variable 'length' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
if (rdata->result != 0) {
^~~~~~~~~~~~~~~~~~
fs/cifs/smb2ops.c:4931:9: note: uninitialized use occurs here
return length;
^~~~~~
fs/cifs/smb2ops.c:4902:3: note: remove the 'if' if its condition is always true
if (rdata->result != 0) {
^~~~~~~~~~~~~~~~~~~~~~~~
fs/cifs/smb2ops.c:4801:12: note: initialize the variable 'length' to silence this warning
int length;
^
= 0
1 warning generated.
vim +4902 fs/cifs/smb2ops.c
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4787
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4788 static int
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4789 handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4790 char *buf, unsigned int buf_len, struct page **pages,
de9ac0a6e9efdff Rohith Surabattula 2020-10-28 4791 unsigned int npages, unsigned int page_data_size,
de9ac0a6e9efdff Rohith Surabattula 2020-10-28 4792 bool is_offloaded)
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4793 {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4794 unsigned int data_offset;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4795 unsigned int data_len;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4796 unsigned int cur_off;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4797 unsigned int cur_page_idx;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4798 unsigned int pad_len;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4799 struct cifs_readdata *rdata = mid->callback_data;
0d35e382e4e96a4 Ronnie Sahlberg 2021-11-05 4800 struct smb2_hdr *shdr = (struct smb2_hdr *)buf;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4801 int length;
74dcf418fe34465 Long Li 2017-11-22 4802 bool use_rdma_mr = false;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4803
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4804 if (shdr->Command != SMB2_READ) {
3175eb9b577e82b Ronnie Sahlberg 2019-09-04 4805 cifs_server_dbg(VFS, "only big read responses are supported\n");
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4806 return -ENOTSUPP;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4807 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4808
511c54a2f69195b Pavel Shilovsky 2017-07-08 4809 if (server->ops->is_session_expired &&
511c54a2f69195b Pavel Shilovsky 2017-07-08 4810 server->ops->is_session_expired(buf)) {
de9ac0a6e9efdff Rohith Surabattula 2020-10-28 4811 if (!is_offloaded)
183eea2ee5ba968 Shyam Prasad N 2021-07-19 4812 cifs_reconnect(server, true);
511c54a2f69195b Pavel Shilovsky 2017-07-08 4813 return -1;
511c54a2f69195b Pavel Shilovsky 2017-07-08 4814 }
511c54a2f69195b Pavel Shilovsky 2017-07-08 4815
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4816 if (server->ops->is_status_pending &&
66265f134acfb20 Pavel Shilovsky 2019-01-23 4817 server->ops->is_status_pending(buf, server))
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4818 return -1;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4819
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4820 /* set up first two iov to get credits */
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4821 rdata->iov[0].iov_base = buf;
bb1bccb60c2ebd9 Pavel Shilovsky 2019-01-17 4822 rdata->iov[0].iov_len = 0;
bb1bccb60c2ebd9 Pavel Shilovsky 2019-01-17 4823 rdata->iov[1].iov_base = buf;
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4824 rdata->iov[1].iov_len =
bb1bccb60c2ebd9 Pavel Shilovsky 2019-01-17 4825 min_t(unsigned int, buf_len, server->vals->read_rsp_size);
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4826 cifs_dbg(FYI, "0: iov_base=%p iov_len=%zu\n",
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4827 rdata->iov[0].iov_base, rdata->iov[0].iov_len);
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4828 cifs_dbg(FYI, "1: iov_base=%p iov_len=%zu\n",
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4829 rdata->iov[1].iov_base, rdata->iov[1].iov_len);
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4830
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4831 rdata->result = server->ops->map_error(buf, true);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4832 if (rdata->result != 0) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4833 cifs_dbg(FYI, "%s: server returned error %d\n",
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4834 __func__, rdata->result);
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4835 /* normal error on read response */
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4836 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4837 mid->mid_state = MID_RESPONSE_RECEIVED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4838 else
ec678eae746dd25 Pavel Shilovsky 2019-01-18 4839 dequeue_mid(mid, false);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4840 return 0;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4841 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4842
1fc6ad2f10ad6f5 Ronnie Sahlberg 2018-06-01 4843 data_offset = server->ops->read_data_offset(buf);
74dcf418fe34465 Long Li 2017-11-22 4844 #ifdef CONFIG_CIFS_SMB_DIRECT
74dcf418fe34465 Long Li 2017-11-22 4845 use_rdma_mr = rdata->mr;
74dcf418fe34465 Long Li 2017-11-22 4846 #endif
74dcf418fe34465 Long Li 2017-11-22 4847 data_len = server->ops->read_data_length(buf, use_rdma_mr);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4848
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4849 if (data_offset < server->vals->read_rsp_size) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4850 /*
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4851 * win2k8 sometimes sends an offset of 0 when the read
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4852 * is beyond the EOF. Treat it as if the data starts just after
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4853 * the header.
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4854 */
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4855 cifs_dbg(FYI, "%s: data offset (%u) inside read response header\n",
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4856 __func__, data_offset);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4857 data_offset = server->vals->read_rsp_size;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4858 } else if (data_offset > MAX_CIFS_SMALL_BUFFER_SIZE) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4859 /* data_offset is beyond the end of smallbuf */
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4860 cifs_dbg(FYI, "%s: data offset (%u) beyond end of smallbuf\n",
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4861 __func__, data_offset);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4862 rdata->result = -EIO;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4863 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4864 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4865 else
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4866 dequeue_mid(mid, rdata->result);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4867 return 0;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4868 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4869
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4870 pad_len = data_offset - server->vals->read_rsp_size;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4871
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4872 if (buf_len <= data_offset) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4873 /* read response payload is in pages */
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4874 cur_page_idx = pad_len / PAGE_SIZE;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4875 cur_off = pad_len % PAGE_SIZE;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4876
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4877 if (cur_page_idx != 0) {
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4878 /* data offset is beyond the 1st page of response */
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4879 cifs_dbg(FYI, "%s: data offset (%u) beyond 1st page of response\n",
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4880 __func__, data_offset);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4881 rdata->result = -EIO;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4882 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4883 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4884 else
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4885 dequeue_mid(mid, rdata->result);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4886 return 0;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4887 }
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4888
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4889 if (data_len > page_data_size - pad_len) {
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4890 /* data_len is corrupt -- discard frame */
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4891 rdata->result = -EIO;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4892 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4893 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4894 else
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4895 dequeue_mid(mid, rdata->result);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4896 return 0;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4897 }
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4898
f6d9da3b96ace24 David Howells 2022-01-06 4899 /* Copy the data to the output I/O iterator. */
f6d9da3b96ace24 David Howells 2022-01-06 4900 rdata->result = cifs_copy_pages_to_iter(pages, npages, page_data_size,
f6d9da3b96ace24 David Howells 2022-01-06 4901 cur_off, &rdata->iter);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 @4902 if (rdata->result != 0) {
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4903 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4904 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4905 else
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4906 dequeue_mid(mid, rdata->result);
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4907 return 0;
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4908 }
c42a6abe3012832 Pavel Shilovsky 2016-11-17 4909
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4910 } else if (buf_len >= data_offset + data_len) {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4911 /* read response payload is in buf */
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4912 WARN_ONCE(npages > 0, "read data can be either in buf or in pages");
f6d9da3b96ace24 David Howells 2022-01-06 4913 length = copy_to_iter(buf + data_offset, data_len, &rdata->iter);
f6d9da3b96ace24 David Howells 2022-01-06 4914 if (length < 0)
f6d9da3b96ace24 David Howells 2022-01-06 4915 return length;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4916 } else {
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4917 /* read response payload cannot be in both buf and pages */
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4918 WARN_ONCE(1, "buf can not contain only a part of read data");
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4919 rdata->result = -EIO;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4920 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4921 mid->mid_state = MID_RESPONSE_MALFORMED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4922 else
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4923 dequeue_mid(mid, rdata->result);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4924 return 0;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4925 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4926
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4927 if (is_offloaded)
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4928 mid->mid_state = MID_RESPONSE_RECEIVED;
ac873aa3dc21707 Rohith Surabattula 2020-10-29 4929 else
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4930 dequeue_mid(mid, false);
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4931 return length;
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4932 }
4326ed2f6a16ae9 Pavel Shilovsky 2016-11-17 4933
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next prev parent reply other threads:[~2022-01-07 14:36 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-06 21:31 [RFC][PATCH v2 0/3] cifs: In-progress conversion to use iov_iters instead of page lists David Howells
2022-01-06 21:32 ` [PATCH v2 1/3] cifs: Use netfslib David Howells
2022-01-06 21:32 ` [PATCH v2 2/3] cifs: Reverse the way iov_iters are used in reading David Howells
2022-01-07 14:35 ` kernel test robot [this message]
2022-01-07 14:35 ` kernel test robot
2022-01-06 21:32 ` [PATCH v2 3/3] cifs: Eliminate pages list from cifs_readdata, cifs_writedata and smb_rqst David Howells
2022-01-07 17:32 ` kernel test robot
2022-01-07 17:32 ` kernel test robot
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=202201072209.NObYCbNl-lkp@intel.com \
--to=lkp@intel.com \
--cc=dhowells@redhat.com \
--cc=kbuild-all@lists.01.org \
--cc=llvm@lists.linux.dev \
/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.