Commit 9c559c9b authored by John Garry's avatar John Garry Committed by Martin K. Petersen

scsi: scsi_debug: Use blk_mq_tagset_busy_iter() in stop_all_queued()

Instead of iterating all deferred commands in the submission queue
structures, use blk_mq_tagset_busy_iter(), which is a standard API for
this.
Signed-off-by: default avatarJohn Garry <john.g.garry@oracle.com>
Link: https://lore.kernel.org/r/20230327074310.1862889-9-john.g.garry@oracle.comSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 600d9ead
......@@ -5326,40 +5326,29 @@ static bool scsi_debug_abort_cmnd(struct scsi_cmnd *cmnd)
return res;
}
/*
* All we can do is set the cmnd as internally aborted and wait for it to
* finish. We cannot call scsi_done() as normal completion path may do that.
*/
static bool sdebug_stop_cmnd(struct request *rq, void *data)
{
scsi_debug_abort_cmnd(blk_mq_rq_to_pdu(rq));
return true;
}
/* Deletes (stops) timers or work queues of all queued commands */
static void stop_all_queued(void)
{
unsigned long iflags, flags;
int j, k;
struct sdebug_queue *sqp;
struct sdebug_host_info *sdhp;
for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
spin_lock_irqsave(&sqp->qc_lock, iflags);
for (k = 0; k < SDEBUG_CANQUEUE; ++k) {
if (test_bit(k, sqp->in_use_bm)) {
struct sdebug_queued_cmd *sqcp = sqp->qc_arr[k];
struct sdebug_scsi_cmd *sdsc;
struct scsi_cmnd *scmd;
mutex_lock(&sdebug_host_list_mutex);
list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
struct Scsi_Host *shost = sdhp->shost;
if (!sqcp)
continue;
scmd = sqcp->scmd;
if (!scmd)
continue;
sdsc = scsi_cmd_priv(scmd);
spin_lock_irqsave(&sdsc->lock, flags);
if (TO_QUEUED_CMD(scmd) != sqcp) {
spin_unlock_irqrestore(&sdsc->lock, flags);
continue;
}
scsi_debug_stop_cmnd(scmd, NULL);
spin_unlock_irqrestore(&sdsc->lock, flags);
sqp->qc_arr[k] = NULL;
clear_bit(k, sqp->in_use_bm);
}
}
spin_unlock_irqrestore(&sqp->qc_lock, iflags);
blk_mq_tagset_busy_iter(&shost->tag_set, sdebug_stop_cmnd, NULL);
}
mutex_unlock(&sdebug_host_list_mutex);
}
static int scsi_debug_abort(struct scsi_cmnd *SCpnt)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment