diff mbox series

[v2,14/44] csio: Stop using the SCSI pointer

Message ID 20220208172514.3481-15-bvanassche@acm.org
State Superseded
Headers show
Series Remove the SCSI pointer from struct scsi_cmnd | expand

Commit Message

Bart Van Assche Feb. 8, 2022, 5:24 p.m. UTC
Set .cmd_size in the SCSI host template instead of using the SCSI pointer
from struct scsi_cmnd. This patch prepares for removal of the SCSI pointer
from struct scsi_cmnd.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/csiostor/csio_scsi.c | 20 +++++++++++---------
 drivers/scsi/csiostor/csio_scsi.h | 10 ++++++++++
 2 files changed, 21 insertions(+), 9 deletions(-)

Comments

Hannes Reinecke Feb. 9, 2022, 7:41 a.m. UTC | #1
On 2/8/22 18:24, Bart Van Assche wrote:
> Set .cmd_size in the SCSI host template instead of using the SCSI pointer
> from struct scsi_cmnd. This patch prepares for removal of the SCSI pointer
> from struct scsi_cmnd.
> 
> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
>   drivers/scsi/csiostor/csio_scsi.c | 20 +++++++++++---------
>   drivers/scsi/csiostor/csio_scsi.h | 10 ++++++++++
>   2 files changed, 21 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c
> index 55db02521221..9aafe0002ab1 100644
> --- a/drivers/scsi/csiostor/csio_scsi.c
> +++ b/drivers/scsi/csiostor/csio_scsi.c
> @@ -166,7 +166,7 @@ csio_scsi_fcp_cmnd(struct csio_ioreq *req, void *addr)
>   	struct scsi_cmnd *scmnd = csio_scsi_cmnd(req);
>   
>   	/* Check for Task Management */
> -	if (likely(scmnd->SCp.Message == 0)) {
> +	if (likely(csio_priv(scmnd)->fc_tm_flags == 0)) {
>   		int_to_scsilun(scmnd->device->lun, &fcp_cmnd->fc_lun);
>   		fcp_cmnd->fc_tm_flags = 0;
>   		fcp_cmnd->fc_cmdref = 0;
> @@ -185,7 +185,7 @@ csio_scsi_fcp_cmnd(struct csio_ioreq *req, void *addr)
>   	} else {
>   		memset(fcp_cmnd, 0, sizeof(*fcp_cmnd));
>   		int_to_scsilun(scmnd->device->lun, &fcp_cmnd->fc_lun);
> -		fcp_cmnd->fc_tm_flags = (uint8_t)scmnd->SCp.Message;
> +		fcp_cmnd->fc_tm_flags = csio_priv(scmnd)->fc_tm_flags;
>   	}
>   }
>   
> @@ -1855,7 +1855,7 @@ csio_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmnd)
>   
>   	/* Needed during abort */
>   	cmnd->host_scribble = (unsigned char *)ioreq;
> -	cmnd->SCp.Message = 0;
> +	csio_priv(cmnd)->fc_tm_flags = 0;
>   
>   	/* Kick off SCSI IO SM on the ioreq */
>   	spin_lock_irqsave(&hw->lock, flags);
> @@ -2026,7 +2026,7 @@ csio_tm_cbfn(struct csio_hw *hw, struct csio_ioreq *req)
>   		      req, req->wr_status);
>   
>   	/* Cache FW return status */
> -	cmnd->SCp.Status = req->wr_status;
> +	csio_priv(cmnd)->wr_status = req->wr_status;
>   
>   	/* Special handling based on FCP response */
>   
> @@ -2049,7 +2049,7 @@ csio_tm_cbfn(struct csio_hw *hw, struct csio_ioreq *req)
>   		/* Modify return status if flags indicate success */
>   		if (flags & FCP_RSP_LEN_VAL)
>   			if (rsp_info->rsp_code == FCP_TMF_CMPL)
> -				cmnd->SCp.Status = FW_SUCCESS;
> +				csio_priv(cmnd)->wr_status = FW_SUCCESS;
>   
>   		csio_dbg(hw, "TM FCP rsp code: %d\n", rsp_info->rsp_code);
>   	}
> @@ -2125,9 +2125,9 @@ csio_eh_lun_reset_handler(struct scsi_cmnd *cmnd)
>   
>   	csio_scsi_cmnd(ioreq)	= cmnd;
>   	cmnd->host_scribble	= (unsigned char *)ioreq;
> -	cmnd->SCp.Status	= 0;
> +	csio_priv(cmnd)->wr_status = 0;
>   
> -	cmnd->SCp.Message	= FCP_TMF_LUN_RESET;
> +	csio_priv(cmnd)->fc_tm_flags = FCP_TMF_LUN_RESET;
>   	ioreq->tmo		= CSIO_SCSI_LUNRST_TMO_MS / 1000;
>   
>   	/*
> @@ -2178,9 +2178,10 @@ csio_eh_lun_reset_handler(struct scsi_cmnd *cmnd)
>   	}
>   
>   	/* LUN reset returned, check cached status */
> -	if (cmnd->SCp.Status != FW_SUCCESS) {
> +	if (csio_priv(cmnd)->wr_status != FW_SUCCESS) {
>   		csio_err(hw, "LUN reset failed (%d:%llu), status: %d\n",
> -			 cmnd->device->id, cmnd->device->lun, cmnd->SCp.Status);
> +			 cmnd->device->id, cmnd->device->lun,
> +			 csio_priv(cmnd)->wr_status);
>   		goto fail;
>   	}
>   
> @@ -2271,6 +2272,7 @@ struct scsi_host_template csio_fcoe_shost_template = {
>   	.name			= CSIO_DRV_DESC,
>   	.proc_name		= KBUILD_MODNAME,
>   	.queuecommand		= csio_queuecommand,
> +	.cmd_size		= sizeof(struct csio_cmd_priv),
>   	.eh_timed_out		= fc_eh_timed_out,
>   	.eh_abort_handler	= csio_eh_abort_handler,
>   	.eh_device_reset_handler = csio_eh_lun_reset_handler,
> diff --git a/drivers/scsi/csiostor/csio_scsi.h b/drivers/scsi/csiostor/csio_scsi.h
> index 2257c3dcf724..39dda3c88f0d 100644
> --- a/drivers/scsi/csiostor/csio_scsi.h
> +++ b/drivers/scsi/csiostor/csio_scsi.h
> @@ -188,6 +188,16 @@ struct csio_scsi_level_data {
>   	uint64_t		oslun;
>   };
>   
> +struct csio_cmd_priv {
> +	uint8_t fc_tm_flags;	/* task management flags */
> +	uint16_t wr_status;
> +};
> +
> +static inline struct csio_cmd_priv *csio_priv(struct scsi_cmnd *cmd)
> +{
> +	return scsi_cmd_priv(cmd);
> +}
> +
>   static inline struct csio_ioreq *
>   csio_get_scsi_ioreq(struct csio_scsim *scm)
>   {

Similar comments to the bfa driver: if you allocate a command payload it 
would make sense to move the 'host_scribble' contents in there, too.

Cheers,

Hannes
Himanshu Madhani Feb. 9, 2022, 6:03 p.m. UTC | #2
> On Feb 8, 2022, at 9:24 AM, Bart Van Assche <bvanassche@acm.org> wrote:
> 
> Set .cmd_size in the SCSI host template instead of using the SCSI pointer
> from struct scsi_cmnd. This patch prepares for removal of the SCSI pointer
> from struct scsi_cmnd.
> 
> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
> drivers/scsi/csiostor/csio_scsi.c | 20 +++++++++++---------
> drivers/scsi/csiostor/csio_scsi.h | 10 ++++++++++
> 2 files changed, 21 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c
> index 55db02521221..9aafe0002ab1 100644
> --- a/drivers/scsi/csiostor/csio_scsi.c
> +++ b/drivers/scsi/csiostor/csio_scsi.c
> @@ -166,7 +166,7 @@ csio_scsi_fcp_cmnd(struct csio_ioreq *req, void *addr)
> 	struct scsi_cmnd *scmnd = csio_scsi_cmnd(req);
> 
> 	/* Check for Task Management */
> -	if (likely(scmnd->SCp.Message == 0)) {
> +	if (likely(csio_priv(scmnd)->fc_tm_flags == 0)) {
> 		int_to_scsilun(scmnd->device->lun, &fcp_cmnd->fc_lun);
> 		fcp_cmnd->fc_tm_flags = 0;
> 		fcp_cmnd->fc_cmdref = 0;
> @@ -185,7 +185,7 @@ csio_scsi_fcp_cmnd(struct csio_ioreq *req, void *addr)
> 	} else {
> 		memset(fcp_cmnd, 0, sizeof(*fcp_cmnd));
> 		int_to_scsilun(scmnd->device->lun, &fcp_cmnd->fc_lun);
> -		fcp_cmnd->fc_tm_flags = (uint8_t)scmnd->SCp.Message;
> +		fcp_cmnd->fc_tm_flags = csio_priv(scmnd)->fc_tm_flags;
> 	}
> }
> 
> @@ -1855,7 +1855,7 @@ csio_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmnd)
> 
> 	/* Needed during abort */
> 	cmnd->host_scribble = (unsigned char *)ioreq;
> -	cmnd->SCp.Message = 0;
> +	csio_priv(cmnd)->fc_tm_flags = 0;
> 
> 	/* Kick off SCSI IO SM on the ioreq */
> 	spin_lock_irqsave(&hw->lock, flags);
> @@ -2026,7 +2026,7 @@ csio_tm_cbfn(struct csio_hw *hw, struct csio_ioreq *req)
> 		      req, req->wr_status);
> 
> 	/* Cache FW return status */
> -	cmnd->SCp.Status = req->wr_status;
> +	csio_priv(cmnd)->wr_status = req->wr_status;
> 
> 	/* Special handling based on FCP response */
> 
> @@ -2049,7 +2049,7 @@ csio_tm_cbfn(struct csio_hw *hw, struct csio_ioreq *req)
> 		/* Modify return status if flags indicate success */
> 		if (flags & FCP_RSP_LEN_VAL)
> 			if (rsp_info->rsp_code == FCP_TMF_CMPL)
> -				cmnd->SCp.Status = FW_SUCCESS;
> +				csio_priv(cmnd)->wr_status = FW_SUCCESS;
> 
> 		csio_dbg(hw, "TM FCP rsp code: %d\n", rsp_info->rsp_code);
> 	}
> @@ -2125,9 +2125,9 @@ csio_eh_lun_reset_handler(struct scsi_cmnd *cmnd)
> 
> 	csio_scsi_cmnd(ioreq)	= cmnd;
> 	cmnd->host_scribble	= (unsigned char *)ioreq;
> -	cmnd->SCp.Status	= 0;
> +	csio_priv(cmnd)->wr_status = 0;
> 
> -	cmnd->SCp.Message	= FCP_TMF_LUN_RESET;
> +	csio_priv(cmnd)->fc_tm_flags = FCP_TMF_LUN_RESET;
> 	ioreq->tmo		= CSIO_SCSI_LUNRST_TMO_MS / 1000;
> 
> 	/*
> @@ -2178,9 +2178,10 @@ csio_eh_lun_reset_handler(struct scsi_cmnd *cmnd)
> 	}
> 
> 	/* LUN reset returned, check cached status */
> -	if (cmnd->SCp.Status != FW_SUCCESS) {
> +	if (csio_priv(cmnd)->wr_status != FW_SUCCESS) {
> 		csio_err(hw, "LUN reset failed (%d:%llu), status: %d\n",
> -			 cmnd->device->id, cmnd->device->lun, cmnd->SCp.Status);
> +			 cmnd->device->id, cmnd->device->lun,
> +			 csio_priv(cmnd)->wr_status);
> 		goto fail;
> 	}
> 
> @@ -2271,6 +2272,7 @@ struct scsi_host_template csio_fcoe_shost_template = {
> 	.name			= CSIO_DRV_DESC,
> 	.proc_name		= KBUILD_MODNAME,
> 	.queuecommand		= csio_queuecommand,
> +	.cmd_size		= sizeof(struct csio_cmd_priv),
> 	.eh_timed_out		= fc_eh_timed_out,
> 	.eh_abort_handler	= csio_eh_abort_handler,
> 	.eh_device_reset_handler = csio_eh_lun_reset_handler,
> diff --git a/drivers/scsi/csiostor/csio_scsi.h b/drivers/scsi/csiostor/csio_scsi.h
> index 2257c3dcf724..39dda3c88f0d 100644
> --- a/drivers/scsi/csiostor/csio_scsi.h
> +++ b/drivers/scsi/csiostor/csio_scsi.h
> @@ -188,6 +188,16 @@ struct csio_scsi_level_data {
> 	uint64_t		oslun;
> };
> 
> +struct csio_cmd_priv {
> +	uint8_t fc_tm_flags;	/* task management flags */
> +	uint16_t wr_status;
> +};
> +
> +static inline struct csio_cmd_priv *csio_priv(struct scsi_cmnd *cmd)
> +{
> +	return scsi_cmd_priv(cmd);
> +}
> +
> static inline struct csio_ioreq *
> csio_get_scsi_ioreq(struct csio_scsim *scm)
> {

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering
diff mbox series

Patch

diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c
index 55db02521221..9aafe0002ab1 100644
--- a/drivers/scsi/csiostor/csio_scsi.c
+++ b/drivers/scsi/csiostor/csio_scsi.c
@@ -166,7 +166,7 @@  csio_scsi_fcp_cmnd(struct csio_ioreq *req, void *addr)
 	struct scsi_cmnd *scmnd = csio_scsi_cmnd(req);
 
 	/* Check for Task Management */
-	if (likely(scmnd->SCp.Message == 0)) {
+	if (likely(csio_priv(scmnd)->fc_tm_flags == 0)) {
 		int_to_scsilun(scmnd->device->lun, &fcp_cmnd->fc_lun);
 		fcp_cmnd->fc_tm_flags = 0;
 		fcp_cmnd->fc_cmdref = 0;
@@ -185,7 +185,7 @@  csio_scsi_fcp_cmnd(struct csio_ioreq *req, void *addr)
 	} else {
 		memset(fcp_cmnd, 0, sizeof(*fcp_cmnd));
 		int_to_scsilun(scmnd->device->lun, &fcp_cmnd->fc_lun);
-		fcp_cmnd->fc_tm_flags = (uint8_t)scmnd->SCp.Message;
+		fcp_cmnd->fc_tm_flags = csio_priv(scmnd)->fc_tm_flags;
 	}
 }
 
@@ -1855,7 +1855,7 @@  csio_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmnd)
 
 	/* Needed during abort */
 	cmnd->host_scribble = (unsigned char *)ioreq;
-	cmnd->SCp.Message = 0;
+	csio_priv(cmnd)->fc_tm_flags = 0;
 
 	/* Kick off SCSI IO SM on the ioreq */
 	spin_lock_irqsave(&hw->lock, flags);
@@ -2026,7 +2026,7 @@  csio_tm_cbfn(struct csio_hw *hw, struct csio_ioreq *req)
 		      req, req->wr_status);
 
 	/* Cache FW return status */
-	cmnd->SCp.Status = req->wr_status;
+	csio_priv(cmnd)->wr_status = req->wr_status;
 
 	/* Special handling based on FCP response */
 
@@ -2049,7 +2049,7 @@  csio_tm_cbfn(struct csio_hw *hw, struct csio_ioreq *req)
 		/* Modify return status if flags indicate success */
 		if (flags & FCP_RSP_LEN_VAL)
 			if (rsp_info->rsp_code == FCP_TMF_CMPL)
-				cmnd->SCp.Status = FW_SUCCESS;
+				csio_priv(cmnd)->wr_status = FW_SUCCESS;
 
 		csio_dbg(hw, "TM FCP rsp code: %d\n", rsp_info->rsp_code);
 	}
@@ -2125,9 +2125,9 @@  csio_eh_lun_reset_handler(struct scsi_cmnd *cmnd)
 
 	csio_scsi_cmnd(ioreq)	= cmnd;
 	cmnd->host_scribble	= (unsigned char *)ioreq;
-	cmnd->SCp.Status	= 0;
+	csio_priv(cmnd)->wr_status = 0;
 
-	cmnd->SCp.Message	= FCP_TMF_LUN_RESET;
+	csio_priv(cmnd)->fc_tm_flags = FCP_TMF_LUN_RESET;
 	ioreq->tmo		= CSIO_SCSI_LUNRST_TMO_MS / 1000;
 
 	/*
@@ -2178,9 +2178,10 @@  csio_eh_lun_reset_handler(struct scsi_cmnd *cmnd)
 	}
 
 	/* LUN reset returned, check cached status */
-	if (cmnd->SCp.Status != FW_SUCCESS) {
+	if (csio_priv(cmnd)->wr_status != FW_SUCCESS) {
 		csio_err(hw, "LUN reset failed (%d:%llu), status: %d\n",
-			 cmnd->device->id, cmnd->device->lun, cmnd->SCp.Status);
+			 cmnd->device->id, cmnd->device->lun,
+			 csio_priv(cmnd)->wr_status);
 		goto fail;
 	}
 
@@ -2271,6 +2272,7 @@  struct scsi_host_template csio_fcoe_shost_template = {
 	.name			= CSIO_DRV_DESC,
 	.proc_name		= KBUILD_MODNAME,
 	.queuecommand		= csio_queuecommand,
+	.cmd_size		= sizeof(struct csio_cmd_priv),
 	.eh_timed_out		= fc_eh_timed_out,
 	.eh_abort_handler	= csio_eh_abort_handler,
 	.eh_device_reset_handler = csio_eh_lun_reset_handler,
diff --git a/drivers/scsi/csiostor/csio_scsi.h b/drivers/scsi/csiostor/csio_scsi.h
index 2257c3dcf724..39dda3c88f0d 100644
--- a/drivers/scsi/csiostor/csio_scsi.h
+++ b/drivers/scsi/csiostor/csio_scsi.h
@@ -188,6 +188,16 @@  struct csio_scsi_level_data {
 	uint64_t		oslun;
 };
 
+struct csio_cmd_priv {
+	uint8_t fc_tm_flags;	/* task management flags */
+	uint16_t wr_status;
+};
+
+static inline struct csio_cmd_priv *csio_priv(struct scsi_cmnd *cmd)
+{
+	return scsi_cmd_priv(cmd);
+}
+
 static inline struct csio_ioreq *
 csio_get_scsi_ioreq(struct csio_scsim *scm)
 {