Module Name:    src
Committed By:   christos
Date:           Sat Mar 31 23:12:01 UTC 2018

Modified Files:
        src/sys/kern: subr_log.c subr_prf.c
        src/sys/miscfs/kernfs: kernfs_vnops.c
        src/sys/sys: msgbuf.h

Log Message:
factor out some repeated code and simplify the logputchar function.


To generate a diff of this commit:
cvs rdiff -u -r1.56 -r1.57 src/sys/kern/subr_log.c
cvs rdiff -u -r1.162 -r1.163 src/sys/kern/subr_prf.c
cvs rdiff -u -r1.158 -r1.159 src/sys/miscfs/kernfs/kernfs_vnops.c
cvs rdiff -u -r1.15 -r1.16 src/sys/sys/msgbuf.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/subr_log.c
diff -u src/sys/kern/subr_log.c:1.56 src/sys/kern/subr_log.c:1.57
--- src/sys/kern/subr_log.c:1.56	Wed Oct 25 04:12:39 2017
+++ src/sys/kern/subr_log.c	Sat Mar 31 19:12:01 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_log.c,v 1.56 2017/10/25 08:12:39 maya Exp $	*/
+/*	$NetBSD: subr_log.c,v 1.57 2018/03/31 23:12:01 christos Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_log.c,v 1.56 2017/10/25 08:12:39 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_log.c,v 1.57 2018/03/31 23:12:01 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -382,6 +382,28 @@ logioctl(dev_t dev, u_long com, void *da
 	return (0);
 }
 
+static void
+logskip(struct kern_msgbuf *mbp)
+{
+	/*
+	 * Move forward read pointer to the next line
+	 * in the buffer.  Note that the buffer is
+	 * a ring buffer so we should reset msg_bufr
+	 * to 0 when msg_bufr exceeds msg_bufs.
+	 *
+	 * To prevent to loop forever, give up if we
+	 * cannot find a newline in mbp->msg_bufs
+	 * characters (the max size of the buffer).
+	 */
+	for (int i = 0; i < mbp->msg_bufs; i++) {
+		char c0 = mbp->msg_bufc[mbp->msg_bufr];
+		if (++mbp->msg_bufr >= mbp->msg_bufs)
+			mbp->msg_bufr = 0;
+		if (c0 == '\n')
+			break;
+	}
+}
+
 void
 logputchar(int c)
 {
@@ -389,48 +411,35 @@ logputchar(int c)
 
 	if (!cold)
 		mutex_spin_enter(&log_lock);
-	if (msgbufenabled) {
-		mbp = msgbufp;
-		if (mbp->msg_magic != MSG_MAGIC) {
-			/*
-			 * Arguably should panic or somehow notify the
-			 * user...  but how?  Panic may be too drastic,
-			 * and would obliterate the message being kicked
-			 * out (maybe a panic itself), and printf
-			 * would invoke us recursively.  Silently punt
-			 * for now.  If syslog is running, it should
-			 * notice.
-			 */
-			msgbufenabled = 0;
-		} else {
-			mbp->msg_bufc[mbp->msg_bufx++] = c;
-			if (mbp->msg_bufx < 0 || mbp->msg_bufx >= mbp->msg_bufs)
-				mbp->msg_bufx = 0;
-			/* If the buffer is full, keep the most recent data. */
-			if (mbp->msg_bufr == mbp->msg_bufx) {
-				char c0;
-				int i;
-
-				/*
-				 * Move forward read pointer to the next line
-				 * in the buffer.  Note that the buffer is
-				 * a ring buffer so we should reset msg_bufr
-				 * to 0 when msg_bufr exceeds msg_bufs.
-				 *
-				 * To prevent to loop forever, give up if we
-				 * cannot find a newline in mbp->msg_bufs
-				 * characters (the max size of the buffer).
-				 */
-				for (i = 0; i < mbp->msg_bufs; i++) {
-					c0 = mbp->msg_bufc[mbp->msg_bufr];
-					if (++mbp->msg_bufr >= mbp->msg_bufs)
-						mbp->msg_bufr = 0;
-					if (c0 == '\n')
-						break;
-				}
-			}
-		}
+
+	if (!msgbufenabled)
+		goto out;
+
+	mbp = msgbufp;
+	if (mbp->msg_magic != MSG_MAGIC) {
+		/*
+		 * Arguably should panic or somehow notify the
+		 * user...  but how?  Panic may be too drastic,
+		 * and would obliterate the message being kicked
+		 * out (maybe a panic itself), and printf
+		 * would invoke us recursively.  Silently punt
+		 * for now.  If syslog is running, it should
+		 * notice.
+		 */
+		msgbufenabled = 0;
+		goto out;
+
 	}
+
+	mbp->msg_bufc[mbp->msg_bufx++] = c;
+	if (mbp->msg_bufx < 0 || mbp->msg_bufx >= mbp->msg_bufs)
+		mbp->msg_bufx = 0;
+
+	/* If the buffer is full, keep the most recent data. */
+	if (mbp->msg_bufr == mbp->msg_bufx)
+		logskip(mbp);
+
+out:
 	if (!cold)
 		mutex_spin_exit(&log_lock);
 }
@@ -449,7 +458,7 @@ sysctl_msgbuf(SYSCTLFN_ARGS)
 	extern kmutex_t log_lock;
 	int error;
 
-	if (!msgbufenabled || msgbufp->msg_magic != MSG_MAGIC) {
+	if (!logenabled(msgbufp)) {
 		msgbufenabled = 0;
 		return (ENXIO);
 	}

Index: src/sys/kern/subr_prf.c
diff -u src/sys/kern/subr_prf.c:1.162 src/sys/kern/subr_prf.c:1.163
--- src/sys/kern/subr_prf.c:1.162	Fri Oct 27 08:25:15 2017
+++ src/sys/kern/subr_prf.c	Sat Mar 31 19:12:01 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_prf.c,v 1.162 2017/10/27 12:25:15 joerg Exp $	*/
+/*	$NetBSD: subr_prf.c,v 1.163 2018/03/31 23:12:01 christos Exp $	*/
 
 /*-
  * Copyright (c) 1986, 1988, 1991, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_prf.c,v 1.162 2017/10/27 12:25:15 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_prf.c,v 1.163 2018/03/31 23:12:01 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -307,7 +307,7 @@ vpanic(const char *fmt, va_list ap)
 
 	doing_shutdown = 1;
 
-	if (msgbufenabled && msgbufp->msg_magic == MSG_MAGIC)
+	if (logenabled(msgbufp))
 		panicstart = msgbufp->msg_bufx;
 
 	printf("panic: ");
@@ -323,7 +323,7 @@ vpanic(const char *fmt, va_list ap)
 	}
 	printf("\n");
 
-	if (msgbufenabled && msgbufp->msg_magic == MSG_MAGIC)
+	if (logenabled(msgbufp))
 		panicend = msgbufp->msg_bufx;
 
 #ifdef IPKDB

Index: src/sys/miscfs/kernfs/kernfs_vnops.c
diff -u src/sys/miscfs/kernfs/kernfs_vnops.c:1.158 src/sys/miscfs/kernfs/kernfs_vnops.c:1.159
--- src/sys/miscfs/kernfs/kernfs_vnops.c:1.158	Fri May 26 10:21:01 2017
+++ src/sys/miscfs/kernfs/kernfs_vnops.c	Sat Mar 31 19:12:01 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: kernfs_vnops.c,v 1.158 2017/05/26 14:21:01 riastradh Exp $	*/
+/*	$NetBSD: kernfs_vnops.c,v 1.159 2018/03/31 23:12:01 christos Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.158 2017/05/26 14:21:01 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.159 2018/03/31 23:12:01 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -381,7 +381,7 @@ kernfs_xread(struct kernfs_node *kfs, in
 		 * deal with cases where the message buffer has
 		 * become corrupted.
 		 */
-		if (!msgbufenabled || msgbufp->msg_magic != MSG_MAGIC) {
+		if (!logenabled(msgbufp)) {
 			msgbufenabled = 0;
 			return (ENXIO);
 		}
@@ -942,8 +942,7 @@ kernfs_readdir(void *v)
 				vrele(fvp);
 			}
 			if (kt->kt_tag == KFSmsgbuf) {
-				if (!msgbufenabled
-				    || msgbufp->msg_magic != MSG_MAGIC) {
+				if (!logenabled(msgbufp)) {
 					continue;
 				}
 			}

Index: src/sys/sys/msgbuf.h
diff -u src/sys/sys/msgbuf.h:1.15 src/sys/sys/msgbuf.h:1.16
--- src/sys/sys/msgbuf.h:1.15	Tue Nov  6 19:19:08 2007
+++ src/sys/sys/msgbuf.h	Sat Mar 31 19:12:01 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: msgbuf.h,v 1.15 2007/11/07 00:19:08 ad Exp $	*/
+/*	$NetBSD: msgbuf.h,v 1.16 2018/03/31 23:12:01 christos Exp $	*/
 
 /*
  * Copyright (c) 1981, 1984, 1993
@@ -51,6 +51,12 @@ extern struct	kern_msgbuf *msgbufp;	/* t
 void	initmsgbuf(void *, size_t);
 void	loginit(void);
 void	logputchar(int);
+
+static inline int
+logenabled(const struct kern_msgbuf *mbp)
+{
+	return msgbufenabled && mbp->msg_magic == MSG_MAGIC;
+}
 #endif
 
 #endif /* !_SYS_MSGBUF_H_ */

Reply via email to