net: unix: Align send data_len up to PAGE_SIZE
Using whole of allocated pages reduces requested skb->data size. This is just a little more thriftily allocation. netperf does not show difference with the current performance. Signed-off-by: Kirill Tkhai <ktkhai@parallels.com> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a188a54d11
commit
31ff6aa5c8
@@ -1492,10 +1492,14 @@ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock,
|
|||||||
if (len > sk->sk_sndbuf - 32)
|
if (len > sk->sk_sndbuf - 32)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (len > SKB_MAX_ALLOC)
|
if (len > SKB_MAX_ALLOC) {
|
||||||
data_len = min_t(size_t,
|
data_len = min_t(size_t,
|
||||||
len - SKB_MAX_ALLOC,
|
len - SKB_MAX_ALLOC,
|
||||||
MAX_SKB_FRAGS * PAGE_SIZE);
|
MAX_SKB_FRAGS * PAGE_SIZE);
|
||||||
|
data_len = PAGE_ALIGN(data_len);
|
||||||
|
|
||||||
|
BUILD_BUG_ON(SKB_MAX_ALLOC < PAGE_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
skb = sock_alloc_send_pskb(sk, len - data_len, data_len,
|
skb = sock_alloc_send_pskb(sk, len - data_len, data_len,
|
||||||
msg->msg_flags & MSG_DONTWAIT, &err,
|
msg->msg_flags & MSG_DONTWAIT, &err,
|
||||||
@@ -1670,6 +1674,8 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock,
|
|||||||
|
|
||||||
data_len = max_t(int, 0, size - SKB_MAX_HEAD(0));
|
data_len = max_t(int, 0, size - SKB_MAX_HEAD(0));
|
||||||
|
|
||||||
|
data_len = min_t(size_t, size, PAGE_ALIGN(data_len));
|
||||||
|
|
||||||
skb = sock_alloc_send_pskb(sk, size - data_len, data_len,
|
skb = sock_alloc_send_pskb(sk, size - data_len, data_len,
|
||||||
msg->msg_flags & MSG_DONTWAIT, &err,
|
msg->msg_flags & MSG_DONTWAIT, &err,
|
||||||
get_order(UNIX_SKB_FRAGS_SZ));
|
get_order(UNIX_SKB_FRAGS_SZ));
|
||||||
|
Reference in New Issue
Block a user