aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2014-11-08 20:15:01 -0500
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2014-11-25 13:39:20 -0500
commit7ff11de1bae02a41cac6503f858218ac1b9a3cbe (patch)
tree192c555c2d7c467164d10eafc8d19f4a82f9eb43
parentd5440e27d3e572272db957d6b9661a902b7c339f (diff)
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>
-rw-r--r--net/sunrpc/xprtrdma/verbs.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index e6ac9643fe56..5783c1a55b09 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -106,6 +106,32 @@ rpcrdma_run_tasklet(unsigned long data)
106 106
107static DECLARE_TASKLET(rpcrdma_tasklet_g, rpcrdma_run_tasklet, 0UL); 107static DECLARE_TASKLET(rpcrdma_tasklet_g, rpcrdma_run_tasklet, 0UL);
108 108
109static const char * const async_event[] = {
110 "CQ error",
111 "QP fatal error",
112 "QP request error",
113 "QP access error",
114 "communication established",
115 "send queue drained",
116 "path migration successful",
117 "path mig error",
118 "device fatal error",
119 "port active",
120 "port error",
121 "LID change",
122 "P_key change",
123 "SM change",
124 "SRQ error",
125 "SRQ limit reached",
126 "last WQE reached",
127 "client reregister",
128 "GID change",
129};
130
131#define ASYNC_MSG(status) \
132 ((status) < ARRAY_SIZE(async_event) ? \
133 async_event[(status)] : "unknown async error")
134
109static void 135static void
110rpcrdma_schedule_tasklet(struct list_head *sched_list) 136rpcrdma_schedule_tasklet(struct list_head *sched_list)
111{ 137{
@@ -122,8 +148,9 @@ rpcrdma_qp_async_error_upcall(struct ib_event *event, void *context)
122{ 148{
123 struct rpcrdma_ep *ep = context; 149 struct rpcrdma_ep *ep = context;
124 150
125 dprintk("RPC: %s: QP error %X on device %s ep %p\n", 151 pr_err("RPC: %s: %s on device %s ep %p\n",
126 __func__, event->event, event->device->name, context); 152 __func__, ASYNC_MSG(event->event),
153 event->device->name, context);
127 if (ep->rep_connected == 1) { 154 if (ep->rep_connected == 1) {
128 ep->rep_connected = -EIO; 155 ep->rep_connected = -EIO;
129 ep->rep_func(ep); 156 ep->rep_func(ep);
@@ -136,8 +163,9 @@ rpcrdma_cq_async_error_upcall(struct ib_event *event, void *context)
136{ 163{
137 struct rpcrdma_ep *ep = context; 164 struct rpcrdma_ep *ep = context;
138 165
139 dprintk("RPC: %s: CQ error %X on device %s ep %p\n", 166 pr_err("RPC: %s: %s on device %s ep %p\n",
140 __func__, event->event, event->device->name, context); 167 __func__, ASYNC_MSG(event->event),
168 event->device->name, context);
141 if (ep->rep_connected == 1) { 169 if (ep->rep_connected == 1) {
142 ep->rep_connected = -EIO; 170 ep->rep_connected = -EIO;
143 ep->rep_func(ep); 171 ep->rep_func(ep);