[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>
This commit is contained in:
Martin K. Petersen 2009-09-18 17:32:59 -04:00 committed by James Bottomley
parent 6e883b0e42
commit c6af404215
3 changed files with 7 additions and 32 deletions

View file

@ -56,8 +56,6 @@ static char *dif_op_str[] = {
"SCSI_PROT_WRITE_INSERT", "SCSI_PROT_WRITE_INSERT",
"SCSI_PROT_READ_PASS", "SCSI_PROT_READ_PASS",
"SCSI_PROT_WRITE_PASS", "SCSI_PROT_WRITE_PASS",
"SCSI_PROT_READ_CONVERT",
"SCSI_PROT_WRITE_CONVERT"
}; };
static void static void
lpfc_release_scsi_buf_s4(struct lpfc_hba *phba, struct lpfc_scsi_buf *psb); 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)
ret_prof = LPFC_PROF_A1; ret_prof = LPFC_PROF_A1;
break; break;
case SCSI_PROT_READ_CONVERT: case SCSI_PROT_READ_PASS:
case SCSI_PROT_WRITE_CONVERT: case SCSI_PROT_WRITE_PASS:
ret_prof = LPFC_PROF_AST1; ret_prof = LPFC_PROF_AST1;
break; break;
case SCSI_PROT_READ_PASS:
case SCSI_PROT_WRITE_PASS:
case SCSI_PROT_NORMAL: case SCSI_PROT_NORMAL:
default: default:
printk(KERN_ERR "Bad op/guard:%d/%d combination\n", printk(KERN_ERR "Bad op/guard:%d/%d combination\n",
@ -1157,8 +1153,6 @@ lpfc_sc_to_sli_prof(struct scsi_cmnd *sc)
ret_prof = LPFC_PROF_C1; ret_prof = LPFC_PROF_C1;
break; break;
case SCSI_PROT_READ_CONVERT:
case SCSI_PROT_WRITE_CONVERT:
case SCSI_PROT_READ_INSERT: case SCSI_PROT_READ_INSERT:
case SCSI_PROT_WRITE_STRIP: case SCSI_PROT_WRITE_STRIP:
case SCSI_PROT_NORMAL: case SCSI_PROT_NORMAL:
@ -1209,8 +1203,7 @@ lpfc_get_cmd_dif_parms(struct scsi_cmnd *sc, uint16_t *apptagmask,
static int cnt; static int cnt;
if (protcnt && (op == SCSI_PROT_WRITE_STRIP || if (protcnt && (op == SCSI_PROT_WRITE_STRIP ||
op == SCSI_PROT_WRITE_PASS || op == SCSI_PROT_WRITE_PASS)) {
op == SCSI_PROT_WRITE_CONVERT)) {
cnt++; cnt++;
spt = page_address(sg_page(scsi_prot_sglist(sc))) + 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)
case SCSI_PROT_WRITE_STRIP: case SCSI_PROT_WRITE_STRIP:
case SCSI_PROT_READ_PASS: case SCSI_PROT_READ_PASS:
case SCSI_PROT_WRITE_PASS: case SCSI_PROT_WRITE_PASS:
case SCSI_PROT_WRITE_CONVERT:
case SCSI_PROT_READ_CONVERT:
ret = LPFC_PG_TYPE_DIF_BUF; ret = LPFC_PG_TYPE_DIF_BUF;
break; break;
default: default:

View file

@ -364,15 +364,9 @@ void sd_dif_config_host(struct scsi_disk *sdkp)
*/ */
void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsigned int type) void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsigned int type)
{ {
int csum_convert, prot_op; int prot_op;
prot_op = 0; prot_op = SCSI_PROT_NORMAL;
/* Convert checksum? */
if (scsi_host_get_guard(scmd->device->host) != SHOST_DIX_GUARD_CRC)
csum_convert = 1;
else
csum_convert = 0;
BUG_ON(dif && (scmd->cmnd[0] == READ_6 || scmd->cmnd[0] == WRITE_6)); BUG_ON(dif && (scmd->cmnd[0] == READ_6 || scmd->cmnd[0] == WRITE_6));
@ -382,10 +376,7 @@ void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsig
case READ_12: case READ_12:
case READ_16: case READ_16:
if (dif && dix) if (dif && dix)
if (csum_convert) prot_op = SCSI_PROT_READ_PASS;
prot_op = SCSI_PROT_READ_CONVERT;
else
prot_op = SCSI_PROT_READ_PASS;
else if (dif && !dix) else if (dif && !dix)
prot_op = SCSI_PROT_READ_STRIP; prot_op = SCSI_PROT_READ_STRIP;
else if (!dif && dix) else if (!dif && dix)
@ -398,10 +389,7 @@ void sd_dif_op(struct scsi_cmnd *scmd, unsigned int dif, unsigned int dix, unsig
case WRITE_12: case WRITE_12:
case WRITE_16: case WRITE_16:
if (dif && dix) if (dif && dix)
if (csum_convert) prot_op = SCSI_PROT_WRITE_PASS;
prot_op = SCSI_PROT_WRITE_CONVERT;
else
prot_op = SCSI_PROT_WRITE_PASS;
else if (dif && !dix) else if (dif && !dix)
prot_op = SCSI_PROT_WRITE_INSERT; prot_op = SCSI_PROT_WRITE_INSERT;
else if (!dif && dix) else if (!dif && dix)

View file

@ -229,10 +229,6 @@ enum scsi_prot_operations {
/* OS-HBA: Protected, HBA-Target: Protected */ /* OS-HBA: Protected, HBA-Target: Protected */
SCSI_PROT_READ_PASS, SCSI_PROT_READ_PASS,
SCSI_PROT_WRITE_PASS, SCSI_PROT_WRITE_PASS,
/* OS-HBA: Protected, HBA-Target: Protected, checksum conversion */
SCSI_PROT_READ_CONVERT,
SCSI_PROT_WRITE_CONVERT,
}; };
static inline void scsi_set_prot_op(struct scsi_cmnd *scmd, unsigned char op) static inline void scsi_set_prot_op(struct scsi_cmnd *scmd, unsigned char op)