mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
net: avoid limits overflow
Robin Holt tried to boot a 16TB machine and found some limits were reached : sysctl_tcp_mem[2], sysctl_udp_mem[2] We can switch infrastructure to use long "instead" of "int", now atomic_long_t primitives are available for free. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Reported-by: Robin Holt <holt@sgi.com> Reviewed-by: Robin Holt <holt@sgi.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
67286640f6
commit
8d987e5c75
15 changed files with 40 additions and 38 deletions
|
@ -1653,10 +1653,10 @@ int __sk_mem_schedule(struct sock *sk, int size, int kind)
|
|||
{
|
||||
struct proto *prot = sk->sk_prot;
|
||||
int amt = sk_mem_pages(size);
|
||||
int allocated;
|
||||
long allocated;
|
||||
|
||||
sk->sk_forward_alloc += amt * SK_MEM_QUANTUM;
|
||||
allocated = atomic_add_return(amt, prot->memory_allocated);
|
||||
allocated = atomic_long_add_return(amt, prot->memory_allocated);
|
||||
|
||||
/* Under limit. */
|
||||
if (allocated <= prot->sysctl_mem[0]) {
|
||||
|
@ -1714,7 +1714,7 @@ suppress_allocation:
|
|||
|
||||
/* Alas. Undo changes. */
|
||||
sk->sk_forward_alloc -= amt * SK_MEM_QUANTUM;
|
||||
atomic_sub(amt, prot->memory_allocated);
|
||||
atomic_long_sub(amt, prot->memory_allocated);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(__sk_mem_schedule);
|
||||
|
@ -1727,12 +1727,12 @@ void __sk_mem_reclaim(struct sock *sk)
|
|||
{
|
||||
struct proto *prot = sk->sk_prot;
|
||||
|
||||
atomic_sub(sk->sk_forward_alloc >> SK_MEM_QUANTUM_SHIFT,
|
||||
atomic_long_sub(sk->sk_forward_alloc >> SK_MEM_QUANTUM_SHIFT,
|
||||
prot->memory_allocated);
|
||||
sk->sk_forward_alloc &= SK_MEM_QUANTUM - 1;
|
||||
|
||||
if (prot->memory_pressure && *prot->memory_pressure &&
|
||||
(atomic_read(prot->memory_allocated) < prot->sysctl_mem[0]))
|
||||
(atomic_long_read(prot->memory_allocated) < prot->sysctl_mem[0]))
|
||||
*prot->memory_pressure = 0;
|
||||
}
|
||||
EXPORT_SYMBOL(__sk_mem_reclaim);
|
||||
|
@ -2452,12 +2452,12 @@ static char proto_method_implemented(const void *method)
|
|||
|
||||
static void proto_seq_printf(struct seq_file *seq, struct proto *proto)
|
||||
{
|
||||
seq_printf(seq, "%-9s %4u %6d %6d %-3s %6u %-3s %-10s "
|
||||
seq_printf(seq, "%-9s %4u %6d %6ld %-3s %6u %-3s %-10s "
|
||||
"%2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c\n",
|
||||
proto->name,
|
||||
proto->obj_size,
|
||||
sock_prot_inuse_get(seq_file_net(seq), proto),
|
||||
proto->memory_allocated != NULL ? atomic_read(proto->memory_allocated) : -1,
|
||||
proto->memory_allocated != NULL ? atomic_long_read(proto->memory_allocated) : -1L,
|
||||
proto->memory_pressure != NULL ? *proto->memory_pressure ? "yes" : "no" : "NI",
|
||||
proto->max_header,
|
||||
proto->slab == NULL ? "no" : "yes",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue