svn commit: r317569 - projects/pnfs-planb-server/sys/fs/nfsserver
Rick Macklem
rmacklem at FreeBSD.org
Fri Apr 28 20:51:20 UTC 2017
Author: rmacklem
Date: Fri Apr 28 20:51:18 2017
New Revision: 317569
URL: https://svnweb.freebsd.org/changeset/base/317569
Log:
Add the code changes for the pNFS server to nfs_nfsdsubs.c.
Modified:
projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdsubs.c
Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdsubs.c
==============================================================================
--- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdsubs.c Fri Apr 28 19:38:57 2017 (r317568)
+++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdsubs.c Fri Apr 28 20:51:18 2017 (r317569)
@@ -50,6 +50,8 @@ extern struct nfslockhashhead *nfslockha
extern int nfsrv_lockhashsize;
extern struct nfssessionhash *nfssessionhash;
extern int nfsrv_sessionhashsize;
+extern struct nfslayouthash *nfslayouthash;
+extern int nfsrv_layouthashsize;
extern int nfsrv_useacl;
extern uid_t nfsrv_defaultuid;
extern gid_t nfsrv_defaultgid;
@@ -1442,7 +1444,14 @@ nfsrv_mtofh(struct nfsrv_descript *nd, s
nd->nd_flag |= ND_PUBLOOKUP;
goto nfsmout;
}
- if (len < NFSRV_MINFH || len > NFSRV_MAXFH) {
+ copylen = len;
+
+ /* If len == NFSX_V4PNFSFH the RPC is a pNFS DS one. */
+ if (len == NFSX_V4PNFSFH && (nd->nd_flag & ND_NFSV41) != 0) {
+ copylen = NFSX_MYFH;
+ len = NFSM_RNDUP(len);
+ nd->nd_flag |= ND_DSSERVER;
+ } else if (len < NFSRV_MINFH || len > NFSRV_MAXFH) {
if (nd->nd_flag & ND_NFSV4) {
if (len > 0 && len <= NFSX_V4FHMAX) {
error = nfsm_advance(nd, NFSM_RNDUP(len), -1);
@@ -1459,7 +1468,6 @@ nfsrv_mtofh(struct nfsrv_descript *nd, s
goto nfsmout;
}
}
- copylen = len;
} else {
/*
* For NFSv2, the file handle is always 32 bytes on the
@@ -2054,6 +2062,12 @@ nfsd_init(void)
mtx_init(&nfssessionhash[i].mtx, "nfssm", NULL, MTX_DEF);
LIST_INIT(&nfssessionhash[i].list);
}
+ nfslayouthash = malloc(sizeof(struct nfslayouthash) *
+ nfsrv_layouthashsize, M_NFSDSESSION, M_WAITOK | M_ZERO);
+ for (i = 0; i < nfsrv_layouthashsize; i++) {
+ mtx_init(&nfslayouthash[i].mtx, "nfslm", NULL, MTX_DEF);
+ LIST_INIT(&nfslayouthash[i].list);
+ }
/* and the v2 pubfh should be all zeros */
NFSBZERO(nfs_v2pubfh, NFSX_V2FH);
More information about the svn-src-projects
mailing list