All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Yan <yanaijie@huawei.com>
To: Bart Van Assche <bvanassche@acm.org>,
	"Martin K . Petersen" <martin.petersen@oracle.com>
Cc: <linux-scsi@vger.kernel.org>, Jaegeuk Kim <jaegeuk@kernel.org>,
	Hannes Reinecke <hare@suse.de>, Christoph Hellwig <hch@lst.de>,
	Ming Lei <ming.lei@redhat.com>,
	John Garry <john.garry@huawei.com>,
	Yves-Alexis Perez <corsac@debian.org>,
	"James E.J. Bottomley" <jejb@linux.ibm.com>,
	"Gustavo A. R. Silva" <gustavoars@kernel.org>,
	Yufen Yu <yuyufen@huawei.com>
Subject: Re: [PATCH 02/21] libsas: Only abort commands from inside the error handler
Date: Sat, 3 Jul 2021 10:32:06 +0800	[thread overview]
Message-ID: <779caa02-6c9f-183b-2f3d-2b7dc5c877ef@huawei.com> (raw)
In-Reply-To: <20210701211224.17070-3-bvanassche@acm.org>

Hi Bart,

在 2021/7/2 5:12, Bart Van Assche 写道:
> According to the information I found in patch commit descriptions, for SATA
> devices commands must be aborted from inside the libsas error handler.
> Check host->ehandler to determine whether or not running inside the error
> handler since host->host_eh_scheduled != 0 indicates that the SCSI error
> handler has been scheduled but does not mean that is already running. This
> patch restores code that was removed by commit 909657615d9b ("scsi: libsas:
> allow async aborts").
> 
> Cc: Hannes Reinecke <hare@suse.de>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Ming Lei <ming.lei@redhat.com>
> Cc: John Garry <john.garry@huawei.com>
> Cc: Yves-Alexis Perez <corsac@debian.org>
> Fixes: c9f926000fe3 ("scsi: libsas: Disable asynchronous aborts for SATA devices")
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
>   drivers/scsi/libsas/sas_scsi_host.c | 5 ++++-
>   include/scsi/libsas.h               | 1 +
>   2 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c
> index ee44a0d7730b..95e4d58ab9d4 100644
> --- a/drivers/scsi/libsas/sas_scsi_host.c
> +++ b/drivers/scsi/libsas/sas_scsi_host.c
> @@ -462,6 +462,7 @@ int sas_eh_abort_handler(struct scsi_cmnd *cmd)
>   	int res = TMF_RESP_FUNC_FAILED;
>   	struct sas_task *task = TO_SAS_TASK(cmd);
>   	struct Scsi_Host *host = cmd->device->host;
> +	struct sas_ha_struct *ha = SHOST_TO_SAS_HA(host);
>   	struct domain_device *dev = cmd_to_domain_dev(cmd);
>   	struct sas_internal *i = to_sas_internal(host->transportt);
>   	unsigned long flags;
> @@ -471,7 +472,7 @@ int sas_eh_abort_handler(struct scsi_cmnd *cmd)
>   
>   	spin_lock_irqsave(host->host_lock, flags);
>   	/* We cannot do async aborts for SATA devices */
> -	if (dev_is_sata(dev) && !host->host_eh_scheduled) {
> +	if (dev_is_sata(dev) && !ha->eh_running) {
>   		spin_unlock_irqrestore(host->host_lock, flags);
>   		return FAILED;
>   	}


No idea why sas_eh_abort_handler() is only used by isci. The other
libsas drivers just let the error handler do the aborting work. So my
question is can the isci driver delete this callback and let the error
handler do this? If so, then we cann remove this function directly.

Thanks,
Jason


> @@ -731,6 +732,7 @@ void sas_scsi_recover_host(struct Scsi_Host *shost)
>   	tries++;
>   	retry = true;
>   	spin_lock_irq(shost->host_lock);
> +	ha->eh_running = true;
>   	list_splice_init(&shost->eh_cmd_q, &eh_work_q);
>   	spin_unlock_irq(shost->host_lock);
>   
> @@ -767,6 +769,7 @@ void sas_scsi_recover_host(struct Scsi_Host *shost)
>   
>   	/* check if any new eh work was scheduled during the last run */
>   	spin_lock_irq(&ha->lock);
> +	ha->eh_running = false;
>   	if (ha->eh_active == 0) {
>   		shost->host_eh_scheduled = 0;
>   		retry = false;
> diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
> index 6fe125a71b60..4a8fb324140e 100644
> --- a/include/scsi/libsas.h
> +++ b/include/scsi/libsas.h
> @@ -364,6 +364,7 @@ struct sas_ha_struct {
>   	struct mutex	  drain_mutex;
>   	unsigned long	  state;
>   	spinlock_t	  lock;
> +	bool		  eh_running;
>   	int		  eh_active;
>   	wait_queue_head_t eh_wait_q;
>   	struct list_head  eh_dev_q;
> .
> 

  reply	other threads:[~2021-07-03  2:32 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-01 21:12 [PATCH 00/21] UFS patches for kernel v5.15 Bart Van Assche
2021-07-01 21:12 ` [PATCH 01/21] Fix the documentation of the scsi_execute() time parameter Bart Van Assche
2021-07-05  5:51   ` Avri Altman
2021-07-01 21:12 ` [PATCH 02/21] libsas: Only abort commands from inside the error handler Bart Van Assche
2021-07-03  2:32   ` Jason Yan [this message]
2021-07-04 23:52     ` Bart Van Assche
2021-07-05  7:16     ` Hannes Reinecke
2021-07-01 21:12 ` [PATCH 03/21] Clear host_eh_scheduled from inside the SCSI " Bart Van Assche
2021-07-01 21:12 ` [PATCH 04/21] libsas: Stop clearing host_eh_scheduled from the " Bart Van Assche
2021-07-01 21:12 ` [PATCH 05/21] ata: Stop clearing host_eh_scheduled from error handlers Bart Van Assche
2021-07-01 21:12 ` [PATCH 06/21] ufs: Reduce power management code duplication Bart Van Assche
2021-07-05  6:18   ` Avri Altman
2021-07-01 21:12 ` [PATCH 07/21] ufs: Only include power management code if necessary Bart Van Assche
2021-07-05  6:33   ` Avri Altman
2021-07-07 20:44     ` Bart Van Assche
2021-07-08  5:50   ` Avri Altman
2021-07-01 21:12 ` [PATCH 08/21] ufs: Rename the second ufshcd_probe_hba() argument Bart Van Assche
2021-07-01 21:12 ` [PATCH 09/21] ufs: Use DECLARE_COMPLETION_ONSTACK() where appropriate Bart Van Assche
2021-07-05  6:38   ` Avri Altman
2021-07-01 21:12 ` [PATCH 10/21] ufs: Remove ufshcd_valid_tag() Bart Van Assche
2021-07-05  6:46   ` Avri Altman
2021-07-05 18:08     ` Bart Van Assche
2021-07-05 19:01       ` Avri Altman
2021-07-05 19:02   ` Avri Altman
2021-07-01 21:12 ` [PATCH 11/21] ufs: Verify UIC locking requirements at runtime Bart Van Assche
2021-07-05  6:52   ` Avri Altman
2021-07-01 21:12 ` [PATCH 12/21] ufs: Improve static type checking for the host controller state Bart Van Assche
2021-07-01 21:12 ` [PATCH 13/21] ufs: Remove several wmb() calls Bart Van Assche
2021-07-01 22:26   ` Asutosh Das (asd)
2021-07-01 22:52     ` Bart Van Assche
2021-07-01 21:12 ` [PATCH 14/21] ufs: Inline ufshcd_outstanding_req_clear() Bart Van Assche
2021-07-05  7:03   ` Avri Altman
2021-07-01 21:12 ` [PATCH 15/21] ufs: Rename __ufshcd_transfer_req_compl() Bart Van Assche
2021-07-01 21:12 ` [PATCH 16/21] ufs: Fix the SCSI abort handler Bart Van Assche
2021-07-01 21:12 ` [PATCH 17/21] ufs: Fix a race in the completion path Bart Van Assche
2021-07-01 21:12 ` [PATCH 18/21] ufs: Use the doorbell register instead of the UTRLCNR register Bart Van Assche
2021-07-01 21:12 ` [PATCH 19/21] ufs: Request sense data asynchronously Bart Van Assche
2021-07-01 21:12 ` [PATCH 20/21] ufs: Synchronize SCSI and UFS error handling Bart Van Assche
2021-07-01 21:12 ` [PATCH 21/21] ufs: Retry aborted SCSI commands instead of completing these successfully Bart Van Assche

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=779caa02-6c9f-183b-2f3d-2b7dc5c877ef@huawei.com \
    --to=yanaijie@huawei.com \
    --cc=bvanassche@acm.org \
    --cc=corsac@debian.org \
    --cc=gustavoars@kernel.org \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=jaegeuk@kernel.org \
    --cc=jejb@linux.ibm.com \
    --cc=john.garry@huawei.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=ming.lei@redhat.com \
    --cc=yuyufen@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.