1
linux/include/scsi
James Smart aedf349773 [SCSI] FC transport: fixes for workq deadlocks
As previously reported via Michael Reed, the FC transport took a hit
in 2.6.15 (perhaps a little earlier) when we solved a recursion error.
There are 2 deadlocks occurring:
- With scan and the delete items sharing the same workq, flushing the
  workq for the delete code was getting it stalled behind a very long
  running scan code path.
- There's a deadlock where scsi_remove_target() has to sit behind
  scsi_scan_target() due to contention over the scan_lock().

This patch resolves the 1st deadlock and significantly reduces the
odds of the second. So far, we have only replicated the 2nd deadlock
on a highly-parallel SMP system. More on the 2nd deadlock in a following
email.

This patch reworks the transport to:
- Only use the scsi host workq for scanning
- Use 2 other workq's internally. One for deletions, the other for
  scheduled deletions. Originally, we tried this with a single workq,
  but the occassional flushes of the scheduled queues was hitting the
  second deadlock with a slightly higher frequency. In the future, we'll
  look at the LLDD's and the transport to see if we can get rid of this
  extra overhead.
- When moving to the other workq's we tightened up some object states
  and some lock handling.
- Properly syncs adds/deletes
- minor code cleanups
  - directly reference fc_host_attrs, rather than through attribute
    macros
  - flush the right workq on delayed work cancel failures.

Large kudos to Michael Reed who has been working this issue for the last
month.

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
2006-04-13 13:25:16 -05:00
..
iscsi_if.h [SCSI] iscsi update: cleanup iscsi class interface 2006-02-04 16:17:03 -06:00
iscsi_proto.h [SCSI] iscsi: rename some proto defs 2005-09-20 12:35:27 -05:00
scsi_cmnd.h [SCSI] Neaten comments in scsi_cmnd.h 2006-02-27 22:55:02 -06:00
scsi_dbg.h [SCSI] Rename scsi_print_msg to spi_print_msg 2005-12-15 18:41:27 -08:00
scsi_device.h [SCSI] add scsi_mode_select to scsi_lib.c 2006-03-19 10:19:14 -06:00
scsi_devinfo.h [SCSI] add SCSI_UNKNOWN and LUN transfer limit restrictions 2006-04-13 10:13:31 -05:00
scsi_driver.h [BLOCK] update SCSI to use new blk_ordered for barriers 2006-01-06 09:52:55 +01:00
scsi_eh.h [PATCH] SCSI: export scsi_eh_finish_cmd() and scsi_eh_flush_done_q() 2006-01-26 22:36:28 -05:00
scsi_host.h [PATCH] move ->eh_strategy_handler to the transport class 2006-04-10 14:15:47 -04:00
scsi_ioctl.h [SCSI] unify SCSI_IOCTL_SEND_COMMAND implementations 2006-04-13 10:13:15 -05:00
scsi_request.h [SCSI] remove scsi_wait_req 2005-11-06 12:45:20 -06:00
scsi_tcq.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
scsi_transport_fc.h [SCSI] FC transport: fixes for workq deadlocks 2006-04-13 13:25:16 -05:00
scsi_transport_iscsi.h [SCSI] iscsi update: cleanup iscsi class interface 2006-02-04 16:17:03 -06:00
scsi_transport_sas.h [SCSI] eliminate rphy allocation in favour of expander/end device allocation 2006-03-19 10:21:16 -06:00
scsi_transport_spi.h [SCSI] Add spi_populate_*_msg functions 2006-02-27 22:55:09 -06:00
scsi_transport.h [PATCH] move ->eh_strategy_handler to the transport class 2006-04-10 14:15:47 -04:00
scsi.h [SCSI] fix scsi process problems and clean up the target reap issues 2006-02-27 23:37:45 -06:00
scsicam.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sg_request.h [PATCH] I2O: Adaptec specific SG_IO access, firmware access through sysfs and 2400A workaround 2005-06-24 00:05:28 -07:00
sg.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
srp.h IB: Add SCSI RDMA Protocol (SRP) initiator 2005-11-02 14:07:13 -08:00