Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 May 2011 00:51:52 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r222109 - stable/8/sys/fs/nfsserver
Message-ID:  <201105200051.p4K0pqxg060102@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Fri May 20 00:51:52 2011
New Revision: 222109
URL: http://svn.freebsd.org/changeset/base/222109

Log:
  MFC: r221517
  Change the new NFS server so that it returns 0 when the f_bavail
  or f_ffree fields of "struct statfs" are negative, since the
  values that go on the wire are unsigned and will appear to be
  very large positive values otherwise. This makes the handling
  of a negative f_bavail compatible with the old/regular NFS server.

Modified:
  stable/8/sys/fs/nfsserver/nfs_nfsdport.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/fs/nfsserver/nfs_nfsdport.c
==============================================================================
--- stable/8/sys/fs/nfsserver/nfs_nfsdport.c	Thu May 19 23:18:42 2011	(r222108)
+++ stable/8/sys/fs/nfsserver/nfs_nfsdport.c	Fri May 20 00:51:52 2011	(r222109)
@@ -1277,8 +1277,23 @@ nfsvno_fsync(struct vnode *vp, u_int64_t
 int
 nfsvno_statfs(struct vnode *vp, struct statfs *sf)
 {
+	int error;
 
-	return (VFS_STATFS(vp->v_mount, sf));
+	error = VFS_STATFS(vp->v_mount, sf);
+	if (error == 0) {
+		/*
+		 * Since NFS handles these values as unsigned on the
+		 * wire, there is no way to represent negative values,
+		 * so set them to 0. Without this, they will appear
+		 * to be very large positive values for clients like
+		 * Solaris10.
+		 */
+		if (sf->f_bavail < 0)
+			sf->f_bavail = 0;
+		if (sf->f_ffree < 0)
+			sf->f_ffree = 0;
+	}
+	return (error);
 }
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201105200051.p4K0pqxg060102>