[SCSI] sd: Detach DIF from block integrity infrastructure

So far we have only issued DIF commands if CONFIG_BLK_DEV_INTEGRITY is
enabled.  However, communication between initiator and target should be
independent of protection information DMA.  There are DIF-only host
adapters coming out that will be able to take advantage of this.

Move the relevant DIF bits to sd.c.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
Martin K. Petersen
2009-09-18 17:33:00 -04:00
committed by James Bottomley
parent c6af404215
commit 35e1a5d90b
4 changed files with 53 additions and 80 deletions

View File

@@ -320,15 +320,6 @@ void sd_dif_config_host(struct scsi_disk *sdkp)
dif = 0; dix = 1;
}
if (type) {
if (dif)
sd_printk(KERN_NOTICE, sdkp,
"Enabling DIF Type %d protection\n", type);
else
sd_printk(KERN_NOTICE, sdkp,
"Disabling DIF Type %d protection\n", type);
}
if (!dix)
return;
@@ -359,50 +350,6 @@ void sd_dif_config_host(struct scsi_disk *sdkp)
}
}
/*
* DIF DMA operation magic decoder ring.
*/
void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsigned int type)
{
int prot_op;
prot_op = SCSI_PROT_NORMAL;
BUG_ON(dif && (scmd->cmnd[0] == READ_6 || scmd->cmnd[0] == WRITE_6));
switch (scmd->cmnd[0]) {
case READ_6:
case READ_10:
case READ_12:
case READ_16:
if (dif && dix)
prot_op = SCSI_PROT_READ_PASS;
else if (dif && !dix)
prot_op = SCSI_PROT_READ_STRIP;
else if (!dif && dix)
prot_op = SCSI_PROT_READ_INSERT;
break;
case WRITE_6:
case WRITE_10:
case WRITE_12:
case WRITE_16:
if (dif && dix)
prot_op = SCSI_PROT_WRITE_PASS;
else if (dif && !dix)
prot_op = SCSI_PROT_WRITE_INSERT;
else if (!dif && dix)
prot_op = SCSI_PROT_WRITE_STRIP;
break;
}
scsi_set_prot_op(scmd, prot_op);
if (dif)
scsi_set_prot_type(scmd, type);
}
/*
* The virtual start sector is the one that was originally submitted
* by the block layer. Due to partitioning, MD/DM cloning, etc. the