|
@@ -44,6 +44,8 @@ static struct kmem_cache *scsi_sense_cache;
|
|
|
static struct kmem_cache *scsi_sense_isadma_cache;
|
|
|
static DEFINE_MUTEX(scsi_sense_cache_mutex);
|
|
|
|
|
|
+static void scsi_mq_uninit_cmd(struct scsi_cmnd *cmd);
|
|
|
+
|
|
|
static inline struct kmem_cache *
|
|
|
scsi_select_sense_cache(bool unchecked_isa_dma)
|
|
|
{
|
|
@@ -140,6 +142,12 @@ static void scsi_mq_requeue_cmd(struct scsi_cmnd *cmd)
|
|
|
{
|
|
|
struct scsi_device *sdev = cmd->device;
|
|
|
|
|
|
+ if (cmd->request->rq_flags & RQF_DONTPREP) {
|
|
|
+ cmd->request->rq_flags &= ~RQF_DONTPREP;
|
|
|
+ scsi_mq_uninit_cmd(cmd);
|
|
|
+ } else {
|
|
|
+ WARN_ON_ONCE(true);
|
|
|
+ }
|
|
|
blk_mq_requeue_request(cmd->request, true);
|
|
|
put_device(&sdev->sdev_gendev);
|
|
|
}
|
|
@@ -982,8 +990,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
|
|
|
* A new command will be prepared and issued.
|
|
|
*/
|
|
|
if (q->mq_ops) {
|
|
|
- cmd->request->rq_flags &= ~RQF_DONTPREP;
|
|
|
- scsi_mq_uninit_cmd(cmd);
|
|
|
scsi_mq_requeue_cmd(cmd);
|
|
|
} else {
|
|
|
scsi_release_buffers(cmd);
|