Author: rmacklem
Date: Thu May 14 22:50:07 2015
New Revision: 282933
URL: https://svnweb.freebsd.org/changeset/base/282933

Log:
  MFC: r281960
  MAXBSIZE defines both the largest UFS block size and the
  largest size for a buffer in the buffer cache. This patch
  defines a new constant MAXBCACHEBUF, which is the largest
  size for a buffer in the buffer cache. Having a separate
  constant allows MAXBCACHEBUF to be set larger than MAXBSIZE
  on a per-architecture basis, so that NFS can do larger read/writes
  for these architectures. It modifies sys/param.h so that BKVASIZE
  can also be set on a per-architecture basis.
  A couple of cases where NFS used MAXBSIZE instead of NFS_MAXBSIZE
  is fixed as well.

Modified:
  stable/10/sys/fs/nfs/nfsport.h
  stable/10/sys/fs/nfsclient/nfs_clvfsops.c
  stable/10/sys/kern/vfs_bio.c
  stable/10/sys/sys/param.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/fs/nfs/nfsport.h
==============================================================================
--- stable/10/sys/fs/nfs/nfsport.h      Thu May 14 22:35:26 2015        
(r282932)
+++ stable/10/sys/fs/nfs/nfsport.h      Thu May 14 22:50:07 2015        
(r282933)
@@ -967,7 +967,7 @@ struct nfsreq {
 };
 
 #ifndef NFS_MAXBSIZE
-#define        NFS_MAXBSIZE    MAXBSIZE
+#define        NFS_MAXBSIZE    MAXBCACHEBUF
 #endif
 
 /*

Modified: stable/10/sys/fs/nfsclient/nfs_clvfsops.c
==============================================================================
--- stable/10/sys/fs/nfsclient/nfs_clvfsops.c   Thu May 14 22:35:26 2015        
(r282932)
+++ stable/10/sys/fs/nfsclient/nfs_clvfsops.c   Thu May 14 22:50:07 2015        
(r282933)
@@ -196,16 +196,16 @@ newnfs_iosize(struct nfsmount *nmp)
        }
        if (nmp->nm_rsize > maxio || nmp->nm_rsize == 0)
                nmp->nm_rsize = maxio;
-       if (nmp->nm_rsize > MAXBSIZE)
-               nmp->nm_rsize = MAXBSIZE;
+       if (nmp->nm_rsize > NFS_MAXBSIZE)
+               nmp->nm_rsize = NFS_MAXBSIZE;
        if (nmp->nm_readdirsize > maxio || nmp->nm_readdirsize == 0)
                nmp->nm_readdirsize = maxio;
        if (nmp->nm_readdirsize > nmp->nm_rsize)
                nmp->nm_readdirsize = nmp->nm_rsize;
        if (nmp->nm_wsize > maxio || nmp->nm_wsize == 0)
                nmp->nm_wsize = maxio;
-       if (nmp->nm_wsize > MAXBSIZE)
-               nmp->nm_wsize = MAXBSIZE;
+       if (nmp->nm_wsize > NFS_MAXBSIZE)
+               nmp->nm_wsize = NFS_MAXBSIZE;
 
        /*
         * Calculate the size used for io buffers.  Use the larger

Modified: stable/10/sys/kern/vfs_bio.c
==============================================================================
--- stable/10/sys/kern/vfs_bio.c        Thu May 14 22:35:26 2015        
(r282932)
+++ stable/10/sys/kern/vfs_bio.c        Thu May 14 22:50:07 2015        
(r282933)
@@ -774,6 +774,7 @@ bufinit(void)
        struct buf *bp;
        int i;
 
+       CTASSERT(MAXBCACHEBUF >= MAXBSIZE);
        mtx_init(&bqclean, "bufq clean lock", NULL, MTX_DEF);
        mtx_init(&bqdirty, "bufq dirty lock", NULL, MTX_DEF);
        mtx_init(&rbreqlock, "runningbufspace lock", NULL, MTX_DEF);
@@ -815,8 +816,8 @@ bufinit(void)
         * by the system.
         */
        maxbufspace = (long)nbuf * BKVASIZE;
-       hibufspace = lmax(3 * maxbufspace / 4, maxbufspace - MAXBSIZE * 10);
-       lobufspace = hibufspace - MAXBSIZE;
+       hibufspace = lmax(3 * maxbufspace / 4, maxbufspace - MAXBCACHEBUF * 10);
+       lobufspace = hibufspace - MAXBCACHEBUF;
 
        /*
         * Note: The 16 MiB upper limit for hirunningspace was chosen
@@ -826,9 +827,9 @@ bufinit(void)
         * The lower 1 MiB limit is the historical upper limit for
         * hirunningspace.
         */
-       hirunningspace = lmax(lmin(roundup(hibufspace / 64, MAXBSIZE),
+       hirunningspace = lmax(lmin(roundup(hibufspace / 64, MAXBCACHEBUF),
            16 * 1024 * 1024), 1024 * 1024);
-       lorunningspace = roundup((hirunningspace * 2) / 3, MAXBSIZE);
+       lorunningspace = roundup((hirunningspace * 2) / 3, MAXBCACHEBUF);
 
 /*
  * Limit the amount of malloc memory since it is wired permanently into
@@ -3076,8 +3077,9 @@ getblk(struct vnode *vp, daddr_t blkno, 
        KASSERT((flags & (GB_UNMAPPED | GB_KVAALLOC)) != GB_KVAALLOC,
            ("GB_KVAALLOC only makes sense with GB_UNMAPPED"));
        ASSERT_VOP_LOCKED(vp, "getblk");
-       if (size > MAXBSIZE)
-               panic("getblk: size(%d) > MAXBSIZE(%d)\n", size, MAXBSIZE);
+       if (size > MAXBCACHEBUF)
+               panic("getblk: size(%d) > MAXBCACHEBUF(%d)\n", size,
+                   MAXBCACHEBUF);
        if (!unmapped_buf_allowed)
                flags &= ~(GB_UNMAPPED | GB_KVAALLOC);
 

Modified: stable/10/sys/sys/param.h
==============================================================================
--- stable/10/sys/sys/param.h   Thu May 14 22:35:26 2015        (r282932)
+++ stable/10/sys/sys/param.h   Thu May 14 22:50:07 2015        (r282933)
@@ -232,10 +232,19 @@
  *             and may be made smaller at the risk of not being able to use
  *             filesystems which require a block size exceeding MAXBSIZE.
  *
+ * MAXBCACHEBUF - Maximum size of a buffer in the buffer cache.  This must
+ *             be >= MAXBSIZE and can be set differently for different
+ *             architectures by defining it in <machine/param.h>.
+ *             Making this larger allows NFS to do larger reads/writes.
+ *
  * BKVASIZE -  Nominal buffer space per buffer, in bytes.  BKVASIZE is the
  *             minimum KVM memory reservation the kernel is willing to make.
  *             Filesystems can of course request smaller chunks.  Actual 
  *             backing memory uses a chunk size of a page (PAGE_SIZE).
+ *             The default value here can be overridden on a per-architecture
+ *             basis by defining it in <machine/param.h>.  This should
+ *             probably be done to increase its value, when MAXBCACHEBUF is
+ *             defined as a larger value in <machine/param.h>.
  *
  *             If you make BKVASIZE too small you risk seriously fragmenting
  *             the buffer KVM map which may slow things down a bit.  If you
@@ -247,7 +256,12 @@
  *             normal UFS filesystem.
  */
 #define MAXBSIZE       65536   /* must be power of 2 */
+#ifndef        MAXBCACHEBUF
+#define        MAXBCACHEBUF    MAXBSIZE /* must be a power of 2 >= MAXBSIZE */
+#endif
+#ifndef        BKVASIZE
 #define BKVASIZE       16384   /* must be power of 2 */
+#endif
 #define BKVAMASK       (BKVASIZE-1)
 
 /*
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to