scsi: core: Clear flags for scsi_cmnd that did not complete
[ Upstream commit 54bebe46871d4e56e05fcf55c1a37e7efa24e0a8 ]
Commands that have not been completed with scsi_done() do not clear the
SCMD_INITIALIZED flag and therefore will not be properly reinitialized.
Thus, the next time the scsi_cmnd structure is used, the command may
fail in scsi_cmd_runtime_exceeded() due to the old jiffies_at_alloc
value:
kernel: sd 16:0:1:84: [sdts] tag#405 timing out command, waited 720s
kernel: sd 16:0:1:84: [sdts] tag#405 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=66636s
Clear flags for commands that have not been completed by SCSI.
Fixes: 4abafdc436
("block: remove the initialize_rq_fn blk_mq_ops method")
Signed-off-by: Anastasia Kovaleva <a.kovaleva@yadro.com>
Link: https://lore.kernel.org/r/20250324084933.15932-2-a.kovaleva@yadro.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
4a1b61f910
commit
4d6919dd7c
@@ -1152,8 +1152,12 @@ EXPORT_SYMBOL_GPL(scsi_alloc_request);
|
|||||||
*/
|
*/
|
||||||
static void scsi_cleanup_rq(struct request *rq)
|
static void scsi_cleanup_rq(struct request *rq)
|
||||||
{
|
{
|
||||||
|
struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);
|
||||||
|
|
||||||
|
cmd->flags = 0;
|
||||||
|
|
||||||
if (rq->rq_flags & RQF_DONTPREP) {
|
if (rq->rq_flags & RQF_DONTPREP) {
|
||||||
scsi_mq_uninit_cmd(blk_mq_rq_to_pdu(rq));
|
scsi_mq_uninit_cmd(cmd);
|
||||||
rq->rq_flags &= ~RQF_DONTPREP;
|
rq->rq_flags &= ~RQF_DONTPREP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user