Skip to content

Commit a45a1f3

Browse files
KAGA-KOKOmartinkpetersen
authored andcommitted
scsi: scsi-mq: Always unprepare before requeuing a request
One of the two scsi-mq functions that requeue a request unprepares a request before requeueing (scsi_io_completion()) but the other function not (__scsi_queue_insert()). Make sure that a request is unprepared before requeuing it. Fixes: commit d285203 ("scsi: add support for a blk-mq based I/O path.") Signed-off-by: Bart Van Assche <[email protected]> Cc: Christoph Hellwig <[email protected]> Cc: Hannes Reinecke <[email protected]> Cc: Damien Le Moal <[email protected]> Cc: Johannes Thumshirn <[email protected]> Reviewed-by: Johannes Thumshirn <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent cad8cf2 commit a45a1f3

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

drivers/scsi/scsi_lib.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ static struct kmem_cache *scsi_sense_cache;
4444
static struct kmem_cache *scsi_sense_isadma_cache;
4545
static DEFINE_MUTEX(scsi_sense_cache_mutex);
4646

47+
static void scsi_mq_uninit_cmd(struct scsi_cmnd *cmd);
48+
4749
static inline struct kmem_cache *
4850
scsi_select_sense_cache(bool unchecked_isa_dma)
4951
{
@@ -140,6 +142,12 @@ static void scsi_mq_requeue_cmd(struct scsi_cmnd *cmd)
140142
{
141143
struct scsi_device *sdev = cmd->device;
142144

145+
if (cmd->request->rq_flags & RQF_DONTPREP) {
146+
cmd->request->rq_flags &= ~RQF_DONTPREP;
147+
scsi_mq_uninit_cmd(cmd);
148+
} else {
149+
WARN_ON_ONCE(true);
150+
}
143151
blk_mq_requeue_request(cmd->request, true);
144152
put_device(&sdev->sdev_gendev);
145153
}
@@ -982,8 +990,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
982990
* A new command will be prepared and issued.
983991
*/
984992
if (q->mq_ops) {
985-
cmd->request->rq_flags &= ~RQF_DONTPREP;
986-
scsi_mq_uninit_cmd(cmd);
987993
scsi_mq_requeue_cmd(cmd);
988994
} else {
989995
scsi_release_buffers(cmd);

0 commit comments

Comments
 (0)