The default pdu is a common resource and needs to be protected 
while manipulating it.

Signed-off-by: Minh Tran <[email protected]>
Signed-off-by: John Soni Jose <[email protected]>
Signed-off-by: Jayamohan Kallickal <[email protected]>
---
 drivers/scsi/be2iscsi/be_main.c |    7 +++++++
 drivers/scsi/be2iscsi/be_main.h |    1 +
 2 files changed, 8 insertions(+)

diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index 5ba575f..9918582 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -2072,8 +2072,10 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj 
*pbe_eq)
                                    "BM_%d : Received %s[%d] on CID : %d\n",
                                    cqe_desc[code], code, cid);
 
+                       spin_lock_bh(&phba->async_pdu_lock);
                        hwi_process_default_pdu_ring(beiscsi_conn, phba,
                                             (struct i_t_dpdu_cqe *)sol);
+                       spin_unlock_bh(&phba->async_pdu_lock);
                        break;
                case UNSOL_DATA_NOTIFY:
                        beiscsi_log(phba, KERN_INFO,
@@ -2081,8 +2083,10 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj 
*pbe_eq)
                                    "BM_%d : Received %s[%d] on CID : %d\n",
                                    cqe_desc[code], code, cid);
 
+                       spin_lock_bh(&phba->async_pdu_lock);
                        hwi_process_default_pdu_ring(beiscsi_conn, phba,
                                             (struct i_t_dpdu_cqe *)sol);
+                       spin_unlock_bh(&phba->async_pdu_lock);
                        break;
                case CXN_INVALIDATE_INDEX_NOTIFY:
                case CMD_INVALIDATED_NOTIFY:
@@ -2110,8 +2114,10 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj 
*pbe_eq)
                                    BEISCSI_LOG_IO | BEISCSI_LOG_CONFIG,
                                    "BM_%d :  Dropping %s[%d] on DPDU ring on 
CID : %d\n",
                                    cqe_desc[code], code, cid);
+                       spin_lock_bh(&phba->async_pdu_lock);
                        hwi_flush_default_pdu_buffer(phba, beiscsi_conn,
                                             (struct i_t_dpdu_cqe *) sol);
+                       spin_unlock_bh(&phba->async_pdu_lock);
                        break;
                case CXN_KILLED_PDU_SIZE_EXCEEDS_DSL:
                case CXN_KILLED_BURST_LEN_MISMATCH:
@@ -5010,6 +5016,7 @@ static int beiscsi_dev_probe(struct pci_dev *pcidev,
        spin_lock_init(&phba->io_sgl_lock);
        spin_lock_init(&phba->mgmt_sgl_lock);
        spin_lock_init(&phba->isr_lock);
+       spin_lock_init(&phba->async_pdu_lock);
        ret = mgmt_get_fw_config(&phba->ctrl, phba);
        if (ret != 0) {
                beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
diff --git a/drivers/scsi/be2iscsi/be_main.h b/drivers/scsi/be2iscsi/be_main.h
index ec75c53..6ac4f2f 100644
--- a/drivers/scsi/be2iscsi/be_main.h
+++ b/drivers/scsi/be2iscsi/be_main.h
@@ -305,6 +305,7 @@ struct beiscsi_hba {
        spinlock_t io_sgl_lock;
        spinlock_t mgmt_sgl_lock;
        spinlock_t isr_lock;
+       spinlock_t async_pdu_lock;
        unsigned int age;
        unsigned short avlbl_cids;
        unsigned short cid_alloc;
-- 
1.7.10.4

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

Reply via email to