The original description follows:
This patchset fixes a number of defects in the close path of the
SVCRDMA
transport provider. The defects were found by injecting errors on the
transport at random intervals while running concurrent iozone tests
on
IB and iWARP mounts. With this set of patches applied I was able to
run
the above tests for several hours without causing a crash or leaking
resources. The transport recovers correctly on a client reconnect.
This patchset is based on 2.6 top of tree, however, I think these
fixes are
good candidates for a 2.6.25 dot release as well. I have a set that
is
already merged for that release if you would like them. They are
available in
my git tree on linux-nfs.org in the '2.6.25' branch. Please let me
know if you
would like me to post them here.
[PATCH 1/20] svcrdma: Simplify receive buffer posting
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 17 +----------------
net/sunrpc/xprtrdma/svc_rdma_sendto.c | 10 ++++++++++
net/sunrpc/xprtrdma/svc_rdma_transport.c | 19 -------------------
3 files changed, 11 insertions(+), 35 deletions(-)
[PATCH 2/20] svcrdma: Fix race with dto_tasklet in svc_rdma_send
net/sunrpc/xprtrdma/svc_rdma_transport.c | 40 +++++++++++++++
+-------------
1 files changed, 22 insertions(+), 18 deletions(-)
[PATCH 3/20] svcrdma: Fix return value in svc_rdma_send
net/sunrpc/xprtrdma/svc_rdma_transport.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
[PATCH 4/20] svcrdma: Add put of connection ESTABLISHED reference
in rdma_cma_handler
net/sunrpc/xprtrdma/svc_rdma_transport.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[PATCH 5/20] svcrdma: Free context on ib_post_recv error
net/sunrpc/xprtrdma/svc_rdma_transport.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
[PATCH 6/20] svcrdma: Free context on post_recv error in send_reply
net/sunrpc/xprtrdma/svc_rdma_sendto.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
[PATCH 7/20] svcrdma: Fix error handling during listening endpoint
creation
net/sunrpc/xprtrdma/svc_rdma_transport.c | 24 ++++++++++++
+-----------
1 files changed, 13 insertions(+), 11 deletions(-)
[PATCH 8/20] svcrdma: Return error from rdma_read_xdr so caller
knows to free context
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 23 +++++++++++++++
+-------
1 files changed, 16 insertions(+), 7 deletions(-)
[PATCH 9/20] svcrdma: Remove unused READ_DONE context flags bit
include/linux/sunrpc/svc_rdma.h | 1 -
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 1 -
net/sunrpc/xprtrdma/svc_rdma_transport.c | 1 -
3 files changed, 0 insertions(+), 3 deletions(-)
[PATCH 10/20] svcrdma: Simplify RDMA_READ deferral buffer management
include/linux/sunrpc/svc_rdma.h | 1 +
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 58 +++++
+------------------------
net/sunrpc/xprtrdma/svc_rdma_transport.c | 5 ++-
3 files changed, 16 insertions(+), 48 deletions(-)
[PATCH 11/20] svcrdma: Use standard Linux lists for context cache
include/linux/sunrpc/svc_rdma.h | 5 ++-
net/sunrpc/xprtrdma/svc_rdma_transport.c | 47 +++++++++++++++
+-------------
2 files changed, 29 insertions(+), 23 deletions(-)
[PATCH 12/20] svcrdma: Shrink scope of spinlock on RQ CQ
net/sunrpc/xprtrdma/svc_rdma_transport.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
[PATCH 13/20] svcrdma: Move destroy to kernel thread
include/linux/sunrpc/svc_rdma.h | 1 +
net/sunrpc/xprtrdma/svc_rdma_transport.c | 17 ++++++++++++++---
2 files changed, 15 insertions(+), 3 deletions(-)
[PATCH 14/20] svcrdma: Add reference for each SQ/RQ WR
net/sunrpc/xprtrdma/svc_rdma_transport.c | 18 ++++++++++++++++--
1 files changed, 16 insertions(+), 2 deletions(-)
[PATCH 15/20] svcrdma: Move the QP and cm_id destruction to
svc_rdma_free
net/sunrpc/xprtrdma/svc_rdma_transport.c | 40 ++++++++++++++
+---------------
1 files changed, 20 insertions(+), 20 deletions(-)
[PATCH 16/20] svcrdma: Cleanup queued, but unprocessed I/O in
svc_rdma_free
net/sunrpc/xprtrdma/svc_rdma_transport.c | 38 ++++++++++++++++++++
+++++++--
1 files changed, 35 insertions(+), 3 deletions(-)
[PATCH 17/20] svcrdma: Use ib verbs version of dma_unmap
net/sunrpc/xprtrdma/svc_rdma_transport.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
[PATCH 18/20] svcrdma: Set rqstp transport address in
rdma_read_complete function
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[PATCH 19/20] svcrdma: Copy transport address and arm CQ before
calling rdma_accept
net/sunrpc/xprtrdma/svc_rdma_transport.c | 23 +++++++++++++
+---------
1 files changed, 14 insertions(+), 9 deletions(-)
[PATCH 20/20] svcrdma: Change svc_rdma_send_error return type to void
include/linux/sunrpc/svc_rdma.h | 4 ++--
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 2 +-
net/sunrpc/xprtrdma/svc_rdma_transport.c | 9 ++++-----
3 files changed, 7 insertions(+), 8 deletions(-)
Signed-off-by: Tom Tucker <tom@xxxxxxxxxxxxxxxxxxxxx>
.