Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Sep 2010 01:05:19 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r212833 - head/sys/fs/nfsserver
Message-ID:  <201009190105.o8J15JRv084024@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Sun Sep 19 01:05:19 2010
New Revision: 212833
URL: http://svn.freebsd.org/changeset/base/212833

Log:
  Fix the experimental NFSv4 server so that it performs local VOP_ADVLOCK()
  unlock operations correctly. It was passing in F_SETLK instead of
  F_UNLCK as the operation for the unlock case. This only affected
  operation when local locking (vfs.newnfs.enable_locallocks=1) was enabled.
  
  MFC after:	1 week

Modified:
  head/sys/fs/nfsserver/nfs_nfsdport.c

Modified: head/sys/fs/nfsserver/nfs_nfsdport.c
==============================================================================
--- head/sys/fs/nfsserver/nfs_nfsdport.c	Sun Sep 19 00:36:26 2010	(r212832)
+++ head/sys/fs/nfsserver/nfs_nfsdport.c	Sun Sep 19 01:05:19 2010	(r212833)
@@ -2825,7 +2825,7 @@ nfsvno_advlock(struct vnode *vp, int fty
 	struct flock fl;
 	u_int64_t tlen;
 
-	if (!nfsrv_dolocallocks)
+	if (nfsrv_dolocallocks == 0)
 		return (0);
 	fl.l_whence = SEEK_SET;
 	fl.l_type = ftype;
@@ -2850,8 +2850,12 @@ nfsvno_advlock(struct vnode *vp, int fty
 	fl.l_sysid = (int)nfsv4_sysid;
 
 	NFSVOPUNLOCK(vp, 0, td);
-	error = VOP_ADVLOCK(vp, (caddr_t)td->td_proc, F_SETLK, &fl,
-	    (F_POSIX | F_REMOTE));
+	if (ftype == F_UNLCK)
+		error = VOP_ADVLOCK(vp, (caddr_t)td->td_proc, F_UNLCK, &fl,
+		    (F_POSIX | F_REMOTE));
+	else
+		error = VOP_ADVLOCK(vp, (caddr_t)td->td_proc, F_SETLK, &fl,
+		    (F_POSIX | F_REMOTE));
 	NFSVOPLOCK(vp, LK_EXCLUSIVE | LK_RETRY, td);
 	return (error);
 }



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