From: Jayamohan Kallickal <jayamohan.kallic...@emulex.com>

 During heavy IO in multipath environment with many active sessions
 and port-bouncing happening, there is a race condition because of
 which beiscsi_prcess_cqe() gets called for a connection whose
 endpoint is freed.

 Checking endpoint reference for a connection before processing in
 beiscsi_process_cq().

Signed-off-by: Minh Tran <minhduc.t...@emulex.com>
Signed-off-by: John Soni Jose <sony.joh...@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallic...@emulex.com>
---
 drivers/scsi/be2iscsi/be_main.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index dccda6c..5a7022f 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -2110,6 +2110,16 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj 
*pbe_eq)
 
                cri_index = BE_GET_CRI_FROM_CID(cid);
                ep = phba->ep_array[cri_index];
+               if (unlikely(ep == NULL)) {
+                       /* connection has already been freed
+                        * just move on to next one
+                        */
+                       beiscsi_log(phba, KERN_WARNING,
+                                   BEISCSI_LOG_INIT,
+                                   "BM_%d : proc cqe of disconn ep: cid %d\n",
+                                   cid);
+                       goto proc_next_cqe;
+               }
                beiscsi_ep = ep->dd_data;
                beiscsi_conn = beiscsi_ep->conn;
 
@@ -2219,6 +2229,7 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj 
*pbe_eq)
                        break;
                }
 
+proc_next_cqe:
                AMAP_SET_BITS(struct amap_sol_cqe, valid, sol, 0);
                queue_tail_inc(cq);
                sol = queue_tail_node(cq);
-- 
1.8.5.3

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to