Currently when aborting a scsi_cmnd, we can not tell whether this cmd is canceled or has not been found by scsi_try_to_abort_cmd(). So introducing this new flag. (In the succeeding patch, if caller success to cancel the scmd, then it should drop the ref on scmd, otherwise no ops) Signed-off-by: Liu Ping Fan <pingfank@xxxxxxxxxxxxxxxxxx> --- drivers/scsi/scsi_error.c | 8 +++++++- include/scsi/scsi.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 3b8b95b..8ddd8f5 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -869,10 +869,16 @@ static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd) static int scsi_try_to_abort_cmd(struct scsi_host_template *hostt, struct scsi_cmnd *scmd) { + int ret; + if (!hostt->eh_abort_handler) return FAILED; - return hostt->eh_abort_handler(scmd); + ret = hostt->eh_abort_handler(scmd); + /* After introducing ref on scsi_cmnd, here will handle the ref */ + if (ret == SUCCESS_REMOVE) + ret = SUCCESS; + return ret; } static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd) diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index d477bfb..4183b01 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h @@ -488,6 +488,7 @@ static inline int scsi_is_wlun(unsigned int lun) #define TIMEOUT_ERROR 0x2007 #define SCSI_RETURN_NOT_HANDLED 0x2008 #define FAST_IO_FAIL 0x2009 +#define SUCCESS_REMOVE 0x200a /* * Midlevel queue return values. -- 1.8.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html