diff --git a/cmd/mount_zfs/Makefile.am b/cmd/mount_zfs/Makefile.am index b1d9389..4be1135 100644 --- a/cmd/mount_zfs/Makefile.am +++ b/cmd/mount_zfs/Makefile.am @@ -19,4 +19,5 @@ mount_zfs_LDADD = \ $(top_builddir)/lib/libuutil/libuutil.la \ $(top_builddir)/lib/libzpool/libzpool.la \ $(top_builddir)/lib/libzfs/libzfs.la \ - $(top_builddir)/lib/libzfs_core/libzfs_core.la + $(top_builddir)/lib/libzfs_core/libzfs_core.la \ + $(TIRPC_LIBS) diff --git a/cmd/mount_zfs/mount_zfs.c b/cmd/mount_zfs/mount_zfs.c index e3e8cfc..91efda6 100644 --- a/cmd/mount_zfs/mount_zfs.c +++ b/cmd/mount_zfs/mount_zfs.c @@ -32,6 +32,7 @@ #include #include #include +#include #define ZS_COMMENT 0x00000000 /* comment */ #define ZS_ZFSUTIL 0x00000001 /* caller is zfs(8) */ diff --git a/cmd/zdb/Makefile.am b/cmd/zdb/Makefile.am index bc47cff..b8200da 100644 --- a/cmd/zdb/Makefile.am +++ b/cmd/zdb/Makefile.am @@ -17,4 +17,4 @@ zdb_LDADD = \ $(top_builddir)/lib/libzfs/libzfs.la \ $(top_builddir)/lib/libzfs_core/libzfs_core.la -zdb_LDADD += $(ZLIB) +zdb_LDADD += $(ZLIB) $(TIRPC_LIBS) diff --git a/cmd/zed/Makefile.am b/cmd/zed/Makefile.am index 70e4f7f..ce16ceb 100644 --- a/cmd/zed/Makefile.am +++ b/cmd/zed/Makefile.am @@ -30,7 +30,8 @@ zed_LDADD = \ $(top_builddir)/lib/libspl/libspl.la \ $(top_builddir)/lib/libzpool/libzpool.la \ $(top_builddir)/lib/libzfs/libzfs.la \ - $(top_builddir)/lib/libzfs_core/libzfs_core.la + $(top_builddir)/lib/libzfs_core/libzfs_core.la \ + $(TIRPC_LIBS) zedconfdir = $(sysconfdir)/zfs/zed.d diff --git a/cmd/zfs/Makefile.am b/cmd/zfs/Makefile.am index 3cac73d..2554011 100644 --- a/cmd/zfs/Makefile.am +++ b/cmd/zfs/Makefile.am @@ -19,5 +19,5 @@ zfs_LDADD = \ $(top_builddir)/lib/libzfs/libzfs.la \ $(top_builddir)/lib/libzfs_core/libzfs_core.la -zfs_LDADD += $(ZLIB) +zfs_LDADD += $(ZLIB) $(TIRPC_LIBS) zfs_LDFLAGS = -pthread diff --git a/cmd/zhack/Makefile.am b/cmd/zhack/Makefile.am index 53e3241..07b5fab 100644 --- a/cmd/zhack/Makefile.am +++ b/cmd/zhack/Makefile.am @@ -16,4 +16,4 @@ zhack_LDADD = \ $(top_builddir)/lib/libzfs/libzfs.la \ $(top_builddir)/lib/libzfs_core/libzfs_core.la -zhack_LDADD += $(ZLIB) +zhack_LDADD += $(ZLIB) $(TIRPC_LIBS) diff --git a/cmd/zinject/Makefile.am b/cmd/zinject/Makefile.am index 2500bee..2d069d3 100644 --- a/cmd/zinject/Makefile.am +++ b/cmd/zinject/Makefile.am @@ -16,4 +16,5 @@ zinject_LDADD = \ $(top_builddir)/lib/libuutil/libuutil.la \ $(top_builddir)/lib/libzpool/libzpool.la \ $(top_builddir)/lib/libzfs/libzfs.la \ - $(top_builddir)/lib/libzfs_core/libzfs_core.la + $(top_builddir)/lib/libzfs_core/libzfs_core.la \ + $(TIRPC_LIBS) diff --git a/cmd/zpool/Makefile.am b/cmd/zpool/Makefile.am index c11951b..a59bf32 100644 --- a/cmd/zpool/Makefile.am +++ b/cmd/zpool/Makefile.am @@ -19,4 +19,4 @@ zpool_LDADD = \ $(top_builddir)/lib/libzpool/libzpool.la \ $(top_builddir)/lib/libzfs/libzfs.la \ $(top_builddir)/lib/libzfs_core/libzfs_core.la \ - $(LIBBLKID) + $(LIBBLKID) $(TIRPC_LIBS) diff --git a/cmd/zstreamdump/Makefile.am b/cmd/zstreamdump/Makefile.am index 654863a..f800a8e 100644 --- a/cmd/zstreamdump/Makefile.am +++ b/cmd/zstreamdump/Makefile.am @@ -16,4 +16,4 @@ zstreamdump_LDADD = \ $(top_builddir)/lib/libzfs/libzfs.la \ $(top_builddir)/lib/libzfs_core/libzfs_core.la -zstreamdump_LDADD += $(ZLIB) +zstreamdump_LDADD += $(ZLIB) $(TIRPC_LIBS) diff --git a/cmd/ztest/Makefile.am b/cmd/ztest/Makefile.am index ef4d99f..3c1ae75 100644 --- a/cmd/ztest/Makefile.am +++ b/cmd/ztest/Makefile.am @@ -18,4 +18,4 @@ ztest_LDADD = \ $(top_builddir)/lib/libzfs/libzfs.la \ $(top_builddir)/lib/libzfs_core/libzfs_core.la -ztest_LDADD += -lm -ldl +ztest_LDADD += -lm -ldl $(TIRPC_LIBS) diff --git a/cmd/ztest/ztest.c b/cmd/ztest/ztest.c index afe6faa..40524ed 100644 --- a/cmd/ztest/ztest.c +++ b/cmd/ztest/ztest.c @@ -123,7 +123,7 @@ #include #include #include -#ifdef __GNUC__ +#ifdef __GLIBC__ #include /* for backtrace() */ #endif @@ -490,7 +490,7 @@ _umem_logging_init(void) static void sig_handler(int signo) { struct sigaction action; -#ifdef __GNUC__ /* backtrace() is a GNU extension */ +#ifdef __GLIBC__ /* backtrace() is a GNU extension */ int nptrs; void *buffer[BACKTRACE_SZ]; diff --git a/config/tirpc.m4 b/config/tirpc.m4 new file mode 100644 index 0000000..ec15785 --- /dev/null +++ b/config/tirpc.m4 @@ -0,0 +1,17 @@ +dnl +dnl musl support +dnl + +AC_DEFUN([ZFS_AC_CONFIG_USER_TIRPC], [ +AH_TEMPLATE([WITH_TIRPC], + [Define to 1 if libtirpc is being used as the RPC library]) +AC_ARG_WITH(tirpc, +AC_HELP_STRING([--with-tirpc], [compile with libtirpc]), +[if test x$withval = xyes; then + AC_DEFINE([WITH_TIRPC], 1, [Define if you have musl]) + PKG_CHECK_MODULES([TIRPC],[libtirpc]) + AC_DEFINE([WITH_TIRPC], 1, [Define if you have libtirpc]) + AC_SUBST(TIRPC_CFLAGS) + AC_SUBST(TIRPC_LIBS) +fi]) +]) diff --git a/config/user.m4 b/config/user.m4 index 7f79420..820b8d3 100644 --- a/config/user.m4 +++ b/config/user.m4 @@ -13,6 +13,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [ ZFS_AC_CONFIG_USER_LIBBLKID ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN ZFS_AC_CONFIG_USER_RUNSTATEDIR + ZFS_AC_CONFIG_USER_TIRPC dnl # dnl # Checks for library functions AC_CHECK_FUNCS([mlockall]) diff --git a/config/zfs-build.m4 b/config/zfs-build.m4 index f93c5b5..ebcb1c2 100644 --- a/config/zfs-build.m4 +++ b/config/zfs-build.m4 @@ -266,6 +266,8 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ VENDOR=ubuntu ; elif test -f /etc/debian_version ; then VENDOR=debian ; + elif test -f /etc/alpine-release ; then + VENDOR=alpine ; else VENDOR= ; fi @@ -278,6 +280,7 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ redhat) DEFAULT_PACKAGE=rpm ;; fedora) DEFAULT_PACKAGE=rpm ;; gentoo) DEFAULT_PACKAGE=tgz ;; + alpine) DEFAULT_PACKAGE=tgz ;; arch) DEFAULT_PACKAGE=tgz ;; sles) DEFAULT_PACKAGE=rpm ;; slackware) DEFAULT_PACKAGE=tgz ;; @@ -299,7 +302,8 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ toss) DEFAULT_INIT_SCRIPT=redhat ;; redhat) DEFAULT_INIT_SCRIPT=redhat ;; fedora) DEFAULT_INIT_SCRIPT=fedora ;; - gentoo) DEFAULT_INIT_SCRIPT=gentoo ;; + alpine) DEFAULT_INIT_SCRIPT=openrc ;; + gentoo) DEFAULT_INIT_SCRIPT=openrc ;; arch) DEFAULT_INIT_SCRIPT=lsb ;; sles) DEFAULT_INIT_SCRIPT=lsb ;; slackware) DEFAULT_INIT_SCRIPT=lsb ;; @@ -313,6 +317,7 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ AC_MSG_CHECKING([default init config direectory]) case "$VENDOR" in + alpine) DEFAULT_INITCONF_DIR=/etc/conf.d ;; gentoo) DEFAULT_INITCONF_DIR=/etc/conf.d ;; toss) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; redhat) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; diff --git a/etc/init.d/Makefile.am b/etc/init.d/Makefile.am index 5f70fc6..c6e29d1 100644 --- a/etc/init.d/Makefile.am +++ b/etc/init.d/Makefile.am @@ -21,7 +21,7 @@ $(init_SCRIPTS) $(initconf_SCRIPTS) $(initcommon_SCRIPTS): $(EXTRA_DIST) else \ NFS_SRV=nfs; \ fi; \ - if [ -e /etc/gentoo-release ]; then \ + if [ -e /sbin/openrc-run ]; then \ SHELL=/sbin/runscript; \ else \ SHELL=/bin/sh; \ diff --git a/etc/init.d/zfs-import.in b/etc/init.d/zfs-import.in index a3d6c14..7f65797 100755 --- a/etc/init.d/zfs-import.in +++ b/etc/init.d/zfs-import.in @@ -334,7 +334,7 @@ do_stop() # ---------------------------------------------------- -if [ ! -e /etc/gentoo-release ] +if [ ! -e /sbin/openrc-run ] then case "$1" in start) diff --git a/etc/init.d/zfs-mount.in b/etc/init.d/zfs-mount.in index 95aefd6..08b6146 100755 --- a/etc/init.d/zfs-mount.in +++ b/etc/init.d/zfs-mount.in @@ -207,7 +207,7 @@ do_stop() # ---------------------------------------------------- -if [ ! -e /etc/gentoo-release ] +if [ ! -e /sbin/openrc-run ] then case "$1" in start) diff --git a/etc/init.d/zfs-share.in b/etc/init.d/zfs-share.in index 2b66afe..f88fbba 100755 --- a/etc/init.d/zfs-share.in +++ b/etc/init.d/zfs-share.in @@ -66,7 +66,7 @@ do_stop() # ---------------------------------------------------- -if [ ! -e /etc/gentoo-release ]; then +if [ ! -e /sbin/openrc-run ]; then case "$1" in start) do_start diff --git a/etc/init.d/zfs-zed.in b/etc/init.d/zfs-zed.in index 0f900b2..2863491 100755 --- a/etc/init.d/zfs-zed.in +++ b/etc/init.d/zfs-zed.in @@ -96,7 +96,7 @@ do_reload() # ---------------------------------------------------- -if [ ! -e /etc/gentoo-release ]; then +if [ ! -e /sbin/openrc-run ]; then case "$1" in start) do_start diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h index 4f7e328..78e33e1 100644 --- a/include/sys/zfs_context.h +++ b/include/sys/zfs_context.h @@ -623,7 +623,7 @@ extern void delay(clock_t ticks); #define maxclsyspri -20 #define defclsyspri 0 -#define CPU_SEQID (pthread_self() & (max_ncpus - 1)) +#define CPU_SEQID ((uintptr_t)pthread_self() & (max_ncpus - 1)) #define kcred NULL #define CRED() NULL diff --git a/lib/libnvpair/Makefile.am b/lib/libnvpair/Makefile.am index c9ac1f1..985285a 100644 --- a/lib/libnvpair/Makefile.am +++ b/lib/libnvpair/Makefile.am @@ -4,7 +4,7 @@ VPATH = \ $(top_srcdir)/module/nvpair \ $(top_srcdir)/lib/libnvpair -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(TIRPC_CFLAGS) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libspl/Makefile.am b/lib/libspl/Makefile.am index a569446..9cedfaa 100644 --- a/lib/libspl/Makefile.am +++ b/lib/libspl/Makefile.am @@ -4,13 +4,13 @@ VPATH = \ $(top_srcdir)/lib/libspl \ $(top_srcdir)/lib/libspl/$(TARGET_ASM_DIR) -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(TIRPC_CFLAGS) SUBDIRS = include $(TARGET_ASM_DIR) DIST_SUBDIRS = include asm-generic asm-i386 asm-x86_64 DEFAULT_INCLUDES += \ - -I$(top_srcdir)/lib/libspl/include + -I$(top_srcdir)/lib/libspl/include $(TIRPC_CFLAGS) AM_CCASFLAGS = \ -I$(top_srcdir)/lib/libspl/include @@ -42,6 +42,6 @@ nodist_libspl_la_SOURCES = \ $(USER_ASM) \ $(KERNEL_C) -libspl_la_LIBADD = -lrt +libspl_la_LIBADD = -lrt $(TIRPC_LDFLAGS) EXTRA_DIST = $(USER_C) diff --git a/lib/libspl/include/assert.h b/lib/libspl/include/assert.h index 52924e8..63ca9dd 100644 --- a/lib/libspl/include/assert.h +++ b/lib/libspl/include/assert.h @@ -42,6 +42,17 @@ __assert_c99(const char *expr, const char *file, int line, const char *func) } #endif /* __assert_c99 */ +#ifndef __assert +static inline void +__assert(const char *expr, const char *file, int line) +{ + fprintf(stderr, "%s:%i: %s: Assertion failed.\n", file, line, expr); + abort(); +} +#else +extern void __assert(const char *, const char *, int); +#endif + #ifndef verify #if defined(__STDC__) #if __STDC_VERSION__ - 0 >= 199901L @@ -61,8 +72,6 @@ __assert_c99(const char *expr, const char *file, int line, const char *func) #define VERIFY verify #define ASSERT assert -extern void __assert(const char *, const char *, int); - static inline int assfail(const char *buf, const char *file, int line) { diff --git a/lib/libspl/include/devid.h b/lib/libspl/include/devid.h index 5406c33..4b346da 100644 --- a/lib/libspl/include/devid.h +++ b/lib/libspl/include/devid.h @@ -27,6 +27,7 @@ #ifndef _LIBSPL_DEVID_H #define _LIBSPL_DEVID_H +#include #include typedef int ddi_devid_t; diff --git a/lib/libspl/include/rpc/xdr.h b/lib/libspl/include/rpc/xdr.h index 99500d6..cd2d17a 100644 --- a/lib/libspl/include/rpc/xdr.h +++ b/lib/libspl/include/rpc/xdr.h @@ -60,6 +60,8 @@ typedef struct xdr_bytesrec { #define XDR_RDMAGET 4 #define XDR_RDMASET 5 +#ifndef WITH_TIRPC extern bool_t xdr_control(XDR *xdrs, int request, void *info); +#endif #endif diff --git a/lib/libspl/include/sys/time.h b/lib/libspl/include/sys/time.h index f0da440..aa96c39 100644 --- a/lib/libspl/include/sys/time.h +++ b/lib/libspl/include/sys/time.h @@ -58,6 +58,11 @@ #define NSEC2MSEC(n) ((n) / (NANOSEC / MILLISEC)) #endif +#ifndef HAVE_HR_TYPES +typedef long long longlong_t; +typedef longlong_t hrtime_t; +typedef struct timespec timestruc_t; +#endif extern hrtime_t gethrtime(void); extern void gethrestime(timestruc_t *); diff --git a/lib/libspl/timestamp.c b/lib/libspl/timestamp.c index a4f4cf4..a177270 100644 --- a/lib/libspl/timestamp.c +++ b/lib/libspl/timestamp.c @@ -28,6 +28,10 @@ #include #include "statcommon.h" +#ifndef _DATE_FMT +#define _DATE_FMT D_FMT +#endif + /* * Print timestamp as decimal reprentation of time_t value (-T u was specified) * or in date(1) format (-T d was specified). diff --git a/lib/libspl/xdr.c b/lib/libspl/xdr.c index 288a338..f122496 100644 --- a/lib/libspl/xdr.c +++ b/lib/libspl/xdr.c @@ -29,6 +29,7 @@ * under license from the Regents of the University of California. */ +#ifndef WITH_TIRPC #include /* @@ -76,3 +77,4 @@ xdr_control(XDR *xdrs, int request, void *info) } return (FALSE); } +#endif diff --git a/module/nvpair/nvpair.c b/module/nvpair/nvpair.c index 1eca0fe..efd6287 100644 --- a/module/nvpair/nvpair.c +++ b/module/nvpair/nvpair.c @@ -3251,8 +3251,12 @@ nvs_xdr_nvpair(nvstream_t *nvs, nvpair_t *nvp, size_t *size) return (0); /* sanity check the size parameter */ +#ifndef WITH_TIRPC if (!xdr_control(xdr, XDR_GET_BYTES_AVAIL, &bytesrec)) return (EFAULT); +#else + xdr_control(xdr, XDR_GET_BYTES_AVAIL, &bytesrec); +#endif if (*size > NVS_XDR_MAX_LEN(bytesrec.xc_num_avail)) return (EFAULT);