diff options
Diffstat (limited to 'drivers/scsi/fcoe/libfcoe.c')
-rw-r--r-- | drivers/scsi/fcoe/libfcoe.c | 21 |
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: |