Merge tag 'nfs-rdma-for-3.19' of git://git.linux-nfs.org/projects/anna/nfs-rdma into...
authorTrond Myklebust <trond.myklebust@primarydata.com>
Wed, 26 Nov 2014 22:37:13 +0000 (17:37 -0500)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Wed, 26 Nov 2014 22:37:13 +0000 (17:37 -0500)
Pull NFS client RDMA changes for 3.19 from Anna Schumaker:
 "NFS: Client side changes for RDMA

  These patches various bugfixes and cleanups for using NFS over RDMA, including
  better error handling and performance improvements by using pad optimization.

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>"
* tag 'nfs-rdma-for-3.19' of git://git.linux-nfs.org/projects/anna/nfs-rdma:
  xprtrdma: Display async errors
  xprtrdma: Enable pad optimization
  xprtrdma: Re-write rpcrdma_flush_cqs()
  xprtrdma: Refactor tasklet scheduling
  xprtrdma: unmap all FMRs during transport disconnect
  xprtrdma: Cap req_cqinit
  xprtrdma: Return an errno from rpcrdma_register_external()

1  2 
net/sunrpc/xprtrdma/transport.c
net/sunrpc/xprtrdma/verbs.c

@@@ -73,9 -73,9 +73,9 @@@ static unsigned int xprt_rdma_max_inlin
  static unsigned int xprt_rdma_max_inline_write = RPCRDMA_DEF_INLINE;
  static unsigned int xprt_rdma_inline_write_padding;
  static unsigned int xprt_rdma_memreg_strategy = RPCRDMA_FRMR;
-                 int xprt_rdma_pad_optimize = 0;
+               int xprt_rdma_pad_optimize = 1;
  
 -#ifdef RPC_DEBUG
 +#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
  
  static unsigned int min_slot_table_size = RPCRDMA_MIN_SLOT_TABLE;
  static unsigned int max_slot_table_size = RPCRDMA_MAX_SLOT_TABLE;
@@@ -309,11 -345,18 +345,18 @@@ rpcrdma_recvcq_upcall(struct ib_cq *cq
  static void
  rpcrdma_flush_cqs(struct rpcrdma_ep *ep)
  {
-       rpcrdma_recvcq_upcall(ep->rep_attr.recv_cq, ep);
-       rpcrdma_sendcq_upcall(ep->rep_attr.send_cq, ep);
+       struct ib_wc wc;
+       LIST_HEAD(sched_list);
+       while (ib_poll_cq(ep->rep_attr.recv_cq, 1, &wc) > 0)
+               rpcrdma_recvcq_process_wc(&wc, &sched_list);
+       if (!list_empty(&sched_list))
+               rpcrdma_schedule_tasklet(&sched_list);
+       while (ib_poll_cq(ep->rep_attr.send_cq, 1, &wc) > 0)
+               rpcrdma_sendcq_process_wc(&wc);
  }
  
 -#ifdef RPC_DEBUG
 +#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
  static const char * const conn[] = {
        "address resolved",
        "address error",