Split into 2 arms, like in the other one sandbox/mmajewski2/logger-tm1
authorMateusz Majewski <m.majewski2@samsung.com>
Mon, 13 Dec 2021 12:12:08 +0000 (13:12 +0100)
committerMateusz Majewski <m.majewski2@samsung.com>
Mon, 13 Dec 2021 12:12:08 +0000 (13:12 +0100)
Change-Id: Ie917561f97717f64a954dd35c0c08298881a4da0

kernel/logger-tm1.c

index 75044970645de034b63af033e41058450cc6e5c1..ea5fc18e0178dcc5ea3744280b81cf17bbddebd4 100644 (file)
@@ -644,34 +644,71 @@ static ssize_t logger_aio_write(struct kiocb *iocb, const struct iovec *iov,
        mutex_lock(&log->mutex);
 
        orig = log->w_off;
-
-       /*
-        * Fix up any readers, pulling them forward to the first readable
-        * entry after (what will be) the new write offset. We do this now
-        * because if we partially fail, we can end up with clobbered log
-        * entries that encroach on readable buffer.
-        */
-       fix_up_readers(log, sizeof(struct logger_entry) + header.len);
-
-       do_write_log(log, &header, sizeof(struct logger_entry));
-
-       while (nr_segs-- > 0) {
-               size_t len;
-               ssize_t nr;
-
-               /* figure out how much of this vector we can keep */
-               len = min_t(size_t, iov->iov_len, header.len - ret);
-
-               /* write out this segment's payload */
-               nr = do_write_log_from_user(log, iov->iov_base, len);
-               if (unlikely(nr < 0)) {
-                       log->w_off = orig;
-                       mutex_unlock(&log->mutex);
-                       return nr;
+       /* Prepend messages from STDOUT and STDERR with a tag and prio */
+       if (from_stdio) {
+               /*
+                * TODO: The following has been copied from the other arm.
+                * Otherwise, system bricks.
+                */
+
+               /*
+                * Fix up any readers, pulling them forward to the first readable
+                * entry after (what will be) the new write offset. We do this now
+                * because if we partially fail, we can end up with clobbered log
+                * entries that encroach on readable buffer.
+                */
+               fix_up_readers(log, sizeof(struct logger_entry) + header.len);
+
+               do_write_log(log, &header, sizeof(struct logger_entry));
+
+               while (nr_segs-- > 0) {
+                       size_t len;
+                       ssize_t nr;
+
+                       /* figure out how much of this vector we can keep */
+                       len = min_t(size_t, iov->iov_len, header.len - ret);
+
+                       /* write out this segment's payload */
+                       nr = do_write_log_from_user(log, iov->iov_base, len);
+                       if (unlikely(nr < 0)) {
+                               log->w_off = orig;
+                               mutex_unlock(&log->mutex);
+                               return nr;
+                       }
+
+                       iov++;
+                       ret += nr;
                }
+       } else {
 
-               iov++;
-               ret += nr;
+               /*
+                * Fix up any readers, pulling them forward to the first readable
+                * entry after (what will be) the new write offset. We do this now
+                * because if we partially fail, we can end up with clobbered log
+                * entries that encroach on readable buffer.
+                */
+               fix_up_readers(log, sizeof(struct logger_entry) + header.len);
+
+               do_write_log(log, &header, sizeof(struct logger_entry));
+
+               while (nr_segs-- > 0) {
+                       size_t len;
+                       ssize_t nr;
+
+                       /* figure out how much of this vector we can keep */
+                       len = min_t(size_t, iov->iov_len, header.len - ret);
+
+                       /* write out this segment's payload */
+                       nr = do_write_log_from_user(log, iov->iov_base, len);
+                       if (unlikely(nr < 0)) {
+                               log->w_off = orig;
+                               mutex_unlock(&log->mutex);
+                               return nr;
+                       }
+
+                       iov++;
+                       ret += nr;
+               }
        }
 
        mutex_unlock(&log->mutex);