Commit 980f5156 authored by Vasu Dev's avatar Vasu Dev Committed by James Bottomley

[SCSI] fcoe: add fip retry to avoid missing critical keep alive

Use pending queue to retry FIP frame in case its tx
fails and use common pending queue for both fcoe
and fip frames using fcoe_port_send.
Signed-off-by: default avatarVasu Dev <vasu.dev@intel.com>
Tested-by: default avatarRoss Brattain <ross.b.brattain@intel.com>
Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 320036e0
...@@ -486,6 +486,19 @@ static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *netdev, ...@@ -486,6 +486,19 @@ static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *netdev,
return 0; return 0;
} }
/**
* fcoe_port_send() - Send an Ethernet-encapsulated FIP/FCoE frame
* @port: The FCoE port
* @skb: The FIP/FCoE packet to be sent
*/
static void fcoe_port_send(struct fcoe_port *port, struct sk_buff *skb)
{
if (port->fcoe_pending_queue.qlen)
fcoe_check_wait_queue(port->lport, skb);
else if (fcoe_start_io(skb))
fcoe_check_wait_queue(port->lport, skb);
}
/** /**
* fcoe_fip_send() - Send an Ethernet-encapsulated FIP frame * fcoe_fip_send() - Send an Ethernet-encapsulated FIP frame
* @fip: The FCoE controller * @fip: The FCoE controller
...@@ -494,7 +507,7 @@ static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *netdev, ...@@ -494,7 +507,7 @@ static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *netdev,
static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb) static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
{ {
skb->dev = fcoe_from_ctlr(fip)->netdev; skb->dev = fcoe_from_ctlr(fip)->netdev;
dev_queue_xmit(skb); fcoe_port_send(lport_priv(fip->lp), skb);
} }
/** /**
...@@ -1575,11 +1588,7 @@ int fcoe_xmit(struct fc_lport *lport, struct fc_frame *fp) ...@@ -1575,11 +1588,7 @@ int fcoe_xmit(struct fc_lport *lport, struct fc_frame *fp)
/* send down to lld */ /* send down to lld */
fr_dev(fp) = lport; fr_dev(fp) = lport;
if (port->fcoe_pending_queue.qlen) fcoe_port_send(port, skb);
fcoe_check_wait_queue(lport, skb);
else if (fcoe_start_io(skb))
fcoe_check_wait_queue(lport, skb);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment