|
@@ -868,7 +868,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,
|
|
|
|
|
|
/* dlci->skb is locked by tx_lock */
|
|
|
if (dlci->skb == NULL) {
|
|
|
- dlci->skb = skb_dequeue(&dlci->skb_list);
|
|
|
+ dlci->skb = skb_dequeue_tail(&dlci->skb_list);
|
|
|
if (dlci->skb == NULL)
|
|
|
return 0;
|
|
|
first = 1;
|
|
@@ -892,8 +892,11 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,
|
|
|
|
|
|
/* FIXME: need a timer or something to kick this so it can't
|
|
|
get stuck with no work outstanding and no buffer free */
|
|
|
- if (msg == NULL)
|
|
|
+ if (msg == NULL) {
|
|
|
+ skb_queue_tail(&dlci->skb_list, dlci->skb);
|
|
|
+ dlci->skb = NULL;
|
|
|
return -ENOMEM;
|
|
|
+ }
|
|
|
dp = msg->data;
|
|
|
|
|
|
if (dlci->adaption == 4) { /* Interruptible framed (Packetised Data) */
|