@@ -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