@@ -939,9 +939,7 @@ void tipc_link_reset(struct tipc_link *l)
939939int  tipc_link_xmit (struct  tipc_link  * l , struct  sk_buff_head  * list ,
940940		   struct  sk_buff_head  * xmitq )
941941{
942- 	struct  tipc_msg  * hdr  =  buf_msg (skb_peek (list ));
943942	unsigned int   maxwin  =  l -> window ;
944- 	int  imp  =  msg_importance (hdr );
945943	unsigned int   mtu  =  l -> mtu ;
946944	u16  ack  =  l -> rcv_nxt  -  1 ;
947945	u16  seqno  =  l -> snd_nxt ;
@@ -950,8 +948,14 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
950948	struct  sk_buff_head  * backlogq  =  & l -> backlogq ;
951949	struct  sk_buff  * skb , * _skb , * * tskb ;
952950	int  pkt_cnt  =  skb_queue_len (list );
951+ 	struct  tipc_msg  * hdr ;
953952	int  rc  =  0 ;
953+ 	int  imp ;
954+ 
955+ 	if  (pkt_cnt  <= 0 )
956+ 		return  0 ;
954957
958+ 	hdr  =  buf_msg (skb_peek (list ));
955959	if  (unlikely (msg_size (hdr ) >  mtu )) {
956960		pr_warn ("Too large msg, purging xmit list %d %d %d %d %d!\n" ,
957961			skb_queue_len (list ), msg_user (hdr ),
@@ -960,6 +964,7 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
960964		return  - EMSGSIZE ;
961965	}
962966
967+ 	imp  =  msg_importance (hdr );
963968	/* Allow oversubscription of one data msg per source at congestion */ 
964969	if  (unlikely (l -> backlog [imp ].len  >= l -> backlog [imp ].limit )) {
965970		if  (imp  ==  TIPC_SYSTEM_IMPORTANCE ) {
0 commit comments