Martin K. Petersen 5db44863b6 [SCSI] sd: Implement support for WRITE SAME
Implement support for WRITE SAME(10) and WRITE SAME(16) in the SCSI disk
driver.

 - We set the default maximum to 0xFFFF because there are several
   devices out there that only support two-byte block counts even with
   WRITE SAME(16). We only enable transfers bigger than 0xFFFF if the
   device explicitly reports MAXIMUM WRITE SAME LENGTH in the BLOCK
   LIMITS VPD.

 - max_write_same_blocks can be overriden per-device basis in sysfs.

 - The UNMAP discovery heuristics remain unchanged but the discard
   limits are tweaked to match the "real" WRITE SAME commands.

 - In the error handling logic we now distinguish between WRITE SAME
   with and without UNMAP set.

The discovery process heuristics are:

 - If the device reports a SCSI level of SPC-3 or greater we'll issue
   READ SUPPORTED OPERATION CODES to find out whether WRITE SAME(16) is
   supported. If that's the case we will use it.

 - If the device supports the block limits VPD and reports a MAXIMUM
   WRITE SAME LENGTH bigger than 0xFFFF we will use WRITE SAME(16).

 - Otherwise we will use WRITE SAME(10) unless the target LBA is beyond
   0xFFFFFFFF or the block count exceeds 0xFFFF.

 - no_write_same is set for ATA, FireWire and USB.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Mike Snitzer <snitzer@redhat.com>
Reviewed-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
2012-11-13 22:45:42 -08:00
..
2011-03-31 11:26:23 -03:00
2012-10-02 19:01:32 -07:00
2012-07-24 18:11:22 -07:00
2011-07-26 16:49:47 -07:00
2012-10-02 19:01:32 -07:00
2012-10-02 19:01:32 -07:00
2011-09-26 09:28:58 -05:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2010-12-22 18:57:02 +01:00
2010-11-16 13:33:23 -08:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2012-03-28 18:30:03 +01:00
2010-11-16 13:33:23 -08:00
2011-05-01 10:22:40 -05:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2012-03-28 18:30:03 +01:00
2012-09-01 08:43:34 -07:00
2012-10-02 19:01:32 -07:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2012-08-24 13:10:28 +04:00
2011-03-31 11:26:23 -03:00
2012-01-02 13:04:55 +01:00
2012-03-22 12:55:29 -07:00
2012-01-22 14:50:03 +01:00
2012-07-20 08:58:13 +01:00
2012-03-28 18:30:03 +01:00
2010-11-16 13:33:23 -08:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2012-03-28 18:30:03 +01:00
2011-03-31 11:26:23 -03:00
2012-03-28 18:30:03 +01:00
2011-03-31 11:26:23 -03:00
2012-03-28 18:30:03 +01:00
2010-11-16 13:33:23 -08:00
2012-02-21 11:40:37 +01:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2012-10-28 13:26:37 -07:00
2012-11-13 21:11:31 -08:00
2012-01-03 22:54:07 -05:00
2012-01-02 13:04:55 +01:00
2012-09-24 13:07:02 +04:00
2012-09-14 17:59:29 +01:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2012-03-28 18:30:03 +01:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00