I missed RFC prefix on these patches though these are for RFC as
described in patch below.

        Vasu

On Wed, 2010-06-16 at 16:32 -0700, Vasu Dev wrote:
> In this case sync IO fails with EIO(5) errors as
> "Thread:1 System call error:5 - Input/output error (::pwrite() failed)".
> 
> This is due to IO time out while libfc doing link down processing
> to block all rports and if timed out IO was at last retry
> attempt then it fails with following log messages.
> 
> [77848.612169] host2: rport bf0015: Delete port
> [77848.612221] host2: rport e10aef: work delete
> [77848.612232] host2: rport e10002: work event 3
> [77848.612422] sd 2:0:1:1: [sdi] Unhandled error code
> [77848.612426] sd 2:0:1:1: [sdi] Result: hostbyte=DID_ERROR
> driverbyte=DRIVER_OK
> [77848.612431] sd 2:0:1:1: [sdi] CDB: Write(10): 2a 00 00 00 11 20 00 00 20 00
> [77848.612445] end_request: I/O error, dev sdi, sector 4384
> [77848.612553] sd 2:0:1:2: [sdj] Unhandled error code
> 
> To fix these errors, failed IO needs to be re-queued without
> counting retry attempt. It can be done using either
> DID_REQUEUE or DID_IMM_RETRY and these both works to fix EIO
> errors but not sure which one is any better for very
> small time window as all IOs gets blocked once rport/s blocked
> on link down completion.
> 
> The DID_IMM_RETRY might be bit helpful to resume IO quickly
> once rport is unblocked but would cause several retries while
> rport is getting blocked, so may be DID_REQUEUE would be better
> to finish rport/s blocking first on link down. As I said both
> works fine to fix IO errors on cable unplug and I don't see
> much difference with either for this case, do you see?
> 
> Signed-off-by: Vasu Dev <[email protected]>
> ---
> 
>  drivers/scsi/libfc/fc_fcp.c |    5 +++++
>  1 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
> index 8914f1e..be1782c 100644
> --- a/drivers/scsi/libfc/fc_fcp.c
> +++ b/drivers/scsi/libfc/fc_fcp.c
> @@ -1973,6 +1973,11 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
>               break;
>       }
>  
> +     if (lport->state != LPORT_ST_READY && fsp->status_code != FC_COMPLETE) {
> +             sc_cmd->result = (DID_REQUEUE << 16);
> +             FC_FCP_DBG(fsp, "Returning DID_REQUEUE to scsi-ml\n");
> +     }
> +
>       spin_lock_irqsave(&si->scsi_queue_lock, flags);
>       list_del(&fsp->list);
>       spin_unlock_irqrestore(&si->scsi_queue_lock, flags);
> 
> _______________________________________________
> devel mailing list
> [email protected]
> http://www.open-fcoe.org/mailman/listinfo/devel

_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel

Reply via email to