svn commit: r223968 - in stable/8/sys/fs: nfs nfsclient

Rick Macklem rmacklem at FreeBSD.org
Tue Jul 12 21:01:10 UTC 2011


Author: rmacklem
Date: Tue Jul 12 21:01:09 2011
New Revision: 223968
URL: http://svn.freebsd.org/changeset/base/223968

Log:
  MFC: r223657
  Fix the new NFSv4 client so that it doesn't fill the cached
  mode attribute in as 0 when doing writes. The change adds
  the Mode attribute plus the others except Owner and Owner_group
  to the list requested by the NFSv4 Write Operation. This fixed
  a problem where an executable file built by "cc" would get mode
  0111 instead of 0755 for some NFSv4 servers.
  Found at the recent NFSv4 interoperability Bakeathon.

Modified:
  stable/8/sys/fs/nfs/nfsproto.h
  stable/8/sys/fs/nfsclient/nfs_clport.c
  stable/8/sys/fs/nfsclient/nfs_clrpcops.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/nfs/nfsproto.h
==============================================================================
--- stable/8/sys/fs/nfs/nfsproto.h	Tue Jul 12 20:38:42 2011	(r223967)
+++ stable/8/sys/fs/nfs/nfsproto.h	Tue Jul 12 21:01:09 2011	(r223968)
@@ -826,15 +826,24 @@ struct nfsv3_sattr {
  * NFSATTRBIT_WRITEGETATTR0 - bits 0<->31
  */
 #define	NFSATTRBIT_WRITEGETATTR0					\
- 	(NFSATTRBM_CHANGE |						\
+ 	(NFSATTRBM_SUPPORTEDATTRS |					\
+ 	NFSATTRBM_TYPE |						\
+ 	NFSATTRBM_CHANGE |						\
  	NFSATTRBM_SIZE |						\
- 	NFSATTRBM_FSID)
+ 	NFSATTRBM_FSID |						\
+ 	NFSATTRBM_FILEID |						\
+ 	NFSATTRBM_MAXREAD)
 
 /*
  * NFSATTRBIT_WRITEGETATTR1 - bits 32<->63
  */
 #define	NFSATTRBIT_WRITEGETATTR1					\
- 	(NFSATTRBM_TIMEMETADATA |					\
+ 	(NFSATTRBM_MODE |						\
+ 	NFSATTRBM_NUMLINKS |						\
+ 	NFSATTRBM_RAWDEV |						\
+ 	NFSATTRBM_SPACEUSED |						\
+ 	NFSATTRBM_TIMEACCESS |						\
+ 	NFSATTRBM_TIMEMETADATA |					\
  	NFSATTRBM_TIMEMODIFY)
 
 /*

Modified: stable/8/sys/fs/nfsclient/nfs_clport.c
==============================================================================
--- stable/8/sys/fs/nfsclient/nfs_clport.c	Tue Jul 12 20:38:42 2011	(r223967)
+++ stable/8/sys/fs/nfsclient/nfs_clport.c	Tue Jul 12 21:01:09 2011	(r223968)
@@ -366,6 +366,7 @@ nfscl_loadattrcache(struct vnode **vpp, 
 		np->n_vattr.na_mtime = nap->na_mtime;
 		np->n_vattr.na_ctime = nap->na_ctime;
 		np->n_vattr.na_fsid = nap->na_fsid;
+		np->n_vattr.na_mode = nap->na_mode;
 	} else {
 		NFSBCOPY((caddr_t)nap, (caddr_t)&np->n_vattr,
 		    sizeof (struct nfsvattr));

Modified: stable/8/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- stable/8/sys/fs/nfsclient/nfs_clrpcops.c	Tue Jul 12 20:38:42 2011	(r223967)
+++ stable/8/sys/fs/nfsclient/nfs_clrpcops.c	Tue Jul 12 21:01:09 2011	(r223968)
@@ -1527,8 +1527,8 @@ nfsrpc_writerpc(vnode_t vp, struct uio *
 		 * deadlock, is that the upcall times out and allows
 		 * the write to complete. However, progress is so slow
 		 * that it might just as well be deadlocked.
-		 * So, we just get the attributes that change with each
-		 * write Op.
+		 * As such, we get the rest of the attributes, but not
+		 * Owner or Owner_group.
 		 * nb: nfscl_loadattrcache() needs to be told that these
 		 *     partial attributes from a write rpc are being
 		 *     passed in, via a argument flag.


More information about the svn-src-all mailing list