Re: [PATCH 8/8] scsi_error: Escalate to LUN reset if abort fails

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2013-10-23 at 10:51 +0200, Hannes Reinecke wrote:
> If a command abort fails there is a fair chance that all other
> aborts will be failing, too.
> So we should be calling LUN reset directly after the first failed
> abort and skip aborting the remaining commands.
> 
> Signed-off-by: Hannes Reinecke <hare@xxxxxxx>
> ---
>  drivers/scsi/scsi_error.c | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
> index edae9e2..e8bee9f 100644
> --- a/drivers/scsi/scsi_error.c
> +++ b/drivers/scsi/scsi_error.c
> @@ -1192,18 +1192,20 @@ static int scsi_eh_abort_cmds(struct list_head *work_q,
>  						  "0x%p\n", current->comm,
>  						  scmd));
>  		rtn = scsi_try_to_abort_cmd(shost->hostt, scmd);
> -		if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
> -			scmd->eh_eflags &= ~SCSI_EH_CANCEL_CMD;
> -			if (rtn == FAST_IO_FAIL)
> -				scsi_eh_finish_cmd(scmd, done_q);
> -			else
> -				list_move_tail(&scmd->eh_entry, &check_list);
> -		} else
> +		if (rtn == FAILED) {
>  			SCSI_LOG_ERROR_RECOVERY(3, printk("%s: aborting"
>  							  " cmd failed:"
>  							  "0x%p\n",
>  							  current->comm,
>  							  scmd));
> +			list_splice_init(&check_list, work_q);
> +			return list_empty(work_q);
> +		}
> +		scmd->eh_eflags &= ~SCSI_EH_CANCEL_CMD;
> +		if (rtn == FAST_IO_FAIL)
> +			scsi_eh_finish_cmd(scmd, done_q);
> +		else
> +			list_move_tail(&scmd->eh_entry, &check_list);
>  	}
>  
>  	return scsi_eh_test_devices(&check_list, work_q, done_q, 0);

This looks like it should be OK, assuming that we do in fact want to
stop issuing aborts once a call to ->eh_abort_handler() returns FAILED.
I guess it depends upon whether drivers might occasionally return FAILED
due to some temporary condition as opposed to e.g. loss of link.

(I've been having a discussion with the vmw_pvscsi driver maintainer
regarding their implementation of ->eh_abort_handler(), which might
have to change to return FAILED if the hypervisor side doesn't respond
to the abort request fast enough, instead of returning SUCCESS and then
later completing the request when the abort actually completes.  So I
think that a temporary condition that results in returning FAILED is
possible...)

Note that this portion of the patch set would change the behavior
regardless of whether eh_deadline was enabled.

-Ewan



--
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




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux