diff options
author | Michael Reed <mdr@sgi.com> | 2006-05-24 16:07:40 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-06-10 17:00:03 -0400 |
commit | 419835e285c3e39cd62c8c8426da0aebea9cd89f (patch) | |
tree | e550176245f09598ccf7ffff915524ff07d75c88 /drivers/message/fusion/mptbase.h | |
parent | ca2f938efe71ca48cbc689db4df8d4f04b5d8f07 (diff) |
[SCSI] mptfc: fix fibre channel infinite request/response loop
While doing board reset testing I was able to put the system in
an infinite request/response loop between the scsi layer and
mptscsih_qcmd() by aborting the reset. This patch installs
a "SETUP RESET" handler which calls fc_remote_port_delete()
for all registered rports. This blocks the target which
prevents the loop. Additionally, should the reset fail to
complete, the transport will now terminate i/o to the target.
Signed-off-by: Michael Reed <mdr@sgi.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/message/fusion/mptbase.h')
-rw-r--r-- | drivers/message/fusion/mptbase.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h index 29f6b986946f..6d36ff5ee721 100644 --- a/drivers/message/fusion/mptbase.h +++ b/drivers/message/fusion/mptbase.h | |||
@@ -635,6 +635,7 @@ typedef struct _MPT_ADAPTER | |||
635 | int num_ports; | 635 | int num_ports; |
636 | struct work_struct mptscsih_persistTask; | 636 | struct work_struct mptscsih_persistTask; |
637 | 637 | ||
638 | struct work_struct fc_setup_reset_work; | ||
638 | struct list_head fc_rports; | 639 | struct list_head fc_rports; |
639 | spinlock_t fc_rescan_work_lock; | 640 | spinlock_t fc_rescan_work_lock; |
640 | int fc_rescan_work_count; | 641 | int fc_rescan_work_count; |