linux/drivers/scsi
David Howells 65f27f3844 WorkStruct: Pass the work_struct pointer instead of context data
Pass the work_struct pointer to the work function rather than context data.
The work function can use container_of() to work out the data.

For the cases where the container of the work_struct may go away the moment the
pending bit is cleared, it is made possible to defer the release of the
structure by deferring the clearing of the pending bit.

To make this work, an extra flag is introduced into the management side of the
work_struct.  This governs auto-release of the structure upon execution.

Ordinarily, the work queue executor would release the work_struct for further
scheduling or deallocation by clearing the pending bit prior to jumping to the
work function.  This means that, unless the driver makes some guarantee itself
that the work_struct won't go away, the work function may not access anything
else in the work_struct or its container lest they be deallocated..  This is a
problem if the auxiliary data is taken away (as done by the last patch).

However, if the pending bit is *not* cleared before jumping to the work
function, then the work function *may* access the work_struct and its container
with no problems.  But then the work function must itself release the
work_struct by calling work_release().

In most cases, automatic release is fine, so this is the default.  Special
initiators exist for the non-auto-release case (ending in _NAR).


Signed-Off-By: David Howells <dhowells@redhat.com>
2006-11-22 14:55:48 +00:00
..
aacraid IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
aic7xxx [SCSI] aic79xx: Print out signalling 2006-10-25 15:14:50 -07:00
aic7xxx_old Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
aic94xx [SCSI] aic94xx SCSI timeout fix 2006-11-09 14:27:48 +09:00
arcmsr IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
arm IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
dpt [PATCH] lockdep: annotate DECLARE_WAIT_QUEUE_HEAD 2006-10-30 12:08:40 -08:00
ibmvscsi [SCSI] ibmvscsi: correctly reenable CRQ 2006-10-25 15:13:17 -07:00
libsas [SCSI] aic94xx SCSI timeout fix: SMP retry fix. 2006-11-09 14:27:53 +09:00
lpfc [PATCH] lockdep: annotate DECLARE_WAIT_QUEUE_HEAD 2006-10-30 12:08:40 -08:00
megaraid [SCSI] megaraid_{mm,mbox}: 64-bit DMA capability fix 2006-10-25 15:13:31 -07:00
pcmcia [SCSI] convert ninja driver to struct scsi_cmnd 2006-10-25 15:12:42 -07:00
qla2xxx [SCSI] qla2xxx: Update version number to 8.01.07-k3. 2006-10-25 15:13:12 -07:00
qla4xxx [PATCH] SCSI: ISCSI build failure 2006-10-31 08:13:19 -08:00
sym53c8xx_2 IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
.gitignore
3w-9xxx.c [SCSI] 3ware 9000 add support for 9650SE 2006-11-09 14:27:57 +09:00
3w-9xxx.h [SCSI] 3ware 9000 add support for 9650SE 2006-11-09 14:27:57 +09:00
3w-xxxx.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
3w-xxxx.h [SCSI] 3w-xxxx: fix "ATA UDMA upgrade" message number 2006-09-26 10:39:27 -07:00
53c7xx_d.h_shipped
53c7xx_u.h_shipped
53c7xx.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
53c7xx.h
53c7xx.scr
53c700_d.h_shipped
53c700.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
53c700.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
53c700.scr
a100u2w.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
a100u2w.h
a2091.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
a2091.h [SCSI] wd33c93: Scsi_Cmnd convertion 2006-09-12 17:12:31 -05:00
a3000.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
a3000.h [SCSI] wd33c93: Scsi_Cmnd convertion 2006-09-12 17:12:31 -05:00
advansys.c [PATCH] NULL noise removal: advansys 2006-10-10 15:37:21 -07:00
advansys.h
aha152x.c [PATCH] Use linux/io.h instead of asm/io.h 2006-10-11 11:14:23 -07:00
aha152x.h
aha1542.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
aha1542.h
aha1740.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
aha1740.h
aic7xxx_old.c [SCSI] fix typo in previous Scsi_Cmnd convertion in aic7xxx_old.c 2006-10-25 15:12:25 -07:00
amiga7xx.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
amiga7xx.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
atari_dma_emul.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
atari_NCR5380.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
atari_scsi.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
atari_scsi.h
atp870u.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
atp870u.h
blz1230.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
blz2060.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
BusLogic.c [BusLogic] Add pci dev table for auto module loading. 2006-10-18 08:36:57 -04:00
BusLogic.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
bvme6000.c
bvme6000.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
ch.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
constants.c [SCSI] update additional sense codes and some opcode names 2006-07-09 09:10:06 -05:00
cyberstorm.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
cyberstormII.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
dc395x.c [PATCH] use %zu for size_t 2006-10-10 15:37:24 -07:00
dc395x.h
dec_esp.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
dmx3191d.c [SCSI] pci_module_init conversion in scsi subsystem 2006-09-26 11:35:32 -07:00
dpt_i2o.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
dpti.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
dtc.c [PATCH] Use linux/io.h instead of asm/io.h 2006-10-11 11:14:23 -07:00
dtc.h
eata_generic.h [SCSI] eata_pio cleanup and PCI fix 2006-09-23 20:28:19 -05:00
eata_pio.c [PATCH] irq updates: make eata_pio compile 2006-10-20 10:26:38 -07:00
eata_pio.h
eata.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
esp.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
esp.h [SCSI] sparc: Port esp to new SBUS driver layer. 2006-06-23 23:15:54 -07:00
fastlane.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
fcal.c [SCSI] Improve inquiry printing 2006-08-06 15:59:26 -05:00
fcal.h
fd_mcs.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
fdomain.c Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6 2006-10-25 20:22:55 -07:00
fdomain.h
FlashPoint.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
g_NCR5380_mmio.c
g_NCR5380.c [SCSI] Improve inquiry printing 2006-08-06 15:59:26 -05:00
g_NCR5380.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
gdth_ioctl.h
gdth_kcompat.h [SCSI] remove the scsi_request interface from the gdth driver 2006-06-10 10:24:40 -05:00
gdth_proc.c [SCSI] remove the scsi_request interface from the gdth driver 2006-06-10 10:24:40 -05:00
gdth_proc.h [SCSI] remove the scsi_request interface from the gdth driver 2006-06-10 10:24:40 -05:00
gdth.c [SCSI] gdth: Fix && typos 2006-11-10 09:59:49 +09:00
gdth.h [SCSI] drivers/scsi/gdth.h: removal of old scsi code 2006-09-26 11:35:16 -07:00
gvp11.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
gvp11.h [SCSI] wd33c93: Scsi_Cmnd convertion 2006-09-12 17:12:31 -05:00
hosts.c [SCSI] add shared tag map helpers 2006-08-31 11:18:03 -04:00
hptiop.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
hptiop.h [SCSI] hptiop: HighPoint RocketRAID 3xxx controller driver 2006-06-10 10:36:13 -05:00
ibmmca.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
ibmmca.h
ide-scsi.c [PATCH] Remove ->rq_status from struct request 2006-09-30 20:29:23 +02:00
imm.c [PATCH] lockdep: annotate DECLARE_WAIT_QUEUE_HEAD 2006-10-30 12:08:40 -08:00
imm.h Remove all inclusions of <linux/config.h> 2006-10-04 03:38:54 -04:00
in2000.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
in2000.h
initio.c [initio] Add pci dev table for module auto loading. 2006-10-18 08:40:57 -04:00
initio.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ipr.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
ipr.h [SCSI] ipr: Support attaching SATA devices 2006-09-26 09:23:18 -07:00
ips.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
ips.h [SCSI] scsi: Convertion to struct scsi_cmnd in ips-driver 2006-10-03 17:28:29 -05:00
iscsi_tcp.c [SCSI] iscsi_tcp: fix xmittask oops 2006-11-10 09:41:48 +09:00
iscsi_tcp.h Merge mulgrave-w:git/scsi-misc-2.6 2006-09-23 15:33:43 -05:00
jazz_esp.c [SCSI] More buffer->request_buffer changes 2006-07-14 09:41:13 -05:00
Kconfig Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2006-10-04 18:57:35 -07:00
lasi700.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
libiscsi.c [SCSI] iscsi: add newlines to debug messages 2006-11-10 09:41:44 +09:00
mac53c94.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
mac53c94.h
mac_esp.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
mac_scsi.c [PATCH] m68k: convert mac irq code 2006-06-25 10:00:58 -07:00
mac_scsi.h
Makefile [SCSI] Initial Commit of qla4xxx 2006-10-04 13:34:04 -05:00
mca_53c9x.c
megaraid.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
megaraid.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
mesh.c [PATCH] fix mesh compile errors after irq changes 2006-10-06 12:11:08 -07:00
mesh.h
mvme16x.c
mvme16x.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
mvme147.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
mvme147.h [SCSI] wd33c93: Scsi_Cmnd convertion 2006-09-12 17:12:31 -05:00
ncr53c8xx.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
ncr53c8xx.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
NCR53c406a.c Various drivers' irq handlers: kill dead code, needless casts 2006-10-06 15:00:58 -04:00
NCR53C9x.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
NCR53C9x.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
NCR5380.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
NCR5380.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
NCR_D700.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
NCR_D700.h
NCR_Q720.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
NCR_Q720.h
nsp32_debug.c
nsp32_io.h
nsp32.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
nsp32.h [SCSI] drivers/scsi/nsp32.h: removal of old scsi code 2006-09-26 10:39:00 -07:00
oktagon_esp.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
oktagon_io.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
osst_detect.h
osst_options.h
osst.c [SCSI] SCSI osst: add error handling to module init, sysfs 2006-10-04 13:12:44 -05:00
osst.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
pas16.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
pas16.h
pci2000.h
pluto.c [PATCH] Split struct request ->flags into two parts 2006-09-30 20:23:37 +02:00
pluto.h
ppa.c [PATCH] lockdep: annotate DECLARE_WAIT_QUEUE_HEAD 2006-10-30 12:08:40 -08:00
ppa.h Remove all inclusions of <linux/config.h> 2006-10-04 03:38:54 -04:00
psi240i.c [SCSI] psi240i.c: fix an array overrun 2006-11-10 10:01:42 +09:00
psi240i.h [SCSI] Scsi_Cmnd conversion in psi240i driver 2006-10-25 15:12:38 -07:00
psi_chip.h
ql1040_fw.h
ql1280_fw.h
ql12160_fw.h
qla1280.c [SCSI] qla1280 bus reset typo 2006-10-25 15:14:09 -07:00
qla1280.h
qlogicfas408.c [SCSI] Scsi_Cmnd conversion in qlogicfas408 driver 2006-10-25 15:11:55 -07:00
qlogicfas408.h [SCSI] Scsi_Cmnd conversion in qlogicfas408 driver 2006-10-25 15:11:55 -07:00
qlogicfas.c
qlogicpti_asm.c [SPARC]: Fix some section mismatch warnings in sparc drivers. 2006-10-17 19:28:51 -07:00
qlogicpti.c [SPARC]: Fix some section mismatch warnings in sparc drivers. 2006-10-17 19:28:51 -07:00
qlogicpti.h
raid_class.c [SCSI] raid class: handle component-add errors 2006-10-04 13:27:26 -05:00
script_asm.pl
scsi_debug.c [SCSI] scsi_debug: support REPORT TARGET PORT GROUPS 2006-10-25 15:14:13 -07:00
scsi_debug.h
scsi_devinfo.c [SCSI] scsi_devinfo: scsi2 HP and Hitachi entries 2006-10-01 15:09:19 -05:00
scsi_error.c [PATCH] gfp annotations: scsi_error 2006-10-10 15:37:23 -07:00
scsi_ioctl.c [PATCH] scsi: kill overeager "not-ready" messages 2006-07-28 09:04:09 +02:00
scsi_lib.c [PATCH] scsi: clear garbage after CDBs on SG_IO 2006-11-16 11:43:38 -08:00
scsi_logging.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
scsi_module.c
scsi_netlink.c [SCSI] SCSI and FC Transport: add netlink support for posting of transport events 2006-09-02 15:33:49 -05:00
scsi_priv.h [SCSI] SCSI and FC Transport: add netlink support for posting of transport events 2006-09-02 15:33:49 -05:00
scsi_proc.c [SCSI] Improve inquiry printing 2006-08-06 15:59:26 -05:00
scsi_sas_internal.h [SCSI] scsi_transport_sas: introduce a sas_port entity 2006-06-28 12:40:54 -04:00
scsi_scan.c WorkStruct: Pass the work_struct pointer instead of context data 2006-11-22 14:55:48 +00:00
scsi_sysctl.c
scsi_sysfs.c WorkStruct: Pass the work_struct pointer instead of context data 2006-11-22 14:55:48 +00:00
scsi_transport_api.h [PATCH] SCSI: make scsi_implement_eh() generic API for SCSI transports 2006-05-20 00:39:08 -04:00
scsi_transport_fc.c [SCSI] scsi_transport_fc: fixup netlink arguments 2006-09-23 22:07:20 -05:00
scsi_transport_iscsi.c [SCSI] iscsi class: update version 2006-11-10 09:41:51 +09:00
scsi_transport_sas.c [SCSI] scsi_transport_sas: make minimum and maximum linkrate settable quantities 2006-09-07 15:16:44 -05:00
scsi_transport_spi.c [SCSI] SPI transport class: misc DV fixes 2006-09-23 20:53:53 -05:00
scsi_typedefs.h [SCSI] remove scsi_request infrastructure 2006-06-10 16:24:40 -05:00
scsi.c Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2006-10-04 18:57:35 -07:00
scsi.h [SCSI] remove unnecessary includes of linux/config.h from drivers/scsi/ 2006-08-19 13:39:11 -07:00
scsicam.c [SCSI] Bogus disk geometry on large disks 2006-06-26 16:33:10 -05:00
sd.c Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2006-10-04 18:57:35 -07:00
seagate.c [PATCH] Use linux/io.h instead of asm/io.h 2006-10-11 11:14:23 -07:00
sg.c [SCSI] sg: fix incorrect last scatg length 2006-11-09 14:28:01 +09:00
sgiwd93.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sim710.c [PATCH] EISA bus MODALIAS attributes support 2006-09-27 08:26:19 -07:00
sr_ioctl.c
sr_vendor.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sr.c [SCSI] hide EH backup data outside the scsi_cmnd 2006-07-09 11:56:44 -05:00
sr.h
st_options.h
st.c [SCSI] st: Fixup -ENOMEDIUM 2006-10-25 15:11:59 -07:00
st.h [SCSI] st: remove unused st_buffer.in_use 2006-06-29 11:06:30 -04:00
stex.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sun3_NCR5380.c [SCSI] Scsi_Cmnd convertion in sun3-driver 2006-10-25 15:11:51 -07:00
sun3_scsi_vme.c [SCSI] Scsi_Cmnd convertion in sun3-driver 2006-10-25 15:11:51 -07:00
sun3_scsi.c [SCSI] Scsi_Cmnd convertion in sun3-driver 2006-10-25 15:11:51 -07:00
sun3_scsi.h [SCSI] Scsi_Cmnd convertion in sun3-driver 2006-10-25 15:11:51 -07:00
sun3x_esp.c [SCSI] More buffer->request_buffer changes 2006-07-14 09:41:13 -05:00
sym53c416.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sym53c416.h
t128.c [PATCH] Use linux/io.h instead of asm/io.h 2006-10-11 11:14:23 -07:00
t128.h
tmscsim.c [SCSI] tmscsim: set max_sectors 2006-10-25 15:12:03 -07:00
tmscsim.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
u14-34f.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
ultrastor.c Various drivers' irq handlers: kill dead code, needless casts 2006-10-06 15:00:58 -04:00
ultrastor.h [SCSI] scsi-driver ultrastore replace Scsi_Cmnd with struct scsi_cmnd 2006-09-07 12:39:34 -05:00
wd33c93.c [SCSI] More buffer->request_buffer changes 2006-07-14 09:41:13 -05:00
wd33c93.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
wd7000.c [PATCH] Use linux/io.h instead of asm/io.h 2006-10-11 11:14:23 -07:00
zalon.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00