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;
                }