if (!skb->list) { 
if (!skb->next) { 
static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock,			  struct msghdr *msg, size_t size, int flags){	struct sock *sk = sock->sk;	struct sockaddr_llc *uaddr = (struct sockaddr_llc *)msg->msg_name;	struct sk_buff *skb;	size_t copied = 0;	int rc = -ENOMEM, timeout;	int noblock = flags & MSG_DONTWAIT;	dprintk("%s: receiving in %02X from %02X\n", __FUNCTION__,		llc_sk(sk)->laddr.lsap, llc_sk(sk)->daddr.lsap);	lock_sock(sk);	timeout = sock_rcvtimeo(sk, noblock);	rc = llc_ui_wait_for_data(sk, timeout);	if (rc) {		dprintk("%s: llc_ui_wait_for_data failed recv "			"in %02X from %02X\n", __FUNCTION__,			llc_sk(sk)->laddr.lsap, llc_sk(sk)->daddr.lsap);		goto out;	}	skb = skb_dequeue(&sk->sk_receive_queue);	if (!skb) /* shutdown */		goto out;	copied = skb->len;	if (copied > size)		copied = size;	rc = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);	if (rc)		goto dgram_free;	if (skb->len > copied) {		skb_pull(skb, copied);		skb_queue_head(&sk->sk_receive_queue, skb);	}	if (uaddr)		memcpy(uaddr, llc_ui_skb_cb(skb), sizeof(*uaddr));	msg->msg_namelen = sizeof(*uaddr);	if (!skb->list) {dgram_free:		kfree_skb(skb);	}out:	release_sock(sk);	return rc ? : copied;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/8728b834b226ffcf2c94a58530090e292af2a7bf/af_llc.c/buggy/net/llc/af_llc.c