svn commit: r230606 - in projects/nfsv4.1-client/sys/fs: nfs
nfsclient
Rick Macklem
rmacklem at FreeBSD.org
Fri Jan 27 05:04:48 UTC 2012
Author: rmacklem
Date: Fri Jan 27 05:04:47 2012
New Revision: 230606
URL: http://svn.freebsd.org/changeset/base/230606
Log:
Add a RECLAIM_COMPLETE RPC to the NFSv4.1 client, since it is
required by the server in the Linux 3.n kernel server.
Modified:
projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c
projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
projects/nfsv4.1-client/sys/fs/nfs/nfsport.h
projects/nfsv4.1-client/sys/fs/nfs/nfsproto.h
projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c
projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c Fri Jan 27 02:46:12 2012 (r230605)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c Fri Jan 27 05:04:47 2012 (r230606)
@@ -168,7 +168,7 @@ static struct nfsuserlruhead nfsuserlruh
*/
int nfs_bigreply[NFSV41_NPROCS] = { 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
/* local functions */
static int nfsrv_skipace(struct nfsrv_descript *nd, int *acesizep);
Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h Fri Jan 27 02:46:12 2012 (r230605)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h Fri Jan 27 05:04:47 2012 (r230606)
@@ -454,6 +454,7 @@ int nfsrpc_layoutcommit(vnode_t, off_t,
struct ucred *, NFSPROC_T *, void *);
int nfsrpc_layoutreturn(vnode_t, int, int, int, int, off_t, uint64_t,
nfsv4stateid_t *, int, uint32_t *, struct ucred *, NFSPROC_T *, void *);
+int nfsrpc_reclaimcomplete(struct nfsmount *, struct ucred *, NFSPROC_T *);
/* nfs_clstate.c */
int nfscl_open(vnode_t, u_int8_t *, int, u_int32_t, int,
Modified: projects/nfsv4.1-client/sys/fs/nfs/nfsport.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfsport.h Fri Jan 27 02:46:12 2012 (r230605)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfsport.h Fri Jan 27 05:04:47 2012 (r230606)
@@ -347,11 +347,12 @@
#define NFSPROC_GETDEVICEINFO 47
#define NFSPROC_LAYOUTCOMMIT 48
#define NFSPROC_LAYOUTRETURN 49
+#define NFSPROC_RECLAIMCOMPL 50
/*
* Must be defined as one higher than the last NFSv4.1 Proc# above.
*/
-#define NFSV41_NPROCS 50
+#define NFSV41_NPROCS 51
#endif /* NFS_V3NPROCS */
Modified: projects/nfsv4.1-client/sys/fs/nfs/nfsproto.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfsproto.h Fri Jan 27 02:46:12 2012 (r230605)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfsproto.h Fri Jan 27 05:04:47 2012 (r230606)
@@ -280,11 +280,12 @@
#define NFSPROC_GETDEVICEINFO 47
#define NFSPROC_LAYOUTCOMMIT 48
#define NFSPROC_LAYOUTRETURN 49
+#define NFSPROC_RECLAIMCOMPL 50
/*
* Must be defined as one higher than the last NFSv4.1 Proc# above.
*/
-#define NFSV41_NPROCS 50
+#define NFSV41_NPROCS 51
#endif /* NFS_V3NPROCS */
Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c Fri Jan 27 02:46:12 2012 (r230605)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c Fri Jan 27 05:04:47 2012 (r230606)
@@ -108,6 +108,7 @@ static struct {
{ NFSV4OP_GETDEVINFO, 1, "GetDeviceInfo", 13, },
{ NFSV4OP_LAYOUTCOMMIT, 1, "LayoutCommit", 12, },
{ NFSV4OP_LAYOUTRETURN, 1, "LayoutReturn", 12, },
+ { NFSV4OP_RECLAIMCOMPL, 1, "ReclaimComplete", 15, },
};
@@ -117,7 +118,7 @@ static struct {
static int nfs_bigrequest[NFSV41_NPROCS] = {
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
};
/*
Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c Fri Jan 27 02:46:12 2012 (r230605)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c Fri Jan 27 05:04:47 2012 (r230606)
@@ -803,6 +803,9 @@ if (error) printf("exch=%d\n",error);
error = nfsrpc_createsession(nmp, &nmp->nm_sess, cred,
p);
if (error) printf("aft crs=%d\n",error);
+ if (error == 0)
+ error = nfsrpc_reclaimcomplete(nmp, cred, p);
+if (error) printf("aft reclcom=%d\n",error);
return (error);
}
nfscl_reqstart(nd, NFSPROC_SETCLIENTID, nmp, NULL, 0, NULL, NULL);
@@ -5021,3 +5024,27 @@ nfsrpc_fillsa(struct nfsmount *nmp, stru
return (error);
}
+/*
+ * Do the NFSv4.1 Reclaim Complete.
+ */
+int
+nfsrpc_reclaimcomplete(struct nfsmount *nmp, struct ucred *cred, NFSPROC_T *p)
+{
+ uint32_t *tl;
+ struct nfsrv_descript nfsd;
+ struct nfsrv_descript *nd = &nfsd;
+ int error;
+
+ nfscl_reqstart(nd, NFSPROC_RECLAIMCOMPL, nmp, NULL, 0, NULL, NULL);
+ NFSM_BUILD(tl, uint32_t *, NFSX_UNSIGNED);
+ *tl = newnfs_false;
+ nd->nd_flag |= ND_USEGSSNAME;
+ error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
+ NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
+ if (error != 0)
+ return (error);
+ error = nd->nd_repstat;
+ mbuf_freem(nd->nd_mrep);
+ return (error);
+}
+
More information about the svn-src-projects
mailing list