linux/include
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
..
acpi [PATCH] s/;;/;/g 2006-03-24 07:33:24 -08:00
asm-alpha [PATCH] Configurable NODES_SHIFT 2006-04-11 06:18:39 -07:00
asm-arm [PATCH] S3C24XX GPIO LED support 2006-04-11 06:18:40 -07:00
asm-arm26 [PATCH] unify pfn_to_page: arm26 pfn_to_page 2006-03-27 08:44:44 -08:00
asm-cris [PATCH] sys_kexec_load() naming fixups 2006-04-11 06:18:42 -07:00
asm-frv [PATCH] sys_kexec_load() naming fixups 2006-04-11 06:18:42 -07:00
asm-generic [PATCH] mutex: some cleanups 2006-03-31 12:19:01 -08:00
asm-h8300 [PATCH] sys_kexec_load() naming fixups 2006-04-11 06:18:42 -07:00
asm-i386 Merge branch 'splice' of git://brick.kernel.dk/data/git/linux-2.6-block 2006-04-11 06:34:02 -07:00
asm-ia64 Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6 2006-04-11 06:40:17 -07:00
asm-m32r [PATCH] sys_kexec_load() naming fixups 2006-04-11 06:18:42 -07:00
asm-m68k [PATCH] m68k: fix undefined reference to generic_find_next_zero_le_bit 2006-03-26 08:57:13 -08:00
asm-m68knommu [PATCH] bitops: m68knommu: use generic bitops 2006-03-26 08:57:13 -08:00
asm-mips [PATCH] Configurable NODES_SHIFT 2006-04-11 06:18:39 -07:00
asm-parisc [PATCH] Configurable NODES_SHIFT 2006-04-11 06:18:39 -07:00
asm-powerpc [PATCH] Configurable NODES_SHIFT 2006-04-11 06:18:39 -07:00
asm-ppc [PATCH] lock PTE before updating it in 440/BookE page fault handler 2006-03-29 13:44:15 +11:00
asm-s390 [PATCH] S390: fix implicit declaration of (un)likely. 2006-04-11 06:18:39 -07:00
asm-sh [PATCH] sys_kexec_load() naming fixups 2006-04-11 06:18:42 -07:00
asm-sh64 [PATCH] sys_kexec_load() naming fixups 2006-04-11 06:18:42 -07:00
asm-sparc [PATCH] sparc32 vga support 2006-04-11 06:18:54 -07:00
asm-sparc64 [PATCH] for_each_possible_cpu: sparc64 2006-04-11 06:18:31 -07:00
asm-um [PATCH] uml: fix "extern-vs-static" proto conflict in TLS code 2006-04-11 06:18:36 -07:00
asm-v850 [PATCH] Remove unused prepare_to_switch macro 2006-04-11 06:18:34 -07:00
asm-x86_64 [PATCH] x86_64: inline function prefix with __always_inline in vsyscall 2006-04-11 06:38:57 -07:00
asm-xtensa [PATCH] Remove unused prepare_to_switch macro 2006-04-11 06:18:34 -07:00
keys
linux [SCSI] unify SCSI_IOCTL_SEND_COMMAND implementations 2006-04-13 10:13:15 -05:00
math-emu
media V4L/DVB (3702): Make msp3400 routing defines more consistent 2006-04-02 04:56:11 -03:00
mtd
net [IPV6]: Deinline few large functions in inet6 code 2006-04-09 22:48:59 -07:00
pcmcia [PATCH] pcmcia: declare pccard_iodyn_ops (fix m8xx_pcmcia.c compilation error) 2006-03-31 21:49:51 +02:00
rdma IB: simplify static rate encoding 2006-04-10 09:43:47 -07:00
rxrpc
scsi [SCSI] FC transport: fixes for workq deadlocks 2006-04-13 13:25:16 -05:00
sound [ALSA] sound/core/pcm.c: make snd_pcm_format_name() static 2006-04-12 11:34:21 +02:00
video [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00