[NET]: Fix heavy stack usage in seq_file output routines.
Plan C: we can follow the Al Viro's proposal about %n like in this patch. The same applies to udp, fib (the /proc/net/route file), rt_cache and sctp debug. This is minus ~150-200 bytes for each. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
3d36696024
commit
5e659e4cb0
@@ -2602,15 +2602,16 @@ static int fib_route_seq_show(struct seq_file *seq, void *v)
|
||||
list_for_each_entry_rcu(fa, &li->falh, fa_list) {
|
||||
const struct fib_info *fi = fa->fa_info;
|
||||
unsigned flags = fib_flag_trans(fa->fa_type, mask, fi);
|
||||
char bf[128];
|
||||
int len;
|
||||
|
||||
if (fa->fa_type == RTN_BROADCAST
|
||||
|| fa->fa_type == RTN_MULTICAST)
|
||||
continue;
|
||||
|
||||
if (fi)
|
||||
snprintf(bf, sizeof(bf),
|
||||
"%s\t%08X\t%08X\t%04X\t%d\t%u\t%d\t%08X\t%d\t%u\t%u",
|
||||
seq_printf(seq,
|
||||
"%s\t%08X\t%08X\t%04X\t%d\t%u\t"
|
||||
"%d\t%08X\t%d\t%u\t%u%n",
|
||||
fi->fib_dev ? fi->fib_dev->name : "*",
|
||||
prefix,
|
||||
fi->fib_nh->nh_gw, flags, 0, 0,
|
||||
@@ -2619,14 +2620,15 @@ static int fib_route_seq_show(struct seq_file *seq, void *v)
|
||||
(fi->fib_advmss ?
|
||||
fi->fib_advmss + 40 : 0),
|
||||
fi->fib_window,
|
||||
fi->fib_rtt >> 3);
|
||||
fi->fib_rtt >> 3, &len);
|
||||
else
|
||||
snprintf(bf, sizeof(bf),
|
||||
"*\t%08X\t%08X\t%04X\t%d\t%u\t%d\t%08X\t%d\t%u\t%u",
|
||||
seq_printf(seq,
|
||||
"*\t%08X\t%08X\t%04X\t%d\t%u\t"
|
||||
"%d\t%08X\t%d\t%u\t%u%n",
|
||||
prefix, 0, flags, 0, 0, 0,
|
||||
mask, 0, 0, 0);
|
||||
mask, 0, 0, 0, &len);
|
||||
|
||||
seq_printf(seq, "%-127s\n", bf);
|
||||
seq_printf(seq, "%*s\n", 127 - len, "");
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user