struct sockaddr_llc *uaddr = (struct sockaddr_llc *)msg->msg_name; struct sk_buff *skb;
struct llc_sock *llc = llc_sk(sk);
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;	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);	if (skb_queue_empty(&sk->sk_receive_queue)) {		rc = llc_wait_data(sk, sock_rcvtimeo(sk, noblock));		if (rc)			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->next) {dgram_free:		kfree_skb(skb);	}out:	release_sock(sk);	return rc ? : copied;}