aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ixgbe/ixgbe_fcoe.c8
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