aboutsummaryrefslogtreecommitdiff
path: root/sys/nfsserver
diff options
context:
space:
mode:
Diffstat (limited to 'sys/nfsserver')
-rw-r--r--sys/nfsserver/nfs_fha_old.c30
-rw-r--r--sys/nfsserver/nfs_serv.c1
-rw-r--r--sys/nfsserver/nfs_srvkrpc.c5
3 files changed, 31 insertions, 5 deletions
diff --git a/sys/nfsserver/nfs_fha_old.c b/sys/nfsserver/nfs_fha_old.c
index 82149b867b20..a9282785fef4 100644
--- a/sys/nfsserver/nfs_fha_old.c
+++ b/sys/nfsserver/nfs_fha_old.c
@@ -49,7 +49,7 @@ static void fhaold_init(void *foo);
static void fhaold_uninit(void *foo);
rpcproc_t fhaold_get_procnum(rpcproc_t procnum);
int fhaold_realign(struct mbuf **mb, int malloc_flags);
-int fhaold_get_fh(fhandle_t *fh, int v3, struct mbuf **md, caddr_t *dpos);
+int fhaold_get_fh(uint64_t *fh, int v3, struct mbuf **md, caddr_t *dpos);
int fhaold_is_read(rpcproc_t procnum);
int fhaold_is_write(rpcproc_t procnum);
int fhaold_get_offset(struct mbuf **md, caddr_t *dpos, int v3,
@@ -135,9 +135,33 @@ fhaold_realign(struct mbuf **mb, int malloc_flags)
}
int
-fhaold_get_fh(fhandle_t *fh, int v3, struct mbuf **md, caddr_t *dpos)
+fhaold_get_fh(uint64_t *fh, int v3, struct mbuf **md, caddr_t *dpos)
{
- return (nfsm_srvmtofh_xx(fh, v3, md, dpos));
+ u_int32_t *tl;
+ uint8_t *buf;
+ uint64_t t;
+ int fhlen, i;
+
+ if (v3) {
+ tl = nfsm_dissect_xx_nonblock(NFSX_UNSIGNED, md, dpos);
+ if (tl == NULL)
+ return EBADRPC;
+ fhlen = fxdr_unsigned(int, *tl);
+ if (fhlen != 0 && fhlen != NFSX_V3FH)
+ return EBADRPC;
+ } else {
+ fhlen = NFSX_V2FH;
+ }
+ t = 0;
+ if (fhlen != 0) {
+ buf = nfsm_dissect_xx_nonblock(fhlen, md, dpos);
+ if (buf == NULL)
+ return EBADRPC;
+ for (i = 0; i < fhlen; i++)
+ t ^= ((uint64_t)buf[i] << (i & 7) * 8);
+ }
+ *fh = t;
+ return 0;
}
int
diff --git a/sys/nfsserver/nfs_serv.c b/sys/nfsserver/nfs_serv.c
index c1a7d2ae9506..de58421d8dab 100644
--- a/sys/nfsserver/nfs_serv.c
+++ b/sys/nfsserver/nfs_serv.c
@@ -911,6 +911,7 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
uiop->uio_resid = len;
uiop->uio_rw = UIO_READ;
uiop->uio_segflg = UIO_SYSSPACE;
+ uiop->uio_td = NULL;
nh = nfsrv_sequential_heuristic(uiop, vp);
ioflag |= nh->nh_seqcount << IO_SEQSHIFT;
error = VOP_READ(vp, uiop, IO_NODELOCKED | ioflag, cred);
diff --git a/sys/nfsserver/nfs_srvkrpc.c b/sys/nfsserver/nfs_srvkrpc.c
index 85003b7b1be5..8bd045a32789 100644
--- a/sys/nfsserver/nfs_srvkrpc.c
+++ b/sys/nfsserver/nfs_srvkrpc.c
@@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$");
#include "opt_kgssapi.h"
#include <sys/param.h>
-#include <sys/capability.h>
+#include <sys/capsicum.h>
#include <sys/systm.h>
#include <sys/sysproto.h>
#include <sys/kernel.h>
@@ -68,7 +68,8 @@ __FBSDID("$FreeBSD$");
#include <netinet/tcp.h>
#ifdef INET6
#include <net/if.h>
-#include <netinet6/in6_var.h>
+#include <net/if_var.h> /* XXX: for in6_var.h */
+#include <netinet6/in6_var.h> /* XXX: for ip6_sprintf */
#endif
#include <rpc/rpc.h>