RE: [RFC PATCH 1/1] libsas: Add data integrity support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> From: Chuck Tuffli <chuck_tuffli@xxxxxxxxxxxxxx>
> 
> This patch adds Data Integrity support to libsas
> 
> Signed-off-by: Chuck Tuffli <chuck_tuffli@xxxxxxxxxxxxxx>
> ---
> 
> diff --git a/drivers/scsi/libsas/sas_scsi_host.c
> b/drivers/scsi/libsas/sas_scsi_host.c
> index 2119871..91c6afe 100644
> --- a/drivers/scsi/libsas/sas_scsi_host.c
> +++ b/drivers/scsi/libsas/sas_scsi_host.c
> @@ -54,7 +54,7 @@ static void sas_scsi_task_done(struct sas_task *task)
>  {
>  	struct task_status_struct *ts = &task->task_status;
>  	struct scsi_cmnd *sc = task->uldd_task;
> -	int hs = 0, stat = 0;
> +	int ds = 0, hs = 0, stat = 0;
> 
>  	if (unlikely(task->task_state_flags & SAS_TASK_STATE_ABORTED)) {
>  		/* Aborted tasks will be completed by the error handler */
> @@ -118,13 +118,39 @@ static void sas_scsi_task_done(struct sas_task
*task)
>  			       min(SCSI_SENSE_BUFFERSIZE,
ts->buf_valid_size));
>  			stat = SAM_STAT_CHECK_CONDITION;
>  			break;
> +		case SAS_DIF_ERR_GUARD_TAG:
> +			BUG_ON(NULL == sc->sense_buffer);
> +			scsi_build_sense_buffer(1, sc->sense_buffer,
> +					ILLEGAL_REQUEST, 0x10, 0x1);
> +			ds = DRIVER_SENSE;
> +			hs = DID_ABORT;
> +			stat = SAM_STAT_CHECK_CONDITION;
> +			break;
> +		case SAS_DIF_ERR_APP_TAG:
> +			BUG_ON(NULL == sc->sense_buffer);
> +			scsi_build_sense_buffer(1, sc->sense_buffer,
> +					ILLEGAL_REQUEST, 0x10, 0x2);
> +			ds = DRIVER_SENSE;
> +			hs = DID_ABORT;
> +			stat = SAM_STAT_CHECK_CONDITION;
> +			break;
> +		case SAS_DIF_ERR_REF_TAG:
> +			BUG_ON(NULL == sc->sense_buffer);
> +			scsi_build_sense_buffer(1, sc->sense_buffer,
> +					ILLEGAL_REQUEST, 0x10, 0x3);
> +			ds = DRIVER_SENSE;
> +			hs = DID_ABORT;
> +			stat = SAM_STAT_CHECK_CONDITION;
> +			break;
>  		default:
>  			stat = ts->stat;
>  			break;
>  		}
>  	}
>  	ASSIGN_SAS_TASK(sc, NULL);
> -	sc->result = (hs << 16) | stat;
> +	sc->result = stat;
> +	set_host_byte(sc, hs);
> +	set_driver_byte(sc, ds);
>  	list_del_init(&task->list);
>  	sas_free_task(task);
>  	sc->scsi_done(sc);
> @@ -152,6 +178,10 @@ static struct sas_task *sas_create_task(struct
scsi_cmnd
> *cmd,
>  	task->ssp_task.task_attr = TASK_ATTR_SIMPLE;
>  	memcpy(task->ssp_task.cdb, cmd->cmnd, 16);
> 
> +	task->prot = scsi_get_prot_op(cmd);
> +	task->prot_sg = scsi_prot_sglist(cmd);
> +	task->prot_num_scatter = scsi_prot_sg_count(cmd);
> +
[Jack Wang] Should we also save prot_type into a field in task?
Others looks fine.
Reviewed-by: Jack Wang <jack_wang@xxxxxxxxx>
>  	task->scatter = scsi_sglist(cmd);
>  	task->num_scatter = scsi_sg_count(cmd);
>  	task->total_xfer_len = scsi_bufflen(cmd);
> diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
> index 8f6bb9c..04bfa42 100644
> --- a/include/scsi/libsas.h
> +++ b/include/scsi/libsas.h
> @@ -441,6 +441,9 @@ enum exec_status {
>  	SAS_NAK_R_ERR,
>  	SAS_PENDING,
>  	SAS_ABORTED_TASK,
> +	SAS_DIF_ERR_APP_TAG,
> +	SAS_DIF_ERR_REF_TAG,
> +	SAS_DIF_ERR_GUARD_TAG,
>  };
> 
>  /* When a task finishes with a response, the LLDD examines the
> @@ -544,7 +547,10 @@ struct sas_task {
>  	struct scatterlist *scatter;
>  	int    num_scatter;
>  	u32    total_xfer_len;
> -	u8     data_dir:2;	  /* Use PCI_DMA_... */
> +	struct scatterlist *prot_sg;
> +	int    prot_num_scatter;
> +	u8     data_dir:2,	  /* Use PCI_DMA_... */
> +		   prot:3;
> 
>  	struct task_status_struct task_status;
>  	void   (*task_done)(struct sas_task *);
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux