summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_vfsops.c
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>1995-07-07 11:01:31 +0000
committerdfr <dfr@FreeBSD.org>1995-07-07 11:01:31 +0000
commit2671254e234bfb8391b8636f9e093dea553a784a (patch)
tree9268c0d38541c7dcb7a6817dfb2fab81bc721073 /sys/nfsclient/nfs_vfsops.c
parentbc359d41a0c01bd670b14fa152b5d588363440b4 (diff)
downloadFreeBSD-src-2671254e234bfb8391b8636f9e093dea553a784a.zip
FreeBSD-src-2671254e234bfb8391b8636f9e093dea553a784a.tar.gz
Use a consistent blocksize for sizing bufs to avoid panicing the bio system.
Diffstat (limited to 'sys/nfsclient/nfs_vfsops.c')
-rw-r--r--sys/nfsclient/nfs_vfsops.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/sys/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c
index 2c4070b..df3fea5 100644
--- a/sys/nfsclient/nfs_vfsops.c
+++ b/sys/nfsclient/nfs_vfsops.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_vfsops.c 8.3 (Berkeley) 1/4/94
- * $Id: nfs_vfsops.c,v 1.15 1995/06/11 19:31:46 rgrimes Exp $
+ * $Id: nfs_vfsops.c,v 1.16 1995/06/27 11:06:51 dfr Exp $
*/
#include <sys/param.h>
@@ -112,6 +112,22 @@ void nfsargs_ntoh __P((struct nfs_args *));
static struct mount *nfs_mountdiskless __P((char *, char *, int,
struct sockaddr_in *, struct nfs_args *, register struct vnode **));
+static int nfs_iosize(nmp)
+ struct nfsmount* nmp;
+{
+ int iosize;
+
+ /*
+ * Calculate the size used for io buffers. Use the larger
+ * of the two sizes to minimise nfs requests but make sure
+ * that it is at least one VM page to avoid wasting buffer
+ * space.
+ */
+ iosize = max(nmp->nm_rsize, nmp->nm_wsize);
+ if (iosize < NBPG) iosize = NBPG;
+ return iosize;
+}
+
/*
* nfs statfs call
*/
@@ -163,7 +179,7 @@ nfs_statfs(mp, sbp, p)
sbp->f_type = MOUNT_NFS;
#endif
sbp->f_flags = nmp->nm_flag;
- sbp->f_iosize = min(nmp->nm_rsize, nmp->nm_wsize);
+ sbp->f_iosize = nfs_iosize(nmp);
if (v3) {
sbp->f_bsize = NFS_FABLKSIZE;
fxdr_hyper(&sfp->sf_tbytes, &tquad);
@@ -662,7 +678,7 @@ mountnfs(argp, mp, nam, pth, hst, vpp)
* stuck on a dead server and we are holding a lock on the mount
* point.
*/
- mp->mnt_stat.f_iosize = min(nmp->nm_rsize, nmp->nm_wsize);
+ mp->mnt_stat.f_iosize = nfs_iosize(nmp);
/*
* A reference count is needed on the nfsnode representing the
* remote root. If this object is not persistent, then backward
OpenPOWER on IntegriCloud