|
@@ -727,28 +727,31 @@ int inet_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
|
|
|
sock_rps_record_flow(sk);
|
|
|
|
|
|
/* We may need to bind the socket. */
|
|
|
- if (!inet_sk(sk)->inet_num && inet_autobind(sk))
|
|
|
+ if (!inet_sk(sk)->inet_num && !sk->sk_prot->no_autobind &&
|
|
|
+ inet_autobind(sk))
|
|
|
return -EAGAIN;
|
|
|
|
|
|
return sk->sk_prot->sendmsg(iocb, sk, msg, size);
|
|
|
}
|
|
|
EXPORT_SYMBOL(inet_sendmsg);
|
|
|
|
|
|
-static ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset,
|
|
|
- size_t size, int flags)
|
|
|
+ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset,
|
|
|
+ size_t size, int flags)
|
|
|
{
|
|
|
struct sock *sk = sock->sk;
|
|
|
|
|
|
sock_rps_record_flow(sk);
|
|
|
|
|
|
/* We may need to bind the socket. */
|
|
|
- if (!inet_sk(sk)->inet_num && inet_autobind(sk))
|
|
|
+ if (!inet_sk(sk)->inet_num && !sk->sk_prot->no_autobind &&
|
|
|
+ inet_autobind(sk))
|
|
|
return -EAGAIN;
|
|
|
|
|
|
if (sk->sk_prot->sendpage)
|
|
|
return sk->sk_prot->sendpage(sk, page, offset, size, flags);
|
|
|
return sock_no_sendpage(sock, page, offset, size, flags);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(inet_sendpage);
|
|
|
|
|
|
int inet_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
|
|
|
size_t size, int flags)
|
|
@@ -894,10 +897,10 @@ const struct proto_ops inet_stream_ops = {
|
|
|
.shutdown = inet_shutdown,
|
|
|
.setsockopt = sock_common_setsockopt,
|
|
|
.getsockopt = sock_common_getsockopt,
|
|
|
- .sendmsg = tcp_sendmsg,
|
|
|
+ .sendmsg = inet_sendmsg,
|
|
|
.recvmsg = inet_recvmsg,
|
|
|
.mmap = sock_no_mmap,
|
|
|
- .sendpage = tcp_sendpage,
|
|
|
+ .sendpage = inet_sendpage,
|
|
|
.splice_read = tcp_splice_read,
|
|
|
#ifdef CONFIG_COMPAT
|
|
|
.compat_setsockopt = compat_sock_common_setsockopt,
|