tcp: md5: do not use alloc_percpu()
authorEric Dumazet <edumazet@google.com>
Thu, 23 Oct 2014 19:58:58 +0000 (12:58 -0700)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 1 Jan 2015 01:27:52 +0000 (01:27 +0000)
commit724035313906d1569c81524132ef494ce1a112af
tree9f36476140e5f995ebebfc1319ffe764c24208b8
parent10f2216850e5955d102f8a052f5f3621e1aca328
tcp: md5: do not use alloc_percpu()

commit 349ce993ac706869d553a1816426d3a4bfda02b1 upstream.

percpu tcp_md5sig_pool contains memory blobs that ultimately
go through sg_set_buf().

-> sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf));

This requires that whole area is in a physically contiguous portion
of memory. And that @buf is not backed by vmalloc().

Given that alloc_percpu() can use vmalloc() areas, this does not
fit the requirements.

Replace alloc_percpu() by a static DEFINE_PER_CPU() as tcp_md5sig_pool
is small anyway, there is no gain to dynamically allocate it.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Fixes: 765cf9976e93 ("tcp: md5: remove one indirection level in tcp_md5sig_pool")
Reported-by: Crestez Dan Leonard <cdleonard@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.2: the deleted code differs slightly due to API changes]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
net/ipv4/tcp.c