diff options
| -rw-r--r-- | kernel/trace/trace.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 8a4bd6b68a0b..8fb4847b0450 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -4890,19 +4890,20 @@ tracing_read_pipe(struct file *filp, char __user *ubuf, | |||
| 4890 | struct trace_iterator *iter = filp->private_data; | 4890 | struct trace_iterator *iter = filp->private_data; |
| 4891 | ssize_t sret; | 4891 | ssize_t sret; |
| 4892 | 4892 | ||
| 4893 | /* return any leftover data */ | ||
| 4894 | sret = trace_seq_to_user(&iter->seq, ubuf, cnt); | ||
| 4895 | if (sret != -EBUSY) | ||
| 4896 | return sret; | ||
| 4897 | |||
| 4898 | trace_seq_init(&iter->seq); | ||
| 4899 | |||
| 4900 | /* | 4893 | /* |
| 4901 | * Avoid more than one consumer on a single file descriptor | 4894 | * Avoid more than one consumer on a single file descriptor |
| 4902 | * This is just a matter of traces coherency, the ring buffer itself | 4895 | * This is just a matter of traces coherency, the ring buffer itself |
| 4903 | * is protected. | 4896 | * is protected. |
| 4904 | */ | 4897 | */ |
| 4905 | mutex_lock(&iter->mutex); | 4898 | mutex_lock(&iter->mutex); |
| 4899 | |||
| 4900 | /* return any leftover data */ | ||
| 4901 | sret = trace_seq_to_user(&iter->seq, ubuf, cnt); | ||
| 4902 | if (sret != -EBUSY) | ||
| 4903 | goto out; | ||
| 4904 | |||
| 4905 | trace_seq_init(&iter->seq); | ||
| 4906 | |||
| 4906 | if (iter->trace->read) { | 4907 | if (iter->trace->read) { |
| 4907 | sret = iter->trace->read(iter, filp, ubuf, cnt, ppos); | 4908 | sret = iter->trace->read(iter, filp, ubuf, cnt, ppos); |
| 4908 | if (sret) | 4909 | if (sret) |
