svn commit: r207764 - head/sys/fs/nfs

Rick Macklem rmacklem at FreeBSD.org
Sat May 8 01:24:19 UTC 2010


Author: rmacklem
Date: Sat May  8 01:24:18 2010
New Revision: 207764
URL: http://svn.freebsd.org/changeset/base/207764

Log:
  Patch the experimental NFS client so that it works for NFSv2
  by adding the necessary mapping from NFSv3 procedure numbers
  to NFSv2 procedure numbers when doing NFSv2 RPCs.
  
  MFC after:	1 week

Modified:
  head/sys/fs/nfs/nfs_commonkrpc.c

Modified: head/sys/fs/nfs/nfs_commonkrpc.c
==============================================================================
--- head/sys/fs/nfs/nfs_commonkrpc.c	Fri May  7 23:05:27 2010	(r207763)
+++ head/sys/fs/nfs/nfs_commonkrpc.c	Sat May  8 01:24:18 2010	(r207764)
@@ -97,14 +97,37 @@ static void	nfs_up(struct nfsmount *, st
     int, int);
 static int	nfs_msg(struct thread *, const char *, const char *, int);
 
-extern int nfsv2_procid[];
-
 struct nfs_cached_auth {
 	int		ca_refs; /* refcount, including 1 from the cache */
 	uid_t		ca_uid;	 /* uid that corresponds to this auth */
 	AUTH		*ca_auth; /* RPC auth handle */
 };
 
+static int nfsv2_procid[NFS_V3NPROCS] = {
+	NFSV2PROC_NULL,
+	NFSV2PROC_GETATTR,
+	NFSV2PROC_SETATTR,
+	NFSV2PROC_LOOKUP,
+	NFSV2PROC_NOOP,
+	NFSV2PROC_READLINK,
+	NFSV2PROC_READ,
+	NFSV2PROC_WRITE,
+	NFSV2PROC_CREATE,
+	NFSV2PROC_MKDIR,
+	NFSV2PROC_SYMLINK,
+	NFSV2PROC_CREATE,
+	NFSV2PROC_REMOVE,
+	NFSV2PROC_RMDIR,
+	NFSV2PROC_RENAME,
+	NFSV2PROC_LINK,
+	NFSV2PROC_READDIR,
+	NFSV2PROC_NOOP,
+	NFSV2PROC_STATFS,
+	NFSV2PROC_NOOP,
+	NFSV2PROC_NOOP,
+	NFSV2PROC_NOOP,
+};
+
 /*
  * Initialize sockets and congestion for a new NFS connection.
  * We do not free the sockaddr if error.
@@ -533,6 +556,15 @@ newnfs_request(struct nfsrv_descript *nd
 
 	if (nmp != NULL) {
 		NFSINCRGLOBAL(newnfsstats.rpcrequests);
+
+		/* Map the procnum to the old NFSv2 one, as required. */
+		if ((nd->nd_flag & ND_NFSV2) != 0) {
+			if (nd->nd_procnum < NFS_V3NPROCS)
+				procnum = nfsv2_procid[nd->nd_procnum];
+			else
+				procnum = NFSV2PROC_NOOP;
+		}
+
 		/*
 		 * Now only used for the R_DONTRECOVER case, but until that is
 		 * supported within the krpc code, I need to keep a queue of


More information about the svn-src-head mailing list