Message ID | 1646309930-138960-3-git-send-email-john.garry@huawei.com |
---|---|
State | Superseded |
Headers | show |
Series | scsi: libsas and users: Factor out internal abort code | expand |
On 3/3/22 13:18, John Garry wrote: > Add support for a "device" variant of internal abort, which will abort all > pending IOs for a specific device. > > Signed-off-by: John Garry <john.garry@huawei.com> > --- > drivers/scsi/libsas/sas_scsi_host.c | 8 ++++++++ > include/scsi/libsas.h | 8 ++++++++ > 2 files changed, 16 insertions(+) > > diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c > index 0d05826e6e8c..8d6c83d15148 100644 > --- a/drivers/scsi/libsas/sas_scsi_host.c > +++ b/drivers/scsi/libsas/sas_scsi_host.c > @@ -995,6 +995,14 @@ int sas_execute_internal_abort_single(struct domain_device *device, u16 tag, > } > EXPORT_SYMBOL_GPL(sas_execute_internal_abort_single); > > +int sas_execute_internal_abort_dev(struct domain_device *device, > + unsigned int qid, void *data) > +{ > + return sas_execute_internal_abort(device, SAS_INTERNAL_ABORT_DEV, > + SCSI_NO_TAG, qid, data); > +} > +EXPORT_SYMBOL_GPL(sas_execute_internal_abort_dev); > + > int sas_execute_tmf(struct domain_device *device, void *parameter, > int para_len, int force_phy_id, > struct sas_tmf_task *tmf) > diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h > index 2d30d57916e5..71f632b2d2bd 100644 > --- a/include/scsi/libsas.h > +++ b/include/scsi/libsas.h > @@ -560,6 +560,7 @@ struct sas_ata_task { > /* LLDDs rely on these values */ > enum sas_internal_abort { > SAS_INTERNAL_ABORT_SINGLE = 0, > + SAS_INTERNAL_ABORT_DEV = 1, > }; > > struct sas_internal_abort_task { > @@ -641,6 +642,11 @@ extern struct sas_task *sas_alloc_task(gfp_t flags); > extern struct sas_task *sas_alloc_slow_task(gfp_t flags); > extern void sas_free_task(struct sas_task *task); > > +static inline bool sas_is_internal_abort(struct sas_task *task) > +{ > + return task->task_proto == SAS_PROTOCOL_INTERNAL_ABORT; > +} > + > struct sas_domain_function_template { > /* The class calls these to notify the LLDD of an event. */ > void (*lldd_port_formed)(struct asd_sas_phy *); > @@ -697,6 +703,8 @@ extern int sas_bios_param(struct scsi_device *, struct block_device *, > int sas_execute_internal_abort_single(struct domain_device *device, > u16 tag, unsigned int qid, > void *data); > +int sas_execute_internal_abort_dev(struct domain_device *device, > + unsigned int qid, void *data); > extern struct scsi_transport_template * > sas_domain_attach_transport(struct sas_domain_function_template *); > extern struct device_attribute dev_attr_phy_event_threshold; Same comment as in the previous patch: Please use the existing TMF_XXX values. Cheers, Hannes
diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c index 0d05826e6e8c..8d6c83d15148 100644 --- a/drivers/scsi/libsas/sas_scsi_host.c +++ b/drivers/scsi/libsas/sas_scsi_host.c @@ -995,6 +995,14 @@ int sas_execute_internal_abort_single(struct domain_device *device, u16 tag, } EXPORT_SYMBOL_GPL(sas_execute_internal_abort_single); +int sas_execute_internal_abort_dev(struct domain_device *device, + unsigned int qid, void *data) +{ + return sas_execute_internal_abort(device, SAS_INTERNAL_ABORT_DEV, + SCSI_NO_TAG, qid, data); +} +EXPORT_SYMBOL_GPL(sas_execute_internal_abort_dev); + int sas_execute_tmf(struct domain_device *device, void *parameter, int para_len, int force_phy_id, struct sas_tmf_task *tmf) diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index 2d30d57916e5..71f632b2d2bd 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h @@ -560,6 +560,7 @@ struct sas_ata_task { /* LLDDs rely on these values */ enum sas_internal_abort { SAS_INTERNAL_ABORT_SINGLE = 0, + SAS_INTERNAL_ABORT_DEV = 1, }; struct sas_internal_abort_task { @@ -641,6 +642,11 @@ extern struct sas_task *sas_alloc_task(gfp_t flags); extern struct sas_task *sas_alloc_slow_task(gfp_t flags); extern void sas_free_task(struct sas_task *task); +static inline bool sas_is_internal_abort(struct sas_task *task) +{ + return task->task_proto == SAS_PROTOCOL_INTERNAL_ABORT; +} + struct sas_domain_function_template { /* The class calls these to notify the LLDD of an event. */ void (*lldd_port_formed)(struct asd_sas_phy *); @@ -697,6 +703,8 @@ extern int sas_bios_param(struct scsi_device *, struct block_device *, int sas_execute_internal_abort_single(struct domain_device *device, u16 tag, unsigned int qid, void *data); +int sas_execute_internal_abort_dev(struct domain_device *device, + unsigned int qid, void *data); extern struct scsi_transport_template * sas_domain_attach_transport(struct sas_domain_function_template *); extern struct device_attribute dev_attr_phy_event_threshold;
Add support for a "device" variant of internal abort, which will abort all pending IOs for a specific device. Signed-off-by: John Garry <john.garry@huawei.com> --- drivers/scsi/libsas/sas_scsi_host.c | 8 ++++++++ include/scsi/libsas.h | 8 ++++++++ 2 files changed, 16 insertions(+)