Re: [PATCH v2 13/44] bfa: Stop using the SCSI pointer

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

 




> On Feb 8, 2022, at 9:24 AM, Bart Van Assche <bvanassche@xxxxxxx> 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.
> 
> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
> ---
> drivers/scsi/bfa/bfad_im.c | 27 ++++++++++++++-------------
> drivers/scsi/bfa/bfad_im.h | 16 ++++++++++++++++
> 2 files changed, 30 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c
> index 759d2bb1ecdd..8419a1a89485 100644
> --- a/drivers/scsi/bfa/bfad_im.c
> +++ b/drivers/scsi/bfa/bfad_im.c
> @@ -150,10 +150,10 @@ bfa_cb_tskim_done(void *bfad, struct bfad_tskim_s *dtsk,
> 	struct scsi_cmnd *cmnd = (struct scsi_cmnd *)dtsk;
> 	wait_queue_head_t *wq;
> 
> -	cmnd->SCp.Status |= tsk_status << 1;
> -	set_bit(IO_DONE_BIT, (unsigned long *)&cmnd->SCp.Status);
> -	wq = (wait_queue_head_t *) cmnd->SCp.ptr;
> -	cmnd->SCp.ptr = NULL;
> +	bfad_priv(cmnd)->status |= tsk_status << 1;
> +	set_bit(IO_DONE_BIT, &bfad_priv(cmnd)->status);
> +	wq = bfad_priv(cmnd)->wq;
> +	bfad_priv(cmnd)->wq = NULL;
> 
> 	if (wq)
> 		wake_up(wq);
> @@ -259,7 +259,7 @@ bfad_im_target_reset_send(struct bfad_s *bfad, struct scsi_cmnd *cmnd,
> 	 * happens.
> 	 */
> 	cmnd->host_scribble = NULL;
> -	cmnd->SCp.Status = 0;
> +	bfad_priv(cmnd)->status = 0;
> 	bfa_itnim = bfa_fcs_itnim_get_halitn(&itnim->fcs_itnim);
> 	/*
> 	 * bfa_itnim can be NULL if the port gets disconnected and the bfa
> @@ -326,8 +326,8 @@ bfad_im_reset_lun_handler(struct scsi_cmnd *cmnd)
> 	 * if happens.
> 	 */
> 	cmnd->host_scribble = NULL;
> -	cmnd->SCp.ptr = (char *)&wq;
> -	cmnd->SCp.Status = 0;
> +	bfad_priv(cmnd)->wq = &wq;
> +	bfad_priv(cmnd)->status = 0;
> 	bfa_itnim = bfa_fcs_itnim_get_halitn(&itnim->fcs_itnim);
> 	/*
> 	 * bfa_itnim can be NULL if the port gets disconnected and the bfa
> @@ -347,10 +347,9 @@ bfad_im_reset_lun_handler(struct scsi_cmnd *cmnd)
> 			    FCP_TM_LUN_RESET, BFAD_LUN_RESET_TMO);
> 	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
> 
> -	wait_event(wq, test_bit(IO_DONE_BIT,
> -			(unsigned long *)&cmnd->SCp.Status));
> +	wait_event(wq, test_bit(IO_DONE_BIT, &bfad_priv(cmnd)->status));
> 
> -	task_status = cmnd->SCp.Status >> 1;
> +	task_status = bfad_priv(cmnd)->status >> 1;
> 	if (task_status != BFI_TSKIM_STS_OK) {
> 		BFA_LOG(KERN_ERR, bfad, bfa_log_level,
> 			"LUN reset failure, status: %d\n", task_status);
> @@ -381,16 +380,16 @@ bfad_im_reset_target_handler(struct scsi_cmnd *cmnd)
> 	spin_lock_irqsave(&bfad->bfad_lock, flags);
> 	itnim = bfad_get_itnim(im_port, starget->id);
> 	if (itnim) {
> -		cmnd->SCp.ptr = (char *)&wq;
> +		bfad_priv(cmnd)->wq = &wq;
> 		rc = bfad_im_target_reset_send(bfad, cmnd, itnim);
> 		if (rc == BFA_STATUS_OK) {
> 			/* wait target reset to complete */
> 			spin_unlock_irqrestore(&bfad->bfad_lock, flags);
> 			wait_event(wq, test_bit(IO_DONE_BIT,
> -					(unsigned long *)&cmnd->SCp.Status));
> +						&bfad_priv(cmnd)->status));
> 			spin_lock_irqsave(&bfad->bfad_lock, flags);
> 
> -			task_status = cmnd->SCp.Status >> 1;
> +			task_status = bfad_priv(cmnd)->status >> 1;
> 			if (task_status != BFI_TSKIM_STS_OK)
> 				BFA_LOG(KERN_ERR, bfad, bfa_log_level,
> 					"target reset failure,"
> @@ -797,6 +796,7 @@ struct scsi_host_template bfad_im_scsi_host_template = {
> 	.name = BFAD_DRIVER_NAME,
> 	.info = bfad_im_info,
> 	.queuecommand = bfad_im_queuecommand,
> +	.cmd_size = sizeof(struct bfad_cmd_priv),
> 	.eh_timed_out = fc_eh_timed_out,
> 	.eh_abort_handler = bfad_im_abort_handler,
> 	.eh_device_reset_handler = bfad_im_reset_lun_handler,
> @@ -819,6 +819,7 @@ struct scsi_host_template bfad_im_vport_template = {
> 	.name = BFAD_DRIVER_NAME,
> 	.info = bfad_im_info,
> 	.queuecommand = bfad_im_queuecommand,
> +	.cmd_size = sizeof(struct bfad_cmd_priv),
> 	.eh_timed_out = fc_eh_timed_out,
> 	.eh_abort_handler = bfad_im_abort_handler,
> 	.eh_device_reset_handler = bfad_im_reset_lun_handler,
> diff --git a/drivers/scsi/bfa/bfad_im.h b/drivers/scsi/bfa/bfad_im.h
> index 829345b514d1..c03b225ea1ba 100644
> --- a/drivers/scsi/bfa/bfad_im.h
> +++ b/drivers/scsi/bfa/bfad_im.h
> @@ -43,6 +43,22 @@ u32 bfad_im_supported_speeds(struct bfa_s *bfa);
>  */
> #define IO_DONE_BIT			0
> 
> +/**
> + * struct bfad_cmd_priv - private data per SCSI command.
> + * @status: Lowest bit represents IO_DONE. The next seven bits hold a value of
> + * type enum bfi_tskim_status.
> + * @wq: Wait queue used to wait for completion of an operation.
> + */
> +struct bfad_cmd_priv {
> +	unsigned long status;
> +	wait_queue_head_t *wq;
> +};
> +
> +static inline struct bfad_cmd_priv *bfad_priv(struct scsi_cmnd *cmd)
> +{
> +	return scsi_cmd_priv(cmd);
> +}
> +
> struct bfad_itnim_data_s {
> 	struct bfad_itnim_s *itnim;
> };

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

--
Himanshu Madhani	 Oracle Linux Engineering





[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