aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libfc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/libfc')
-rw-r--r--drivers/scsi/libfc/fc_lport.c60
-rw-r--r--drivers/scsi/libfc/fc_rport.c48
2 files changed, 63 insertions, 45 deletions
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index b8178ef398d7..52c4f2dfcfd3 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -1032,17 +1032,19 @@ static void fc_lport_rft_id_resp(struct fc_seq *sp, struct fc_frame *fp,
1032 1032
1033 FC_DEBUG_LPORT("Received a RFT_ID response\n"); 1033 FC_DEBUG_LPORT("Received a RFT_ID response\n");
1034 1034
1035 if (IS_ERR(fp)) {
1036 fc_lport_error(lport, fp);
1037 goto err;
1038 }
1039
1040 if (lport->state != LPORT_ST_RFT_ID) { 1035 if (lport->state != LPORT_ST_RFT_ID) {
1041 FC_DBG("Received a RFT_ID response, but in state %s\n", 1036 FC_DBG("Received a RFT_ID response, but in state %s\n",
1042 fc_lport_state(lport)); 1037 fc_lport_state(lport));
1038 if (IS_ERR(fp))
1039 goto err;
1043 goto out; 1040 goto out;
1044 } 1041 }
1045 1042
1043 if (IS_ERR(fp)) {
1044 fc_lport_error(lport, fp);
1045 goto err;
1046 }
1047
1046 fh = fc_frame_header_get(fp); 1048 fh = fc_frame_header_get(fp);
1047 ct = fc_frame_payload_get(fp, sizeof(*ct)); 1049 ct = fc_frame_payload_get(fp, sizeof(*ct));
1048 1050
@@ -1084,17 +1086,19 @@ static void fc_lport_rpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,
1084 1086
1085 FC_DEBUG_LPORT("Received a RPN_ID response\n"); 1087 FC_DEBUG_LPORT("Received a RPN_ID response\n");
1086 1088
1087 if (IS_ERR(fp)) {
1088 fc_lport_error(lport, fp);
1089 goto err;
1090 }
1091
1092 if (lport->state != LPORT_ST_RPN_ID) { 1089 if (lport->state != LPORT_ST_RPN_ID) {
1093 FC_DBG("Received a RPN_ID response, but in state %s\n", 1090 FC_DBG("Received a RPN_ID response, but in state %s\n",
1094 fc_lport_state(lport)); 1091 fc_lport_state(lport));
1092 if (IS_ERR(fp))
1093 goto err;
1095 goto out; 1094 goto out;
1096 } 1095 }
1097 1096
1097 if (IS_ERR(fp)) {
1098 fc_lport_error(lport, fp);
1099 goto err;
1100 }
1101
1098 fh = fc_frame_header_get(fp); 1102 fh = fc_frame_header_get(fp);
1099 ct = fc_frame_payload_get(fp, sizeof(*ct)); 1103 ct = fc_frame_payload_get(fp, sizeof(*ct));
1100 if (fh && ct && fh->fh_type == FC_TYPE_CT && 1104 if (fh && ct && fh->fh_type == FC_TYPE_CT &&
@@ -1134,17 +1138,19 @@ static void fc_lport_scr_resp(struct fc_seq *sp, struct fc_frame *fp,
1134 1138
1135 FC_DEBUG_LPORT("Received a SCR response\n"); 1139 FC_DEBUG_LPORT("Received a SCR response\n");
1136 1140
1137 if (IS_ERR(fp)) {
1138 fc_lport_error(lport, fp);
1139 goto err;
1140 }
1141
1142 if (lport->state != LPORT_ST_SCR) { 1141 if (lport->state != LPORT_ST_SCR) {
1143 FC_DBG("Received a SCR response, but in state %s\n", 1142 FC_DBG("Received a SCR response, but in state %s\n",
1144 fc_lport_state(lport)); 1143 fc_lport_state(lport));
1144 if (IS_ERR(fp))
1145 goto err;
1145 goto out; 1146 goto out;
1146 } 1147 }
1147 1148
1149 if (IS_ERR(fp)) {
1150 fc_lport_error(lport, fp);
1151 goto err;
1152 }
1153
1148 op = fc_frame_payload_op(fp); 1154 op = fc_frame_payload_op(fp);
1149 if (op == ELS_LS_ACC) 1155 if (op == ELS_LS_ACC)
1150 fc_lport_enter_ready(lport); 1156 fc_lport_enter_ready(lport);
@@ -1360,17 +1366,19 @@ static void fc_lport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
1360 1366
1361 FC_DEBUG_LPORT("Received a LOGO response\n"); 1367 FC_DEBUG_LPORT("Received a LOGO response\n");
1362 1368
1363 if (IS_ERR(fp)) {
1364 fc_lport_error(lport, fp);
1365 goto err;
1366 }
1367
1368 if (lport->state != LPORT_ST_LOGO) { 1369 if (lport->state != LPORT_ST_LOGO) {
1369 FC_DBG("Received a LOGO response, but in state %s\n", 1370 FC_DBG("Received a LOGO response, but in state %s\n",
1370 fc_lport_state(lport)); 1371 fc_lport_state(lport));
1372 if (IS_ERR(fp))
1373 goto err;
1371 goto out; 1374 goto out;
1372 } 1375 }
1373 1376
1377 if (IS_ERR(fp)) {
1378 fc_lport_error(lport, fp);
1379 goto err;
1380 }
1381
1374 op = fc_frame_payload_op(fp); 1382 op = fc_frame_payload_op(fp);
1375 if (op == ELS_LS_ACC) 1383 if (op == ELS_LS_ACC)
1376 fc_lport_enter_reset(lport); 1384 fc_lport_enter_reset(lport);
@@ -1444,17 +1452,19 @@ static void fc_lport_flogi_resp(struct fc_seq *sp, struct fc_frame *fp,
1444 1452
1445 FC_DEBUG_LPORT("Received a FLOGI response\n"); 1453 FC_DEBUG_LPORT("Received a FLOGI response\n");
1446 1454
1447 if (IS_ERR(fp)) {
1448 fc_lport_error(lport, fp);
1449 goto err;
1450 }
1451
1452 if (lport->state != LPORT_ST_FLOGI) { 1455 if (lport->state != LPORT_ST_FLOGI) {
1453 FC_DBG("Received a FLOGI response, but in state %s\n", 1456 FC_DBG("Received a FLOGI response, but in state %s\n",
1454 fc_lport_state(lport)); 1457 fc_lport_state(lport));
1458 if (IS_ERR(fp))
1459 goto err;
1455 goto out; 1460 goto out;
1456 } 1461 }
1457 1462
1463 if (IS_ERR(fp)) {
1464 fc_lport_error(lport, fp);
1465 goto err;
1466 }
1467
1458 fh = fc_frame_header_get(fp); 1468 fh = fc_frame_header_get(fp);
1459 did = ntoh24(fh->fh_d_id); 1469 did = ntoh24(fh->fh_d_id);
1460 if (fc_frame_payload_op(fp) == ELS_LS_ACC && did != 0) { 1470 if (fc_frame_payload_op(fp) == ELS_LS_ACC && did != 0) {
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index 0472bb73221e..eef70b4b7b92 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -505,17 +505,19 @@ static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
505 FC_DEBUG_RPORT("Received a PLOGI response from port (%6x)\n", 505 FC_DEBUG_RPORT("Received a PLOGI response from port (%6x)\n",
506 rport->port_id); 506 rport->port_id);
507 507
508 if (IS_ERR(fp)) {
509 fc_rport_error_retry(rport, fp);
510 goto err;
511 }
512
513 if (rdata->rp_state != RPORT_ST_PLOGI) { 508 if (rdata->rp_state != RPORT_ST_PLOGI) {
514 FC_DBG("Received a PLOGI response, but in state %s\n", 509 FC_DBG("Received a PLOGI response, but in state %s\n",
515 fc_rport_state(rport)); 510 fc_rport_state(rport));
511 if (IS_ERR(fp))
512 goto err;
516 goto out; 513 goto out;
517 } 514 }
518 515
516 if (IS_ERR(fp)) {
517 fc_rport_error_retry(rport, fp);
518 goto err;
519 }
520
519 op = fc_frame_payload_op(fp); 521 op = fc_frame_payload_op(fp);
520 if (op == ELS_LS_ACC && 522 if (op == ELS_LS_ACC &&
521 (plp = fc_frame_payload_get(fp, sizeof(*plp))) != NULL) { 523 (plp = fc_frame_payload_get(fp, sizeof(*plp))) != NULL) {
@@ -614,17 +616,19 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
614 FC_DEBUG_RPORT("Received a PRLI response from port (%6x)\n", 616 FC_DEBUG_RPORT("Received a PRLI response from port (%6x)\n",
615 rport->port_id); 617 rport->port_id);
616 618
617 if (IS_ERR(fp)) {
618 fc_rport_error_retry(rport, fp);
619 goto err;
620 }
621
622 if (rdata->rp_state != RPORT_ST_PRLI) { 619 if (rdata->rp_state != RPORT_ST_PRLI) {
623 FC_DBG("Received a PRLI response, but in state %s\n", 620 FC_DBG("Received a PRLI response, but in state %s\n",
624 fc_rport_state(rport)); 621 fc_rport_state(rport));
622 if (IS_ERR(fp))
623 goto err;
625 goto out; 624 goto out;
626 } 625 }
627 626
627 if (IS_ERR(fp)) {
628 fc_rport_error_retry(rport, fp);
629 goto err;
630 }
631
628 op = fc_frame_payload_op(fp); 632 op = fc_frame_payload_op(fp);
629 if (op == ELS_LS_ACC) { 633 if (op == ELS_LS_ACC) {
630 pp = fc_frame_payload_get(fp, sizeof(*pp)); 634 pp = fc_frame_payload_get(fp, sizeof(*pp));
@@ -678,17 +682,19 @@ static void fc_rport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
678 FC_DEBUG_RPORT("Received a LOGO response from port (%6x)\n", 682 FC_DEBUG_RPORT("Received a LOGO response from port (%6x)\n",
679 rport->port_id); 683 rport->port_id);
680 684
681 if (IS_ERR(fp)) {
682 fc_rport_error_retry(rport, fp);
683 goto err;
684 }
685
686 if (rdata->rp_state != RPORT_ST_LOGO) { 685 if (rdata->rp_state != RPORT_ST_LOGO) {
687 FC_DEBUG_RPORT("Received a LOGO response, but in state %s\n", 686 FC_DEBUG_RPORT("Received a LOGO response, but in state %s\n",
688 fc_rport_state(rport)); 687 fc_rport_state(rport));
688 if (IS_ERR(fp))
689 goto err;
689 goto out; 690 goto out;
690 } 691 }
691 692
693 if (IS_ERR(fp)) {
694 fc_rport_error_retry(rport, fp);
695 goto err;
696 }
697
692 op = fc_frame_payload_op(fp); 698 op = fc_frame_payload_op(fp);
693 if (op == ELS_LS_ACC) { 699 if (op == ELS_LS_ACC) {
694 fc_rport_enter_rtv(rport); 700 fc_rport_enter_rtv(rport);
@@ -764,17 +770,19 @@ static void fc_rport_rtv_resp(struct fc_seq *sp, struct fc_frame *fp,
764 FC_DEBUG_RPORT("Received a RTV response from port (%6x)\n", 770 FC_DEBUG_RPORT("Received a RTV response from port (%6x)\n",
765 rport->port_id); 771 rport->port_id);
766 772
767 if (IS_ERR(fp)) {
768 fc_rport_error(rport, fp);
769 goto err;
770 }
771
772 if (rdata->rp_state != RPORT_ST_RTV) { 773 if (rdata->rp_state != RPORT_ST_RTV) {
773 FC_DBG("Received a RTV response, but in state %s\n", 774 FC_DBG("Received a RTV response, but in state %s\n",
774 fc_rport_state(rport)); 775 fc_rport_state(rport));
776 if (IS_ERR(fp))
777 goto err;
775 goto out; 778 goto out;
776 } 779 }
777 780
781 if (IS_ERR(fp)) {
782 fc_rport_error(rport, fp);
783 goto err;
784 }
785
778 op = fc_frame_payload_op(fp); 786 op = fc_frame_payload_op(fp);
779 if (op == ELS_LS_ACC) { 787 if (op == ELS_LS_ACC) {
780 struct fc_els_rtv_acc *rtv; 788 struct fc_els_rtv_acc *rtv;