From 3f38797338f2e4b16e8e0065e21f1bca6ef59784 Mon Sep 17 00:00:00 2001
From: Matthew Ahrens <mahrens@delphix.com>
Date: Fri, 27 Mar 2020 09:11:22 -0700
Subject: [PATCH] Compile cityhash code into libzfs

Make the cityhash code compile into libzfs, in preparation for the new
"zstream" command.

Reviewed-by: Paul Dagnelie <pcd@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #10152
---
 include/Makefile.am                | 1 +
 include/{sys => }/cityhash.h       | 0
 include/sys/Makefile.am            | 1 -
 lib/libzfs/Makefile.am             | 1 +
 module/zcommon/Makefile.in         | 1 +
 module/{zfs => zcommon}/cityhash.c | 6 +++++-
 module/zfs/Makefile.in             | 1 -
 module/zfs/arc.c                   | 2 +-
 module/zfs/dbuf.c                  | 2 +-
 module/zfs/zio.c                   | 2 +-
 10 files changed, 11 insertions(+), 6 deletions(-)
 rename include/{sys => }/cityhash.h (100%)
 rename module/{zfs => zcommon}/cityhash.c (96%)

diff --git a/include/Makefile.am b/include/Makefile.am
index 5b37dc765d..9591d44239 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,6 +1,7 @@
 SUBDIRS = sys os
 
 COMMON_H = \
+	$(top_srcdir)/include/cityhash.h \
 	$(top_srcdir)/include/zfeature_common.h \
 	$(top_srcdir)/include/zfs_comutil.h \
 	$(top_srcdir)/include/zfs_deleg.h \
diff --git a/include/sys/cityhash.h b/include/cityhash.h
similarity index 100%
rename from include/sys/cityhash.h
rename to include/cityhash.h
diff --git a/include/sys/Makefile.am b/include/sys/Makefile.am
index bcfa12fca4..82165170a3 100644
--- a/include/sys/Makefile.am
+++ b/include/sys/Makefile.am
@@ -14,7 +14,6 @@ COMMON_H = \
 	$(top_srcdir)/include/sys/bptree.h \
 	$(top_srcdir)/include/sys/btree.h \
 	$(top_srcdir)/include/sys/bqueue.h \
-	$(top_srcdir)/include/sys/cityhash.h \
 	$(top_srcdir)/include/sys/dataset_kstats.h \
 	$(top_srcdir)/include/sys/dbuf.h \
 	$(top_srcdir)/include/sys/ddt.h \
diff --git a/lib/libzfs/Makefile.am b/lib/libzfs/Makefile.am
index da42307bb6..2747a7e9b3 100644
--- a/lib/libzfs/Makefile.am
+++ b/lib/libzfs/Makefile.am
@@ -38,6 +38,7 @@ endif
 
 KERNEL_C = \
 	algs/sha2/sha2.c \
+	cityhash.c \
 	zfeature_common.c \
 	zfs_comutil.c \
 	zfs_deleg.c \
diff --git a/module/zcommon/Makefile.in b/module/zcommon/Makefile.in
index b2e34f2e93..01e0692ebd 100644
--- a/module/zcommon/Makefile.in
+++ b/module/zcommon/Makefile.in
@@ -11,6 +11,7 @@ ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
 # Suppress unused-value warnings in sparc64 architecture headers
 ccflags-$(CONFIG_SPARC64) += -Wno-unused-value
 
+$(MODULE)-objs += cityhash.o
 $(MODULE)-objs += zfeature_common.o
 $(MODULE)-objs += zfs_comutil.o
 $(MODULE)-objs += zfs_deleg.o
diff --git a/module/zfs/cityhash.c b/module/zcommon/cityhash.c
similarity index 96%
rename from module/zfs/cityhash.c
rename to module/zcommon/cityhash.c
index 2b62edad03..413a96df2c 100644
--- a/module/zfs/cityhash.c
+++ b/module/zcommon/cityhash.c
@@ -22,7 +22,7 @@
  * Copyright (c) 2017 by Delphix. All rights reserved.
  */
 
-#include <sys/cityhash.h>
+#include <cityhash.h>
 
 #define	HASH_K1 0xb492b66fbe98f273ULL
 #define	HASH_K2 0x9ae16a3b2f90404fULL
@@ -61,3 +61,7 @@ cityhash4(uint64_t w1, uint64_t w2, uint64_t w3, uint64_t w4)
 	    a + rotate(b + HASH_K2, 18) + c, mul));
 
 }
+
+#if defined(_KERNEL)
+EXPORT_SYMBOL(cityhash4);
+#endif
diff --git a/module/zfs/Makefile.in b/module/zfs/Makefile.in
index 1ba7db27b9..6737336cae 100644
--- a/module/zfs/Makefile.in
+++ b/module/zfs/Makefile.in
@@ -22,7 +22,6 @@ $(MODULE)-objs += bpobj.o
 $(MODULE)-objs += bptree.o
 $(MODULE)-objs += btree.o
 $(MODULE)-objs += bqueue.o
-$(MODULE)-objs += cityhash.o
 $(MODULE)-objs += dataset_kstats.o
 $(MODULE)-objs += dbuf.o
 $(MODULE)-objs += dbuf_stats.o
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index 6c9164f76b..c6b194183f 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -299,7 +299,7 @@
 #include <sys/arc_impl.h>
 #include <sys/trace_zfs.h>
 #include <sys/aggsum.h>
-#include <sys/cityhash.h>
+#include <cityhash.h>
 
 #ifndef _KERNEL
 /* set with ZFS_DEBUG=watch, to enable watchpoints on frozen buffers */
diff --git a/module/zfs/dbuf.c b/module/zfs/dbuf.c
index d7f5e1ee32..be6a76830a 100644
--- a/module/zfs/dbuf.c
+++ b/module/zfs/dbuf.c
@@ -48,7 +48,7 @@
 #include <sys/callb.h>
 #include <sys/abd.h>
 #include <sys/vdev.h>
-#include <sys/cityhash.h>
+#include <cityhash.h>
 #include <sys/spa_impl.h>
 
 kstat_t *dbuf_ksp;
diff --git a/module/zfs/zio.c b/module/zfs/zio.c
index de2e8e7672..b9a3ddcf23 100644
--- a/module/zfs/zio.c
+++ b/module/zfs/zio.c
@@ -47,7 +47,7 @@
 #include <sys/trace_zfs.h>
 #include <sys/abd.h>
 #include <sys/dsl_crypt.h>
-#include <sys/cityhash.h>
+#include <cityhash.h>
 
 /*
  * ==========================================================================