I think this also need to remove the abort_work field from
struct scsi_cmnd.

>  }
>  
>  #ifdef CONFIG_SCSI_LOGGING
> diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
> index 53e3343..2355100 100644
> --- a/drivers/scsi/scsi_error.c
> +++ b/drivers/scsi/scsi_error.c
> @@ -115,11 +115,9 @@ static int scsi_host_eh_past_deadline(struct Scsi_Host 
> *shost)
>   * scmd_eh_abort_handler - Handle command aborts
>   * @work:    command to be aborted.
>   */
> -void
> -scmd_eh_abort_handler(struct work_struct *work)
> +int
> +scmd_eh_abort_handler(struct scsi_cmnd *scmd)
>  {
> -     struct scsi_cmnd *scmd =
> -             container_of(work, struct scsi_cmnd, abort_work.work);
>       struct scsi_device *sdev = scmd->device;
>       int rtn;
>  
> @@ -127,42 +125,40 @@ static int scsi_host_eh_past_deadline(struct Scsi_Host 
> *shost)
>               SCSI_LOG_ERROR_RECOVERY(3,
>                       scmd_printk(KERN_INFO, scmd,
>                                   "eh timeout, not aborting\n"));
> -     } else {
> -             SCSI_LOG_ERROR_RECOVERY(3,
> -                     scmd_printk(KERN_INFO, scmd,
> -                                 "aborting command\n"));
> -             rtn = scsi_try_to_abort_cmd(sdev->host->hostt, scmd);
> -             if (rtn == SUCCESS) {
> -                     set_host_byte(scmd, DID_TIME_OUT);
> -                     if (scsi_host_eh_past_deadline(sdev->host)) {
> -                             SCSI_LOG_ERROR_RECOVERY(3,
> -                                     scmd_printk(KERN_INFO, scmd,
> -                                                 "eh timeout, not retrying "
> -                                                 "aborted command\n"));
> -                     } else if (!scsi_noretry_cmd(scmd) &&
> -                         (++scmd->retries <= scmd->allowed)) {
> -                             SCSI_LOG_ERROR_RECOVERY(3,
> -                                     scmd_printk(KERN_WARNING, scmd,
> -                                                 "retry aborted command\n"));
> -                             scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
> -                             return;
> -                     } else {
> -                             SCSI_LOG_ERROR_RECOVERY(3,
> -                                     scmd_printk(KERN_WARNING, scmd,
> -                                                 "finish aborted 
> command\n"));
> -                             scsi_finish_command(scmd);
> -                             return;
> -                     }
> -             } else {
> +             return FAILED;
> +     }
> +     SCSI_LOG_ERROR_RECOVERY(3,
> +             scmd_printk(KERN_INFO, scmd,
> +                         "aborting command\n"));
> +     rtn = scsi_try_to_abort_cmd(sdev->host->hostt, scmd);
> +     if (rtn == SUCCESS) {

If you restructure the function anywat this could become an
early return / goto out.

Reply via email to