xprtrdma: Display async errors
An async error upcall is a hard error, and should be reported in the system log. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
d5440e27d3
commit
7ff11de1ba
|
@ -106,6 +106,32 @@ rpcrdma_run_tasklet(unsigned long data)
|
|||
|
||||
static DECLARE_TASKLET(rpcrdma_tasklet_g, rpcrdma_run_tasklet, 0UL);
|
||||
|
||||
static const char * const async_event[] = {
|
||||
"CQ error",
|
||||
"QP fatal error",
|
||||
"QP request error",
|
||||
"QP access error",
|
||||
"communication established",
|
||||
"send queue drained",
|
||||
"path migration successful",
|
||||
"path mig error",
|
||||
"device fatal error",
|
||||
"port active",
|
||||
"port error",
|
||||
"LID change",
|
||||
"P_key change",
|
||||
"SM change",
|
||||
"SRQ error",
|
||||
"SRQ limit reached",
|
||||
"last WQE reached",
|
||||
"client reregister",
|
||||
"GID change",
|
||||
};
|
||||
|
||||
#define ASYNC_MSG(status) \
|
||||
((status) < ARRAY_SIZE(async_event) ? \
|
||||
async_event[(status)] : "unknown async error")
|
||||
|
||||
static void
|
||||
rpcrdma_schedule_tasklet(struct list_head *sched_list)
|
||||
{
|
||||
|
@ -122,8 +148,9 @@ rpcrdma_qp_async_error_upcall(struct ib_event *event, void *context)
|
|||
{
|
||||
struct rpcrdma_ep *ep = context;
|
||||
|
||||
dprintk("RPC: %s: QP error %X on device %s ep %p\n",
|
||||
__func__, event->event, event->device->name, context);
|
||||
pr_err("RPC: %s: %s on device %s ep %p\n",
|
||||
__func__, ASYNC_MSG(event->event),
|
||||
event->device->name, context);
|
||||
if (ep->rep_connected == 1) {
|
||||
ep->rep_connected = -EIO;
|
||||
ep->rep_func(ep);
|
||||
|
@ -136,8 +163,9 @@ rpcrdma_cq_async_error_upcall(struct ib_event *event, void *context)
|
|||
{
|
||||
struct rpcrdma_ep *ep = context;
|
||||
|
||||
dprintk("RPC: %s: CQ error %X on device %s ep %p\n",
|
||||
__func__, event->event, event->device->name, context);
|
||||
pr_err("RPC: %s: %s on device %s ep %p\n",
|
||||
__func__, ASYNC_MSG(event->event),
|
||||
event->device->name, context);
|
||||
if (ep->rep_connected == 1) {
|
||||
ep->rep_connected = -EIO;
|
||||
ep->rep_func(ep);
|
||||
|
|
Loading…
Reference in a new issue