@@ -1030,21 +1030,25 @@ void tipc_link_reset(struct tipc_link *l)
10301030int tipc_link_xmit (struct tipc_link * l , struct sk_buff_head * list ,
10311031 struct sk_buff_head * xmitq )
10321032{
1033- struct tipc_msg * hdr = buf_msg (skb_peek (list ));
10341033 struct sk_buff_head * backlogq = & l -> backlogq ;
10351034 struct sk_buff_head * transmq = & l -> transmq ;
10361035 struct sk_buff * skb , * _skb ;
10371036 u16 bc_ack = l -> bc_rcvlink -> rcv_nxt - 1 ;
10381037 u16 ack = l -> rcv_nxt - 1 ;
10391038 u16 seqno = l -> snd_nxt ;
10401039 int pkt_cnt = skb_queue_len (list );
1041- int imp = msg_importance (hdr );
10421040 unsigned int mss = tipc_link_mss (l );
10431041 unsigned int cwin = l -> window ;
10441042 unsigned int mtu = l -> mtu ;
1043+ struct tipc_msg * hdr ;
10451044 bool new_bundle ;
10461045 int rc = 0 ;
1046+ int imp ;
1047+
1048+ if (pkt_cnt <= 0 )
1049+ return 0 ;
10471050
1051+ hdr = buf_msg (skb_peek (list ));
10481052 if (unlikely (msg_size (hdr ) > mtu )) {
10491053 pr_warn ("Too large msg, purging xmit list %d %d %d %d %d!\n" ,
10501054 skb_queue_len (list ), msg_user (hdr ),
@@ -1053,6 +1057,7 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
10531057 return - EMSGSIZE ;
10541058 }
10551059
1060+ imp = msg_importance (hdr );
10561061 /* Allow oversubscription of one data msg per source at congestion */
10571062 if (unlikely (l -> backlog [imp ].len >= l -> backlog [imp ].limit )) {
10581063 if (imp == TIPC_SYSTEM_IMPORTANCE ) {
0 commit comments