1. 24 9月, 2016 1 次提交
  2. 23 9月, 2016 3 次提交
    • C
      svcrdma: support Remote Invalidation · 25d55296
      Chuck Lever 提交于
      Support Remote Invalidation. A private message is exchanged with
      the client upon RDMA transport connect that indicates whether
      Send With Invalidation may be used by the server to send RPC
      replies. The invalidate_rkey is arbitrarily chosen from among
      rkeys present in the RPC-over-RDMA header's chunk lists.
      
      Send With Invalidate improves performance only when clients can
      recognize, while processing an RPC reply, that an rkey has already
      been invalidated. That has been submitted as a separate change.
      
      In the future, the RPC-over-RDMA protocol might support Remote
      Invalidation properly. The protocol needs to enable signaling
      between peers to indicate when Remote Invalidation can be used
      for each individual RPC.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Reviewed-by: NSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      25d55296
    • C
      svcrdma: Server-side support for rpcrdma_connect_private · cc9d8340
      Chuck Lever 提交于
      Prepare to receive an RDMA-CM private message when handling a new
      connection attempt, and send a similar message as part of connection
      acceptance.
      
      Both sides can communicate their various implementation limits.
      Implementations that don't support this sideband protocol ignore it.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Reviewed-by: NSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      cc9d8340
    • C
      svcrdma: Tail iovec leaves an orphaned DMA mapping · cace564f
      Chuck Lever 提交于
      The ctxt's count field is overloaded to mean the number of pages in
      the ctxt->page array and the number of SGEs in the ctxt->sge array.
      Typically these two numbers are the same.
      
      However, when an inline RPC reply is constructed from an xdr_buf
      with a tail iovec, the head and tail often occupy the same page,
      but each are DMA mapped independently. In that case, ->count equals
      the number of pages, but it does not equal the number of SGEs.
      There's one more SGE, for the tail iovec. Hence there is one more
      DMA mapping than there are pages in the ctxt->page array.
      
      This isn't a real problem until the server's iommu is enabled. Then
      each RPC reply that has content in that iovec orphans a DMA mapping
      that consists of real resources.
      
      krb5i and krb5p always populate that tail iovec. After a couple
      million sent krb5i/p RPC replies, the NFS server starts behaving
      erratically. Reboot is needed to clear the problem.
      
      Fixes: 9d11b51c ("svcrdma: Fix send_reply() scatter/gather set-up")
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      cace564f
  3. 14 5月, 2016 3 次提交
  4. 02 3月, 2016 4 次提交
    • C
      svcrdma: Use new CQ API for RPC-over-RDMA server send CQs · be99bb11
      Chuck Lever 提交于
      Calling ib_poll_cq() to sort through WCs during a completion is a
      common pattern amongst RDMA consumers. Since commit 14d3a3b2
      ("IB: add a proper completion queue abstraction"), WC sorting can
      be handled by the IB core.
      
      By converting to this new API, svcrdma is made a better neighbor to
      other RDMA consumers, as it allows the core to schedule the delivery
      of completions more fairly amongst all active consumers.
      
      This new API also aims each completion at a function that is
      specific to the WR's opcode. Thus the ctxt->wr_op field and the
      switch in process_context is replaced by a set of methods that
      handle each completion type.
      
      Because each ib_cqe carries a pointer to a completion method, the
      core can now post operations on a consumer's QP, and handle the
      completions itself.
      
      The server's rdma_stat_sq_poll and rdma_stat_sq_prod metrics are no
      longer updated.
      
      As a clean up, the cq_event_handler, the dto_tasklet, and all
      associated locking is removed, as they are no longer referenced or
      used.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Tested-by: NSteve Wise <swise@opengridcomputing.com>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      be99bb11
    • C
      svcrdma: Use new CQ API for RPC-over-RDMA server receive CQs · 8bd5ba86
      Chuck Lever 提交于
      Calling ib_poll_cq() to sort through WCs during a completion is a
      common pattern amongst RDMA consumers. Since commit 14d3a3b2
      ("IB: add a proper completion queue abstraction"), WC sorting can
      be handled by the IB core.
      
      By converting to this new API, svcrdma is made a better neighbor to
      other RDMA consumers, as it allows the core to schedule the delivery
      of completions more fairly amongst all active consumers.
      
      Because each ib_cqe carries a pointer to a completion method, the
      core can now post operations on a consumer's QP, and handle the
      completions itself.
      
      svcrdma receive completions no longer use the dto_tasklet. Each
      polled Receive WC is now handled individually in soft IRQ context.
      
      The server transport's rdma_stat_rq_poll and rdma_stat_rq_prod
      metrics are no longer updated.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      8bd5ba86
    • C
      svcrdma: Make RDMA_ERROR messages work · a6081b82
      Chuck Lever 提交于
      Fix several issues with svc_rdma_send_error():
      
       - Post a receive buffer to replace the one that was consumed by
         the incoming request
       - Posting a send should use DMA_TO_DEVICE, not DMA_FROM_DEVICE
       - No need to put_page _and_ free pages in svc_rdma_put_context
       - Make sure the sge is set up completely in case the error
         path goes through svc_rdma_unmap_dma()
       - Replace the use of ENOSYS, which has a reserved meaning
      
      Related fixes in svc_rdma_recvfrom():
      
       - Don't leak the ctxt associated with the incoming request
       - Don't close the connection after sending an error reply
       - Let svc_rdma_send_error() figure out the right header error code
      
      As a last clean up, move svc_rdma_send_error() to svc_rdma_sendto.c
      with other similar functions. There is some common logic in these
      functions that could someday be combined to reduce code duplication.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Reviewed-by: NDevesh Sharma <devesh.sharma@broadcom.com>
      Tested-by: NDevesh Sharma <devesh.sharma@broadcom.com>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      a6081b82
    • C
      svcrdma: svc_rdma_post_recv() should close connection on error · bf36387a
      Chuck Lever 提交于
      Clean up: Most svc_rdma_post_recv() call sites close the transport
      connection when a receive cannot be posted. Wrap that in a common
      helper.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Reviewed-by: NDevesh Sharma <devesh.sharma@broadcom.com>
      Tested-by: NDevesh Sharma <devesh.sharma@broadcom.com>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      bf36387a
  5. 20 1月, 2016 9 次提交
  6. 23 12月, 2015 1 次提交
  7. 03 11月, 2015 1 次提交
  8. 29 10月, 2015 2 次提交
  9. 31 8月, 2015 2 次提交
  10. 29 8月, 2015 1 次提交
  11. 11 8月, 2015 1 次提交
  12. 21 7月, 2015 2 次提交
  13. 13 6月, 2015 1 次提交
  14. 05 6月, 2015 3 次提交
  15. 21 5月, 2015 1 次提交
  16. 19 5月, 2015 2 次提交
  17. 16 1月, 2015 3 次提交