]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - kernel/trace/trace.c
tracing: Clean up tracing_fill_pipe_page()
[mirror_ubuntu-artful-kernel.git] / kernel / trace / trace.c
index 7d7a07e9b9e95427e1d9ca76a77b77e851a53ed9..0aa75be843a0b7329ce3bac1d27ffbb9f3ac2fb0 100644 (file)
@@ -4575,20 +4575,33 @@ static size_t
 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
 {
        size_t count;
+       int save_len;
        int ret;
 
        /* Seq buffer is page-sized, exactly what we need. */
        for (;;) {
-               count = iter->seq.seq.len;
+               save_len = iter->seq.seq.len;
                ret = print_trace_line(iter);
-               count = iter->seq.seq.len - count;
-               if (rem < count) {
-                       rem = 0;
-                       iter->seq.seq.len -= count;
+
+               if (trace_seq_has_overflowed(&iter->seq)) {
+                       iter->seq.seq.len = save_len;
                        break;
                }
+
+               /*
+                * This should not be hit, because it should only
+                * be set if the iter->seq overflowed. But check it
+                * anyway to be safe.
+                */
                if (ret == TRACE_TYPE_PARTIAL_LINE) {
-                       iter->seq.seq.len -= count;
+                       iter->seq.seq.len = save_len;
+                       break;
+               }
+
+               count = iter->seq.seq.len - save_len;
+               if (rem < count) {
+                       rem = 0;
+                       iter->seq.seq.len = save_len;
                        break;
                }