scsi_initialise_merge_fn() will only set highio if ->type == TYPE_DISK.
But it's called from scsi_add_lun()->scsi_alloc_sdev() before the type
is known. The type is -1 all the time in scsi_initialise_merge_fn()
and scsi always bounces.
This patch makes it do the right thing - just enable block-highmem for
all scsi devices.
Jens had this to say:
"I guess that block-highmem has been around long enough, that I can
use the term 'historically' at least in the kernel sense :-)
This extra check was added for IDE because each device type driver
(ide-disk, ide-cd, etc) needed to be updated to not assume virtual
mappings of request data was valid. I only did that for ide-disk,
since this is the only one where bounce buffering really hurt
performance wise. So while ide-cd and ide-tape etc could have been
updated, I deemed it uninteresting and not worthwhile.
Now, this was just carried straight into the scsi counter parts,
conveniently, because of laziness. A quick glance at sr shows that it
too can aviod bouncing easily (no changes needed). st may need some
changes, though. So again, for scsi it was a matter of not impacting
existing code in 2.4 too much.
So TYPE_DISK check can be killed in 2.5 if someone does the work of
checking that it is safe. I'm not so sure it will make eg your SCSI
CD-ROM that much faster :-)"