diff options
| author | Arnaldo Carvalho de Melo <acme@conectiva.com.br> | 2002-09-29 21:18:40 -0300 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@conectiva.com.br> | 2002-09-29 21:18:40 -0300 |
| commit | f0a7e272fca58e9b1b359ff5196ddea8a2884acb (patch) | |
| tree | 08683817cb9e31735b8a86a6fcbee82cadd87fcc | |
| parent | 344ff803adf6622d4d717c9397c3891a78c6ccf5 (diff) | |
. LLC: kill mac_send_pdu, use plain dev_queue_xmit
With this we avoid doing skb_clone on skbs that will not be kept on
unacked lists.
| -rw-r--r-- | include/net/llc_mac.h | 2 | ||||
| -rw-r--r-- | include/net/llc_sap.h | 1 | ||||
| -rw-r--r-- | net/llc/llc_conn.c | 13 | ||||
| -rw-r--r-- | net/llc/llc_mac.c | 30 | ||||
| -rw-r--r-- | net/llc/llc_main.c | 8 | ||||
| -rw-r--r-- | net/llc/llc_s_ac.c | 10 | ||||
| -rw-r--r-- | net/llc/llc_sap.c | 11 |
7 files changed, 15 insertions, 60 deletions
diff --git a/include/net/llc_mac.h b/include/net/llc_mac.h index 3ab584987448..e87850701db6 100644 --- a/include/net/llc_mac.h +++ b/include/net/llc_mac.h @@ -11,8 +11,6 @@ * * See the GNU General Public License for more details. */ -/* Defines MAC-layer interface to LLC layer */ -extern int mac_send_pdu(struct sk_buff *skb); extern int llc_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt); extern struct net_device *mac_dev_peer(struct net_device *current_dev, diff --git a/include/net/llc_sap.h b/include/net/llc_sap.h index 645e52759b36..557aac72bf98 100644 --- a/include/net/llc_sap.h +++ b/include/net/llc_sap.h @@ -44,5 +44,4 @@ extern void llc_sap_assign_sock(struct llc_sap *sap, struct sock *sk); extern void llc_sap_unassign_sock(struct llc_sap *sap, struct sock *sk); extern void llc_sap_state_process(struct llc_sap *sap, struct sk_buff *skb); extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb); -extern void llc_sap_send_pdu(struct llc_sap *sap, struct sk_buff *skb); #endif /* LLC_SAP_H */ diff --git a/net/llc/llc_conn.c b/net/llc/llc_conn.c index 043b1bfaae5f..161cff1c450b 100644 --- a/net/llc/llc_conn.c +++ b/net/llc/llc_conn.c @@ -340,12 +340,15 @@ static void llc_conn_send_pdus(struct sock *sk) struct llc_pdu_sn *pdu = (struct llc_pdu_sn *)skb->nh.raw; if (!LLC_PDU_TYPE_IS_I(pdu) && - !(skb->dev->flags & IFF_LOOPBACK)) + !(skb->dev->flags & IFF_LOOPBACK)) { + struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); + skb_queue_tail(&llc_sk(sk)->pdu_unack_q, skb); - mac_send_pdu(skb); - if (LLC_PDU_TYPE_IS_I(pdu) || - (skb->dev && skb->dev->flags & IFF_LOOPBACK)) - kfree_skb(skb); + if (!skb2) + break; + skb = skb2; + } + dev_queue_xmit(skb); } } diff --git a/net/llc/llc_mac.c b/net/llc/llc_mac.c index 58b6f72e1d95..7015d55ce748 100644 --- a/net/llc/llc_mac.c +++ b/net/llc/llc_mac.c @@ -40,36 +40,6 @@ static void llc_station_rcv(struct sk_buff *skb); static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb); /** - * mac_send_pdu - Sends PDU to specific device. - * @skb: pdu which must be sent - * - * If module is not initialized then returns failure, else figures out - * where to direct this PDU. Sends PDU to specific device, at this point a - * device must has been assigned to the PDU; If not, can't transmit the - * PDU. PDU sent to MAC layer, is free to re-send at a later time. Returns - * 0 on success, 1 for failure. - */ -int mac_send_pdu(struct sk_buff *skb) -{ - struct sk_buff *skb2; - int pri = GFP_ATOMIC, rc = -1; - - if (!skb->dev) { - dprintk("%s: skb->dev == NULL!", __FUNCTION__); - goto out; - } - if (skb->sk) - pri = (int)skb->sk->priority; - skb2 = skb_clone(skb, pri); - if (!skb2) - goto out; - rc = 0; - dev_queue_xmit(skb2); -out: - return rc; -} - -/** * llc_rcv - 802.2 entry point from net lower layers * @skb: received pdu * @dev: device that receive pdu diff --git a/net/llc/llc_main.c b/net/llc/llc_main.c index af20acc6b26e..044fce7207e7 100644 --- a/net/llc/llc_main.c +++ b/net/llc/llc_main.c @@ -387,13 +387,9 @@ static void llc_station_send_pdus(struct llc_station *station) { struct sk_buff *skb; - while ((skb = skb_dequeue(&station->mac_pdu_q)) != NULL) { - int rc = mac_send_pdu(skb); - - kfree_skb(skb); - if (rc) + while ((skb = skb_dequeue(&station->mac_pdu_q)) != NULL) + if (dev_queue_xmit(skb)) break; - } } /** diff --git a/net/llc/llc_s_ac.c b/net/llc/llc_s_ac.c index d56556925db1..27421a8f284b 100644 --- a/net/llc/llc_s_ac.c +++ b/net/llc/llc_s_ac.c @@ -58,7 +58,7 @@ int llc_sap_action_send_ui(struct llc_sap *sap, struct sk_buff *skb) llc_pdu_init_as_ui_cmd(skb); rc = lan_hdrs_init(skb, ev->saddr.mac, ev->daddr.mac); if (!rc) - llc_sap_send_pdu(sap, skb); + rc = dev_queue_xmit(skb); return rc; } @@ -81,7 +81,7 @@ int llc_sap_action_send_xid_c(struct llc_sap *sap, struct sk_buff *skb) llc_pdu_init_as_xid_cmd(skb, LLC_XID_NULL_CLASS_2, 0); rc = lan_hdrs_init(skb, ev->saddr.mac, ev->daddr.mac); if (!rc) - llc_sap_send_pdu(sap, skb); + rc = dev_queue_xmit(skb); return rc; } @@ -111,7 +111,7 @@ int llc_sap_action_send_xid_r(struct llc_sap *sap, struct sk_buff *skb) llc_pdu_init_as_xid_rsp(nskb, LLC_XID_NULL_CLASS_2, 0); rc = lan_hdrs_init(nskb, mac_sa, mac_da); if (!rc) - llc_sap_send_pdu(sap, nskb); + rc = dev_queue_xmit(nskb); out: return rc; } @@ -135,7 +135,7 @@ int llc_sap_action_send_test_c(struct llc_sap *sap, struct sk_buff *skb) llc_pdu_init_as_test_cmd(skb); rc = lan_hdrs_init(skb, ev->saddr.mac, ev->daddr.mac); if (!rc) - llc_sap_send_pdu(sap, skb); + rc = dev_queue_xmit(skb); return rc; } @@ -157,7 +157,7 @@ int llc_sap_action_send_test_r(struct llc_sap *sap, struct sk_buff *skb) llc_pdu_init_as_test_rsp(nskb, skb); rc = lan_hdrs_init(nskb, mac_sa, mac_da); if (!rc) - llc_sap_send_pdu(sap, nskb); + rc = dev_queue_xmit(nskb); out: return rc; } diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c index 031b14b6b3ea..28ae6a659658 100644 --- a/net/llc/llc_sap.c +++ b/net/llc/llc_sap.c @@ -133,17 +133,6 @@ void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb) } /** - * llc_sap_send_pdu - Sends a frame to MAC layer for transmition - * @sap: pointer to SAP - * @skb: pdu that must be sent - */ -void llc_sap_send_pdu(struct llc_sap *sap, struct sk_buff *skb) -{ - mac_send_pdu(skb); - kfree_skb(skb); -} - -/** * llc_sap_next_state - finds transition, execs actions & change SAP state * @sap: pointer to SAP * @skb: happened event |
