diff options
author | Martin K. Petersen <martin.petersen@oracle.com> | 2009-09-18 17:33:00 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-10-02 10:46:39 -0400 |
commit | 35e1a5d90b66487d754ef2f2dcbf1007f806d921 (patch) | |
tree | 964511498993ed8fe0c1604ab74ac7a3db9361ba /drivers/scsi/sd_dif.c | |
parent | c6af404215bab0d333accbb497f835d10cb0050c (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.c | 53 |
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 | */ | ||
365 | void 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 |