Append this line to /etc/system and reboot:
set scsi_options & ~0x80
This turns off Tagged Command Queuing, a SCSI feature that is improperly implemented in many older drives.
NOTE: this will seriously degrade performance on disks that do properly support tagged command queuing. Setting the SCSI options per broken target is therefor the preferred solution.
In Solaris 2.4 and later you can set those options per SCSI bus. See isp(7) and esp(7).
For some disks, all you need to do is decrease the maximum number of queued commands:
forceload: drv/esp set sd:sd_max_throttle=10
In later Solaris releases you can specify scsi_options per (broken) target or per SCSI bus. See esp(7d), isp(7d), from which this example /kernel/drv/esp.conf file is derived:
name="esp" parent="/iommu@f,e0000000/sbus@f,e0001000/espdma@f,400000" reg=0xf,0x800000,0x40 target1-scsi-options=0x58 scsi-options=0x178;