svn commit: r340356 - projects/nfsv42/sys/fs/nfs
Rick Macklem
rmacklem at FreeBSD.org
Mon Nov 12 00:24:00 UTC 2018
Author: rmacklem
Date: Mon Nov 12 00:23:58 2018
New Revision: 340356
URL: https://svnweb.freebsd.org/changeset/base/340356
Log:
Add NFSv4.2 client support for VOP_ADVISE() to sys/fs/nfs. Changes to
sys/fs/nfsclient will be done in a separate commit.
More needs to be done here, including handling of the stateid and support
for NFSv4.2 DSs.
Modified:
projects/nfsv42/sys/fs/nfs/nfs_commonsubs.c
projects/nfsv42/sys/fs/nfs/nfs_var.h
projects/nfsv42/sys/fs/nfs/nfsport.h
projects/nfsv42/sys/fs/nfs/nfsproto.h
Modified: projects/nfsv42/sys/fs/nfs/nfs_commonsubs.c
==============================================================================
--- projects/nfsv42/sys/fs/nfs/nfs_commonsubs.c Mon Nov 12 00:04:58 2018 (r340355)
+++ projects/nfsv42/sys/fs/nfs/nfs_commonsubs.c Mon Nov 12 00:23:58 2018 (r340356)
@@ -203,9 +203,9 @@ static struct nfsrv_lughash *nfsgroupnamehash;
* marked 0 in this array, the code will still work, just not quite as
* efficiently.)
*/
-static int nfs_bigreply[NFSV41_NPROCS] = { 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0,
+static int nfs_bigreply[NFSV42_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, 1, 0, 0, 0 };
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 };
/* local functions */
static int nfsrv_skipace(struct nfsrv_descript *nd, int *acesizep);
@@ -223,7 +223,7 @@ static struct {
int opcnt;
const u_char *tag;
int taglen;
-} nfsv4_opmap[NFSV41_NPROCS] = {
+} nfsv4_opmap[NFSV42_NPROCS] = {
{ 0, 1, "Null", 4 },
{ NFSV4OP_GETATTR, 1, "Getattr", 7, },
{ NFSV4OP_SETATTR, 2, "Setattr", 7, },
@@ -280,15 +280,16 @@ static struct {
{ NFSV4OP_COMMIT, 1, "CommitDS", 8, },
{ NFSV4OP_OPEN, 3, "OpenLayoutGet", 13, },
{ NFSV4OP_OPEN, 8, "CreateLayGet", 12, },
+ { NFSV4OP_IOADVISE, 1, "Advise", 6, },
};
/*
* NFS RPCS that have large request message size.
*/
-static int nfs_bigrequest[NFSV41_NPROCS] = {
+static int nfs_bigrequest[NFSV42_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, 1, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0
};
/*
@@ -427,7 +428,7 @@ nfscl_reqstart(struct nfsrv_descript *nd, int procnum,
} else {
(void) nfsm_fhtom(nd, nfhp, fhlen, 0);
}
- if (procnum < NFSV41_NPROCS)
+ if (procnum < NFSV42_NPROCS)
NFSINCRGLOBAL(nfsstatsv1.rpccnt[procnum]);
}
Modified: projects/nfsv42/sys/fs/nfs/nfs_var.h
==============================================================================
--- projects/nfsv42/sys/fs/nfs/nfs_var.h Mon Nov 12 00:04:58 2018 (r340355)
+++ projects/nfsv42/sys/fs/nfs/nfs_var.h Mon Nov 12 00:23:58 2018 (r340356)
@@ -537,6 +537,7 @@ int nfsrpc_layoutreturn(struct nfsmount *, uint8_t *,
int, uint64_t, uint64_t, nfsv4stateid_t *, struct ucred *, NFSPROC_T *,
uint32_t, uint32_t, char *);
int nfsrpc_reclaimcomplete(struct nfsmount *, struct ucred *, NFSPROC_T *);
+int nfsrpc_advise(vnode_t, off_t, uint64_t, int, struct ucred *, NFSPROC_T *);
int nfscl_doiods(vnode_t, struct uio *, int *, int *, uint32_t, int,
struct ucred *, NFSPROC_T *);
int nfscl_findlayoutforio(struct nfscllayout *, uint64_t, uint32_t,
Modified: projects/nfsv42/sys/fs/nfs/nfsport.h
==============================================================================
--- projects/nfsv42/sys/fs/nfs/nfsport.h Mon Nov 12 00:04:58 2018 (r340355)
+++ projects/nfsv42/sys/fs/nfs/nfsport.h Mon Nov 12 00:23:58 2018 (r340356)
@@ -393,6 +393,14 @@
*/
#define NFSV41_NPROCS 56
+/* Additional procedures for NFSv4.2. */
+#define NFSPROC_IOADVISE 56
+
+/*
+ * Must be defined as one higher than the last NFSv4.2 Proc# above.
+ */
+#define NFSV42_NPROCS 57
+
#endif /* NFS_V3NPROCS */
/*
@@ -420,7 +428,7 @@ struct nfsstatsv1 {
uint64_t readlink_bios;
uint64_t biocache_readdirs;
uint64_t readdir_bios;
- uint64_t rpccnt[NFSV41_NPROCS + 13];
+ uint64_t rpccnt[NFSV42_NPROCS + 12];
uint64_t rpcretries;
uint64_t srvrpccnt[NFSV42_NOPS + NFSV4OP_FAKENOPS];
uint64_t srvrpc_errs;
Modified: projects/nfsv42/sys/fs/nfs/nfsproto.h
==============================================================================
--- projects/nfsv42/sys/fs/nfs/nfsproto.h Mon Nov 12 00:04:58 2018 (r340355)
+++ projects/nfsv42/sys/fs/nfs/nfsproto.h Mon Nov 12 00:23:58 2018 (r340356)
@@ -365,6 +365,14 @@
*/
#define NFSV41_NPROCS 56
+/* Additional procedures for NFSv4.2. */
+#define NFSPROC_IOADVISE 56
+
+/*
+ * Must be defined as one higher than the last NFSv4.2 Proc# above.
+ */
+#define NFSV42_NPROCS 57
+
#endif /* NFS_V3NPROCS */
/*
@@ -666,6 +674,7 @@
/* Flags for File Layout. */
#define NFSFLAYUTIL_DENSE 0x1
#define NFSFLAYUTIL_COMMIT_THRU_MDS 0x2
+#define NFSFLAYUTIL_IOADVISE_THRU_MDS 0x4
#define NFSFLAYUTIL_STRIPE_MASK 0xffffffc0
/* Flags for Flex File Layout. */
More information about the svn-src-projects
mailing list