diff options
Diffstat (limited to 'net/llc/af_llc.c')
| -rw-r--r-- | net/llc/af_llc.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c index d6cfe84d521b..2652ead96c64 100644 --- a/net/llc/af_llc.c +++ b/net/llc/af_llc.c | |||
| @@ -784,24 +784,20 @@ static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
| 784 | copied += used; | 784 | copied += used; |
| 785 | len -= used; | 785 | len -= used; |
| 786 | 786 | ||
| 787 | if (used + offset < skb->len) | ||
| 788 | continue; | ||
| 789 | |||
| 790 | if (!(flags & MSG_PEEK)) { | 787 | if (!(flags & MSG_PEEK)) { |
| 791 | sk_eat_skb(sk, skb, 0); | 788 | sk_eat_skb(sk, skb, 0); |
| 792 | *seq = 0; | 789 | *seq = 0; |
| 793 | } | 790 | } |
| 791 | |||
| 792 | /* For non stream protcols we get one packet per recvmsg call */ | ||
| 793 | if (sk->sk_type != SOCK_STREAM) | ||
| 794 | goto copy_uaddr; | ||
| 795 | |||
| 796 | /* Partial read */ | ||
| 797 | if (used + offset < skb->len) | ||
| 798 | continue; | ||
| 794 | } while (len > 0); | 799 | } while (len > 0); |
| 795 | 800 | ||
| 796 | /* | ||
| 797 | * According to UNIX98, msg_name/msg_namelen are ignored | ||
| 798 | * on connected socket. -ANK | ||
| 799 | * But... af_llc still doesn't have separate sets of methods for | ||
| 800 | * SOCK_DGRAM and SOCK_STREAM :-( So we have to do this test, will | ||
| 801 | * eventually fix this tho :-) -acme | ||
| 802 | */ | ||
| 803 | if (sk->sk_type == SOCK_DGRAM) | ||
| 804 | goto copy_uaddr; | ||
| 805 | out: | 801 | out: |
| 806 | release_sock(sk); | 802 | release_sock(sk); |
| 807 | return copied; | 803 | return copied; |
