All of lore.kernel.org
 help / color / mirror / Atom feed
From: Diangang Li <lidiangang@bytedance.com>
To: JiangJianJun <jiangjianjun3@huawei.com>
Cc: jejb@linux.ibm.com, martin.petersen@oracle.com,
	linux-scsi@vger.kernel.org, hare@suse.de,
	linux-kernel@vger.kernel.org, lixiaokeng@huawei.com,
	hewenliang4@huawei.com, yangkunlin7@huawei.com,
	changfengnan@bytedance.com
Subject: Re: [RFC PATCH v3 04/19] scsi: scsi_error: Add helper scsi_eh_sdev_stu to do START_UNIT
Date: Thu, 24 Apr 2025 17:27:32 +0800	[thread overview]
Message-ID: <20250424092732.GA48639@bytedance.com> (raw)
In-Reply-To: <20250314012927.150860-5-jiangjianjun3@huawei.com>

On Fri, Mar 14, 2025 at 09:29:12AM +0800, JiangJianJun wrote:
> From: Wenchao Hao <haowenchao2@huawei.com>
> 
> Add helper function scsi_eh_sdev_stu() to perform START_UNIT and check
> if to finish some error commands.
> 
> This is preparation for a genernal LUN/target based error handle
> strategy and did not change original logic.
> 
> Signed-off-by: Wenchao Hao <haowenchao2@huawei.com>
> ---
>  drivers/scsi/scsi_error.c | 50 +++++++++++++++++++++++----------------
>  1 file changed, 29 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
> index cc3a5adb9daa..3b55642fb585 100644
> --- a/drivers/scsi/scsi_error.c
> +++ b/drivers/scsi/scsi_error.c
> @@ -1567,6 +1567,31 @@ static int scsi_eh_try_stu(struct scsi_cmnd *scmd)
>  	return 1;
>  }
>  
> +static int scsi_eh_sdev_stu(struct scsi_cmnd *scmd,
> +			      struct list_head *work_q,
> +			      struct list_head *done_q)
> +{
> +	struct scsi_device *sdev = scmd->device;
> +	struct scsi_cmnd *next;
> +
> +	SCSI_LOG_ERROR_RECOVERY(3, sdev_printk(KERN_INFO, sdev,
> +				"%s: Sending START_UNIT\n", current->comm));
> +

As in the scsi_eh_stu, SCSI_SENSE_VALID and scsi_check_sense is required
before calling scsi_eh_try_stu.

> +	if (scsi_eh_try_stu(scmd)) {
> +		SCSI_LOG_ERROR_RECOVERY(3, sdev_printk(KERN_INFO, sdev,
> +				    "%s: START_UNIT failed\n", current->comm));
> +		return 0;
> +	}
> +
> +	if (!scsi_device_online(sdev) || !scsi_eh_tur(scmd))
> +		list_for_each_entry_safe(scmd, next, work_q, eh_entry)
> +			if (scmd->device == sdev &&
> +			    scsi_eh_action(scmd, SUCCESS) == SUCCESS)
> +				scsi_eh_finish_cmd(scmd, done_q);
> +
> +	return list_empty(work_q);
> +}
> +
>   /**
>   * scsi_eh_stu - send START_UNIT if needed
>   * @shost:	&scsi host being recovered.
> @@ -1581,7 +1606,7 @@ static int scsi_eh_stu(struct Scsi_Host *shost,
>  			      struct list_head *work_q,
>  			      struct list_head *done_q)
>  {
> -	struct scsi_cmnd *scmd, *stu_scmd, *next;
> +	struct scsi_cmnd *scmd, *stu_scmd;
>  	struct scsi_device *sdev;
>  
>  	shost_for_each_device(sdev, shost) {
> @@ -1604,26 +1629,9 @@ static int scsi_eh_stu(struct Scsi_Host *shost,
>  		if (!stu_scmd)
>  			continue;
>  
> -		SCSI_LOG_ERROR_RECOVERY(3,
> -			sdev_printk(KERN_INFO, sdev,
> -				     "%s: Sending START_UNIT\n",
> -				    current->comm));
> -
> -		if (!scsi_eh_try_stu(stu_scmd)) {
> -			if (!scsi_device_online(sdev) ||
> -			    !scsi_eh_tur(stu_scmd)) {
> -				list_for_each_entry_safe(scmd, next,
> -							  work_q, eh_entry) {
> -					if (scmd->device == sdev &&
> -					    scsi_eh_action(scmd, SUCCESS) == SUCCESS)
> -						scsi_eh_finish_cmd(scmd, done_q);
> -				}
> -			}
> -		} else {
> -			SCSI_LOG_ERROR_RECOVERY(3,
> -				sdev_printk(KERN_INFO, sdev,
> -					    "%s: START_UNIT failed\n",
> -					    current->comm));
> +		if (scsi_eh_sdev_stu(stu_scmd, work_q, done_q)) {
> +			scsi_device_put(sdev);
> +			break;

Maybe this shouldn't break early. If one scsi_device fails to try STU,
the next one might succeed.

>  		}
>  	}
>  
> -- 
> 2.33.0
>

Thanks,

Diangang Li

  reply	other threads:[~2025-04-24  9:27 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-14  1:29 [RFC PATCH v3 00/19] scsi: scsi_error: Introduce new error handle mechanism JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 01/19] scsi: scsi_error: Define framework for LUN/target based error handle JiangJianJun
2025-03-14  1:49   ` Bart Van Assche
2025-03-14  1:29 ` [RFC PATCH v3 02/19] scsi: scsi_error: Move complete variable eh_action from shost to sdevice JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 03/19] scsi: scsi_error: Check if to do reset in scsi_try_xxx_reset JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 04/19] scsi: scsi_error: Add helper scsi_eh_sdev_stu to do START_UNIT JiangJianJun
2025-04-24  9:27   ` Diangang Li [this message]
2025-03-14  1:29 ` [RFC PATCH v3 05/19] scsi: scsi_error: Add helper scsi_eh_sdev_reset to do lun reset JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 06/19] scsi: scsi_error: Add flags to mark error handle steps has done JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 07/19] scsi: scsi_error: Add helper to handle scsi device's error command list JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 08/19] scsi: scsi_error: Add a general LUN based error handler JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 09/19] scsi: core: increase/decrease target_busy without check can_queue JiangJianJun
2025-03-14  1:35   ` Bart Van Assche
2025-03-14  1:29 ` [RFC PATCH v3 10/19] scsi: scsi_error: Add helper to handle scsi target's error command list JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 11/19] scsi: scsi_error: Add a general target based error handler JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 12/19] scsi: scsi_debug: Add param to control LUN bassed " JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 13/19] scsi: scsi_debug: Add param to control target based error handle JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 14/19] scsi: mpt3sas: Add param to control LUN " JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 15/19] scsi: mpt3sas: Add param to control target " JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 16/19] scsi: smartpqi: Add param to control LUN " JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 17/19] scsi: megaraid_sas: Add param to control target " JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 18/19] scsi: virtio_scsi: Add param to control LUN " JiangJianJun
2025-03-14  1:29 ` [RFC PATCH v3 19/19] scsi: iscsi_tcp: " JiangJianJun
2025-03-14  9:01 ` [RFC PATCH v3 00/19] scsi: scsi_error: Introduce new error handle mechanism Hannes Reinecke
2025-03-14 15:55   ` Bart Van Assche
2025-04-24  9:44     ` Diangang Li
2025-03-20  6:05   ` Christoph Hellwig
2025-03-31  3:10     ` 答复: " Jiangjianjun
2025-03-31  7:50       ` John Garry
  -- strict thread matches above, loose matches on Subject: below --
2025-06-25  3:37 [RFC PATCH v3 04/19] scsi: scsi_error: Add helper scsi_eh_sdev_stu to do START_UNIT JiangJianJun

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250424092732.GA48639@bytedance.com \
    --to=lidiangang@bytedance.com \
    --cc=changfengnan@bytedance.com \
    --cc=hare@suse.de \
    --cc=hewenliang4@huawei.com \
    --cc=jejb@linux.ibm.com \
    --cc=jiangjianjun3@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=lixiaokeng@huawei.com \
    --cc=martin.petersen@oracle.com \
    --cc=yangkunlin7@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.