Module Name:    src
Committed By:   chs
Date:           Thu Jun  8 01:23:01 UTC 2017

Modified Files:
        src/sys/kern: vfs_bio.c vfs_wapbl.c
        src/sys/sys: buf.h
        src/sys/ufs/lfs: lfs_balloc.c lfs_bio.c lfs_extern.h lfs_inode.h
            lfs_subr.c ulfs_inode.h

Log Message:
move some buffer cache internals declarations from buf.h to vfs_bio.c.
this is needed to avoid name conflicts with ZFS and also
makes it clearer that other code shouldn't be messing with these.
remove the LFS debug code that poked around in bufqueues and
remove the BQ_EMPTY bufqueue since nothing uses it anymore.
provide a function to let LFS and wapbl read the value of nbuf for now.


To generate a diff of this commit:
cvs rdiff -u -r1.273 -r1.274 src/sys/kern/vfs_bio.c
cvs rdiff -u -r1.96 -r1.97 src/sys/kern/vfs_wapbl.c
cvs rdiff -u -r1.128 -r1.129 src/sys/sys/buf.h
cvs rdiff -u -r1.92 -r1.93 src/sys/ufs/lfs/lfs_balloc.c \
    src/sys/ufs/lfs/lfs_subr.c
cvs rdiff -u -r1.139 -r1.140 src/sys/ufs/lfs/lfs_bio.c
cvs rdiff -u -r1.111 -r1.112 src/sys/ufs/lfs/lfs_extern.h
cvs rdiff -u -r1.21 -r1.22 src/sys/ufs/lfs/lfs_inode.h
cvs rdiff -u -r1.22 -r1.23 src/sys/ufs/lfs/ulfs_inode.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/vfs_bio.c
diff -u src/sys/kern/vfs_bio.c:1.273 src/sys/kern/vfs_bio.c:1.274
--- src/sys/kern/vfs_bio.c:1.273	Thu May 25 02:28:07 2017
+++ src/sys/kern/vfs_bio.c	Thu Jun  8 01:23:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_bio.c,v 1.273 2017/05/25 02:28:07 pgoyette Exp $	*/
+/*	$NetBSD: vfs_bio.c,v 1.274 2017/06/08 01:23:01 chs Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -123,7 +123,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_bio.c,v 1.273 2017/05/25 02:28:07 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_bio.c,v 1.274 2017/06/08 01:23:01 chs Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_bufcache.h"
@@ -170,9 +170,23 @@ u_int	nbuf;			/* desired number of buffe
 u_int	bufpages = BUFPAGES;	/* optional hardwired count */
 u_int	bufcache = BUFCACHE;	/* max % of RAM to use for buffer cache */
 
-/* Function prototypes */
-struct bqueue;
+/*
+ * Definitions for the buffer free lists.
+ */
+#define	BQUEUES		3		/* number of free buffer queues */
 
+#define	BQ_LOCKED	0		/* super-blocks &c */
+#define	BQ_LRU		1		/* lru, useful buffers */
+#define	BQ_AGE		2		/* rubbish */
+
+struct bqueue {
+	TAILQ_HEAD(, buf) bq_queue;
+	uint64_t bq_bytes;
+	buf_t *bq_marker;
+};
+static struct bqueue bufqueues[BQUEUES];
+
+/* Function prototypes */
 static void buf_setwm(void);
 static int buf_trim(void);
 static void *bufpool_page_alloc(struct pool *, int);
@@ -217,7 +231,6 @@ biohist_init(void)
 	(&bufhashtbl[(((long)(dvp) >> 8) + (int)(lbn)) & bufhash])
 LIST_HEAD(bufhashhdr, buf) *bufhashtbl, invalhash;
 u_long	bufhash;
-struct bqueue bufqueues[BQUEUES];
 
 static kcondvar_t needbuffer_cv;
 
@@ -2136,3 +2149,14 @@ bbusy(buf_t *bp, bool intr, int timo, km
 
 	return 0;
 }
+
+/*
+ * Nothing outside this file should really need to know about nbuf,
+ * but a few things still want to read it, so give them a way to do that.
+ */
+int
+buf_nbuf(void)
+{
+
+	return nbuf;
+}

Index: src/sys/kern/vfs_wapbl.c
diff -u src/sys/kern/vfs_wapbl.c:1.96 src/sys/kern/vfs_wapbl.c:1.97
--- src/sys/kern/vfs_wapbl.c:1.96	Mon Apr 10 21:36:05 2017
+++ src/sys/kern/vfs_wapbl.c	Thu Jun  8 01:23:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_wapbl.c,v 1.96 2017/04/10 21:36:05 jdolecek Exp $	*/
+/*	$NetBSD: vfs_wapbl.c,v 1.97 2017/06/08 01:23:01 chs Exp $	*/
 
 /*-
  * Copyright (c) 2003, 2008, 2009 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
 #define WAPBL_INTERNAL
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_wapbl.c,v 1.96 2017/04/10 21:36:05 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_wapbl.c,v 1.97 2017/06/08 01:23:01 chs Exp $");
 
 #include <sys/param.h>
 #include <sys/bitops.h>
@@ -612,7 +612,7 @@ wapbl_start(struct wapbl ** wlp, struct 
 
 	/* XXX maybe use filesystem fragment size instead of 1024 */
 	/* XXX fix actual number of buffers reserved per filesystem. */
-	wl->wl_bufcount_max = (nbuf / 2) * 1024;
+	wl->wl_bufcount_max = (buf_nbuf() / 2) * 1024;
 
 	wl->wl_brperjblock = ((1<<wl->wl_log_dev_bshift)
 	    - offsetof(struct wapbl_wc_blocklist, wc_blocks)) /

Index: src/sys/sys/buf.h
diff -u src/sys/sys/buf.h:1.128 src/sys/sys/buf.h:1.129
--- src/sys/sys/buf.h:1.128	Mon Apr 10 19:52:38 2017
+++ src/sys/sys/buf.h	Thu Jun  8 01:23:01 2017
@@ -1,4 +1,4 @@
-/*     $NetBSD: buf.h,v 1.128 2017/04/10 19:52:38 jdolecek Exp $ */
+/*     $NetBSD: buf.h,v 1.129 2017/06/08 01:23:01 chs Exp $ */
 
 /*-
  * Copyright (c) 1999, 2000, 2007, 2008 The NetBSD Foundation, Inc.
@@ -257,26 +257,6 @@ do {									\
 #define	BPRIO_TIMENONCRITICAL	0
 #define	BPRIO_DEFAULT		BPRIO_TIMELIMITED
 
-extern	u_int nbuf;		/* The number of buffer headers */
-
-/*
- * Definitions for the buffer free lists.
- */
-#define	BQUEUES		4		/* number of free buffer queues */
-
-#define	BQ_LOCKED	0		/* super-blocks &c */
-#define	BQ_LRU		1		/* lru, useful buffers */
-#define	BQ_AGE		2		/* rubbish */
-#define	BQ_EMPTY	3		/* buffer headers with no memory */
-
-struct bqueue {
-	TAILQ_HEAD(, buf) bq_queue;
-	uint64_t bq_bytes;
-	buf_t *bq_marker;
-};
-
-extern struct bqueue bufqueues[BQUEUES];
-
 __BEGIN_DECLS
 /*
  * bufferio(9) ops
@@ -330,6 +310,7 @@ void	vfs_buf_print(buf_t *, int, void (*
 void	buf_init(buf_t *);
 void	buf_destroy(buf_t *);
 int	bbusy(buf_t *, bool, int, kmutex_t *);
+int	buf_nbuf(void);
 
 void	biohist_init(void);
 

Index: src/sys/ufs/lfs/lfs_balloc.c
diff -u src/sys/ufs/lfs/lfs_balloc.c:1.92 src/sys/ufs/lfs/lfs_balloc.c:1.93
--- src/sys/ufs/lfs/lfs_balloc.c:1.92	Thu Apr  6 02:38:08 2017
+++ src/sys/ufs/lfs/lfs_balloc.c	Thu Jun  8 01:23:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_balloc.c,v 1.92 2017/04/06 02:38:08 maya Exp $	*/
+/*	$NetBSD: lfs_balloc.c,v 1.93 2017/06/08 01:23:01 chs Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_balloc.c,v 1.92 2017/04/06 02:38:08 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_balloc.c,v 1.93 2017/06/08 01:23:01 chs Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_quota.h"
@@ -527,7 +527,6 @@ lfs_fragextend(struct vnode *vp, int osi
     top:
 	if (bpp) {
 		rw_enter(&fs->lfs_fraglock, RW_READER);
-		LFS_DEBUG_COUNTLOCKED("frag");
 	}
 
 	/* check if we actually have enough frags available */
Index: src/sys/ufs/lfs/lfs_subr.c
diff -u src/sys/ufs/lfs/lfs_subr.c:1.92 src/sys/ufs/lfs/lfs_subr.c:1.93
--- src/sys/ufs/lfs/lfs_subr.c:1.92	Thu Apr  6 03:21:01 2017
+++ src/sys/ufs/lfs/lfs_subr.c	Thu Jun  8 01:23:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_subr.c,v 1.92 2017/04/06 03:21:01 maya Exp $	*/
+/*	$NetBSD: lfs_subr.c,v 1.93 2017/06/08 01:23:01 chs Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_subr.c,v 1.92 2017/04/06 03:21:01 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_subr.c,v 1.93 2017/06/08 01:23:01 chs Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -463,12 +463,10 @@ lfs_segunlock(struct lfs *fs)
 		 * sleep.
 		 */
 		mutex_enter(&lfs_lock);
-		if (--fs->lfs_iocount == 0) {
-			LFS_DEBUG_COUNTLOCKED("lfs_segunlock");
-		}
-		if (fs->lfs_iocount <= 1)
+		if (--fs->lfs_iocount <= 1)
 			wakeup(&fs->lfs_iocount);
 		mutex_exit(&lfs_lock);
+
 		/*
 		 * If we're not checkpointing, we don't have to block
 		 * other processes to wait for a synchronous write

Index: src/sys/ufs/lfs/lfs_bio.c
diff -u src/sys/ufs/lfs/lfs_bio.c:1.139 src/sys/ufs/lfs/lfs_bio.c:1.140
--- src/sys/ufs/lfs/lfs_bio.c:1.139	Mon Apr 17 08:32:01 2017
+++ src/sys/ufs/lfs/lfs_bio.c	Thu Jun  8 01:23:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_bio.c,v 1.139 2017/04/17 08:32:01 hannken Exp $	*/
+/*	$NetBSD: lfs_bio.c,v 1.140 2017/06/08 01:23:01 chs Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2008 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_bio.c,v 1.139 2017/04/17 08:32:01 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_bio.c,v 1.140 2017/06/08 01:23:01 chs Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -307,6 +307,20 @@ lfs_reserve(struct lfs *fs, struct vnode
 }
 
 int
+lfs_max_bufs(void)
+{
+
+	return LFS_MAX_RESOURCE(buf_nbuf(), 1);
+}
+
+int
+lfs_wait_bufs(void)
+{
+
+	return LFS_WAIT_RESOURCE(buf_nbuf(), 1);
+}
+
+int
 lfs_bwrite(void *v)
 {
 	struct vop_bwrite_args /* {
@@ -556,7 +570,6 @@ lfs_flush(struct lfs *fs, int flags, int
 		}
 		mountlist_iterator_destroy(iter);
 	}
-	LFS_DEBUG_COUNTLOCKED("flush");
 	wakeup(&lfs_subsys_pages);
 
     errout:
@@ -749,44 +762,6 @@ lfs_freebuf(struct lfs *fs, struct buf *
 	putiobuf(bp);
 }
 
-/*
- * Count buffers on the "locked" queue, and compare it to a pro-forma count.
- * Don't count malloced buffers, since they don't detract from the total.
- */
-void
-lfs_countlocked(int *count, long *bytes, const char *msg)
-{
-	struct buf *bp;
-	int n = 0;
-	long int size = 0L;
-
-	mutex_enter(&bufcache_lock);
-	TAILQ_FOREACH(bp, &bufqueues[BQ_LOCKED].bq_queue, b_freelist) {
-		KASSERT(bp->b_iodone == NULL);
-		n++;
-		size += bp->b_bufsize;
-		KASSERTMSG((n <= nbuf),
-		    "lfs_countlocked: this can't happen: more"
-		    " buffers locked than exist");
-	}
-	/*
-	 * Theoretically this function never really does anything.
-	 * Give a warning if we have to fix the accounting.
-	 */
-	if (n != *count) {
-		DLOG((DLOG_LLIST, "lfs_countlocked: %s: adjusted buf count"
-		      " from %d to %d\n", msg, *count, n));
-	}
-	if (size != *bytes) {
-		DLOG((DLOG_LLIST, "lfs_countlocked: %s: adjusted byte count"
-		      " from %ld to %ld\n", msg, *bytes, size));
-	}
-	*count = n;
-	*bytes = size;
-	mutex_exit(&bufcache_lock);
-	return;
-}
-
 int
 lfs_wait_pages(void)
 {

Index: src/sys/ufs/lfs/lfs_extern.h
diff -u src/sys/ufs/lfs/lfs_extern.h:1.111 src/sys/ufs/lfs/lfs_extern.h:1.112
--- src/sys/ufs/lfs/lfs_extern.h:1.111	Mon Jun 20 03:29:52 2016
+++ src/sys/ufs/lfs/lfs_extern.h	Thu Jun  8 01:23:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_extern.h,v 1.111 2016/06/20 03:29:52 dholland Exp $	*/
+/*	$NetBSD: lfs_extern.h,v 1.112 2017/06/08 01:23:01 chs Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -149,6 +149,8 @@ void lfs_freebuf(struct lfs *, struct bu
 struct buf *lfs_newbuf(struct lfs *, struct vnode *, daddr_t, size_t, int);
 void lfs_countlocked(int *, long *, const char *);
 int lfs_reserve(struct lfs *, struct vnode *, struct vnode *, int);
+int lfs_max_bufs(void);
+int lfs_wait_bufs(void);
 
 /* lfs_debug.c */
 #ifdef DEBUG

Index: src/sys/ufs/lfs/lfs_inode.h
diff -u src/sys/ufs/lfs/lfs_inode.h:1.21 src/sys/ufs/lfs/lfs_inode.h:1.22
--- src/sys/ufs/lfs/lfs_inode.h:1.21	Mon Jun  5 07:47:32 2017
+++ src/sys/ufs/lfs/lfs_inode.h	Thu Jun  8 01:23:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_inode.h,v 1.21 2017/06/05 07:47:32 maya Exp $	*/
+/*	$NetBSD: lfs_inode.h,v 1.22 2017/06/08 01:23:01 chs Exp $	*/
 /*  from NetBSD: ulfs_inode.h,v 1.5 2013/06/06 00:51:50 dholland Exp  */
 /*  from NetBSD: inode.h,v 1.72 2016/06/03 15:36:03 christos Exp  */
 
@@ -216,17 +216,6 @@ struct lfs_inode_ext {
 
 # define LFS_IS_MALLOC_BUF(bp) ((bp)->b_iodone == lfs_callback)
 
-# ifdef DEBUG
-#  define LFS_DEBUG_COUNTLOCKED(m) do {					\
-	if (lfs_debug_log_subsys[DLOG_LLIST]) {				\
-		lfs_countlocked(&locked_queue_count, &locked_queue_bytes, (m)); \
-		cv_broadcast(&locked_queue_cv);				\
-	}								\
-} while (0)
-# else
-#  define LFS_DEBUG_COUNTLOCKED(m)
-# endif
-
 /* log for debugging writes to the Ifile */
 # ifdef DEBUG
 struct lfs_log_entry {

Index: src/sys/ufs/lfs/ulfs_inode.h
diff -u src/sys/ufs/lfs/ulfs_inode.h:1.22 src/sys/ufs/lfs/ulfs_inode.h:1.23
--- src/sys/ufs/lfs/ulfs_inode.h:1.22	Tue Jun 21 06:14:40 2016
+++ src/sys/ufs/lfs/ulfs_inode.h	Thu Jun  8 01:23:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_inode.h,v 1.22 2016/06/21 06:14:40 dholland Exp $	*/
+/*	$NetBSD: ulfs_inode.h,v 1.23 2017/06/08 01:23:01 chs Exp $	*/
 /*  from NetBSD: inode.h,v 1.72 2016/06/03 15:36:03 christos Exp  */
 
 /*
@@ -69,8 +69,8 @@ void lfs_unset_dirop(struct lfs *, struc
 #define	LFS_MAX_RESOURCE(x, u)	(((x) >> 2) - 10 * (u))
 #define	LFS_WAIT_RESOURCE(x, u)	(((x) >> 1) - ((x) >> 3) - 10 * (u))
 #define	LFS_INVERSE_MAX_RESOURCE(x, u)	(((x) + 10 * (u)) << 2)
-#define LFS_MAX_BUFS	    LFS_MAX_RESOURCE(nbuf, 1)
-#define LFS_WAIT_BUFS	    LFS_WAIT_RESOURCE(nbuf, 1)
+#define LFS_MAX_BUFS	    lfs_max_bufs()
+#define LFS_WAIT_BUFS	    lfs_wait_bufs()
 #define LFS_INVERSE_MAX_BUFS(n)	LFS_INVERSE_MAX_RESOURCE(n, 1)
 #define LFS_MAX_BYTES	    LFS_MAX_RESOURCE(bufmem_lowater, PAGE_SIZE)
 #define LFS_INVERSE_MAX_BYTES(n) LFS_INVERSE_MAX_RESOURCE(n, PAGE_SIZE)

Reply via email to