scsi: libsas: Add sas_task_find_rq()

[ Upstream commit a9ee3f840646e2ec419c734e592ffe997195435e ]

blk-mq already provides a unique tag per request. Some libsas LLDDs - like
hisi_sas - already use this tag as the unique per-I/O HW tag.

Add a common function to provide the request associated with a sas_task for
all libsas LLDDs.

Signed-off-by: John Garry <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Reviewed-by: Jack Wang <[email protected]>
Reviewed-by: Jason Yan <[email protected]>
Reviewed-by: Hannes Reinecke <[email protected]>
Signed-off-by: Martin K. Petersen <[email protected]>
Stable-dep-of: 60cd16a3b743 ("scsi: mvsas: Fix use-after-free bugs in mvs_work_queue")
Signed-off-by: Sasha Levin <[email protected]>
This commit is contained in:
John Garry 2022-10-18 19:15:57 +08:00 • committed by Greg Kroah-Hartman
commit c51f9de091

View file

@ -620,6 +620,24 @@ 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 struct request *sas_task_find_rq(struct sas_task *task)
{
struct scsi_cmnd *scmd;
if (task->task_proto & SAS_PROTOCOL_STP_ALL) {
struct ata_queued_cmd *qc = task->uldd_task;
scmd = qc ? qc->scsicmd : NULL;
} else {
scmd = task->uldd_task;
}
if (!scmd)
return NULL;
return scsi_cmd_to_rq(scmd);
}
struct sas_domain_function_template {
/* The class calls these to notify the LLDD of an event. */
void (*lldd_port_formed)(struct asd_sas_phy *);