|
@@ -486,6 +486,19 @@ static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *netdev,
|
|
|
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
|
|
|
* @fip: The FCoE controller
|
|
@@ -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)
|
|
|
{
|
|
|
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)
|
|
|
|
|
|
/* send down to lld */
|
|
|
fr_dev(fp) = lport;
|
|
|
- if (port->fcoe_pending_queue.qlen)
|
|
|
- fcoe_check_wait_queue(lport, skb);
|
|
|
- else if (fcoe_start_io(skb))
|
|
|
- fcoe_check_wait_queue(lport, skb);
|
|
|
-
|
|
|
+ fcoe_port_send(port, skb);
|
|
|
return 0;
|
|
|
}
|
|
|
|