summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/rpc
diff options
context:
space:
mode:
authorMarcel Telka <marcel.telka@nexenta.com>2016-03-12 09:16:41 +0100
committerDan McDonald <danmcd@omniti.com>2016-03-21 13:20:11 -0400
commit5dde82e7956bd330e7bee953344937998249feb2 (patch)
treedb5962eb25ff2e754c9ef902da28103a2bdeab0c /usr/src/uts/common/rpc
parentf4525cdb366a3fb21a12f42bedd55ecca098e7c4 (diff)
downloadillumos-joyent-5dde82e7956bd330e7bee953344937998249feb2.tar.gz
6747 xdr_READDIR4res() bypass the XDR mblk API
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com> Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com> Approved by: Dan McDonald <danmcd@omniti.com>
Diffstat (limited to 'usr/src/uts/common/rpc')
-rw-r--r--usr/src/uts/common/rpc/xdr.h11
-rw-r--r--usr/src/uts/common/rpc/xdr_mblk.c19
2 files changed, 23 insertions, 7 deletions
diff --git a/usr/src/uts/common/rpc/xdr.h b/usr/src/uts/common/rpc/xdr.h
index ebdd448d48..e895cbeb56 100644
--- a/usr/src/uts/common/rpc/xdr.h
+++ b/usr/src/uts/common/rpc/xdr.h
@@ -17,11 +17,15 @@
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
- *
+ */
+
+/*
+ * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
+ */
+
+/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
- *
- * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
*/
/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
@@ -592,6 +596,7 @@ extern void xdrmem_create(XDR *, caddr_t, uint_t, enum xdr_op);
extern void xdrmblk_init(XDR *, mblk_t *, enum xdr_op, int);
extern bool_t xdrmblk_getmblk(XDR *, mblk_t **, uint_t *);
extern bool_t xdrmblk_putmblk(XDR *, mblk_t *, uint_t);
+extern bool_t xdrmblk_putmblk_raw(XDR *, mblk_t *);
extern struct xdr_ops xdrmblk_ops;
extern struct xdr_ops xdrrdmablk_ops;
extern struct xdr_ops xdrrdma_ops;
diff --git a/usr/src/uts/common/rpc/xdr_mblk.c b/usr/src/uts/common/rpc/xdr_mblk.c
index ac9b1f15ee..8934778d94 100644
--- a/usr/src/uts/common/rpc/xdr_mblk.c
+++ b/usr/src/uts/common/rpc/xdr_mblk.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
*/
/*
@@ -441,14 +441,25 @@ xdrmblk_putbytes(XDR *xdrs, caddr_t addr, int len)
bool_t
xdrmblk_putmblk(XDR *xdrs, mblk_t *m, uint_t len)
{
- struct xdrmblk_params *p;
int32_t llen = (int32_t)len;
- if ((DLEN(m) % BYTES_PER_XDR_UNIT) != 0)
- return (FALSE);
if (!xdrmblk_putint32(xdrs, &llen))
return (FALSE);
+ return (xdrmblk_putmblk_raw(xdrs, m));
+}
+
+/*
+ * The raw version of putmblk does not prepend the added data with the length.
+ */
+bool_t
+xdrmblk_putmblk_raw(XDR *xdrs, mblk_t *m)
+{
+ struct xdrmblk_params *p;
+
+ if ((DLEN(m) % BYTES_PER_XDR_UNIT) != 0)
+ return (FALSE);
+
p = (struct xdrmblk_params *)xdrs->x_private;
/* LINTED pointer alignment */