]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commitfb79e65241a711f3018e7b8a79ab280ed5a0b2ef
treee3a0dd5a4b45b9b587c032979047ae38b8d770d4
parentd5b28374e9f6bbd558f9fbe63178c79ddd858b8d
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