svcrdma: Poll CQs in "workqueue" mode
authorChuck Lever <chuck.lever@oracle.com>
Tue, 7 Feb 2017 16:59:04 +0000 (11:59 -0500)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 8 Feb 2017 19:42:01 +0000 (14:42 -0500)
commit81fa3275f95ac357188fe3ca81b8e7c75360c88d
treee3a0dd5a4b45b9b587c032979047ae38b8d770d4
parenta3ab867fa64f9aedb3b01d570db5b43d2fc355fc
svcrdma: Poll CQs in "workqueue" mode

svcrdma calls svc_xprt_put() in its completion handlers, which
currently run in IRQ context.

However, svc_xprt_put() is meant to be invoked in process context,
not in IRQ context. After the last transport reference is gone, it
directly calls a transport release function that expects to run in
process context.

Change the CQ polling modes to IB_POLL_WORKQUEUE so that svcrdma
invokes svc_xprt_put() only in process context. As an added benefit,
bottom half-disabled spin locking can be eliminated from I/O paths.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
net/sunrpc/xprtrdma/svc_rdma_transport.c