diff options
author | Andreas Herrmann <aherrman@de.ibm.com> | 2006-09-18 16:29:20 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-09-23 19:00:56 -0400 |
commit | 4eff4a36516d72e4f6ede901141214a7e05607e7 (patch) | |
tree | b6a775ee5acbfdc91a349fc69580031e17276768 /drivers/s390/scsi/zfcp_fsf.c | |
parent | dd52e0eaf891cd85bf2ca057c15ed6bfd76db4e6 (diff) |
[SCSI] zfcp: fix: use correct req_id in eh_abort_handler
zfcp's eh_abort_handler used the wrong request ID to
identify the request to be aborted. The bug was introduced
with commit fea9d6c7bcd8ff1d60ff74f27ba483b3820b18a3
for improved management of request IDs. The bug is
fixed with this patch.
Signed-off-by: Andreas Herrmann <aherrman@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/s390/scsi/zfcp_fsf.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 4913ffbb2fc8..a66b5193b70e 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -3527,7 +3527,7 @@ zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *adapter, | |||
3527 | fsf_req->unit = unit; | 3527 | fsf_req->unit = unit; |
3528 | 3528 | ||
3529 | /* associate FSF request with SCSI request (for look up on abort) */ | 3529 | /* associate FSF request with SCSI request (for look up on abort) */ |
3530 | scsi_cmnd->host_scribble = (char *) fsf_req; | 3530 | scsi_cmnd->host_scribble = (unsigned char *) fsf_req->req_id; |
3531 | 3531 | ||
3532 | /* associate SCSI command with FSF request */ | 3532 | /* associate SCSI command with FSF request */ |
3533 | fsf_req->data = (unsigned long) scsi_cmnd; | 3533 | fsf_req->data = (unsigned long) scsi_cmnd; |
@@ -4667,7 +4667,6 @@ zfcp_fsf_req_create(struct zfcp_adapter *adapter, u32 fsf_cmd, int req_flags, | |||
4667 | { | 4667 | { |
4668 | volatile struct qdio_buffer_element *sbale; | 4668 | volatile struct qdio_buffer_element *sbale; |
4669 | struct zfcp_fsf_req *fsf_req = NULL; | 4669 | struct zfcp_fsf_req *fsf_req = NULL; |
4670 | unsigned long flags; | ||
4671 | int ret = 0; | 4670 | int ret = 0; |
4672 | struct zfcp_qdio_queue *req_queue = &adapter->request_queue; | 4671 | struct zfcp_qdio_queue *req_queue = &adapter->request_queue; |
4673 | 4672 | ||
@@ -4684,10 +4683,10 @@ zfcp_fsf_req_create(struct zfcp_adapter *adapter, u32 fsf_cmd, int req_flags, | |||
4684 | fsf_req->fsf_command = fsf_cmd; | 4683 | fsf_req->fsf_command = fsf_cmd; |
4685 | INIT_LIST_HEAD(&fsf_req->list); | 4684 | INIT_LIST_HEAD(&fsf_req->list); |
4686 | 4685 | ||
4687 | /* unique request id */ | 4686 | /* this is serialized (we are holding req_queue-lock of adapter */ |
4688 | spin_lock_irqsave(&adapter->req_list_lock, flags); | 4687 | if (adapter->req_no == 0) |
4688 | adapter->req_no++; | ||
4689 | fsf_req->req_id = adapter->req_no++; | 4689 | fsf_req->req_id = adapter->req_no++; |
4690 | spin_unlock_irqrestore(&adapter->req_list_lock, flags); | ||
4691 | 4690 | ||
4692 | zfcp_fsf_req_qtcb_init(fsf_req); | 4691 | zfcp_fsf_req_qtcb_init(fsf_req); |
4693 | 4692 | ||