diff options
| author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-02-26 23:55:31 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-02-26 23:55:31 -0800 |
| commit | 423abd9d79b147d4582d9f9624099de5f8dd2766 (patch) | |
| tree | ba866a4e1334b6e80d237729df800ea8e528fc2f /net/unix/af_unix.c | |
| parent | a77e4c96f5a230d5442c9aebe63db1ae742cab4c (diff) | |
| parent | 56b5adfb617ca66a649dceb9a054a059ff1cc387 (diff) | |
Merge bk://kernel.bkbits.net/davem/net-2.6
into ppc970.osdl.org:/home/torvalds/v2.6/linux
Diffstat (limited to 'net/unix/af_unix.c')
| -rw-r--r-- | net/unix/af_unix.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 062bcc2080a7..5658798cabc1 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -1850,15 +1850,22 @@ static int unix_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) case SIOCINQ: { struct sk_buff *skb; + if (sk->sk_state == TCP_LISTEN) { err = -EINVAL; break; } spin_lock(&sk->sk_receive_queue.lock); - skb = skb_peek(&sk->sk_receive_queue); - if (skb) - amount=skb->len; + if (sk->sk_type == SOCK_STREAM || + sk->sk_type == SOCK_SEQPACKET) { + skb_queue_walk(&sk->sk_receive_queue, skb) + amount += skb->len; + } else { + skb = skb_peek(&sk->sk_receive_queue); + if (skb) + amount=skb->len; + } spin_unlock(&sk->sk_receive_queue.lock); err = put_user(amount, (int __user *)arg); break; |
