aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/sd_dif.c
diff options
context:
space:
mode:
authorMartin K. Petersen <martin.petersen@oracle.com>2009-09-18 17:33:00 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-10-02 10:46:39 -0400
commit35e1a5d90b66487d754ef2f2dcbf1007f806d921 (patch)
tree964511498993ed8fe0c1604ab74ac7a3db9361ba /drivers/scsi/sd_dif.c
parentc6af404215bab0d333accbb497f835d10cb0050c (diff)
[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>
Diffstat (limited to 'drivers/scsi/sd_dif.c')
-rw-r--r--drivers/scsi/sd_dif.c53
1 files changed, 0 insertions, 53 deletions
diff --git a/drivers/scsi/sd_dif.c b/drivers/scsi/sd_dif.c
index 84224dd21acf..88da97745710 100644
--- a/drivers/scsi/sd_dif.c
+++ b/drivers/scsi/sd_dif.c
@@ -320,15 +320,6 @@ void sd_dif_config_host(struct scsi_disk *sdkp)
320 dif = 0; dix = 1; 320 dif = 0; dix = 1;
321 } 321 }
322 322
323 if (type) {
324 if (dif)
325 sd_printk(KERN_NOTICE, sdkp,
326 "Enabling DIF Type %d protection\n", type);
327 else
328 sd_printk(KERN_NOTICE, sdkp,
329 "Disabling DIF Type %d protection\n", type);
330 }
331
332 if (!dix) 323 if (!dix)
333 return; 324 return;
334 325
@@ -360,50 +351,6 @@ void sd_dif_config_host(struct scsi_disk *sdkp)
360} 351}
361 352
362/* 353/*
363 * DIF DMA operation magic decoder ring.
364 */
365void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsigned int type)
366{
367 int prot_op;
368
369 prot_op = SCSI_PROT_NORMAL;
370
371 BUG_ON(dif && (scmd->cmnd[0] == READ_6 || scmd->cmnd[0] == WRITE_6));
372
373 switch (scmd->cmnd[0]) {
374 case READ_6:
375 case READ_10:
376 case READ_12:
377 case READ_16:
378 if (dif && dix)
379 prot_op = SCSI_PROT_READ_PASS;
380 else if (dif && !dix)
381 prot_op = SCSI_PROT_READ_STRIP;
382 else if (!dif && dix)
383 prot_op = SCSI_PROT_READ_INSERT;
384
385 break;
386
387 case WRITE_6:
388 case WRITE_10:
389 case WRITE_12:
390 case WRITE_16:
391 if (dif && dix)
392 prot_op = SCSI_PROT_WRITE_PASS;
393 else if (dif && !dix)
394 prot_op = SCSI_PROT_WRITE_INSERT;
395 else if (!dif && dix)
396 prot_op = SCSI_PROT_WRITE_STRIP;
397
398 break;
399 }
400
401 scsi_set_prot_op(scmd, prot_op);
402 if (dif)
403 scsi_set_prot_type(scmd, type);
404}
405
406/*
407 * The virtual start sector is the one that was originally submitted 354 * The virtual start sector is the one that was originally submitted
408 * by the block layer. Due to partitioning, MD/DM cloning, etc. the 355 * by the block layer. Due to partitioning, MD/DM cloning, etc. the
409 * actual physical start sector is likely to be different. Remap 356 * actual physical start sector is likely to be different. Remap