If an scsi command time out and going to be aborted, we should increase the iodone_cnt of the related scsi device, or the iodone_cnt would be less than iorequest_cnt
Increase iodone_cnt in scsi_timeout() would not cause double accounting issue, briefly analysed as following: - we add the iodone_cnt when BLK_EH_DONE would be returned in scsi_timeout(), so the related scsi command's timeout event would not happened - if the abort succeed and do not retry, the command would be done with scsi_finish_command() which would not increase iodone_cnt; - if the abort succeed and retry the command, it would be requeue, a scsi_dispatch_cmd() would be called and iorequest_cnt would be increased again - if the abort failed, the error handler successfully recover the device, do not retry this command, the command would be done with scsi_finish_command() which would not increase iodone_cnt; - if the abort failed, the error handler successfully recover the device, and retry this command, the iorequest_cnt would be increased again Signed-off-by: Wenchao Hao <haowenc...@huawei.com> Reviewed-by: Mike Christie <michael.chris...@oracle.com> --- drivers/scsi/scsi_error.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index be2a70c5ac6d..613d5aeb1e3c 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -354,6 +354,7 @@ enum blk_eh_timer_return scsi_timeout(struct request *req) */ if (test_and_set_bit(SCMD_STATE_COMPLETE, &scmd->state)) return BLK_EH_DONE; + atomic_inc(&scmd->device->iodone_cnt); if (scsi_abort_command(scmd) != SUCCESS) { set_host_byte(scmd, DID_TIME_OUT); scsi_eh_scmd_add(scmd); -- 2.32.0 -- You received this message because you are subscribed to the Google Groups "open-iscsi" group. To unsubscribe from this group and stop receiving emails from it, send an email to open-iscsi+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/open-iscsi/20221123122137.150776-2-haowenchao%40huawei.com.