scsi_error: should not get sense for timeout IO in scsi error handler
authorjiang.biao2@zte.com.cn <jiang.biao2@zte.com.cn>
Fri, 31 Jul 2015 09:52:10 +0000 (17:52 +0800)
committerJames Bottomley <JBottomley@Odin.com>
Thu, 27 Aug 2015 00:29:49 +0000 (17:29 -0700)
commit709c75b5a2411c31e5a649a2cd6d4866dd11f456
tree07b9fabb51025264dbb8e050c3073b2fbea49030
parent1cd129918f14f42f8b1940096dba629ce7e7a243
scsi_error: should not get sense for timeout IO in scsi error handler

scsi_error: should not get sense for timeout IO in scsi error handler

When an IO timeout occurs, the IO will be aborted in
scsi_abort_command() and SCSI_EH_ABORT_SCHEDULED will be set. Because
of that, the SCSI_EH_CANCEL_CMD will be clear in scsi_eh_scmd_add().
So when scsi error handler starts, it will get sense for this
timeout IO and the scmd of the IO request will be reused. In that
case, the scmd may be double released when racing with io_done(),
which will result in crash.
SO SCSI_EH_ABORT_SCHEDULED should also be checked when getting sense.
The bug maybe reproduced when the link between host and disk is
unstable.

Signed-off-by: Jiang Biao <jiang.biao2@zte.com.cn>
Signed-off-by: Long Chun <long.chun@zte.com.cn>
Reviewed-by: Tan Hu <tan.hu@zte.com.cn>
Reviewed-by: Chen Donghai <chen.donghai@zte.com.cn>
Reviewed-by: Cai Qu <cai.qu@zte.com.cn>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
drivers/scsi/scsi_error.c