CC: kbuild-...@lists.01.org
In-Reply-To: 
<161885544311.38598.17973108446796585522.st...@manet.1015granger.net>
References: 
<161885544311.38598.17973108446796585522.st...@manet.1015granger.net>
TO: Chuck Lever <chuck.le...@oracle.com>
TO: tron...@hammerspace.com
CC: linux-...@vger.kernel.org
CC: linux-r...@vger.kernel.org

Hi Chuck,

I love your patch! Perhaps something to improve:

[auto build test WARNING on tip/perf/core]
[also build test WARNING on v5.12-rc8]
[cannot apply to nfs/linux-next next-20210421]
[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/Chuck-Lever/NFS-RDMA-client-patches-for-next/20210420-020504
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 
5deac80d4571dffb51f452f0027979d72259a1b9
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: x86_64-randconfig-m001-20210421 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>
Reported-by: Dan Carpenter <dan.carpen...@oracle.com>

smatch warnings:
net/sunrpc/xprtrdma/frwr_ops.c:546 frwr_unmap_sync() error: potentially 
dereferencing uninitialized 'last'.
net/sunrpc/xprtrdma/frwr_ops.c:647 frwr_unmap_async() error: potentially 
dereferencing uninitialized 'last'.

vim +/last +546 net/sunrpc/xprtrdma/frwr_ops.c

847568942f93e0 Chuck Lever     2019-06-19  493  
847568942f93e0 Chuck Lever     2019-06-19  494  /**
847568942f93e0 Chuck Lever     2019-06-19  495   * frwr_unmap_sync - invalidate 
memory regions that were registered for @req
847568942f93e0 Chuck Lever     2019-06-19  496   * @r_xprt: controlling 
transport instance
847568942f93e0 Chuck Lever     2019-06-19  497   * @req: rpcrdma_req with a 
non-empty list of MRs to process
9d6b0409788287 Chuck Lever     2016-06-29  498   *
847568942f93e0 Chuck Lever     2019-06-19  499   * Sleeps until it is safe for 
the host CPU to access the previously mapped
d8099feda4833b Chuck Lever     2019-06-19  500   * memory regions. This 
guarantees that registered MRs are properly fenced
d8099feda4833b Chuck Lever     2019-06-19  501   * from the server before the 
RPC consumer accesses the data in them. It
d8099feda4833b Chuck Lever     2019-06-19  502   * also ensures proper Send 
flow control: waking the next RPC waits until
d8099feda4833b Chuck Lever     2019-06-19  503   * this RPC has relinquished 
all its Send Queue entries.
c9918ff56dfb17 Chuck Lever     2015-12-16  504   */
847568942f93e0 Chuck Lever     2019-06-19  505  void frwr_unmap_sync(struct 
rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
c9918ff56dfb17 Chuck Lever     2015-12-16  506  {
d34ac5cd3a73aa Bart Van Assche 2018-07-18  507          struct ib_send_wr 
*first, **prev, *last;
5ecef9c8436695 Chuck Lever     2020-11-09  508          struct rpcrdma_ep *ep = 
r_xprt->rx_ep;
d34ac5cd3a73aa Bart Van Assche 2018-07-18  509          const struct ib_send_wr 
*bad_wr;
ce5b3717828356 Chuck Lever     2017-12-14  510          struct rpcrdma_frwr 
*frwr;
96ceddea3710f6 Chuck Lever     2017-12-14  511          struct rpcrdma_mr *mr;
847568942f93e0 Chuck Lever     2019-06-19  512          int rc;
c9918ff56dfb17 Chuck Lever     2015-12-16  513  
451d26e151f079 Chuck Lever     2017-06-08  514          /* ORDER: Invalidate 
all of the MRs first
c9918ff56dfb17 Chuck Lever     2015-12-16  515           *
c9918ff56dfb17 Chuck Lever     2015-12-16  516           * Chain the LOCAL_INV 
Work Requests and post them with
c9918ff56dfb17 Chuck Lever     2015-12-16  517           * a single 
ib_post_send() call.
c9918ff56dfb17 Chuck Lever     2015-12-16  518           */
ce5b3717828356 Chuck Lever     2017-12-14  519          frwr = NULL;
a100fda1a2e1fa Chuck Lever     2016-11-29  520          prev = &first;
265a38d4611360 Chuck Lever     2019-08-19  521          while ((mr = 
rpcrdma_mr_pop(&req->rl_registered))) {
96ceddea3710f6 Chuck Lever     2017-12-14  522  
d379eaa838f181 Chuck Lever     2018-10-01  523                  
trace_xprtrdma_mr_localinv(mr);
847568942f93e0 Chuck Lever     2019-06-19  524                  
r_xprt->rx_stats.local_inv_needed++;
a100fda1a2e1fa Chuck Lever     2016-11-29  525  
847568942f93e0 Chuck Lever     2019-06-19  526                  frwr = 
&mr->frwr;
ce5b3717828356 Chuck Lever     2017-12-14  527                  last = 
&frwr->fr_invwr;
847568942f93e0 Chuck Lever     2019-06-19  528                  last->next = 
NULL;
c974afbfa9803a Chuck Lever     2021-04-19  529                  last->wr_cqe = 
&mr->mr_cqe;
847568942f93e0 Chuck Lever     2019-06-19  530                  last->sg_list = 
NULL;
847568942f93e0 Chuck Lever     2019-06-19  531                  last->num_sge = 
0;
a100fda1a2e1fa Chuck Lever     2016-11-29  532                  last->opcode = 
IB_WR_LOCAL_INV;
847568942f93e0 Chuck Lever     2019-06-19  533                  
last->send_flags = IB_SEND_SIGNALED;
96ceddea3710f6 Chuck Lever     2017-12-14  534                  
last->ex.invalidate_rkey = mr->mr_handle;
c9918ff56dfb17 Chuck Lever     2015-12-16  535  
c974afbfa9803a Chuck Lever     2021-04-19  536                  
last->wr_cqe->done = frwr_wc_localinv;
c974afbfa9803a Chuck Lever     2021-04-19  537  
a100fda1a2e1fa Chuck Lever     2016-11-29  538                  *prev = last;
a100fda1a2e1fa Chuck Lever     2016-11-29  539                  prev = 
&last->next;
c9918ff56dfb17 Chuck Lever     2015-12-16  540          }
c9918ff56dfb17 Chuck Lever     2015-12-16  541  
c9918ff56dfb17 Chuck Lever     2015-12-16  542          /* Strong send queue 
ordering guarantees that when the
c9918ff56dfb17 Chuck Lever     2015-12-16  543           * last WR in the chain 
completes, all WRs in the chain
c9918ff56dfb17 Chuck Lever     2015-12-16  544           * are complete.
c9918ff56dfb17 Chuck Lever     2015-12-16  545           */
c974afbfa9803a Chuck Lever     2021-04-19 @546          last->wr_cqe->done = 
frwr_wc_localinv_wake;
ce5b3717828356 Chuck Lever     2017-12-14  547          
reinit_completion(&frwr->fr_linv_done);
8d38de65644d90 Chuck Lever     2016-11-29  548  
c9918ff56dfb17 Chuck Lever     2015-12-16  549          /* Transport disconnect 
drains the receive CQ before it
c9918ff56dfb17 Chuck Lever     2015-12-16  550           * replaces the QP. The 
RPC reply handler won't call us
93aa8e0a9de80e Chuck Lever     2020-02-21  551           * unless re_id->qp is 
a valid pointer.
c9918ff56dfb17 Chuck Lever     2015-12-16  552           */
8d75483a232aea Chuck Lever     2017-06-08  553          bad_wr = NULL;
5ecef9c8436695 Chuck Lever     2020-11-09  554          rc = 
ib_post_send(ep->re_id->qp, first, &bad_wr);
c9918ff56dfb17 Chuck Lever     2015-12-16  555  
847568942f93e0 Chuck Lever     2019-06-19  556          /* The final LOCAL_INV 
WR in the chain is supposed to
847568942f93e0 Chuck Lever     2019-06-19  557           * do the wake. If it 
was never posted, the wake will
847568942f93e0 Chuck Lever     2019-06-19  558           * not happen, so don't 
wait in that case.
c9918ff56dfb17 Chuck Lever     2015-12-16  559           */
847568942f93e0 Chuck Lever     2019-06-19  560          if (bad_wr != first)
847568942f93e0 Chuck Lever     2019-06-19  561                  
wait_for_completion(&frwr->fr_linv_done);
847568942f93e0 Chuck Lever     2019-06-19  562          if (!rc)
d7a21c1bed54ad Chuck Lever     2016-05-02  563                  return;
c9918ff56dfb17 Chuck Lever     2015-12-16  564  
38bc000697649a Chuck Lever     2021-04-19  565          /* On error, the MRs 
get destroyed once the QP has drained. */
36a55edfc3d5b1 Chuck Lever     2020-11-09  566          
trace_xprtrdma_post_linv_err(req, rc);
c9918ff56dfb17 Chuck Lever     2015-12-16  567  }
d8099feda4833b Chuck Lever     2019-06-19  568  
d8099feda4833b Chuck Lever     2019-06-19  569  /**
d8099feda4833b Chuck Lever     2019-06-19  570   * frwr_wc_localinv_done - 
Invoked by RDMA provider for a signaled LOCAL_INV WC
d6ccebf956338e Chuck Lever     2020-02-21  571   * @cq: completion queue
d6ccebf956338e Chuck Lever     2020-02-21  572   * @wc: WCE for a completed 
LocalInv WR
d8099feda4833b Chuck Lever     2019-06-19  573   *
d8099feda4833b Chuck Lever     2019-06-19  574   */
d8099feda4833b Chuck Lever     2019-06-19  575  static void 
frwr_wc_localinv_done(struct ib_cq *cq, struct ib_wc *wc)
d8099feda4833b Chuck Lever     2019-06-19  576  {
d8099feda4833b Chuck Lever     2019-06-19  577          struct ib_cqe *cqe = 
wc->wr_cqe;
c974afbfa9803a Chuck Lever     2021-04-19  578          struct rpcrdma_mr *mr = 
container_of(cqe, struct rpcrdma_mr, mr_cqe);
ecad5869d5026a Chuck Lever     2021-04-19  579          struct rpcrdma_rep *rep;
d8099feda4833b Chuck Lever     2019-06-19  580  
d8099feda4833b Chuck Lever     2019-06-19  581          /* WARNING: Only wr_cqe 
and status are reliable at this point */
afff2279b1fb45 Chuck Lever     2021-04-19  582          
trace_xprtrdma_wc_li_done(wc, &mr->mr_cid);
6dc6ec9e04c468 Chuck Lever     2019-08-19  583  
ecad5869d5026a Chuck Lever     2021-04-19  584          /* Ensure that @rep is 
generated before the MR is released */
ecad5869d5026a Chuck Lever     2021-04-19  585          rep = 
mr->mr_req->rl_reply;
6dc6ec9e04c468 Chuck Lever     2019-08-19  586          smp_rmb();
ecad5869d5026a Chuck Lever     2021-04-19  587  
3ec9bbac836408 Chuck Lever     2021-04-19  588          if (wc->status != 
IB_WC_SUCCESS) {
3ec9bbac836408 Chuck Lever     2021-04-19  589                  if (rep)
3ec9bbac836408 Chuck Lever     2021-04-19  590                          
rpcrdma_unpin_rqst(rep);
f423f755f41e49 Chuck Lever     2020-06-15  591                  
rpcrdma_flush_disconnect(cq->cq_context, wc);
3ec9bbac836408 Chuck Lever     2021-04-19  592                  return;
3ec9bbac836408 Chuck Lever     2021-04-19  593          }
3ec9bbac836408 Chuck Lever     2021-04-19  594          frwr_mr_put(mr);
3ec9bbac836408 Chuck Lever     2021-04-19  595          
rpcrdma_complete_rqst(rep);
d8099feda4833b Chuck Lever     2019-06-19  596  }
d8099feda4833b Chuck Lever     2019-06-19  597  
d8099feda4833b Chuck Lever     2019-06-19  598  /**
d8099feda4833b Chuck Lever     2019-06-19  599   * frwr_unmap_async - 
invalidate memory regions that were registered for @req
d8099feda4833b Chuck Lever     2019-06-19  600   * @r_xprt: controlling 
transport instance
d8099feda4833b Chuck Lever     2019-06-19  601   * @req: rpcrdma_req with a 
non-empty list of MRs to process
d8099feda4833b Chuck Lever     2019-06-19  602   *
d8099feda4833b Chuck Lever     2019-06-19  603   * This guarantees that 
registered MRs are properly fenced from the
d8099feda4833b Chuck Lever     2019-06-19  604   * server before the RPC 
consumer accesses the data in them. It also
d8099feda4833b Chuck Lever     2019-06-19  605   * ensures proper Send flow 
control: waking the next RPC waits until
d8099feda4833b Chuck Lever     2019-06-19  606   * this RPC has relinquished 
all its Send Queue entries.
d8099feda4833b Chuck Lever     2019-06-19  607   */
d8099feda4833b Chuck Lever     2019-06-19  608  void frwr_unmap_async(struct 
rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
d8099feda4833b Chuck Lever     2019-06-19  609  {
d8099feda4833b Chuck Lever     2019-06-19  610          struct ib_send_wr 
*first, *last, **prev;
5ecef9c8436695 Chuck Lever     2020-11-09  611          struct rpcrdma_ep *ep = 
r_xprt->rx_ep;
d8099feda4833b Chuck Lever     2019-06-19  612          struct rpcrdma_frwr 
*frwr;
d8099feda4833b Chuck Lever     2019-06-19  613          struct rpcrdma_mr *mr;
d8099feda4833b Chuck Lever     2019-06-19  614          int rc;
d8099feda4833b Chuck Lever     2019-06-19  615  
d8099feda4833b Chuck Lever     2019-06-19  616          /* Chain the LOCAL_INV 
Work Requests and post them with
d8099feda4833b Chuck Lever     2019-06-19  617           * a single 
ib_post_send() call.
d8099feda4833b Chuck Lever     2019-06-19  618           */
d8099feda4833b Chuck Lever     2019-06-19  619          frwr = NULL;
d8099feda4833b Chuck Lever     2019-06-19  620          prev = &first;
265a38d4611360 Chuck Lever     2019-08-19  621          while ((mr = 
rpcrdma_mr_pop(&req->rl_registered))) {
d8099feda4833b Chuck Lever     2019-06-19  622  
d8099feda4833b Chuck Lever     2019-06-19  623                  
trace_xprtrdma_mr_localinv(mr);
d8099feda4833b Chuck Lever     2019-06-19  624                  
r_xprt->rx_stats.local_inv_needed++;
d8099feda4833b Chuck Lever     2019-06-19  625  
d8099feda4833b Chuck Lever     2019-06-19  626                  frwr = 
&mr->frwr;
d8099feda4833b Chuck Lever     2019-06-19  627                  last = 
&frwr->fr_invwr;
d8099feda4833b Chuck Lever     2019-06-19  628                  last->next = 
NULL;
c974afbfa9803a Chuck Lever     2021-04-19  629                  last->wr_cqe = 
&mr->mr_cqe;
d8099feda4833b Chuck Lever     2019-06-19  630                  last->sg_list = 
NULL;
d8099feda4833b Chuck Lever     2019-06-19  631                  last->num_sge = 
0;
d8099feda4833b Chuck Lever     2019-06-19  632                  last->opcode = 
IB_WR_LOCAL_INV;
d8099feda4833b Chuck Lever     2019-06-19  633                  
last->send_flags = IB_SEND_SIGNALED;
d8099feda4833b Chuck Lever     2019-06-19  634                  
last->ex.invalidate_rkey = mr->mr_handle;
d8099feda4833b Chuck Lever     2019-06-19  635  
c974afbfa9803a Chuck Lever     2021-04-19  636                  
last->wr_cqe->done = frwr_wc_localinv;
c974afbfa9803a Chuck Lever     2021-04-19  637  
d8099feda4833b Chuck Lever     2019-06-19  638                  *prev = last;
d8099feda4833b Chuck Lever     2019-06-19  639                  prev = 
&last->next;
d8099feda4833b Chuck Lever     2019-06-19  640          }
d8099feda4833b Chuck Lever     2019-06-19  641  
d8099feda4833b Chuck Lever     2019-06-19  642          /* Strong send queue 
ordering guarantees that when the
d8099feda4833b Chuck Lever     2019-06-19  643           * last WR in the chain 
completes, all WRs in the chain
d8099feda4833b Chuck Lever     2019-06-19  644           * are complete. The 
last completion will wake up the
d8099feda4833b Chuck Lever     2019-06-19  645           * RPC waiter.
d8099feda4833b Chuck Lever     2019-06-19  646           */
c974afbfa9803a Chuck Lever     2021-04-19 @647          last->wr_cqe->done = 
frwr_wc_localinv_done;

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-le...@lists.01.org

Reply via email to