aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorVasu Dev <vasu.dev@intel.com>2010-10-08 20:12:20 -0400
committerJames Bottomley <James.Bottomley@suse.de>2010-10-25 16:11:32 -0400
commit60a3c4dfb7830845a97a20e73b7d938dc2fde6c1 (patch)
tree589a230cf3fad5a3aae823f7087db35bb9f6297d /drivers/scsi
parent75eee7252466342e0dfa6675106bcd3955090f67 (diff)
[SCSI] libfc: adds flogi retry in case DID is zero in RJT
Sometimes switch in NPV mode rejects flogi request with DID zero and in that case flogi is not tried again and port remains offline, so this patch validates DID for non zero along with only ACC response to allow flogi retry for RJT with DID=0 also succeed FLOGI in next try. Signed-off-by: Vasu Dev <vasu.dev@intel.com> Signed-off-by: Robert Love <robert.w.love@intel.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/libfc/fc_lport.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index d9b6e11b0e88..9be63edbf8fb 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -1447,13 +1447,7 @@ void fc_lport_flogi_resp(struct fc_seq *sp, struct fc_frame *fp,
1447 } 1447 }
1448 1448
1449 did = fc_frame_did(fp); 1449 did = fc_frame_did(fp);
1450 1450 if (fc_frame_payload_op(fp) == ELS_LS_ACC && did) {
1451 if (!did) {
1452 FC_LPORT_DBG(lport, "Bad FLOGI response\n");
1453 goto out;
1454 }
1455
1456 if (fc_frame_payload_op(fp) == ELS_LS_ACC) {
1457 flp = fc_frame_payload_get(fp, sizeof(*flp)); 1451 flp = fc_frame_payload_get(fp, sizeof(*flp));
1458 if (flp) { 1452 if (flp) {
1459 mfs = ntohs(flp->fl_csp.sp_bb_data) & 1453 mfs = ntohs(flp->fl_csp.sp_bb_data) &
@@ -1492,8 +1486,10 @@ void fc_lport_flogi_resp(struct fc_seq *sp, struct fc_frame *fp,
1492 fc_lport_enter_dns(lport); 1486 fc_lport_enter_dns(lport);
1493 } 1487 }
1494 } 1488 }
1495 } else 1489 } else {
1490 FC_LPORT_DBG(lport, "FLOGI RJT or bad response\n");
1496 fc_lport_error(lport, fp); 1491 fc_lport_error(lport, fp);
1492 }
1497 1493
1498out: 1494out:
1499 fc_frame_free(fp); 1495 fc_frame_free(fp);