svn commit: r363631 - projects/nfs-over-tls/sys/fs/nfsserver
Rick Macklem
rmacklem at FreeBSD.org
Tue Jul 28 03:25:31 UTC 2020
Author: rmacklem
Date: Tue Jul 28 03:25:31 2020
New Revision: 363631
URL: https://svnweb.freebsd.org/changeset/base/363631
Log:
Put nfs_fha_new.c from head into sys/fs/nfsserver.
The changes applied to nfs_fha_new.c were only needed if dissection of XDR
needed to be done from ext_pgs mbufs, which is not currently needed.
Modified:
projects/nfs-over-tls/sys/fs/nfsserver/nfs_fha_new.c
Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_fha_new.c
==============================================================================
--- projects/nfs-over-tls/sys/fs/nfsserver/nfs_fha_new.c Tue Jul 28 02:56:26 2020 (r363630)
+++ projects/nfs-over-tls/sys/fs/nfsserver/nfs_fha_new.c Tue Jul 28 03:25:31 2020 (r363631)
@@ -43,11 +43,11 @@ static MALLOC_DEFINE(M_NFS_FHA, "NFS FHA", "NFS FHA");
static void fhanew_init(void *foo);
static void fhanew_uninit(void *foo);
static rpcproc_t fhanew_get_procnum(rpcproc_t procnum);
-static int fhanew_get_fh(uint64_t *fh, int v3,
- struct nfsrv_descript *nd);
+static int fhanew_get_fh(uint64_t *fh, int v3, struct mbuf **md,
+ caddr_t *dpos);
static int fhanew_is_read(rpcproc_t procnum);
static int fhanew_is_write(rpcproc_t procnum);
-static int fhanew_get_offset(struct nfsrv_descript *nd,
+static int fhanew_get_offset(struct mbuf **md, caddr_t *dpos,
int v3, struct fha_info *info);
static int fhanew_no_offset(rpcproc_t procnum);
static void fhanew_set_locktype(rpcproc_t procnum,
@@ -164,8 +164,9 @@ fhanew_get_procnum(rpcproc_t procnum)
}
static int
-fhanew_get_fh(uint64_t *fh, int v3, struct nfsrv_descript *nd)
+fhanew_get_fh(uint64_t *fh, int v3, struct mbuf **md, caddr_t *dpos)
{
+ struct nfsrv_descript lnd, *nd;
uint32_t *tl;
uint8_t *buf;
uint64_t t;
@@ -173,7 +174,11 @@ fhanew_get_fh(uint64_t *fh, int v3, struct nfsrv_descr
error = 0;
len = 0;
+ nd = &lnd;
+ nd->nd_md = *md;
+ nd->nd_dpos = *dpos;
+
if (v3) {
NFSM_DISSECT_NONBLOCK(tl, uint32_t *, NFSX_UNSIGNED);
if ((len = fxdr_unsigned(int, *tl)) <= 0 || len > NFSX_FHMAX) {
@@ -193,6 +198,9 @@ fhanew_get_fh(uint64_t *fh, int v3, struct nfsrv_descr
*fh = t;
nfsmout:
+ *md = nd->nd_md;
+ *dpos = nd->nd_dpos;
+
return (error);
}
@@ -215,14 +223,19 @@ fhanew_is_write(rpcproc_t procnum)
}
static int
-fhanew_get_offset(struct nfsrv_descript *nd, int v3,
+fhanew_get_offset(struct mbuf **md, caddr_t *dpos, int v3,
struct fha_info *info)
{
+ struct nfsrv_descript lnd, *nd;
uint32_t *tl;
int error;
error = 0;
+ nd = &lnd;
+ nd->nd_md = *md;
+ nd->nd_dpos = *dpos;
+
if (v3) {
NFSM_DISSECT_NONBLOCK(tl, uint32_t *, 2 * NFSX_UNSIGNED);
info->offset = fxdr_hyper(tl);
@@ -232,6 +245,9 @@ fhanew_get_offset(struct nfsrv_descript *nd, int v3,
}
nfsmout:
+ *md = nd->nd_md;
+ *dpos = nd->nd_dpos;
+
return (error);
}
@@ -290,13 +306,13 @@ fhanew_set_locktype(rpcproc_t procnum, struct fha_info
static void
fha_extract_info(struct svc_req *req, struct fha_info *i)
{
+ struct mbuf *md;
+ caddr_t dpos;
static u_int64_t random_fh = 0;
int error;
int v3 = (req->rq_vers == 3);
rpcproc_t procnum;
- struct nfsrv_descript lnd, *nd;
- nd = &lnd;
/*
* We start off with a random fh. If we get a reasonable
* procnum, we set the fh. If there's a concept of offset
@@ -337,17 +353,17 @@ fha_extract_info(struct svc_req *req, struct fha_info
error = newnfs_realign(&req->rq_args, M_NOWAIT);
if (error)
goto out;
- nd->nd_md = req->rq_args;
- nd->nd_dpos = mtod(nd->nd_md, char *);
+ md = req->rq_args;
+ dpos = mtod(md, caddr_t);
/* Grab the filehandle. */
- error = fhanew_get_fh(&i->fh, v3, nd);
+ error = fhanew_get_fh(&i->fh, v3, &md, &dpos);
if (error)
goto out;
/* Content ourselves with zero offset for all but reads. */
if (i->read || i->write)
- fhanew_get_offset(nd, v3, i);
+ fhanew_get_offset(&md, &dpos, v3, i);
out:
fhanew_set_locktype(procnum, i);
More information about the svn-src-projects
mailing list