diff options
author | Jayamohan Kallickal <jayamohank@gmail.com> | 2013-09-28 18:35:42 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2013-10-25 04:58:05 -0400 |
commit | 8f09a3b97804924bf7787161e4ad5c273d12b11e (patch) | |
tree | 11f63a2ea14d44ac4395962f1630b5fd5857c303 /drivers/scsi/be2iscsi/be_main.c | |
parent | 7331613ec0cd1847a67eb268a7b9675f79388350 (diff) |
[SCSI] be2iscsi: Fix locking mechanism in Unsol Path
The default pdu is a common resource and needs to be protected
while manipulating it.
Signed-off-by: Minh Tran <minhduc.tran@emulex.com>
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/be2iscsi/be_main.c')
-rw-r--r-- | drivers/scsi/be2iscsi/be_main.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c index 5ba575f0051b..991858262b72 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) | |||
2072 | "BM_%d : Received %s[%d] on CID : %d\n", | 2072 | "BM_%d : Received %s[%d] on CID : %d\n", |
2073 | cqe_desc[code], code, cid); | 2073 | cqe_desc[code], code, cid); |
2074 | 2074 | ||
2075 | spin_lock_bh(&phba->async_pdu_lock); | ||
2075 | hwi_process_default_pdu_ring(beiscsi_conn, phba, | 2076 | hwi_process_default_pdu_ring(beiscsi_conn, phba, |
2076 | (struct i_t_dpdu_cqe *)sol); | 2077 | (struct i_t_dpdu_cqe *)sol); |
2078 | spin_unlock_bh(&phba->async_pdu_lock); | ||
2077 | break; | 2079 | break; |
2078 | case UNSOL_DATA_NOTIFY: | 2080 | case UNSOL_DATA_NOTIFY: |
2079 | beiscsi_log(phba, KERN_INFO, | 2081 | beiscsi_log(phba, KERN_INFO, |
@@ -2081,8 +2083,10 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj *pbe_eq) | |||
2081 | "BM_%d : Received %s[%d] on CID : %d\n", | 2083 | "BM_%d : Received %s[%d] on CID : %d\n", |
2082 | cqe_desc[code], code, cid); | 2084 | cqe_desc[code], code, cid); |
2083 | 2085 | ||
2086 | spin_lock_bh(&phba->async_pdu_lock); | ||
2084 | hwi_process_default_pdu_ring(beiscsi_conn, phba, | 2087 | hwi_process_default_pdu_ring(beiscsi_conn, phba, |
2085 | (struct i_t_dpdu_cqe *)sol); | 2088 | (struct i_t_dpdu_cqe *)sol); |
2089 | spin_unlock_bh(&phba->async_pdu_lock); | ||
2086 | break; | 2090 | break; |
2087 | case CXN_INVALIDATE_INDEX_NOTIFY: | 2091 | case CXN_INVALIDATE_INDEX_NOTIFY: |
2088 | case CMD_INVALIDATED_NOTIFY: | 2092 | case CMD_INVALIDATED_NOTIFY: |
@@ -2110,8 +2114,10 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj *pbe_eq) | |||
2110 | BEISCSI_LOG_IO | BEISCSI_LOG_CONFIG, | 2114 | BEISCSI_LOG_IO | BEISCSI_LOG_CONFIG, |
2111 | "BM_%d : Dropping %s[%d] on DPDU ring on CID : %d\n", | 2115 | "BM_%d : Dropping %s[%d] on DPDU ring on CID : %d\n", |
2112 | cqe_desc[code], code, cid); | 2116 | cqe_desc[code], code, cid); |
2117 | spin_lock_bh(&phba->async_pdu_lock); | ||
2113 | hwi_flush_default_pdu_buffer(phba, beiscsi_conn, | 2118 | hwi_flush_default_pdu_buffer(phba, beiscsi_conn, |
2114 | (struct i_t_dpdu_cqe *) sol); | 2119 | (struct i_t_dpdu_cqe *) sol); |
2120 | spin_unlock_bh(&phba->async_pdu_lock); | ||
2115 | break; | 2121 | break; |
2116 | case CXN_KILLED_PDU_SIZE_EXCEEDS_DSL: | 2122 | case CXN_KILLED_PDU_SIZE_EXCEEDS_DSL: |
2117 | case CXN_KILLED_BURST_LEN_MISMATCH: | 2123 | case CXN_KILLED_BURST_LEN_MISMATCH: |
@@ -5010,6 +5016,7 @@ static int beiscsi_dev_probe(struct pci_dev *pcidev, | |||
5010 | spin_lock_init(&phba->io_sgl_lock); | 5016 | spin_lock_init(&phba->io_sgl_lock); |
5011 | spin_lock_init(&phba->mgmt_sgl_lock); | 5017 | spin_lock_init(&phba->mgmt_sgl_lock); |
5012 | spin_lock_init(&phba->isr_lock); | 5018 | spin_lock_init(&phba->isr_lock); |
5019 | spin_lock_init(&phba->async_pdu_lock); | ||
5013 | ret = mgmt_get_fw_config(&phba->ctrl, phba); | 5020 | ret = mgmt_get_fw_config(&phba->ctrl, phba); |
5014 | if (ret != 0) { | 5021 | if (ret != 0) { |
5015 | beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT, | 5022 | beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT, |