summaryrefslogtreecommitdiffstats
path: root/sys/fs/nfsserver/nfs_fha_new.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs/nfsserver/nfs_fha_new.c')
-rw-r--r--sys/fs/nfsserver/nfs_fha_new.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/sys/fs/nfsserver/nfs_fha_new.c b/sys/fs/nfsserver/nfs_fha_new.c
index c05ad28..2e7115f 100644
--- a/sys/fs/nfsserver/nfs_fha_new.c
+++ b/sys/fs/nfsserver/nfs_fha_new.c
@@ -41,7 +41,7 @@ static void fhanew_init(void *foo);
static void fhanew_uninit(void *foo);
rpcproc_t fhanew_get_procnum(rpcproc_t procnum);
int fhanew_realign(struct mbuf **mb, int malloc_flags);
-int fhanew_get_fh(fhandle_t *fh, int v3, struct mbuf **md, caddr_t *dpos);
+int fhanew_get_fh(uint64_t *fh, int v3, struct mbuf **md, caddr_t *dpos);
int fhanew_is_read(rpcproc_t procnum);
int fhanew_is_write(rpcproc_t procnum);
int fhanew_get_offset(struct mbuf **md, caddr_t *dpos, int v3,
@@ -128,11 +128,13 @@ fhanew_realign(struct mbuf **mb, int malloc_flags)
}
int
-fhanew_get_fh(fhandle_t *fh, int v3, struct mbuf **md, caddr_t *dpos)
+fhanew_get_fh(uint64_t *fh, int v3, struct mbuf **md, caddr_t *dpos)
{
struct nfsrv_descript lnd, *nd;
uint32_t *tl;
- int error, len;
+ uint8_t *buf;
+ uint64_t t;
+ int error, len, i;
error = 0;
len = 0;
@@ -151,11 +153,13 @@ fhanew_get_fh(fhandle_t *fh, int v3, struct mbuf **md, caddr_t *dpos)
len = NFSX_V2FH;
}
+ t = 0;
if (len != 0) {
- NFSM_DISSECT_NONBLOCK(tl, uint32_t *, len);
- bcopy(tl, fh, len);
- } else
- bzero(fh, sizeof(*fh));
+ NFSM_DISSECT_NONBLOCK(buf, uint8_t *, len);
+ for (i = 0; i < len; i++)
+ t ^= ((uint64_t)buf[i] << (i & 7) * 8);
+ }
+ *fh = t;
nfsmout:
*md = nd->nd_md;
OpenPOWER on IntegriCloud