diff options
-rw-r--r-- | drivers/net/ixgbe/ixgbe_fcoe.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/ixgbe/ixgbe_fcoe.c b/drivers/net/ixgbe/ixgbe_fcoe.c index 0607cffbb213..a3c9f99515e2 100644 --- a/drivers/net/ixgbe/ixgbe_fcoe.c +++ b/drivers/net/ixgbe/ixgbe_fcoe.c | |||
@@ -292,6 +292,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter, | |||
292 | struct sk_buff *skb) | 292 | struct sk_buff *skb) |
293 | { | 293 | { |
294 | u16 xid; | 294 | u16 xid; |
295 | u32 fctl; | ||
295 | u32 sterr, fceofe, fcerr, fcstat; | 296 | u32 sterr, fceofe, fcerr, fcstat; |
296 | int rc = -EINVAL; | 297 | int rc = -EINVAL; |
297 | struct ixgbe_fcoe *fcoe; | 298 | struct ixgbe_fcoe *fcoe; |
@@ -312,7 +313,12 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter, | |||
312 | skb_set_transport_header(skb, skb_network_offset(skb) + | 313 | skb_set_transport_header(skb, skb_network_offset(skb) + |
313 | sizeof(struct fcoe_hdr)); | 314 | sizeof(struct fcoe_hdr)); |
314 | fh = (struct fc_frame_header *)skb_transport_header(skb); | 315 | fh = (struct fc_frame_header *)skb_transport_header(skb); |
315 | xid = be16_to_cpu(fh->fh_ox_id); | 316 | fctl = ntoh24(fh->fh_f_ctl); |
317 | if (fctl & FC_FC_EX_CTX) | ||
318 | xid = be16_to_cpu(fh->fh_ox_id); | ||
319 | else | ||
320 | xid = be16_to_cpu(fh->fh_rx_id); | ||
321 | |||
316 | if (xid >= IXGBE_FCOE_DDP_MAX) | 322 | if (xid >= IXGBE_FCOE_DDP_MAX) |
317 | goto ddp_out; | 323 | goto ddp_out; |
318 | 324 | ||