On Thu, 20 Mar 2014, James Bottomley wrote:
> diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
> index 771c16b..c52bfb2 100644
> --- a/drivers/scsi/scsi_error.c
> +++ b/drivers/scsi/scsi_error.c
> @@ -145,14 +145,14 @@ scmd_eh_abort_handler(struct work_struct *work)
> "scmd %p retry "
> "aborted command\n", scmd));
> scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
> - return;
> + goto out;
> } else {
> SCSI_LOG_ERROR_RECOVERY(3,
> scmd_printk(KERN_WARNING, scmd,
> "scmd %p finish "
> "aborted command\n", scmd));
> scsi_finish_command(scmd);
> - return;
> + goto out;
> }
> } else {
> SCSI_LOG_ERROR_RECOVERY(3,
> @@ -162,6 +162,8 @@ scmd_eh_abort_handler(struct work_struct *work)
> }
> }
>
> + scmd->eh_eflags &= ~SCSI_EH_ABORT_SCHEDULED;
> +
> if (!scsi_eh_scmd_add(scmd, 0)) {
> SCSI_LOG_ERROR_RECOVERY(3,
> scmd_printk(KERN_WARNING, scmd,
> @@ -170,6 +172,10 @@ scmd_eh_abort_handler(struct work_struct *work)
> scmd->result |= DID_TIME_OUT << 16;
> scsi_finish_command(scmd);
> }
> + return;
> + out:
> + scmd->eh_eflags &= ~SCSI_EH_ABORT_SCHEDULED;
> + return;
> }
>
> /**
Andreas, I think this patch will go a long way toward fixing your
problem. Try it out. It won't eliminate the reset, but it should
prevent all those error messages you've been getting and it should
prevent your system from hanging.
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html