Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c =================================================================== --- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c +++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c @@ -7333,6 +7333,6 @@ DECLARE_MODULE(zfsctrl, zfs_mod, SI_SUB_VFS, SI_ORDER_ANY); MODULE_VERSION(zfsctrl, 1); MODULE_DEPEND(zfsctrl, opensolaris, 1, 1, 1); -MODULE_DEPEND(zfsctrl, krpc, 1, 1, 1); +MODULE_DEPEND(zfsctrl, xdr, 1, 1, 1); MODULE_DEPEND(zfsctrl, acl_nfs4, 1, 1, 1); MODULE_DEPEND(zfsctrl, zlib, 1, 1, 1); Index: sys/conf/files =================================================================== --- sys/conf/files +++ sys/conf/files @@ -4983,9 +4983,9 @@ xen/xenbus/xenbusb_front.c optional xenhvm xen/xenbus/xenbusb_back.c optional xenhvm xen/xenmem/xenmem_if.m optional xenhvm -xdr/xdr.c optional krpc | nfslockd | nfscl | nfsd -xdr/xdr_array.c optional krpc | nfslockd | nfscl | nfsd -xdr/xdr_mbuf.c optional krpc | nfslockd | nfscl | nfsd -xdr/xdr_mem.c optional krpc | nfslockd | nfscl | nfsd -xdr/xdr_reference.c optional krpc | nfslockd | nfscl | nfsd -xdr/xdr_sizeof.c optional krpc | nfslockd | nfscl | nfsd +xdr/xdr.c optional xdr | nfslockd | nfscl | nfsd +xdr/xdr_array.c optional xdr | nfslockd | nfscl | nfsd +xdr/xdr_mbuf.c optional xdr | nfslockd | nfscl | nfsd +xdr/xdr_mem.c optional xdr | nfslockd | nfscl | nfsd +xdr/xdr_reference.c optional xdr | nfslockd | nfscl | nfsd +xdr/xdr_sizeof.c optional xdr | nfslockd | nfscl | nfsd Index: sys/conf/options =================================================================== --- sys/conf/options +++ sys/conf/options @@ -469,6 +469,7 @@ TCP_RFC7413_MAX_PSKS opt_inet.h TCP_SIGNATURE opt_ipsec.h VLAN_ARRAY opt_vlan.h +XDR XBONEHACK # Index: sys/modules/Makefile =================================================================== --- sys/modules/Makefile +++ sys/modules/Makefile @@ -385,6 +385,7 @@ ${_wpi} \ ${_wpifw} \ ${_x86bios} \ + xdr \ xl \ xz \ zlib Index: sys/modules/krpc/Makefile =================================================================== --- sys/modules/krpc/Makefile +++ sys/modules/krpc/Makefile @@ -1,6 +1,6 @@ # $FreeBSD$ -.PATH: ${SRCTOP}/sys/rpc ${SRCTOP}/sys/xdr +.PATH: ${SRCTOP}/sys/rpc KMOD= krpc SRCS= auth_none.c \ auth_unix.c \ @@ -23,13 +23,6 @@ svc_generic.c \ svc_vc.c \ -SRCS+= xdr.c \ - xdr_array.c \ - xdr_mbuf.c \ - xdr_mem.c \ - xdr_reference.c \ - xdr_sizeof.c - SRCS+= opt_inet6.h .include Index: sys/modules/xdr/Makefile =================================================================== --- /dev/null +++ sys/modules/xdr/Makefile @@ -0,0 +1,12 @@ +# $FreeBSD$ + +.PATH: ${SRCTOP}/sys/xdr +KMOD= xdr +SRCS= xdr.c \ + xdr_array.c \ + xdr_mbuf.c \ + xdr_mem.c \ + xdr_reference.c \ + xdr_sizeof.c + +.include Index: sys/rpc/rpc_generic.c =================================================================== --- sys/rpc/rpc_generic.c +++ sys/rpc/rpc_generic.c @@ -882,3 +882,4 @@ /* So that loader and kldload(2) can find us, wherever we are.. */ MODULE_VERSION(krpc, 1); +MODULE_DEPEND(krpc, xdr, 1, 1, 1); Index: sys/xdr/xdr.c =================================================================== --- sys/xdr/xdr.c +++ sys/xdr/xdr.c @@ -50,6 +50,7 @@ #include #include #include +#include #include #include @@ -65,6 +66,8 @@ #define XDR_FALSE ((long) 0) #define XDR_TRUE ((long) 1) +MALLOC_DEFINE(M_XDR, "xdr", "eXternal Data Representation"); + /* * for unit alignment */ @@ -527,7 +530,7 @@ return (TRUE); } if (sp == NULL) { - *cpp = sp = mem_alloc(nodesize); + *cpp = sp = malloc(nodesize, M_XDR, M_WAITOK | M_ZERO); allocated = TRUE; } if (sp == NULL) { @@ -540,7 +543,7 @@ ret = xdr_opaque(xdrs, sp, nodesize); if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) { if (allocated == TRUE) { - mem_free(sp, nodesize); + free(sp, M_XDR); *cpp = NULL; } } @@ -548,7 +551,7 @@ case XDR_FREE: if (sp != NULL) { - mem_free(sp, nodesize); + free(sp, M_XDR); *cpp = NULL; } return (TRUE); @@ -667,7 +670,7 @@ return (TRUE); } if (sp == NULL) { - *cpp = sp = mem_alloc(nodesize); + *cpp = sp = malloc(nodesize, M_XDR, M_WAITOK | M_ZERO); allocated = TRUE; } if (sp == NULL) { @@ -681,14 +684,14 @@ ret = xdr_opaque(xdrs, sp, size); if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) { if (allocated == TRUE) { - mem_free(sp, nodesize); + free(sp, M_XDR); *cpp = NULL; } } return (ret); case XDR_FREE: - mem_free(sp, nodesize); + free(sp, M_XDR); *cpp = NULL; return (TRUE); } @@ -834,3 +837,20 @@ */ return (xdr_uint64_t(xdrs, (uint64_t *)ullp)); } + +/* + * Kernel module glue + */ +static int +xdr_modevent(module_t mod, int type, void *data) +{ + + return (0); +} +static moduledata_t xdr_mod = { + "xdr", + xdr_modevent, + NULL, +}; +DECLARE_MODULE(xdr, xdr_mod, SI_SUB_VFS, SI_ORDER_ANY); +MODULE_VERSION(xdr, 1); Index: sys/xdr/xdr_array.c =================================================================== --- sys/xdr/xdr_array.c +++ sys/xdr/xdr_array.c @@ -53,6 +53,8 @@ #include #include +MALLOC_DECLARE(M_XDR); + /* * XDR an array of arbitrary elements * *addrp is a pointer to the array, *sizep is the number of elements. @@ -94,7 +96,8 @@ case XDR_DECODE: if (c == 0) return (TRUE); - *addrp = target = mem_alloc(nodesize); + *addrp = target = malloc(nodesize, M_XDR, + M_WAITOK | M_ZERO); if (target == NULL) { printf("xdr_array: out of memory"); return (FALSE); @@ -121,7 +124,7 @@ * the array may need freeing */ if (xdrs->x_op == XDR_FREE) { - mem_free(*addrp, nodesize); + free(*addrp, M_XDR); *addrp = NULL; } return (stat); Index: sys/xdr/xdr_reference.c =================================================================== --- sys/xdr/xdr_reference.c +++ sys/xdr/xdr_reference.c @@ -52,6 +52,8 @@ #include #include +MALLOC_DECLARE(M_XDR); + /* * XDR an indirect pointer * xdr_reference is for recursively translating a structure that is @@ -76,7 +78,7 @@ return (TRUE); case XDR_DECODE: - *pp = loc = (caddr_t) mem_alloc(size); + *pp = loc = malloc(size, M_XDR, M_WAITOK | M_ZERO); if (loc == NULL) { printf("xdr_reference: out of memory"); return (FALSE); @@ -91,7 +93,7 @@ stat = (*proc)(xdrs, loc); if (xdrs->x_op == XDR_FREE) { - mem_free(loc, size); + free(loc, M_XDR); *pp = NULL; } return (stat); Index: sys/xdr/xdr_sizeof.c =================================================================== --- sys/xdr/xdr_sizeof.c +++ sys/xdr/xdr_sizeof.c @@ -45,6 +45,8 @@ #include #include +MALLOC_DECLARE(M_XDR); + /* ARGSUSED */ static bool_t x_putlong(XDR *xdrs, const long *longp) @@ -96,8 +98,8 @@ } else { /* Free the earlier space and allocate new area */ if (xdrs->x_private) - free(xdrs->x_private, M_RPC); - if ((xdrs->x_private = (caddr_t) malloc(len, M_RPC, M_WAITOK)) == NULL) { + free(xdrs->x_private, M_XDR); + if ((xdrs->x_private = malloc(len, M_XDR, M_WAITOK)) == NULL) { xdrs->x_base = 0; return (NULL); } @@ -122,7 +124,7 @@ xdrs->x_handy = 0; xdrs->x_base = 0; if (xdrs->x_private) { - free(xdrs->x_private, M_RPC); + free(xdrs->x_private, M_XDR); xdrs->x_private = NULL; } return; @@ -157,6 +159,6 @@ stat = func(&x, data); if (x.x_private) - free(x.x_private, M_RPC); + free(x.x_private, M_XDR); return (stat == TRUE ? (unsigned) x.x_handy: 0); }