1
linux/drivers/scsi
Christoph Hellwig 3b00315799 [SCSI] untangle scsi_prep_fn
I wanted to add some BUG checks to scsi_prep_fn to make sure no one
sends us a non-sg command, but this function is a horrible mess.

So I decided to detangle the function and document what the valid
cases are.  While doing that I found that REQ_TYPE_SPECIAL commands
aren't used by the SCSI layer anymore and we can get rid of the code
handling them.

The new structure of scsi_prep_fn is:

 (1) check if we're allowed to send this command
 (2) big switch on cmd_type.  For the two valid types call into
     a function to set the command up, else error
 (3) code to handle error cases

Because FS and BLOCK_PC commands are handled entirely separate after
the patch this introduces a tiny amount of code duplication.  This
improves readabiulity though and will help to avoid the bidi command
overhead for FS commands so it's a good thing.

I've tested this on both sata and mptsas.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
2006-11-15 14:14:20 -06:00
..
aacraid IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
aic7xxx IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
aic7xxx_old Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
aic94xx [SCSI] aic94xx: handle REQ_TASK_ABORT 2006-11-15 12:31:27 -06: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 [SCSI] drivers/scsi/dpt/dpti_i2o.h: removal of old scsi code 2006-09-26 10:40:13 -07:00
ibmvscsi IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
libsas [SCSI] libsas: add sas_abort_task 2006-11-15 12:27:50 -06:00
lpfc IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
megaraid IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
pcmcia IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
qla2xxx Merge git://git.infradead.org/~dhowells/irq-2.6 2006-10-05 16:32:01 -07:00
qla4xxx Merge git://git.infradead.org/~dhowells/irq-2.6 2006-10-05 16:32:01 -07: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 IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
3w-9xxx.h
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 Various drivers' irq handlers: kill dead code, needless casts 2006-10-06 15:00:58 -04: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 Various drivers' irq handlers: kill dead code, needless casts 2006-10-06 15:00:58 -04: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 IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01: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] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -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 IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01: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 IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01: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
gdth_proc.c
gdth_proc.h
gdth.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01: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
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 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02: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 IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01: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 Merge mulgrave-w:git/scsi-misc-2.6 2006-09-23 15:33:43 -05: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] libiscsi: don't call into lld to cleanup task 2006-09-02 13:37:40 -05: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] Add ability to scan scsi busses asynchronously 2006-10-11 13:44:25 -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 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ppa.h Remove all inclusions of <linux/config.h> 2006-10-04 03:38:54 -04:00
psi240i.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
psi240i.h
psi_chip.h
ql1040_fw.h
ql1280_fw.h
ql12160_fw.h
qla1280.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
qla1280.h
qlogicfas408.c Various drivers' irq handlers: kill dead code, needless casts 2006-10-06 15:00:58 -04:00
qlogicfas408.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
qlogicfas.c
qlogicpti_asm.c
qlogicpti.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01: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 version 1.80 2006-09-23 17:37:44 -05: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 [SCSI] use one-element sg list in scsi_send_eh_cmnd 2006-11-15 12:55:52 -06:00
scsi_ioctl.c [PATCH] scsi: kill overeager "not-ready" messages 2006-07-28 09:04:09 +02:00
scsi_lib.c [SCSI] untangle scsi_prep_fn 2006-11-15 14:14:20 -06: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] Add ability to scan scsi busses asynchronously 2006-10-11 13:44:25 -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 [SCSI] Add ability to scan scsi busses asynchronously 2006-10-11 13:44:25 -05:00
scsi_sysctl.c
scsi_sysfs.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
scsi_transport_api.h
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-09-02 13:37:43 -05: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_wait_scan.c [SCSI] Add ability to scan scsi busses asynchronously 2006-10-11 13:44:25 -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 [SCSI] Reduce polling in sd.c 2006-11-15 12:11:36 -06:00
seagate.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sg.c [SCSI] sg: fixes for large page_size 2006-09-26 09:23:15 -07: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] SCSI st: fix error handling in module init, sysfs 2006-10-04 13:16:29 -05: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 IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sun3_scsi_vme.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sun3_scsi.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sun3_scsi.h
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] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
t128.h
tmscsim.c Various drivers' irq handlers: kill dead code, needless casts 2006-10-06 15:00:58 -04: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 IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
zalon.c [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00