From b9ec35ae559dc4155f4d357d7e0193dcc0aa1481 Mon Sep 17 00:00:00 2001
From: liangzhen <liangzhen>
Date: Thu, 20 Nov 2008 06:54:16 +0000
Subject: [PATCH] Branch HEAD

o2iblnd asserts when ib_poll_cq() returns an error

b=17533
i=maxim
i=Christopher Morrone
---
 lnet/klnds/o2iblnd/o2iblnd_cb.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c
index 07512fc648..86125ade75 100644
--- a/lnet/klnds/o2iblnd/o2iblnd_cb.c
+++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c
@@ -3155,12 +3155,28 @@ kiblnd_scheduler(void *arg)
                         if (rc == 0) {
                                 rc = ib_req_notify_cq(conn->ibc_cq,
                                                       IB_CQ_NEXT_COMP);
-                                LASSERT (rc >= 0);
+                                if (rc < 0) {
+                                        CWARN("%s: ib_req_notify_cq failed: %d, "
+                                              "closing connection\n",
+                                              libcfs_nid2str(conn->ibc_peer->ibp_nid), rc);
+                                        kiblnd_close_conn(conn, -EIO);
+                                        kiblnd_conn_decref(conn);
+                                        spin_lock_irqsave(&kiblnd_data.kib_sched_lock, flags);
+                                        continue;
+                                }
 
                                 rc = ib_poll_cq(conn->ibc_cq, 1, &wc);
                         }
 
-                        LASSERT (rc >= 0);
+                        if (rc < 0) {
+                                CWARN("%s: ib_poll_cq failed: %d, "
+                                      "closing connection\n",
+                                      libcfs_nid2str(conn->ibc_peer->ibp_nid), rc);
+                                kiblnd_close_conn(conn, -EIO);
+                                kiblnd_conn_decref(conn);
+                                spin_lock_irqsave(&kiblnd_data.kib_sched_lock, flags);
+                                continue;
+                        }
 
                         spin_lock_irqsave(&kiblnd_data.kib_sched_lock,
                                           flags);
-- 
GitLab