forked from luck/tmp_suning_uos_patched
tracing: Do not (ab)use trace_seq in event_id_read()
event_id_read() has no reason to kmalloc "struct trace_seq" (more than PAGE_SIZE!), it can use a small buffer instead. Note: "if (*ppos) return 0" looks strange and even wrong, simple_read_from_buffer() handles ppos != 0 case corrrectly. And it seems that almost every user of trace_seq in this file should be converted too. Unless you use seq_open(), trace_seq buys nothing compared to the raw buffer, but it needs a bit more memory and code. Link: http://lkml.kernel.org/r/20130718184712.GA4786@redhat.com Signed-off-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
7710b63995
commit
cd458ba9d5
|
@ -947,23 +947,14 @@ static ssize_t
|
||||||
event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
|
event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct ftrace_event_call *call = filp->private_data;
|
struct ftrace_event_call *call = filp->private_data;
|
||||||
struct trace_seq *s;
|
char buf[32];
|
||||||
int r;
|
int len;
|
||||||
|
|
||||||
if (*ppos)
|
if (*ppos)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
s = kmalloc(sizeof(*s), GFP_KERNEL);
|
len = sprintf(buf, "%d\n", call->event.type);
|
||||||
if (!s)
|
return simple_read_from_buffer(ubuf, cnt, ppos, buf, len);
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
trace_seq_init(s);
|
|
||||||
trace_seq_printf(s, "%d\n", call->event.type);
|
|
||||||
|
|
||||||
r = simple_read_from_buffer(ubuf, cnt, ppos,
|
|
||||||
s->buffer, s->len);
|
|
||||||
kfree(s);
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
|
|
Loading…
Reference in New Issue
Block a user