diff options
author | Martin K. Petersen <martin.petersen@oracle.com> | 2009-09-18 17:32:59 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-10-02 10:46:25 -0400 |
commit | c6af404215bab0d333accbb497f835d10cb0050c (patch) | |
tree | fc58c360c3d678405b4bd38fd7894af9c8b91edd | |
parent | 6e883b0e42739aa560133cfaf41be1138c51a500 (diff) |
[SCSI] Deprecate SCSI_PROT_*_CONVERT operations
The checksum format is orthogonal to whether the protection information
is being passed on beyond the HBA or not. It is perfectly valid to use
a non-T10 CRC with WRITE_STRIP and READ_INSERT.
Consequently it no longer makes sense to explicitly refer to the
conversion in the protection operation. Update sd_dif and lpfc
accordingly.
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Acked-by: Ihab Hamadi <Ihab.Hamadi@Emulex.Com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
-rw-r--r-- | drivers/scsi/lpfc/lpfc_scsi.c | 15 | ||||
-rw-r--r-- | drivers/scsi/sd_dif.c | 20 | ||||
-rw-r--r-- | include/scsi/scsi_cmnd.h | 4 |
3 files changed, 7 insertions, 32 deletions
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c index 61d089703806..c88f59f0ce30 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c | |||
@@ -56,8 +56,6 @@ static char *dif_op_str[] = { | |||
56 | "SCSI_PROT_WRITE_INSERT", | 56 | "SCSI_PROT_WRITE_INSERT", |
57 | "SCSI_PROT_READ_PASS", | 57 | "SCSI_PROT_READ_PASS", |
58 | "SCSI_PROT_WRITE_PASS", | 58 | "SCSI_PROT_WRITE_PASS", |
59 | "SCSI_PROT_READ_CONVERT", | ||
60 | "SCSI_PROT_WRITE_CONVERT" | ||
61 | }; | 59 | }; |
62 | static void | 60 | static void |
63 | lpfc_release_scsi_buf_s4(struct lpfc_hba *phba, struct lpfc_scsi_buf *psb); | 61 | lpfc_release_scsi_buf_s4(struct lpfc_hba *phba, struct lpfc_scsi_buf *psb); |
@@ -1131,13 +1129,11 @@ lpfc_sc_to_sli_prof(struct scsi_cmnd *sc) | |||
1131 | ret_prof = LPFC_PROF_A1; | 1129 | ret_prof = LPFC_PROF_A1; |
1132 | break; | 1130 | break; |
1133 | 1131 | ||
1134 | case SCSI_PROT_READ_CONVERT: | 1132 | case SCSI_PROT_READ_PASS: |
1135 | case SCSI_PROT_WRITE_CONVERT: | 1133 | case SCSI_PROT_WRITE_PASS: |
1136 | ret_prof = LPFC_PROF_AST1; | 1134 | ret_prof = LPFC_PROF_AST1; |
1137 | break; | 1135 | break; |
1138 | 1136 | ||
1139 | case SCSI_PROT_READ_PASS: | ||
1140 | case SCSI_PROT_WRITE_PASS: | ||
1141 | case SCSI_PROT_NORMAL: | 1137 | case SCSI_PROT_NORMAL: |
1142 | default: | 1138 | default: |
1143 | printk(KERN_ERR "Bad op/guard:%d/%d combination\n", | 1139 | printk(KERN_ERR "Bad op/guard:%d/%d combination\n", |
@@ -1157,8 +1153,6 @@ lpfc_sc_to_sli_prof(struct scsi_cmnd *sc) | |||
1157 | ret_prof = LPFC_PROF_C1; | 1153 | ret_prof = LPFC_PROF_C1; |
1158 | break; | 1154 | break; |
1159 | 1155 | ||
1160 | case SCSI_PROT_READ_CONVERT: | ||
1161 | case SCSI_PROT_WRITE_CONVERT: | ||
1162 | case SCSI_PROT_READ_INSERT: | 1156 | case SCSI_PROT_READ_INSERT: |
1163 | case SCSI_PROT_WRITE_STRIP: | 1157 | case SCSI_PROT_WRITE_STRIP: |
1164 | case SCSI_PROT_NORMAL: | 1158 | case SCSI_PROT_NORMAL: |
@@ -1209,8 +1203,7 @@ lpfc_get_cmd_dif_parms(struct scsi_cmnd *sc, uint16_t *apptagmask, | |||
1209 | static int cnt; | 1203 | static int cnt; |
1210 | 1204 | ||
1211 | if (protcnt && (op == SCSI_PROT_WRITE_STRIP || | 1205 | if (protcnt && (op == SCSI_PROT_WRITE_STRIP || |
1212 | op == SCSI_PROT_WRITE_PASS || | 1206 | op == SCSI_PROT_WRITE_PASS)) { |
1213 | op == SCSI_PROT_WRITE_CONVERT)) { | ||
1214 | 1207 | ||
1215 | cnt++; | 1208 | cnt++; |
1216 | spt = page_address(sg_page(scsi_prot_sglist(sc))) + | 1209 | spt = page_address(sg_page(scsi_prot_sglist(sc))) + |
@@ -1501,8 +1494,6 @@ lpfc_prot_group_type(struct lpfc_hba *phba, struct scsi_cmnd *sc) | |||
1501 | case SCSI_PROT_WRITE_STRIP: | 1494 | case SCSI_PROT_WRITE_STRIP: |
1502 | case SCSI_PROT_READ_PASS: | 1495 | case SCSI_PROT_READ_PASS: |
1503 | case SCSI_PROT_WRITE_PASS: | 1496 | case SCSI_PROT_WRITE_PASS: |
1504 | case SCSI_PROT_WRITE_CONVERT: | ||
1505 | case SCSI_PROT_READ_CONVERT: | ||
1506 | ret = LPFC_PG_TYPE_DIF_BUF; | 1497 | ret = LPFC_PG_TYPE_DIF_BUF; |
1507 | break; | 1498 | break; |
1508 | default: | 1499 | default: |
diff --git a/drivers/scsi/sd_dif.c b/drivers/scsi/sd_dif.c index 82f14a9482d0..84224dd21acf 100644 --- a/drivers/scsi/sd_dif.c +++ b/drivers/scsi/sd_dif.c | |||
@@ -364,15 +364,9 @@ void sd_dif_config_host(struct scsi_disk *sdkp) | |||
364 | */ | 364 | */ |
365 | void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsigned int type) | 365 | void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsigned int type) |
366 | { | 366 | { |
367 | int csum_convert, prot_op; | 367 | int prot_op; |
368 | 368 | ||
369 | prot_op = 0; | 369 | prot_op = SCSI_PROT_NORMAL; |
370 | |||
371 | /* Convert checksum? */ | ||
372 | if (scsi_host_get_guard(scmd->device->host) != SHOST_DIX_GUARD_CRC) | ||
373 | csum_convert = 1; | ||
374 | else | ||
375 | csum_convert = 0; | ||
376 | 370 | ||
377 | BUG_ON(dif && (scmd->cmnd[0] == READ_6 || scmd->cmnd[0] == WRITE_6)); | 371 | BUG_ON(dif && (scmd->cmnd[0] == READ_6 || scmd->cmnd[0] == WRITE_6)); |
378 | 372 | ||
@@ -382,10 +376,7 @@ void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsig | |||
382 | case READ_12: | 376 | case READ_12: |
383 | case READ_16: | 377 | case READ_16: |
384 | if (dif && dix) | 378 | if (dif && dix) |
385 | if (csum_convert) | 379 | prot_op = SCSI_PROT_READ_PASS; |
386 | prot_op = SCSI_PROT_READ_CONVERT; | ||
387 | else | ||
388 | prot_op = SCSI_PROT_READ_PASS; | ||
389 | else if (dif && !dix) | 380 | else if (dif && !dix) |
390 | prot_op = SCSI_PROT_READ_STRIP; | 381 | prot_op = SCSI_PROT_READ_STRIP; |
391 | else if (!dif && dix) | 382 | else if (!dif && dix) |
@@ -398,10 +389,7 @@ void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsig | |||
398 | case WRITE_12: | 389 | case WRITE_12: |
399 | case WRITE_16: | 390 | case WRITE_16: |
400 | if (dif && dix) | 391 | if (dif && dix) |
401 | if (csum_convert) | 392 | prot_op = SCSI_PROT_WRITE_PASS; |
402 | prot_op = SCSI_PROT_WRITE_CONVERT; | ||
403 | else | ||
404 | prot_op = SCSI_PROT_WRITE_PASS; | ||
405 | else if (dif && !dix) | 393 | else if (dif && !dix) |
406 | prot_op = SCSI_PROT_WRITE_INSERT; | 394 | prot_op = SCSI_PROT_WRITE_INSERT; |
407 | else if (!dif && dix) | 395 | else if (!dif && dix) |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 3878d1dc7f59..a5e885a111df 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
@@ -229,10 +229,6 @@ enum scsi_prot_operations { | |||
229 | /* OS-HBA: Protected, HBA-Target: Protected */ | 229 | /* OS-HBA: Protected, HBA-Target: Protected */ |
230 | SCSI_PROT_READ_PASS, | 230 | SCSI_PROT_READ_PASS, |
231 | SCSI_PROT_WRITE_PASS, | 231 | SCSI_PROT_WRITE_PASS, |
232 | |||
233 | /* OS-HBA: Protected, HBA-Target: Protected, checksum conversion */ | ||
234 | SCSI_PROT_READ_CONVERT, | ||
235 | SCSI_PROT_WRITE_CONVERT, | ||
236 | }; | 232 | }; |
237 | 233 | ||
238 | static inline void scsi_set_prot_op(struct scsi_cmnd *scmd, unsigned char op) | 234 | static inline void scsi_set_prot_op(struct scsi_cmnd *scmd, unsigned char op) |