Skip to content

Commit 6f24080

Browse files
Paolo Abenidavem330
authored andcommitted
ipv4: use indirect call wrappers for {tcp, udp}_{recv, send}msg()
This avoids an indirect call per syscall for common ipv4 transports v1 -> v2: - avoid unneeded reclaration for udp_sendmsg, as suggested by Willem Signed-off-by: Paolo Abeni <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 164c51f commit 6f24080

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

net/ipv4/af_inet.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,8 @@ int inet_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
804804
if (unlikely(inet_send_prepare(sk)))
805805
return -EAGAIN;
806806

807-
return sk->sk_prot->sendmsg(sk, msg, size);
807+
return INDIRECT_CALL_2(sk->sk_prot->sendmsg, tcp_sendmsg, udp_sendmsg,
808+
sk, msg, size);
808809
}
809810
EXPORT_SYMBOL(inet_sendmsg);
810811

@@ -822,6 +823,8 @@ ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset,
822823
}
823824
EXPORT_SYMBOL(inet_sendpage);
824825

826+
INDIRECT_CALLABLE_DECLARE(int udp_recvmsg(struct sock *, struct msghdr *,
827+
size_t, int, int, int *));
825828
int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
826829
int flags)
827830
{
@@ -832,8 +835,9 @@ int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
832835
if (likely(!(flags & MSG_ERRQUEUE)))
833836
sock_rps_record_flow(sk);
834837

835-
err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
836-
flags & ~MSG_DONTWAIT, &addr_len);
838+
err = INDIRECT_CALL_2(sk->sk_prot->recvmsg, tcp_recvmsg, udp_recvmsg,
839+
sk, msg, size, flags & MSG_DONTWAIT,
840+
flags & ~MSG_DONTWAIT, &addr_len);
837841
if (err >= 0)
838842
msg->msg_namelen = addr_len;
839843
return err;

0 commit comments

Comments
 (0)