diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
commit | c7fc24dc4420057f103afe8fc64524ebc25c5d37 (patch) | |
tree | 3682407a599b8f9f03fc096298134cafba1c9b2f /net/x25/x25_in.c | |
parent | 1d793fade8b063fde3cf275bf1a5c2d381292cd9 (diff) |
o Merge with Linux 2.1.116.
o New Newport console code.
o New G364 console code.
Diffstat (limited to 'net/x25/x25_in.c')
-rw-r--r-- | net/x25/x25_in.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/net/x25/x25_in.c b/net/x25/x25_in.c index ae98e95ec..ad7adb7ea 100644 --- a/net/x25/x25_in.c +++ b/net/x25/x25_in.c @@ -49,17 +49,20 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more) if (more) { sk->protinfo.x25->fraglen += skb->len; skb_queue_tail(&sk->protinfo.x25->fragment_queue, skb); + skb_set_owner_r(skb, sk); return 0; } if (!more && sk->protinfo.x25->fraglen > 0) { /* End of fragment */ - sk->protinfo.x25->fraglen += skb->len; - skb_queue_tail(&sk->protinfo.x25->fragment_queue, skb); + int len = sk->protinfo.x25->fraglen + skb->len; - if ((skbn = alloc_skb(sk->protinfo.x25->fraglen, GFP_ATOMIC)) == NULL) + if ((skbn = alloc_skb(len, GFP_ATOMIC)) == NULL){ + kfree_skb(skb); return 1; + } + + skb_queue_tail(&sk->protinfo.x25->fragment_queue, skb); - skb_set_owner_r(skbn, sk); skbn->h.raw = skbn->data; skbo = skb_dequeue(&sk->protinfo.x25->fragment_queue); @@ -75,7 +78,12 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more) sk->protinfo.x25->fraglen = 0; } - return sock_queue_rcv_skb(sk, skbn); + skb_set_owner_r(skbn, sk); + skb_queue_tail(&sk->receive_queue, skbn); + if (!sk->dead) + sk->data_ready(sk,skbn->len); + + return 0; } /* |