diff options
author | Andreas Herrmann <aherrman@de.ibm.com> | 2005-06-13 07:20:35 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2005-06-13 22:32:48 -0400 |
commit | 1db2c9c0931a53fe013db55fd2ff58859db31e8d (patch) | |
tree | 1134627ac98d91896dcdb161d5df7ecef60a4de3 /drivers/s390/scsi/zfcp_ext.h | |
parent | 64b29a130901d5b8578e9f602cf2dae56aaff224 (diff) |
[SCSI] zfcp: fix bug during adapter shutdown
Fixes a race between zfcp_fsf_req_dismiss_all and
zfcp_qdio_reqid_check. During adapter shutdown it occurred that a
request was cleaned up twice. First during its normal
completion. Second when dismiss_all was called. The fix is to
serialize access to fsf request list between zfcp_fsf_req_dismiss_all
and zfcp_qdio_reqid_check and delete a fsf request from the list if
its completion is triggered. (Additionally a rwlock was replaced by a
spinlock and fsf_req_cleanup was eliminated.)
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_ext.h')
-rw-r--r-- | drivers/s390/scsi/zfcp_ext.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h index d5fd43352071..8f0da2e02a47 100644 --- a/drivers/s390/scsi/zfcp_ext.h +++ b/drivers/s390/scsi/zfcp_ext.h | |||
@@ -116,7 +116,7 @@ extern int zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *, | |||
116 | struct timer_list*, int); | 116 | struct timer_list*, int); |
117 | extern int zfcp_fsf_req_complete(struct zfcp_fsf_req *); | 117 | extern int zfcp_fsf_req_complete(struct zfcp_fsf_req *); |
118 | extern void zfcp_fsf_incoming_els(struct zfcp_fsf_req *); | 118 | extern void zfcp_fsf_incoming_els(struct zfcp_fsf_req *); |
119 | extern void zfcp_fsf_req_cleanup(struct zfcp_fsf_req *); | 119 | extern void zfcp_fsf_req_free(struct zfcp_fsf_req *); |
120 | extern struct zfcp_fsf_req *zfcp_fsf_send_fcp_command_task_management( | 120 | extern struct zfcp_fsf_req *zfcp_fsf_send_fcp_command_task_management( |
121 | struct zfcp_adapter *, struct zfcp_unit *, u8, int); | 121 | struct zfcp_adapter *, struct zfcp_unit *, u8, int); |
122 | extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command( | 122 | extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command( |