decnet: Use SKB queue and list helpers instead of doing it by-hand.
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b6211ae7f2
commit
bec571ec76
|
@ -1250,14 +1250,8 @@ static int dn_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
||||||
if (skb) {
|
if (skb) {
|
||||||
amount = skb->len;
|
amount = skb->len;
|
||||||
} else {
|
} else {
|
||||||
skb = sk->sk_receive_queue.next;
|
skb_queue_walk(&sk->sk_receive_queue, skb)
|
||||||
for (;;) {
|
|
||||||
if (skb ==
|
|
||||||
(struct sk_buff *)&sk->sk_receive_queue)
|
|
||||||
break;
|
|
||||||
amount += skb->len;
|
amount += skb->len;
|
||||||
skb = skb->next;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
err = put_user(amount, (int __user *)arg);
|
err = put_user(amount, (int __user *)arg);
|
||||||
|
@ -1644,13 +1638,13 @@ static int __dn_getsockopt(struct socket *sock, int level,int optname, char __us
|
||||||
|
|
||||||
static int dn_data_ready(struct sock *sk, struct sk_buff_head *q, int flags, int target)
|
static int dn_data_ready(struct sock *sk, struct sk_buff_head *q, int flags, int target)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb = q->next;
|
struct sk_buff *skb;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
if (flags & MSG_OOB)
|
if (flags & MSG_OOB)
|
||||||
return !skb_queue_empty(q) ? 1 : 0;
|
return !skb_queue_empty(q) ? 1 : 0;
|
||||||
|
|
||||||
while(skb != (struct sk_buff *)q) {
|
skb_queue_walk(q, skb) {
|
||||||
struct dn_skb_cb *cb = DN_SKB_CB(skb);
|
struct dn_skb_cb *cb = DN_SKB_CB(skb);
|
||||||
len += skb->len;
|
len += skb->len;
|
||||||
|
|
||||||
|
@ -1666,8 +1660,6 @@ static int dn_data_ready(struct sock *sk, struct sk_buff_head *q, int flags, int
|
||||||
/* minimum data length for read exceeded */
|
/* minimum data length for read exceeded */
|
||||||
if (len >= target)
|
if (len >= target)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
skb = skb->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1683,7 +1675,7 @@ static int dn_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||||
size_t target = size > 1 ? 1 : 0;
|
size_t target = size > 1 ? 1 : 0;
|
||||||
size_t copied = 0;
|
size_t copied = 0;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
struct sk_buff *skb, *nskb;
|
struct sk_buff *skb, *n;
|
||||||
struct dn_skb_cb *cb = NULL;
|
struct dn_skb_cb *cb = NULL;
|
||||||
unsigned char eor = 0;
|
unsigned char eor = 0;
|
||||||
long timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
|
long timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
|
||||||
|
@ -1758,7 +1750,7 @@ static int dn_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||||
finish_wait(sk->sk_sleep, &wait);
|
finish_wait(sk->sk_sleep, &wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(skb = queue->next; skb != (struct sk_buff *)queue; skb = nskb) {
|
skb_queue_walk_safe(queue, skb, n) {
|
||||||
unsigned int chunk = skb->len;
|
unsigned int chunk = skb->len;
|
||||||
cb = DN_SKB_CB(skb);
|
cb = DN_SKB_CB(skb);
|
||||||
|
|
||||||
|
@ -1775,7 +1767,6 @@ static int dn_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||||
skb_pull(skb, chunk);
|
skb_pull(skb, chunk);
|
||||||
|
|
||||||
eor = cb->nsp_flags & 0x40;
|
eor = cb->nsp_flags & 0x40;
|
||||||
nskb = skb->next;
|
|
||||||
|
|
||||||
if (skb->len == 0) {
|
if (skb->len == 0) {
|
||||||
skb_unlink(skb, queue);
|
skb_unlink(skb, queue);
|
||||||
|
|
|
@ -382,7 +382,7 @@ int dn_nsp_check_xmit_queue(struct sock *sk, struct sk_buff *skb, struct sk_buff
|
||||||
{
|
{
|
||||||
struct dn_skb_cb *cb = DN_SKB_CB(skb);
|
struct dn_skb_cb *cb = DN_SKB_CB(skb);
|
||||||
struct dn_scp *scp = DN_SK(sk);
|
struct dn_scp *scp = DN_SK(sk);
|
||||||
struct sk_buff *skb2, *list, *ack = NULL;
|
struct sk_buff *skb2, *n, *ack = NULL;
|
||||||
int wakeup = 0;
|
int wakeup = 0;
|
||||||
int try_retrans = 0;
|
int try_retrans = 0;
|
||||||
unsigned long reftime = cb->stamp;
|
unsigned long reftime = cb->stamp;
|
||||||
|
@ -390,9 +390,7 @@ int dn_nsp_check_xmit_queue(struct sock *sk, struct sk_buff *skb, struct sk_buff
|
||||||
unsigned short xmit_count;
|
unsigned short xmit_count;
|
||||||
unsigned short segnum;
|
unsigned short segnum;
|
||||||
|
|
||||||
skb2 = q->next;
|
skb_queue_walk_safe(q, skb2, n) {
|
||||||
list = (struct sk_buff *)q;
|
|
||||||
while(list != skb2) {
|
|
||||||
struct dn_skb_cb *cb2 = DN_SKB_CB(skb2);
|
struct dn_skb_cb *cb2 = DN_SKB_CB(skb2);
|
||||||
|
|
||||||
if (dn_before_or_equal(cb2->segnum, acknum))
|
if (dn_before_or_equal(cb2->segnum, acknum))
|
||||||
|
@ -400,8 +398,6 @@ int dn_nsp_check_xmit_queue(struct sock *sk, struct sk_buff *skb, struct sk_buff
|
||||||
|
|
||||||
/* printk(KERN_DEBUG "ack: %s %04x %04x\n", ack ? "ACK" : "SKIP", (int)cb2->segnum, (int)acknum); */
|
/* printk(KERN_DEBUG "ack: %s %04x %04x\n", ack ? "ACK" : "SKIP", (int)cb2->segnum, (int)acknum); */
|
||||||
|
|
||||||
skb2 = skb2->next;
|
|
||||||
|
|
||||||
if (ack == NULL)
|
if (ack == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue