aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/sd_dif.c
diff options
context:
space:
mode:
authorMartin K. Petersen <martin.petersen@oracle.com>2014-09-26 19:20:05 -0400
committerJens Axboe <axboe@fb.com>2014-09-27 11:14:55 -0400
commitaae7df50190a640e51bfe11c93f94741ac82ff0b (patch)
tree5c10de05e0ebb21e83c5785b2d03ff10ea9e60dc /drivers/scsi/sd_dif.c
parentb1f01388574c9329922f760fc2a7335c2d14b08b (diff)
block: Integrity checksum flag
Make the choice of checksum a per-I/O property by introducing a flag that can be inspected by the SCSI layer. There are several reasons for this: 1. It allows us to switch choice of checksum without unloading and reloading the HBA driver. 2. During error recovery we need to be able to tell the HBA that checksums read from disk should not be verified and converted to IP checksums. 3. For error injection purposes we need to be able to write a bad guard tag to storage. Since the storage device only supports T10 CRC we need to be able to disable IP checksum conversion on the HBA. Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Sagi Grimberg <sagig@mellanox.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/scsi/sd_dif.c')
-rw-r--r--drivers/scsi/sd_dif.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/scsi/sd_dif.c b/drivers/scsi/sd_dif.c
index 4ce636fdc15f..2198abee619e 100644
--- a/drivers/scsi/sd_dif.c
+++ b/drivers/scsi/sd_dif.c
@@ -255,12 +255,14 @@ void sd_dif_config_host(struct scsi_disk *sdkp)
255 return; 255 return;
256 256
257 /* Enable DMA of protection information */ 257 /* Enable DMA of protection information */
258 if (scsi_host_get_guard(sdkp->device->host) & SHOST_DIX_GUARD_IP) 258 if (scsi_host_get_guard(sdkp->device->host) & SHOST_DIX_GUARD_IP) {
259 if (type == SD_DIF_TYPE3_PROTECTION) 259 if (type == SD_DIF_TYPE3_PROTECTION)
260 blk_integrity_register(disk, &dif_type3_integrity_ip); 260 blk_integrity_register(disk, &dif_type3_integrity_ip);
261 else 261 else
262 blk_integrity_register(disk, &dif_type1_integrity_ip); 262 blk_integrity_register(disk, &dif_type1_integrity_ip);
263 else 263
264 disk->integrity->flags |= BLK_INTEGRITY_IP_CHECKSUM;
265 } else
264 if (type == SD_DIF_TYPE3_PROTECTION) 266 if (type == SD_DIF_TYPE3_PROTECTION)
265 blk_integrity_register(disk, &dif_type3_integrity_crc); 267 blk_integrity_register(disk, &dif_type3_integrity_crc);
266 else 268 else