• Wenchao Hao's avatar
    scsi: core: Increase scsi_device's iodone_cnt in scsi_timeout() · ec9780e4
    Wenchao Hao authored
    If a SCSI command times out and is going to be aborted, we should increase
    the iodone_cnt of the related scsi_device. Otherwise the iodone_cnt would
    be smaller than iorequest_cnt.
    
    Increasing iodone_cnt in scsi_timeout() would not cause a double accounting
    issue. Brief analysis follows:
    
     - We add the iodone_cnt when BLK_EH_DONE is returned in
       scsi_timeout(). The related command's timeout event would not happen.
    
     - If the abort succeeds and the command is not retried, the command would
       be completed with scsi_finish_command() which would not increase
       iodone_cnt.
    
     - If the abort succeeds and the command is retried, it would be requeue. A
       scsi_dispatch_cmd() would be called and iorequest_cnt would be increased
       again.
    
     - If the abort fails, the error handler successfully recovers the device,
       and the command is not retried, the command would be completed with
       scsi_finish_command() which would not increase iodone_cnt.
    
     - If the abort fails, the error handler successfully recovers the device,
       and the command is retried, the iorequest_cnt would be increased again.
    Signed-off-by: default avatarWenchao Hao <haowenchao@huawei.com>
    Link: https://lore.kernel.org/r/20221123122137.150776-2-haowenchao@huawei.comReviewed-by: default avatarMike Christie <michael.christie@oracle.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    ec9780e4
scsi_error.c 69.8 KB