Commit d6e3b27c authored by Peilin Ye's avatar Peilin Ye Committed by Jakub Kicinski
Browse files

af_unix: Refactor unix_read_skb()



Similar to udp_read_skb(), delete the unnecessary while loop in
unix_read_skb() for readability.  Since recv_actor() cannot return a
value greater than skb->len (see sk_psock_verdict_recv()), remove the
redundant check.

Suggested-by: default avatarCong Wang <cong.wang@bytedance.com>
Signed-off-by: default avatarPeilin Ye <peilin.ye@bytedance.com>
Link: https://lore.kernel.org/r/7009141683ad6cd3785daced3e4a80ba0eb773b5.1663909008.git.peilin.ye@bytedance.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 31f1fbcb
Loading
Loading
Loading
Loading
+10 −24
Original line number Diff line number Diff line
@@ -2536,12 +2536,9 @@ static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg, size_t si

static int unix_read_skb(struct sock *sk, skb_read_actor_t recv_actor)
{
	int copied = 0;

	while (1) {
	struct unix_sock *u = unix_sk(sk);
	struct sk_buff *skb;
		int used, err;
	int err, copied;

	mutex_lock(&u->iolock);
	skb = skb_recv_datagram(sk, MSG_DONTWAIT, &err);
@@ -2549,19 +2546,8 @@ static int unix_read_skb(struct sock *sk, skb_read_actor_t recv_actor)
	if (!skb)
		return err;

		used = recv_actor(sk, skb);
		if (used <= 0) {
			if (!copied)
				copied = used;
			kfree_skb(skb);
			break;
		} else if (used <= skb->len) {
			copied += used;
		}

	copied = recv_actor(sk, skb);
	kfree_skb(skb);
		break;
	}

	return copied;
}