aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/fcoe/libfcoe.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/fcoe/libfcoe.c')
-rw-r--r--drivers/scsi/fcoe/libfcoe.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/scsi/fcoe/libfcoe.c b/drivers/scsi/fcoe/libfcoe.c
index b9aa280100b0..2f5bc7fd3fa9 100644
--- a/drivers/scsi/fcoe/libfcoe.c
+++ b/drivers/scsi/fcoe/libfcoe.c
@@ -215,7 +215,7 @@ static void fcoe_ctlr_solicit(struct fcoe_ctlr *fip, struct fcoe_fcf *fcf)
215 sol->desc.size.fd_size = htons(fcoe_size); 215 sol->desc.size.fd_size = htons(fcoe_size);
216 216
217 skb_put(skb, sizeof(*sol)); 217 skb_put(skb, sizeof(*sol));
218 skb->protocol = htons(ETH_P_802_3); 218 skb->protocol = htons(ETH_P_FIP);
219 skb_reset_mac_header(skb); 219 skb_reset_mac_header(skb);
220 skb_reset_network_header(skb); 220 skb_reset_network_header(skb);
221 fip->send(fip, skb); 221 fip->send(fip, skb);
@@ -369,7 +369,7 @@ static void fcoe_ctlr_send_keep_alive(struct fcoe_ctlr *fip, int ports, u8 *sa)
369 } 369 }
370 370
371 skb_put(skb, len); 371 skb_put(skb, len);
372 skb->protocol = htons(ETH_P_802_3); 372 skb->protocol = htons(ETH_P_FIP);
373 skb_reset_mac_header(skb); 373 skb_reset_mac_header(skb);
374 skb_reset_network_header(skb); 374 skb_reset_network_header(skb);
375 fip->send(fip, skb); 375 fip->send(fip, skb);
@@ -432,7 +432,7 @@ static int fcoe_ctlr_encaps(struct fcoe_ctlr *fip,
432 else if (fip->spma) 432 else if (fip->spma)
433 memcpy(mac->fd_mac, fip->ctl_src_addr, ETH_ALEN); 433 memcpy(mac->fd_mac, fip->ctl_src_addr, ETH_ALEN);
434 434
435 skb->protocol = htons(ETH_P_802_3); 435 skb->protocol = htons(ETH_P_FIP);
436 skb_reset_mac_header(skb); 436 skb_reset_mac_header(skb);
437 skb_reset_network_header(skb); 437 skb_reset_network_header(skb);
438 return 0; 438 return 0;
@@ -455,14 +455,10 @@ int fcoe_ctlr_els_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
455 u16 old_xid; 455 u16 old_xid;
456 u8 op; 456 u8 op;
457 457
458 if (fip->state == FIP_ST_NON_FIP)
459 return 0;
460
461 fh = (struct fc_frame_header *)skb->data; 458 fh = (struct fc_frame_header *)skb->data;
462 op = *(u8 *)(fh + 1); 459 op = *(u8 *)(fh + 1);
463 460
464 switch (op) { 461 if (op == ELS_FLOGI) {
465 case ELS_FLOGI:
466 old_xid = fip->flogi_oxid; 462 old_xid = fip->flogi_oxid;
467 fip->flogi_oxid = ntohs(fh->fh_ox_id); 463 fip->flogi_oxid = ntohs(fh->fh_ox_id);
468 if (fip->state == FIP_ST_AUTO) { 464 if (fip->state == FIP_ST_AUTO) {
@@ -474,6 +470,15 @@ int fcoe_ctlr_els_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
474 fip->map_dest = 1; 470 fip->map_dest = 1;
475 return 0; 471 return 0;
476 } 472 }
473 if (fip->state == FIP_ST_NON_FIP)
474 fip->map_dest = 1;
475 }
476
477 if (fip->state == FIP_ST_NON_FIP)
478 return 0;
479
480 switch (op) {
481 case ELS_FLOGI:
477 op = FIP_DT_FLOGI; 482 op = FIP_DT_FLOGI;
478 break; 483 break;
479 case ELS_FDISC: 484 case ELS_FDISC: