diff options
author | Seokmann Ju <seokmann.ju@qlogic.com> | 2008-07-10 19:55:55 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-07-26 15:14:40 -0400 |
commit | 246de42cfc0abc4e25585f2dca53f8226f62391c (patch) | |
tree | b0450362acf42eaeb504a4a901d9de27250833a3 /drivers/scsi/qla2xxx/qla_mbx.c | |
parent | 436a7b11234ccccd91e3000aacdbdd25bd7847a8 (diff) |
[SCSI] qla2xxx: Always aquire the parent's hardware_lock.
While issuing a marker, manipulating the request/response queues
and modifying the outstanding command array.
Signed-off-by: Seokmann Ju <seokmann.ju@qlogic.com>
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_mbx.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 250d2f604397..dc5788bbc549 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
@@ -749,17 +749,18 @@ qla2x00_abort_command(scsi_qla_host_t *ha, srb_t *sp) | |||
749 | uint32_t handle; | 749 | uint32_t handle; |
750 | mbx_cmd_t mc; | 750 | mbx_cmd_t mc; |
751 | mbx_cmd_t *mcp = &mc; | 751 | mbx_cmd_t *mcp = &mc; |
752 | scsi_qla_host_t *pha = to_qla_parent(ha); | ||
752 | 753 | ||
753 | DEBUG11(printk("qla2x00_abort_command(%ld): entered.\n", ha->host_no)); | 754 | DEBUG11(printk("qla2x00_abort_command(%ld): entered.\n", ha->host_no)); |
754 | 755 | ||
755 | fcport = sp->fcport; | 756 | fcport = sp->fcport; |
756 | 757 | ||
757 | spin_lock_irqsave(&ha->hardware_lock, flags); | 758 | spin_lock_irqsave(&pha->hardware_lock, flags); |
758 | for (handle = 1; handle < MAX_OUTSTANDING_COMMANDS; handle++) { | 759 | for (handle = 1; handle < MAX_OUTSTANDING_COMMANDS; handle++) { |
759 | if (ha->outstanding_cmds[handle] == sp) | 760 | if (ha->outstanding_cmds[handle] == sp) |
760 | break; | 761 | break; |
761 | } | 762 | } |
762 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | 763 | spin_unlock_irqrestore(&pha->hardware_lock, flags); |
763 | 764 | ||
764 | if (handle == MAX_OUTSTANDING_COMMANDS) { | 765 | if (handle == MAX_OUTSTANDING_COMMANDS) { |
765 | /* command not found */ | 766 | /* command not found */ |
@@ -2161,17 +2162,18 @@ qla24xx_abort_command(scsi_qla_host_t *ha, srb_t *sp) | |||
2161 | struct abort_entry_24xx *abt; | 2162 | struct abort_entry_24xx *abt; |
2162 | dma_addr_t abt_dma; | 2163 | dma_addr_t abt_dma; |
2163 | uint32_t handle; | 2164 | uint32_t handle; |
2165 | scsi_qla_host_t *pha = to_qla_parent(ha); | ||
2164 | 2166 | ||
2165 | DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no)); | 2167 | DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no)); |
2166 | 2168 | ||
2167 | fcport = sp->fcport; | 2169 | fcport = sp->fcport; |
2168 | 2170 | ||
2169 | spin_lock_irqsave(&ha->hardware_lock, flags); | 2171 | spin_lock_irqsave(&pha->hardware_lock, flags); |
2170 | for (handle = 1; handle < MAX_OUTSTANDING_COMMANDS; handle++) { | 2172 | for (handle = 1; handle < MAX_OUTSTANDING_COMMANDS; handle++) { |
2171 | if (ha->outstanding_cmds[handle] == sp) | 2173 | if (ha->outstanding_cmds[handle] == sp) |
2172 | break; | 2174 | break; |
2173 | } | 2175 | } |
2174 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | 2176 | spin_unlock_irqrestore(&pha->hardware_lock, flags); |
2175 | if (handle == MAX_OUTSTANDING_COMMANDS) { | 2177 | if (handle == MAX_OUTSTANDING_COMMANDS) { |
2176 | /* Command not found. */ | 2178 | /* Command not found. */ |
2177 | return QLA_FUNCTION_FAILED; | 2179 | return QLA_FUNCTION_FAILED; |