From cd73aefa1f78e6f35c8416497a8a2407c224f41c Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 15 Feb 2018 17:53:18 -0800 Subject: [PATCH] Update build system Minimal changes required to integrate the SPL sources in to the ZFS repository build infrastructure. Build system and packaging: * Renamed SPL_* autoconf m4 macros to ZFS_*. * Removed redundant SPL_* autoconf m4 macros. * Updated the RPM spec files to remove SPL package dependency. * The zfs package obsoletes the spl package, and the zfs-kmod package obsoletes the spl-kmod package. * The zfs-kmod-devel* packages were updated to add compatibility symlinks under /usr/src/spl-x.y.z until all dependent packages can be updated. They will be removed in a future release. * Updated copy-builtin script for in-kernel builds. * Updated DKMS package to include the spl.ko. * Updated stale AUTHORS file to include all contributors. * Updated stale COPYRIGHT and included the SPL as an exception. Required code changes: * Removed redundant HAVE_SPL macro. * Removed _BOOT from nvpairs since it doesn't apply for Linux. * Initial header cleanup (removal of empty headers, refactoring). * Remove SPL repository clone/build from zimport.sh. * Use of DEFINE_RATELIMIT_STATE and DEFINE_SPINLOCK removed due to build issues when forcing C99 compilation. * Replaced legacy ACCESS_ONCE with READ_ONCE. * Include needed headers for `current` and `EXPORT_SYMBOL`. Signed-off-by: Brian Behlendorf TEST_ZIMPORT_SKIP="yes" Build-ZFS: yes Build-SPL: no --- AUTHORS | 389 ++++++++++++++---- COPYRIGHT | 44 +- Makefile.am | 20 +- TEST | 4 - cmd/mount_zfs/mount_zfs.c | 1 + cmd/zed/agents/zfs_diagnosis.c | 1 + cmd/zed/agents/zfs_mod.c | 1 + cmd/zfs/zfs_iter.c | 1 + config/kernel-ctl-table-name.m4 | 4 +- config/kernel-fallocate-pax.m4 | 4 +- config/kernel-group-info.m4 | 4 +- config/kernel-inode-lock.m4 | 4 +- config/kernel-kmem-cache.m4 | 10 +- config/kernel-kuidgid.m4 | 14 +- config/kernel-pde-data.m4 | 4 +- config/kernel-rw.m4 | 8 +- config/kernel-rwsem.m4 | 12 +- config/kernel-sched.m4 | 12 +- config/kernel-set-fs-pwd.m4 | 6 +- config/kernel-shrink.m4 | 127 ++++++ config/kernel-shrinker.m4 | 125 ------ config/kernel-spinlock.m4 | 4 +- config/kernel-timer.m4 | 4 +- config/kernel-trim-unused-symbols.m4 | 19 - config/kernel-urange-sleep.m4 | 4 +- config/kernel-vfs-fsync.m4 | 4 +- config/kernel-vfs-getattr.m4 | 12 +- config/kernel-wait.m4 | 12 +- config/kernel-zlib.m4 | 12 +- config/kernel.m4 | 253 +++--------- config/zfs-build.m4 | 62 ++- config/zfs-meta.m4 | 26 +- configure.ac | 6 + copy-builtin | 10 +- include/Makefile.am | 2 +- include/linux/Makefile.am | 3 +- include/linux/blkdev_compat.h | 1 + .../attr.h => include/linux/compiler_compat.h | 16 +- include/spl/Makefile.am | 1 + include/spl/rpc/Makefile.am | 7 + include/spl/sys/Makefile.am | 61 +++ include/spl/sys/debug.h | 2 - .../sys/compress.h => include/spl/sys/errno.h | 25 +- include/spl/sys/mutex.h | 3 +- include/spl/sys/rwlock.h | 1 + include/spl/sys/sysmacros.h | 1 - include/spl/sys/types.h | 4 +- include/spl/sys/vnode.h | 4 +- include/sys/Makefile.am | 1 + include/sys/abd.h | 3 +- include/sys/fm/protocol.h | 1 - {lib/libspl/include => include}/sys/note.h | 2 + include/sys/nvpair.h | 7 +- include/sys/xvattr.h | 1 + include/sys/zfs_context.h | 14 +- include/sys/zfs_delay.h | 2 +- include/sys/zfs_fuid.h | 1 - include/sys/zfs_znode.h | 1 - include/sys/zpl.h | 1 - lib/libefi/rdwr_efi.c | 1 + lib/libnvpair/libnvpair.c | 2 +- lib/libshare/nfs.c | 2 + lib/libshare/smb.c | 1 + lib/libspl/include/Makefile.am | 3 - lib/libspl/include/note.h | 53 --- lib/libspl/include/sys/Makefile.am | 5 +- .../include/sys/{systm.h => stdtypes.h} | 38 +- lib/libspl/include/{ => sys}/strings.h | 6 +- lib/libspl/include/sys/sysmacros.h | 2 + lib/libspl/include/sys/types.h | 27 +- lib/libspl/include/sys/types32.h | 2 - lib/libspl/include/umem.h | 1 + lib/libuutil/uu_dprintf.c | 1 + lib/libzfs/libzfs_diff.c | 3 +- man/man1/zhack.1 | 1 - man/man5/Makefile.am | 7 +- module/Makefile.in | 23 +- module/avl/avl.c | 4 +- module/icp/algs/edonr/edonr.c | 7 +- module/icp/algs/edonr/edonr_byteorder.h | 2 +- module/icp/algs/skein/skein.c | 2 +- module/icp/algs/skein/skein_impl.h | 9 +- module/icp/algs/skein/skein_port.h | 1 - module/icp/api/kcf_cipher.c | 2 +- module/icp/api/kcf_ctxops.c | 2 +- module/icp/api/kcf_digest.c | 2 +- module/icp/api/kcf_mac.c | 2 +- module/icp/api/kcf_miscapi.c | 2 +- module/icp/illumos-crypto.c | 2 +- module/icp/io/edonr_mod.c | 1 - module/icp/io/skein_mod.c | 1 - module/lua/lapi.c | 2 +- module/lua/lauxlib.c | 2 +- module/lua/lbaselib.c | 2 +- module/lua/lcorolib.c | 2 +- module/lua/lstrlib.c | 2 +- module/lua/ltablib.c | 2 +- module/nvpair/fnvpair.c | 2 +- module/nvpair/nvpair.c | 19 +- module/nvpair/nvpair_alloc_fixed.c | 11 +- module/spl/Makefile.in | 28 ++ module/spl/spl-condvar.c | 7 +- module/spl/spl-err.c | 13 +- module/spl/spl-generic.c | 17 +- module/spl/spl-kmem.c | 20 +- module/spl/spl-rwlock.c | 1 + module/spl/spl-taskq.c | 3 +- module/spl/spl-vnode.c | 4 +- module/spl/spl-xdr.c | 2 - module/unicode/u8_textprep.c | 9 +- module/unicode/uconv.c | 3 +- module/zcommon/zfeature_common.c | 6 +- module/zcommon/zfs_comutil.c | 7 +- module/zcommon/zfs_deleg.c | 5 +- module/zcommon/zfs_fletcher.c | 2 +- module/zcommon/zfs_fletcher_aarch64_neon.c | 2 +- module/zcommon/zfs_fletcher_avx512.c | 2 +- module/zcommon/zfs_fletcher_intel.c | 2 +- module/zcommon/zfs_fletcher_sse.c | 2 +- module/zcommon/zfs_fletcher_superscalar.c | 2 +- module/zcommon/zfs_fletcher_superscalar4.c | 2 +- module/zcommon/zfs_namecheck.c | 6 +- module/zcommon/zfs_prop.c | 6 +- module/zcommon/zfs_uio.c | 2 + module/zcommon/zpool_prop.c | 6 +- module/zcommon/zprop_common.c | 7 +- module/zfs/abd.c | 2 +- module/zfs/arc.c | 10 +- module/zfs/dbuf.c | 6 +- module/zfs/dbuf_stats.c | 2 +- module/zfs/ddt.c | 2 +- module/zfs/ddt_zap.c | 1 - module/zfs/dmu.c | 2 +- module/zfs/dmu_object.c | 2 +- module/zfs/dmu_objset.c | 2 +- module/zfs/dmu_traverse.c | 2 +- module/zfs/dmu_tx.c | 3 +- module/zfs/dmu_zfetch.c | 2 +- module/zfs/dsl_dataset.c | 2 +- module/zfs/dsl_deleg.c | 2 +- module/zfs/dsl_destroy.c | 2 +- module/zfs/dsl_dir.c | 2 +- module/zfs/dsl_pool.c | 2 +- module/zfs/dsl_prop.c | 2 +- module/zfs/dsl_scan.c | 2 +- module/zfs/dsl_synctask.c | 2 +- module/zfs/fm.c | 5 - module/zfs/gzip.c | 5 +- module/zfs/metaslab.c | 4 +- module/zfs/mmp.c | 2 +- module/zfs/multilist.c | 2 +- module/zfs/pathname.c | 2 +- module/zfs/sa.c | 1 - module/zfs/spa.c | 10 +- module/zfs/spa_config.c | 2 +- module/zfs/spa_errlog.c | 2 +- module/zfs/spa_history.c | 6 +- module/zfs/spa_misc.c | 2 +- module/zfs/spa_stats.c | 2 +- module/zfs/txg.c | 2 +- module/zfs/vdev.c | 2 +- module/zfs/vdev_cache.c | 2 +- module/zfs/vdev_disk.c | 1 - module/zfs/vdev_indirect.c | 2 +- module/zfs/vdev_indirect_births.c | 2 +- module/zfs/vdev_indirect_mapping.c | 2 +- module/zfs/vdev_mirror.c | 2 +- module/zfs/vdev_queue.c | 2 +- module/zfs/vdev_raidz_math.c | 2 +- module/zfs/vdev_removal.c | 2 +- module/zfs/zap_micro.c | 2 +- module/zfs/zcp.c | 1 - module/zfs/zfs_acl.c | 6 +- module/zfs/zfs_byteswap.c | 2 +- module/zfs/zfs_ctldir.c | 3 - module/zfs/zfs_dir.c | 6 - module/zfs/zfs_fm.c | 2 +- module/zfs/zfs_fuid.c | 1 - module/zfs/zfs_ioctl.c | 13 +- module/zfs/zfs_log.c | 4 +- module/zfs/zfs_onexit.c | 4 - module/zfs/zfs_replay.c | 1 - module/zfs/zfs_rlock.c | 1 + module/zfs/zfs_vfsops.c | 12 +- module/zfs/zfs_vnops.c | 13 +- module/zfs/zfs_znode.c | 10 +- module/zfs/zil.c | 3 +- module/zfs/zio.c | 2 +- module/zfs/zio_compress.c | 1 - module/zfs/zio_crypt.c | 2 +- module/zfs/zio_inject.c | 2 +- module/zfs/zpl_file.c | 1 + module/zfs/zpl_xattr.c | 2 +- module/zfs/zrlock.c | 2 +- rpm/generic/zfs-dkms.spec.in | 2 +- rpm/generic/zfs-kmod.spec.in | 35 +- rpm/generic/zfs.spec.in | 2 +- rpm/redhat/zfs-kmod.spec.in | 14 +- scripts/Makefile.am | 3 +- scripts/dkms.mkconf | 8 +- scripts/kmodtool | 11 +- scripts/zfs.sh | 7 +- scripts/zimport.sh | 75 +--- .../tests/functional/checksum/edonr_test.c | 3 +- 204 files changed, 1055 insertions(+), 1134 deletions(-) delete mode 100644 config/kernel-shrinker.m4 delete mode 100644 config/kernel-trim-unused-symbols.m4 rename lib/libspl/include/attr.h => include/linux/compiler_compat.h (75%) create mode 100644 include/spl/Makefile.am create mode 100644 include/spl/rpc/Makefile.am create mode 100644 include/spl/sys/Makefile.am rename lib/libspl/include/sys/compress.h => include/spl/sys/errno.h (60%) rename {lib/libspl/include => include}/sys/note.h (98%) delete mode 100644 lib/libspl/include/note.h rename lib/libspl/include/sys/{systm.h => stdtypes.h} (53%) rename lib/libspl/include/{ => sys}/strings.h (92%) create mode 100644 module/spl/Makefile.in diff --git a/AUTHORS b/AUTHORS index cf5c808e3e4..8314a1c2147 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,95 +1,304 @@ -Brian Behlendorf is the principal developer of the ZFS on Linux port. -He works full time as a computer scientist at Lawrence Livermore -National Laboratory on the ZFS and Lustre filesystems. However, -this port would not have been possible without the help of many -others who have contributed their time, effort, and insight. +MAINTAINERS: - Brian Behlendorf + Brian Behlendorf + Tony Hutter -First and foremost the hard working ZFS developers at Sun/Oracle. -They are responsible for the bulk of the code in this project and -without their efforts there never would have been a ZFS filesystem. +PAST MAINTAINERS: - The ZFS Development Team at Sun/Oracle + Ned Bass -Next all the developers at KQ Infotech who implemented a prototype -ZFS Posix Layer (ZPL). Their implementation provided an excellent -reference for adding the ZPL functionality. +CONTRIBUTORS: - Anand Mitra - Anurag Agarwal - Neependra Khare - Prasad Joshi - Rohan Puri - Sandip Divekar - Shoaib - Shrirang - -Additionally the following individuals have all made contributions -to the project and deserve to be acknowledged. - - Albert Lee - Alejandro R. Sedeño - Alex Zhuravlev - Alexander Eremin - Alexander Stetsenko - Alexey Shvetsov - Andreas Dilger - Andrew Reid - Andrew Stormont - Andrew Tselischev - Andriy Gapon - Aniruddha Shankar - Bill Pijewski - Chris Dunlap - Chris Dunlop - Chris Siden - Chris Wedgwood - Christian Kohlschütter - Christopher Siden - Craig Sanders - Cyril Plisko - Dan McDonald - Daniel Verite - Darik Horn - Eric Schrock - Etienne Dechamps - Fajar A. Nugraha - Frederik Wessels - Garrett D'Amore - George Wilson - Gordon Ross - Gregor Kopka - Gunnar Beutner - James H - Javen Wu - Jeremy Gill - Jorgen Lundman - KORN Andras - Kyle Fuller - Manuel Amador (Rudd-O) - Martin Matuska - Massimo Maggi - Matthew Ahrens - Michael Martin - Mike Harsch - Ned Bass - Oleg Stepura - P.SCH - Pawel Jakub Dawidek - Prakash Surya - Prasad Joshi - Ricardo M. Correia - Richard Laager - Richard Lowe - Richard Yao - Rohan Puri - Shampavman - Simon Klinkert - Suman Chakravartula - Tim Haley - Turbo Fredriksson - Xin Li - Yuxuan Shui - Zachary Bedell - nordaux + Aaron Fineman + Adam Leventhal + Adam Stevko + Ahmed G + Akash Ayare + Alan Somers + Alar Aun + Albert Lee + Alec Salazar + Alejandro R. Sedeño + Alek Pinchuk + Alex Braunegg + Alex McWhirter + Alex Reece + Alex Wilson + Alex Zhuravlev + Alexander Eremin + Alexander Motin + Alexander Pyhalov + Alexander Stetsenko + Alexey Shvetsov + Alexey Smirnoff + Allan Jude + AndCycle + Andreas Buschmann + Andreas Dilger + Andrew Barnes + Andrew Hamilton + Andrew Reid + Andrew Stormont + Andrew Tselischev + Andrey Vesnovaty + Andriy Gapon + Andy Bakun + Aniruddha Shankar + Antonio Russo + Arkadiusz Bubała + Arne Jansen + Aron Xu + Bart Coddens + Basil Crow + Huang Liu + Ben Allen + Ben Rubson + Benjamin Albrecht + Bill McGonigle + Bill Pijewski + Boris Protopopov + Brad Lewis + Brian Behlendorf + Brian J. Murrell + Caleb James DeLisle + Cao Xuewen + Carlo Landmeter + Carlos Alberto Lopez Perez + Chaoyu Zhang + Chen Can + Chen Haiquan + Chip Parker + Chris Burroughs + Chris Dunlap + Chris Dunlop + Chris Siden + Chris Wedgwood + Chris Williamson + Chris Zubrzycki + Christ Schlacta + Christer Ekholm + Christian Kohlschütter + Christian Neukirchen + Christian Schwarz + Christopher Voltz + Chunwei Chen + Clemens Fruhwirth + Colin Ian King + Craig Loomis + Craig Sanders + Cyril Plisko + DHE + Damian Wojsław + Dan Kimmel + Dan McDonald + Dan Swartzendruber + Dan Vatca + Daniel Hoffman + Daniel Verite + Daniil Lunev + Darik Horn + Dave Eddy + David Lamparter + David Qian + David Quigley + Debabrata Banerjee + Denys Rtveliashvili + Derek Dai + Dimitri John Ledkov + Dmitry Khasanov + Dominik Hassler + Dominik Honnef + Don Brady + Dr. András Korn + Eli Rosenthal + Eric Desrochers + Eric Dillmann + Eric Schrock + Etienne Dechamps + Evan Susarret + Fabian Grünbichler + Fajar A. Nugraha + Fan Yong + Feng Sun + Frederik Wessels + Frédéric Vanniere + Garrett D'Amore + Garrison Jensen + Gary Mills + Gaurav Kumar + GeLiXin + George Amanakis + George Melikov + George Wilson + Georgy Yakovlev + Giuseppe Di Natale + Gordan Bobic + Gordon Ross + Gregor Kopka + Grischa Zengel + Gunnar Beutner + Gvozden Neskovic + Hajo Möller + Hans Rosenfeld + Håkan Johansson + Igor Kozhukhov + Igor Lvovsky + Isaac Huang + JK Dingwall + Jacek Fefliński + James Cowgill + James Lee + James Pan + Jan Engelhardt + Jan Kryl + Jan Sanislo + Jason King + Jason Zaman + Javen Wu + Jeremy Gill + Jeremy Jones + Jerry Jelinek + Jinshan Xiong + Joe Stein + John Albietz + John Eismeier + John L. Hammond + John Layman + John Paul Adrian Glaubitz + John Wren Kennedy + Johnny Stenback + Jorgen Lundman + Josef 'Jeff' Sipek + Joshua M. Clulow + Justin Bedő + Justin Lecher + Justin T. Gibbs + Jörg Thalheim + KORN Andras + Kamil Domański + Karsten Kretschmer + Kash Pande + Keith M Wesolowski + Kevin Tanguy + KireinaHoro + Kohsuke Kawaguchi + Kyle Blatter + Kyle Fuller + Loli + Lars Johannsen + Li Dongyang + Li Wei + Lukas Wunner + Madhav Suresh + Manoj Joseph + Manuel Amador (Rudd-O) + Marcel Huber + Marcel Telka + Marcel Wysocki + Mark Shellenbaum + Mark Wright + Martin Matuska + Massimo Maggi + Matt Johnston + Matt Kemp + Matthew Ahrens + Matthew Thode + Matus Kral + Max Grossman + Maximilian Mehnert + Michael Gebetsroither + Michael Kjorling + Michael Martin + Mike Gerdts + Mike Harsch + Mike Leddy + Mike Swanson + Milan Jurik + Morgan Jones + Moritz Maxeiner + Nathaniel Clark + Nathaniel Wesley Filardo + Nav Ravindranath + Neal Gompa (ニール・ゴンパ) + Ned Bass + Neependra Khare + Neil Stockbridge + Nick Garvey + Nikolay Borisov + Olaf Faaland + Oleg Drokin + Oleg Stepura + Patrik Greco + Paul B. Henson + Paul Dagnelie + Paul Zuchowski + Pavel Boldin + Pavel Zakharov + Pawel Jakub Dawidek + Pedro Giffuni + Peng + Peter Ashford + Prakash Surya + Prasad Joshi + Ralf Ertzinger + Randall Mason + Remy Blank + Ricardo M. Correia + Rich Ercolani + Richard Elling + Richard Laager + Richard Lowe + Richard Sharpe + Richard Yao + Rohan Puri + Romain Dolbeau + Roman Strashkin + Ruben Kerkhof + Saso Kiselkov + Scot W. Stevenson + Sean Eric Fagan + Sen Haerens + Serapheim Dimitropoulos + Seth Forshee + Shampavman + Shen Yan + Simon Guest + Simon Klinkert + Sowrabha Gopal + Stanislav Seletskiy + Steffen Müthing + Stephen Blinick + Steve Dougherty + Steven Burgess + Steven Hartland + Steven Johnson + Stian Ellingsen + Suman Chakravartula + Sydney Vanda + Sören Tempel + Thijs Cramer + Tim Chase + Tim Connors + Tim Crawford + Tim Haley + Tobin Harding + Tom Caputi + Tom Matthews + Tom Prince + Tomohiro Kusumi + Tony Hutter + Toomas Soome + Trey Dockendorf + Turbo Fredriksson + Tyler J. Stachecki + Vitaut Bajaryn + Weigang Li + Will Andrews + Will Rouesnel + Wolfgang Bumiller + Xin Li + Ying Zhu + YunQiang Su + Yuri Pankov + Yuxuan Shui + Zachary Bedell diff --git a/COPYRIGHT b/COPYRIGHT index 9b94f927fe1..d0f449eb156 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -1,39 +1,31 @@ -The majority of the code in the ZFS on Linux port comes from OpenSolaris -which has been released under the terms of the CDDL open source license. -This includes the core ZFS code, libavl, libnvpair, libefi, libunicode, -and libutil. The original OpenSolaris source can be downloaded from: +The latest released and development versions can be downloaded from: -http://dlc.sun.com/osol/on/downloads/b121/on-src.tar.bz2 + * https://github.com/zfsonlinux/zfs/releases -Files which do not originate from OpenSolaris are noted in the file header -and attributed properly. These exceptions include, but are not limited -to, the vdev_disk.c and zvol.c implementation which are licensed under -the CDDL. +The original ZFS source code was obtained from Open Solaris which was +released under the terms of the CDDL open source license. Additional +changes have been included from OpenZFS and the Illumos project which +are similarly licensed. These projects can be found on Github at: -The latest stable and development versions of this port can be downloaded -from the official ZFS on Linux site located at: - -http://zfsonlinux.org/ - -This ZFS on Linux port was produced at the Lawrence Livermore National -Laboratory (LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) -between the U.S. Department of Energy (DOE) and Lawrence Livermore -National Security, LLC (LLNS) for the operation of LLNL. It has been -approved for release under LLNL-CODE-403049. + * https://github.com/illumos/illumos-gate + * https://github.com/openzfs/openzfs Unless otherwise noted, all files in this distribution are released under the Common Development and Distribution License (CDDL). -Exceptions are noted within the associated source files. A few notable -exceptions and their respective licenses include: -Skein Checksum Implementation: module/icp/algs/skein/THIRDPARTYLICENSE -AES Implementation: module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.gladman -AES Implementation: module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.openssl -PBKDF2 Implementation: lib/libzfs/THIRDPARTYLICENSE.openssl +Exceptions are noted within the associated source files headers and +by including a THIRDPARTYLICENSE file with the license terms. A few +notable exceptions and their respective licenses include: + + * Skein Checksum Implementation: module/icp/algs/skein/THIRDPARTYLICENSE + * AES Implementation: module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.gladman + * AES Implementation: module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.openssl + * PBKDF2 Implementation: lib/libzfs/THIRDPARTYLICENSE.openssl + * SPL Implementation: module/spl/THIRDPARTYLICENSE.gplv2 This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) -See the file OPENSOLARIS.LICENSE for more information. +See the OPENSOLARIS.LICENSE and DISCLAIMER for more information. Refer to the git commit log for authoritative copyright attribution. diff --git a/Makefile.am b/Makefile.am index 20f7903287e..ac6ccf41924 100644 --- a/Makefile.am +++ b/Makefile.am @@ -11,10 +11,10 @@ endif if CONFIG_KERNEL SUBDIRS += module -extradir = @prefix@/src/zfs-$(VERSION) +extradir = $(prefix)/src/zfs-$(VERSION) extra_HEADERS = zfs.release.in zfs_config.h.in -kerneldir = @prefix@/src/zfs-$(VERSION)/$(LINUX_VERSION) +kerneldir = $(prefix)/src/zfs-$(VERSION)/$(LINUX_VERSION) nodist_kernel_HEADERS = zfs.release zfs_config.h module/$(LINUX_SYMBOLS) endif @@ -44,6 +44,22 @@ dist-hook: sed -i 's/Release:[[:print:]]*/Release: $(RELEASE)/' \ $(distdir)/META +# For compatibility, create a matching spl-x.y.z directly which contains +# symlinks to the updated header and object file locations. These +# compatibility links will be removed in the next major release. +if CONFIG_KERNEL +install-data-hook: + mkdir $(DESTDIR)$(prefix)/src/spl-$(VERSION) && \ + cd $(DESTDIR)$(prefix)/src/spl-$(VERSION) && \ + ln -s ../zfs-$(VERSION)/include/spl include && \ + ln -s ../zfs-$(VERSION)/$(LINUX_VERSION) $(LINUX_VERSION) && \ + ln -s ../zfs-$(VERSION)/zfs_config.h.in spl_config.h.in && \ + ln -s ../zfs-$(VERSION)/zfs.release.in spl.release.in && \ + cd $(DESTDIR)$(prefix)/src/zfs-$(VERSION)/$(LINUX_VERSION) && \ + ln -s zfs_config.h spl_config.h && \ + ln -s zfs.release spl.release +endif + checkstyle: cstyle shellcheck flake8 commitcheck mancheck testscheck commitcheck: diff --git a/TEST b/TEST index 4c593a45707..ebe6ef963fa 100644 --- a/TEST +++ b/TEST @@ -4,10 +4,6 @@ #TEST_PREPARE_WATCHDOG="yes" #TEST_PREPARE_SHARES="yes" -### SPLAT -#TEST_SPLAT_SKIP="yes" -#TEST_SPLAT_OPTIONS="-acvx" - ### ztest #TEST_ZTEST_SKIP="yes" #TEST_ZTEST_TIMEOUT=1800 diff --git a/cmd/mount_zfs/mount_zfs.c b/cmd/mount_zfs/mount_zfs.c index 47f2a9ed9e1..d0d65fb943e 100644 --- a/cmd/mount_zfs/mount_zfs.c +++ b/cmd/mount_zfs/mount_zfs.c @@ -34,6 +34,7 @@ #include #include #include +#include #define ZS_COMMENT 0x00000000 /* comment */ #define ZS_ZFSUTIL 0x00000001 /* caller is zfs(8) */ diff --git a/cmd/zed/agents/zfs_diagnosis.c b/cmd/zed/agents/zfs_diagnosis.c index bb8db6af586..0b27f6702ee 100644 --- a/cmd/zed/agents/zfs_diagnosis.c +++ b/cmd/zed/agents/zfs_diagnosis.c @@ -26,6 +26,7 @@ */ #include +#include #include #include #include diff --git a/cmd/zed/agents/zfs_mod.c b/cmd/zed/agents/zfs_mod.c index 54568e75ad9..600d6527c0d 100644 --- a/cmd/zed/agents/zfs_mod.c +++ b/cmd/zed/agents/zfs_mod.c @@ -85,6 +85,7 @@ #include #include #include +#include #include "zfs_agents.h" #include "../zed_log.h" diff --git a/cmd/zfs/zfs_iter.c b/cmd/zfs/zfs_iter.c index aeb98ab6460..af4e4b4d2d7 100644 --- a/cmd/zfs/zfs_iter.c +++ b/cmd/zfs/zfs_iter.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include diff --git a/config/kernel-ctl-table-name.m4 b/config/kernel-ctl-table-name.m4 index 8dd2e77cb9b..3ce499968ff 100644 --- a/config/kernel-ctl-table-name.m4 +++ b/config/kernel-ctl-table-name.m4 @@ -2,9 +2,9 @@ dnl # dnl # 2.6.33 API change, dnl # Removed .ctl_name from struct ctl_table. dnl # -AC_DEFUN([SPL_AC_CTL_NAME], [ +AC_DEFUN([ZFS_AC_KERNEL_CTL_NAME], [ AC_MSG_CHECKING([whether struct ctl_table has ctl_name]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ struct ctl_table ctl __attribute__ ((unused)); diff --git a/config/kernel-fallocate-pax.m4 b/config/kernel-fallocate-pax.m4 index ac75a4c8e15..e8948be176d 100644 --- a/config/kernel-fallocate-pax.m4 +++ b/config/kernel-fallocate-pax.m4 @@ -1,9 +1,9 @@ dnl # dnl # PaX Linux 2.6.38 - 3.x API dnl # -AC_DEFUN([SPL_AC_PAX_KERNEL_FILE_FALLOCATE], [ +AC_DEFUN([ZFS_AC_PAX_KERNEL_FILE_FALLOCATE], [ AC_MSG_CHECKING([whether fops->fallocate() exists]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL; diff --git a/config/kernel-group-info.m4 b/config/kernel-group-info.m4 index 4db2bba5c9a..849a1e246a4 100644 --- a/config/kernel-group-info.m4 +++ b/config/kernel-group-info.m4 @@ -2,11 +2,11 @@ dnl # dnl # 4.9 API change dnl # group_info changed from 2d array via >blocks to 1d array via ->gid dnl # -AC_DEFUN([SPL_AC_GROUP_INFO_GID], [ +AC_DEFUN([ZFS_AC_KERNEL_GROUP_INFO_GID], [ AC_MSG_CHECKING([whether group_info->gid exists]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ struct group_info *gi = groups_alloc(1); diff --git a/config/kernel-inode-lock.m4 b/config/kernel-inode-lock.m4 index 2cc06a5ec31..8dee0142272 100644 --- a/config/kernel-inode-lock.m4 +++ b/config/kernel-inode-lock.m4 @@ -4,11 +4,11 @@ dnl # i_mutex is changed to i_rwsem. Instead of directly using dnl # i_mutex/i_rwsem, we should use inode_lock() and inode_lock_shared() dnl # We test inode_lock_shared because inode_lock is introduced earlier. dnl # -AC_DEFUN([SPL_AC_INODE_LOCK], [ +AC_DEFUN([ZFS_AC_KERNEL_INODE_LOCK], [ AC_MSG_CHECKING([whether inode_lock_shared() exists]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ struct inode *inode = NULL; diff --git a/config/kernel-kmem-cache.m4 b/config/kernel-kmem-cache.m4 index 50a7fdb4b5f..21cc53d3493 100644 --- a/config/kernel-kmem-cache.m4 +++ b/config/kernel-kmem-cache.m4 @@ -5,9 +5,9 @@ dnl # private allocation flags which are applied when allocating a new slab dnl # in kmem_getpages(). Unfortunately there is no public API for setting dnl # non-default flags. dnl # -AC_DEFUN([SPL_AC_KMEM_CACHE_ALLOCFLAGS], [ +AC_DEFUN([ZFS_AC_KERNEL_KMEM_CACHE_ALLOCFLAGS], [ AC_MSG_CHECKING([whether struct kmem_cache has allocflags]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ struct kmem_cache cachep __attribute__ ((unused)); @@ -20,7 +20,7 @@ AC_DEFUN([SPL_AC_KMEM_CACHE_ALLOCFLAGS], [ AC_MSG_RESULT(no) AC_MSG_CHECKING([whether struct kmem_cache has gfpflags]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ struct kmem_cache cachep __attribute__ ((unused)); @@ -40,11 +40,11 @@ dnl # grsecurity API change, dnl # kmem_cache_create() with SLAB_USERCOPY flag replaced by dnl # kmem_cache_create_usercopy(). dnl # -AC_DEFUN([SPL_AC_KMEM_CACHE_CREATE_USERCOPY], [ +AC_DEFUN([ZFS_AC_KERNEL_KMEM_CACHE_CREATE_USERCOPY], [ AC_MSG_CHECKING([whether kmem_cache_create_usercopy() exists]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include static void ctor(void *foo) { diff --git a/config/kernel-kuidgid.m4 b/config/kernel-kuidgid.m4 index 47d193783cd..82685d26369 100644 --- a/config/kernel-kuidgid.m4 +++ b/config/kernel-kuidgid.m4 @@ -3,19 +3,19 @@ dnl # User namespaces, use kuid_t in place of uid_t dnl # where available. Not strictly a user namespaces thing dnl # but it should prevent surprises dnl # -AC_DEFUN([SPL_AC_KUIDGID_T], [ +AC_DEFUN([ZFS_AC_KERNEL_KUIDGID_T], [ AC_MSG_CHECKING([whether kuid_t/kgid_t is available]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ], [ - kuid_t userid = KUIDT_INIT(0); - kgid_t groupid = KGIDT_INIT(0); + kuid_t userid __attribute__ ((unused)) = KUIDT_INIT(0); + kgid_t groupid __attribute__ ((unused)) = KGIDT_INIT(0); ],[ - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ], [ - kuid_t userid = 0; - kgid_t groupid = 0; + kuid_t userid __attribute__ ((unused)) = 0; + kgid_t groupid __attribute__ ((unused)) = 0; ],[ AC_MSG_RESULT(yes; optional) ],[ diff --git a/config/kernel-pde-data.m4 b/config/kernel-pde-data.m4 index 6aa5765c32c..8aa4c2204e8 100644 --- a/config/kernel-pde-data.m4 +++ b/config/kernel-pde-data.m4 @@ -2,9 +2,9 @@ dnl # dnl # 3.10 API change, dnl # PDE is replaced by PDE_DATA dnl # -AC_DEFUN([SPL_AC_PDE_DATA], [ +AC_DEFUN([ZFS_AC_KERNEL_PDE_DATA], [ AC_MSG_CHECKING([whether PDE_DATA() is available]) - SPL_LINUX_TRY_COMPILE_SYMBOL([ + ZFS_LINUX_TRY_COMPILE_SYMBOL([ #include ], [ PDE_DATA(NULL); diff --git a/config/kernel-rw.m4 b/config/kernel-rw.m4 index 23c14b70fd3..1c8a265e0ae 100644 --- a/config/kernel-rw.m4 +++ b/config/kernel-rw.m4 @@ -3,11 +3,11 @@ dnl # 4.14 API change dnl # kernel_write() which was introduced in 3.9 was updated to take dnl # the offset as a pointer which is needed by vn_rdwr(). dnl # -AC_DEFUN([SPL_AC_KERNEL_WRITE], [ +AC_DEFUN([ZFS_AC_KERNEL_WRITE], [ AC_MSG_CHECKING([whether kernel_write() takes loff_t pointer]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ struct file *file = NULL; @@ -32,11 +32,11 @@ dnl # 4.14 API change dnl # kernel_read() which has existed for forever was updated to take dnl # the offset as a pointer which is needed by vn_rdwr(). dnl # -AC_DEFUN([SPL_AC_KERNEL_READ], [ +AC_DEFUN([ZFS_AC_KERNEL_READ], [ AC_MSG_CHECKING([whether kernel_read() takes loff_t pointer]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ struct file *file = NULL; diff --git a/config/kernel-rwsem.m4 b/config/kernel-rwsem.m4 index aee20ae901c..532c2271818 100644 --- a/config/kernel-rwsem.m4 +++ b/config/kernel-rwsem.m4 @@ -4,11 +4,11 @@ dnl # dnl # The rw_semaphore.wait_lock member was changed from spinlock_t to dnl # raw_spinlock_t at commit ddb6c9b58a19edcfac93ac670b066c836ff729f1. dnl # -AC_DEFUN([SPL_AC_RWSEM_SPINLOCK_IS_RAW], [ +AC_DEFUN([ZFS_AC_KERNEL_RWSEM_SPINLOCK_IS_RAW], [ AC_MSG_CHECKING([whether struct rw_semaphore member wait_lock is raw]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ struct rw_semaphore dummy_semaphore __attribute__ ((unused)); @@ -30,11 +30,11 @@ dnl # 3.16 API Change dnl # dnl # rwsem-spinlock "->activity" changed to "->count" dnl # -AC_DEFUN([SPL_AC_RWSEM_ACTIVITY], [ +AC_DEFUN([ZFS_AC_KERNEL_RWSEM_ACTIVITY], [ AC_MSG_CHECKING([whether struct rw_semaphore has member activity]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ struct rw_semaphore dummy_semaphore __attribute__ ((unused)); @@ -54,12 +54,12 @@ dnl # 4.8 API Change dnl # dnl # rwsem "->count" changed to atomic_long_t type dnl # -AC_DEFUN([SPL_AC_RWSEM_ATOMIC_LONG_COUNT], [ +AC_DEFUN([ZFS_AC_KERNEL_RWSEM_ATOMIC_LONG_COUNT], [ AC_MSG_CHECKING( [whether struct rw_semaphore has atomic_long_t member count]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ DECLARE_RWSEM(dummy_semaphore); diff --git a/config/kernel-sched.m4 b/config/kernel-sched.m4 index 5ae21676ed3..640b008aab8 100644 --- a/config/kernel-sched.m4 +++ b/config/kernel-sched.m4 @@ -2,9 +2,9 @@ dnl # dnl # 3.9 API change, dnl # Moved things from linux/sched.h to linux/sched/rt.h dnl # -AC_DEFUN([SPL_AC_SCHED_RT_HEADER], +AC_DEFUN([ZFS_AC_KERNEL_SCHED_RT_HEADER], [AC_MSG_CHECKING([whether header linux/sched/rt.h exists]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include #include ],[ @@ -21,9 +21,9 @@ dnl # dnl # 4.11 API change, dnl # Moved things from linux/sched.h to linux/sched/signal.h dnl # -AC_DEFUN([SPL_AC_SCHED_SIGNAL_HEADER], +AC_DEFUN([ZFS_AC_KERNEL_SCHED_SIGNAL_HEADER], [AC_MSG_CHECKING([whether header linux/sched/signal.h exists]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include #include ],[ @@ -41,9 +41,9 @@ dnl # The io_schedule_timeout() function is present in all 2.6.32 kernels dnl # but it was not exported until Linux 3.19. The RHEL 7.x kernels which dnl # are based on a 3.10 kernel do export this symbol. dnl # -AC_DEFUN([SPL_AC_IO_SCHEDULE_TIMEOUT], [ +AC_DEFUN([ZFS_AC_KERNEL_IO_SCHEDULE_TIMEOUT], [ AC_MSG_CHECKING([whether io_schedule_timeout() is available]) - SPL_LINUX_TRY_COMPILE_SYMBOL([ + ZFS_LINUX_TRY_COMPILE_SYMBOL([ #include ], [ (void) io_schedule_timeout(1); diff --git a/config/kernel-set-fs-pwd.m4 b/config/kernel-set-fs-pwd.m4 index 849e7e6cbf0..d5565b42cb5 100644 --- a/config/kernel-set-fs-pwd.m4 +++ b/config/kernel-set-fs-pwd.m4 @@ -2,11 +2,11 @@ dnl # dnl # 3.9 API change dnl # set_fs_pwd takes const struct path * dnl # -AC_DEFUN([SPL_AC_SET_FS_PWD_WITH_CONST], +AC_DEFUN([ZFS_AC_KERNEL_SET_FS_PWD_WITH_CONST], tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" [AC_MSG_CHECKING([whether set_fs_pwd() requires const struct path *]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include #include #include @@ -20,7 +20,7 @@ AC_DEFUN([SPL_AC_SET_FS_PWD_WITH_CONST], AC_DEFINE(HAVE_SET_FS_PWD_WITH_CONST, 1, [set_fs_pwd() needs const path *]) ],[ - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include #include #include diff --git a/config/kernel-shrink.m4 b/config/kernel-shrink.m4 index a57c2afb0b6..37da0ec721a 100644 --- a/config/kernel-shrink.m4 +++ b/config/kernel-shrink.m4 @@ -131,3 +131,130 @@ AC_DEFUN([ZFS_AC_KERNEL_SHRINK_CONTROL_HAS_NID], [ AC_MSG_RESULT(no) ]) ]) + + +AC_DEFUN([ZFS_AC_KERNEL_SHRINKER_CALLBACK],[ + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + dnl # + dnl # 2.6.23 to 2.6.34 API change + dnl # ->shrink(int nr_to_scan, gfp_t gfp_mask) + dnl # + AC_MSG_CHECKING([whether old 2-argument shrinker exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int shrinker_cb(int nr_to_scan, gfp_t gfp_mask); + ],[ + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_OLD_SHRINKER_CALLBACK, 1, + [old shrinker callback wants 2 args]) + ],[ + AC_MSG_RESULT(no) + dnl # + dnl # 2.6.35 - 2.6.39 API change + dnl # ->shrink(struct shrinker *, + dnl # int nr_to_scan, gfp_t gfp_mask) + dnl # + AC_MSG_CHECKING([whether old 3-argument shrinker exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int shrinker_cb(struct shrinker *, int nr_to_scan, + gfp_t gfp_mask); + ],[ + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1, + [old shrinker callback wants 3 args]) + ],[ + AC_MSG_RESULT(no) + dnl # + dnl # 3.0 - 3.11 API change + dnl # ->shrink(struct shrinker *, + dnl # struct shrink_control *sc) + dnl # + AC_MSG_CHECKING( + [whether new 2-argument shrinker exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int shrinker_cb(struct shrinker *, + struct shrink_control *sc); + ],[ + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_NEW_SHRINKER_CALLBACK, 1, + [new shrinker callback wants 2 args]) + ],[ + AC_MSG_RESULT(no) + dnl # + dnl # 3.12 API change, + dnl # ->shrink() is logically split in to + dnl # ->count_objects() and ->scan_objects() + dnl # + AC_MSG_CHECKING( + [whether ->count_objects callback exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + unsigned long shrinker_cb( + struct shrinker *, + struct shrink_control *sc); + ],[ + struct shrinker cache_shrinker = { + .count_objects = shrinker_cb, + .scan_objects = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SPLIT_SHRINKER_CALLBACK, + 1, [->count_objects exists]) + ],[ + AC_MSG_ERROR(error) + ]) + ]) + ]) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 2.6.39 API change, +dnl # Shrinker adjust to use common shrink_control structure. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SHRINK_CONTROL_STRUCT], [ + AC_MSG_CHECKING([whether struct shrink_control exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct shrink_control sc __attribute__ ((unused)); + + sc.nr_to_scan = 0; + sc.gfp_mask = GFP_KERNEL; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SHRINK_CONTROL_STRUCT, 1, + [struct shrink_control exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) diff --git a/config/kernel-shrinker.m4 b/config/kernel-shrinker.m4 deleted file mode 100644 index 6fc9b5422a0..00000000000 --- a/config/kernel-shrinker.m4 +++ /dev/null @@ -1,125 +0,0 @@ -AC_DEFUN([SPL_AC_SHRINKER_CALLBACK],[ - tmp_flags="$EXTRA_KCFLAGS" - EXTRA_KCFLAGS="-Werror" - dnl # - dnl # 2.6.23 to 2.6.34 API change - dnl # ->shrink(int nr_to_scan, gfp_t gfp_mask) - dnl # - AC_MSG_CHECKING([whether old 2-argument shrinker exists]) - SPL_LINUX_TRY_COMPILE([ - #include - - int shrinker_cb(int nr_to_scan, gfp_t gfp_mask); - ],[ - struct shrinker cache_shrinker = { - .shrink = shrinker_cb, - .seeks = DEFAULT_SEEKS, - }; - register_shrinker(&cache_shrinker); - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_2ARGS_OLD_SHRINKER_CALLBACK, 1, - [old shrinker callback wants 2 args]) - ],[ - AC_MSG_RESULT(no) - dnl # - dnl # 2.6.35 - 2.6.39 API change - dnl # ->shrink(struct shrinker *, - dnl # int nr_to_scan, gfp_t gfp_mask) - dnl # - AC_MSG_CHECKING([whether old 3-argument shrinker exists]) - SPL_LINUX_TRY_COMPILE([ - #include - - int shrinker_cb(struct shrinker *, int nr_to_scan, - gfp_t gfp_mask); - ],[ - struct shrinker cache_shrinker = { - .shrink = shrinker_cb, - .seeks = DEFAULT_SEEKS, - }; - register_shrinker(&cache_shrinker); - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1, - [old shrinker callback wants 3 args]) - ],[ - AC_MSG_RESULT(no) - dnl # - dnl # 3.0 - 3.11 API change - dnl # ->shrink(struct shrinker *, - dnl # struct shrink_control *sc) - dnl # - AC_MSG_CHECKING( - [whether new 2-argument shrinker exists]) - SPL_LINUX_TRY_COMPILE([ - #include - - int shrinker_cb(struct shrinker *, - struct shrink_control *sc); - ],[ - struct shrinker cache_shrinker = { - .shrink = shrinker_cb, - .seeks = DEFAULT_SEEKS, - }; - register_shrinker(&cache_shrinker); - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_2ARGS_NEW_SHRINKER_CALLBACK, 1, - [new shrinker callback wants 2 args]) - ],[ - AC_MSG_RESULT(no) - dnl # - dnl # 3.12 API change, - dnl # ->shrink() is logically split in to - dnl # ->count_objects() and ->scan_objects() - dnl # - AC_MSG_CHECKING( - [whether ->count_objects callback exists]) - SPL_LINUX_TRY_COMPILE([ - #include - - unsigned long shrinker_cb( - struct shrinker *, - struct shrink_control *sc); - ],[ - struct shrinker cache_shrinker = { - .count_objects = shrinker_cb, - .scan_objects = shrinker_cb, - .seeks = DEFAULT_SEEKS, - }; - register_shrinker(&cache_shrinker); - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_SPLIT_SHRINKER_CALLBACK, - 1, [->count_objects exists]) - ],[ - AC_MSG_ERROR(error) - ]) - ]) - ]) - ]) - EXTRA_KCFLAGS="$tmp_flags" -]) - -dnl # -dnl # 2.6.39 API change, -dnl # Shrinker adjust to use common shrink_control structure. -dnl # -AC_DEFUN([SPL_AC_SHRINK_CONTROL_STRUCT], [ - AC_MSG_CHECKING([whether struct shrink_control exists]) - SPL_LINUX_TRY_COMPILE([ - #include - ],[ - struct shrink_control sc __attribute__ ((unused)); - - sc.nr_to_scan = 0; - sc.gfp_mask = GFP_KERNEL; - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_SHRINK_CONTROL_STRUCT, 1, - [struct shrink_control exists]) - ],[ - AC_MSG_RESULT(no) - ]) -]) diff --git a/config/kernel-spinlock.m4 b/config/kernel-spinlock.m4 index 136262d0e65..d6d6640070b 100644 --- a/config/kernel-spinlock.m4 +++ b/config/kernel-spinlock.m4 @@ -3,11 +3,11 @@ dnl # 2.6.36 API change, dnl # The 'struct fs_struct->lock' was changed from a rwlock_t to dnl # a spinlock_t to improve the fastpath performance. dnl # -AC_DEFUN([SPL_AC_FS_STRUCT_SPINLOCK], [ +AC_DEFUN([ZFS_AC_KERNEL_FS_STRUCT_SPINLOCK], [ AC_MSG_CHECKING([whether struct fs_struct uses spinlock_t]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include #include ],[ diff --git a/config/kernel-timer.m4 b/config/kernel-timer.m4 index 93b5158b974..4dc3f84ed47 100644 --- a/config/kernel-timer.m4 +++ b/config/kernel-timer.m4 @@ -6,11 +6,11 @@ dnl # (older kernels). Also sanity check the from_timer() and timer_setup() dnl # macros are available as well, since they will be used in the same newer dnl # kernels that support the new timer_list.func signature. dnl # -AC_DEFUN([SPL_AC_KERNEL_TIMER_FUNCTION_TIMER_LIST], [ +AC_DEFUN([ZFS_AC_KERNEL_TIMER_FUNCTION_TIMER_LIST], [ AC_MSG_CHECKING([whether timer_list.function gets a timer_list]) tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include void task_expire(struct timer_list *tl) {} ],[ diff --git a/config/kernel-trim-unused-symbols.m4 b/config/kernel-trim-unused-symbols.m4 deleted file mode 100644 index d1ac2f3c834..00000000000 --- a/config/kernel-trim-unused-symbols.m4 +++ /dev/null @@ -1,19 +0,0 @@ -dnl # -dnl # config trim unused symbols, -dnl # Verify the kernel has CONFIG_TRIM_UNUSED_KSYMS DISABLED. -dnl # -AC_DEFUN([SPL_AC_CONFIG_TRIM_UNUSED_KSYMS], [ - AC_MSG_CHECKING([whether CONFIG_TRIM_UNUSED_KSYM is disabled]) - SPL_LINUX_TRY_COMPILE([ - #if defined(CONFIG_TRIM_UNUSED_KSYMS) - #error CONFIG_TRIM_UNUSED_KSYMS not defined - #endif - ],[ ],[ - AC_MSG_RESULT([yes]) - ],[ - AC_MSG_RESULT([no]) - AC_MSG_ERROR([ - *** This kernel has unused symbols trimming enabled, please disable. - *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set.]) - ]) -]) diff --git a/config/kernel-urange-sleep.m4 b/config/kernel-urange-sleep.m4 index 85beca6ddec..b5764de3ed6 100644 --- a/config/kernel-urange-sleep.m4 +++ b/config/kernel-urange-sleep.m4 @@ -5,9 +5,9 @@ dnl # usleep_range is a finer precision implementation of msleep dnl # designed to be a drop-in replacement for udelay where a precise dnl # sleep / busy-wait is unnecessary. dnl # -AC_DEFUN([SPL_AC_USLEEP_RANGE], [ +AC_DEFUN([ZFS_AC_KERNEL_USLEEP_RANGE], [ AC_MSG_CHECKING([whether usleep_range() is available]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ usleep_range(0, 0); diff --git a/config/kernel-vfs-fsync.m4 b/config/kernel-vfs-fsync.m4 index 3c42bf1a038..a474f9f1745 100644 --- a/config/kernel-vfs-fsync.m4 +++ b/config/kernel-vfs-fsync.m4 @@ -2,9 +2,9 @@ dnl # dnl # 2.6.35 API change, dnl # Unused 'struct dentry *' removed from vfs_fsync() prototype. dnl # -AC_DEFUN([SPL_AC_2ARGS_VFS_FSYNC], [ +AC_DEFUN([ZFS_AC_KERNEL_2ARGS_VFS_FSYNC], [ AC_MSG_CHECKING([whether vfs_fsync() wants 2 args]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ vfs_fsync(NULL, 0); diff --git a/config/kernel-vfs-getattr.m4 b/config/kernel-vfs-getattr.m4 index 7772cb514cb..b13723538f1 100644 --- a/config/kernel-vfs-getattr.m4 +++ b/config/kernel-vfs-getattr.m4 @@ -2,9 +2,9 @@ dnl # dnl # 4.11 API, a528d35e@torvalds/linux dnl # vfs_getattr(const struct path *p, struct kstat *s, u32 m, unsigned int f) dnl # -AC_DEFUN([SPL_AC_4ARGS_VFS_GETATTR], [ +AC_DEFUN([ZFS_AC_KERNEL_4ARGS_VFS_GETATTR], [ AC_MSG_CHECKING([whether vfs_getattr() wants 4 args]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ vfs_getattr((const struct path *)NULL, @@ -24,9 +24,9 @@ dnl # dnl # 3.9 API dnl # vfs_getattr(struct path *p, struct kstat *s) dnl # -AC_DEFUN([SPL_AC_2ARGS_VFS_GETATTR], [ +AC_DEFUN([ZFS_AC_KERNEL_2ARGS_VFS_GETATTR], [ AC_MSG_CHECKING([whether vfs_getattr() wants 2 args]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ vfs_getattr((struct path *) NULL, @@ -44,9 +44,9 @@ dnl # dnl # <3.9 API dnl # vfs_getattr(struct vfsmount *v, struct dentry *d, struct kstat *k) dnl # -AC_DEFUN([SPL_AC_3ARGS_VFS_GETATTR], [ +AC_DEFUN([ZFS_AC_KERNEL_3ARGS_VFS_GETATTR], [ AC_MSG_CHECKING([whether vfs_getattr() wants 3 args]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ vfs_getattr((struct vfsmount *)NULL, diff --git a/config/kernel-wait.m4 b/config/kernel-wait.m4 index 5f718a160ff..d6442c1df6f 100644 --- a/config/kernel-wait.m4 +++ b/config/kernel-wait.m4 @@ -8,9 +8,9 @@ dnl # of just two functions: one which uses io_schedule() and one which just dnl # uses schedule(). This API change was made to consolidate all of those dnl # redundant wait functions. dnl # -AC_DEFUN([SPL_AC_WAIT_ON_BIT], [ +AC_DEFUN([ZFS_AC_KERNEL_WAIT_ON_BIT], [ AC_MSG_CHECKING([whether wait_on_bit() takes an action]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ int (*action)(void *) = NULL; @@ -26,9 +26,9 @@ dnl # dnl # 4.13 API change dnl # Renamed struct wait_queue -> struct wait_queue_entry. dnl # -AC_DEFUN([SPL_AC_WAIT_QUEUE_ENTRY_T], [ +AC_DEFUN([ZFS_AC_KERNEL_WAIT_QUEUE_ENTRY_T], [ AC_MSG_CHECKING([whether wait_queue_entry_t exists]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ wait_queue_entry_t *entry __attribute__ ((unused)); @@ -46,9 +46,9 @@ dnl # 4.13 API change dnl # Renamed wait_queue_head::task_list -> wait_queue_head::head dnl # Renamed wait_queue_entry::task_list -> wait_queue_entry::entry dnl # -AC_DEFUN([SPL_AC_WAIT_QUEUE_HEAD_ENTRY], [ +AC_DEFUN([ZFS_AC_KERNEL_WAIT_QUEUE_HEAD_ENTRY], [ AC_MSG_CHECKING([whether wq_head->head and wq_entry->entry exist]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include #ifdef HAVE_WAIT_QUEUE_ENTRY_T diff --git a/config/kernel-zlib.m4 b/config/kernel-zlib.m4 index bb236466a80..3ca7cf682da 100644 --- a/config/kernel-zlib.m4 +++ b/config/kernel-zlib.m4 @@ -2,9 +2,9 @@ dnl # dnl # zlib inflate compat, dnl # Verify the kernel has CONFIG_ZLIB_INFLATE support enabled. dnl # -AC_DEFUN([SPL_AC_CONFIG_ZLIB_INFLATE], [ +AC_DEFUN([ZFS_AC_KERNEL_CONFIG_ZLIB_INFLATE], [ AC_MSG_CHECKING([whether CONFIG_ZLIB_INFLATE is defined]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #if !defined(CONFIG_ZLIB_INFLATE) && \ !defined(CONFIG_ZLIB_INFLATE_MODULE) #error CONFIG_ZLIB_INFLATE not defined @@ -23,9 +23,9 @@ dnl # dnl # zlib deflate compat, dnl # Verify the kernel has CONFIG_ZLIB_DEFLATE support enabled. dnl # -AC_DEFUN([SPL_AC_CONFIG_ZLIB_DEFLATE], [ +AC_DEFUN([ZFS_AC_KERNEL_CONFIG_ZLIB_DEFLATE], [ AC_MSG_CHECKING([whether CONFIG_ZLIB_DEFLATE is defined]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #if !defined(CONFIG_ZLIB_DEFLATE) && \ !defined(CONFIG_ZLIB_DEFLATE_MODULE) #error CONFIG_ZLIB_DEFLATE not defined @@ -47,9 +47,9 @@ dnl # This was done to avoid always having to allocate the maximum size dnl # workspace (268K). The caller can now specific the windowBits and dnl # memLevel compression parameters to get a smaller workspace. dnl # -AC_DEFUN([SPL_AC_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE], +AC_DEFUN([ZFS_AC_KERNEL_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE], [AC_MSG_CHECKING([whether zlib_deflate_workspacesize() wants 2 args]) - SPL_LINUX_TRY_COMPILE([ + ZFS_LINUX_TRY_COMPILE([ #include ],[ return zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL); diff --git a/config/kernel.m4 b/config/kernel.m4 index e3daeffa811..8151cdc224e 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -3,12 +3,39 @@ dnl # Default ZFS kernel configuration dnl # AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ ZFS_AC_KERNEL - ZFS_AC_SPL ZFS_AC_QAT ZFS_AC_TEST_MODULE ZFS_AC_KERNEL_MISC_MINOR ZFS_AC_KERNEL_OBJTOOL ZFS_AC_KERNEL_CONFIG + ZFS_AC_KERNEL_CTL_NAME + ZFS_AC_KERNEL_PDE_DATA + ZFS_AC_KERNEL_SET_FS_PWD_WITH_CONST + ZFS_AC_KERNEL_2ARGS_VFS_FSYNC + ZFS_AC_KERNEL_FS_STRUCT_SPINLOCK + ZFS_AC_KERNEL_KUIDGID_T + ZFS_AC_KERNEL_FALLOCATE + ZFS_AC_KERNEL_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE + ZFS_AC_KERNEL_RWSEM_SPINLOCK_IS_RAW + ZFS_AC_KERNEL_RWSEM_ACTIVITY + ZFS_AC_KERNEL_RWSEM_ATOMIC_LONG_COUNT + ZFS_AC_KERNEL_SCHED_RT_HEADER + ZFS_AC_KERNEL_SCHED_SIGNAL_HEADER + ZFS_AC_KERNEL_IO_SCHEDULE_TIMEOUT + ZFS_AC_KERNEL_4ARGS_VFS_GETATTR + ZFS_AC_KERNEL_3ARGS_VFS_GETATTR + ZFS_AC_KERNEL_2ARGS_VFS_GETATTR + ZFS_AC_KERNEL_USLEEP_RANGE + ZFS_AC_KERNEL_KMEM_CACHE_ALLOCFLAGS + ZFS_AC_KERNEL_KMEM_CACHE_CREATE_USERCOPY + ZFS_AC_KERNEL_WAIT_ON_BIT + ZFS_AC_KERNEL_WAIT_QUEUE_ENTRY_T + ZFS_AC_KERNEL_WAIT_QUEUE_HEAD_ENTRY + ZFS_AC_KERNEL_INODE_LOCK + ZFS_AC_KERNEL_GROUP_INFO_GID + ZFS_AC_KERNEL_WRITE + ZFS_AC_KERNEL_READ + ZFS_AC_KERNEL_TIMER_FUNCTION_TIMER_LIST ZFS_AC_KERNEL_DECLARE_EVENT_CLASS ZFS_AC_KERNEL_CURRENT_BIO_TAIL ZFS_AC_KERNEL_SUPER_USER_NS @@ -106,6 +133,8 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ ZFS_AC_KERNEL_FST_MOUNT ZFS_AC_KERNEL_SHRINK ZFS_AC_KERNEL_SHRINK_CONTROL_HAS_NID + ZFS_AC_KERNEL_SHRINK_CONTROL_STRUCT + ZFS_AC_KERNEL_SHRINKER_CALLBACK ZFS_AC_KERNEL_S_INSTANCES_LIST_HEAD ZFS_AC_KERNEL_S_D_OP ZFS_AC_KERNEL_BDI @@ -275,204 +304,6 @@ AC_DEFUN([ZFS_AC_KERNEL], [ ZFS_AC_MODULE_SYMVERS ]) - -dnl # -dnl # Detect the SPL module to be built against -dnl # -AC_DEFUN([ZFS_AC_SPL], [ - AC_ARG_WITH([spl], - AS_HELP_STRING([--with-spl=PATH], - [Path to spl source]), - AS_IF([test "$withval" = "yes"], - AC_MSG_ERROR([--with-spl=PATH requires a PATH]), - [splsrc="$withval"])) - - AC_ARG_WITH([spl-obj], - AS_HELP_STRING([--with-spl-obj=PATH], - [Path to spl build objects]), - [splbuild="$withval"]) - - AC_ARG_WITH([spl-timeout], - AS_HELP_STRING([--with-spl-timeout=SECS], - [Wait SECS for SPL header and symver file @<:@default=0@:>@]), - [timeout="$withval"], [timeout=0]) - - dnl # - dnl # The existence of spl.release.in is used to identify a valid - dnl # source directory. In order of preference: - dnl # - splsrc0="/var/lib/dkms/spl/${VERSION}/build" - splsrc1="/usr/local/src/spl-${VERSION}/${LINUX_VERSION}" - splsrc2="/usr/local/src/spl-${VERSION}" - splsrc3="/usr/src/spl-${VERSION}/${LINUX_VERSION}" - splsrc4="/usr/src/spl-${VERSION}" - splsrc5="../spl/" - splsrc6="$LINUX" - - AC_MSG_CHECKING([spl source directory]) - AS_IF([test -z "${splsrc}"], [ - [all_spl_sources=" - ${splsrc0} - ${splsrc1} - ${splsrc2} - ${splsrc3} - ${splsrc4} - ${splsrc5} - ${splsrc6}"], - AS_IF([ test -e "${splsrc0}/spl.release.in"], [ - splsrc=${splsrc0} - ], [ test -e "${splsrc1}/spl.release.in"], [ - splsrc=${splsrc1} - ], [ test -e "${splsrc2}/spl.release.in"], [ - splsrc=${splsrc2} - ], [ test -e "${splsrc3}/spl.release.in"], [ - splsrc=$(readlink -f "${splsrc3}") - ], [ test -e "${splsrc4}/spl.release.in" ], [ - splsrc=${splsrc4} - ], [ test -e "${splsrc5}/spl.release.in"], [ - splsrc=$(readlink -f "${splsrc5}") - ], [ test -e "${splsrc6}/spl.release.in" ], [ - splsrc=${splsrc6} - ], [ - splsrc="[Not found]" - ]) - ], [ - [all_spl_sources="$withval"], - AS_IF([test "$splsrc" = "NONE"], [ - splbuild=NONE - splsrcver=NONE - ]) - ]) - - AC_MSG_RESULT([$splsrc]) - AS_IF([ test ! -e "$splsrc/spl.release.in"], [ - AC_MSG_ERROR([ - *** Please make sure the kmod spl devel package for your distribution - *** is installed then try again. If that fails you can specify the - *** location of the spl source with the '--with-spl=PATH' option. - *** The spl version must match the version of ZFS you are building, - *** ${VERSION}. Failed to find spl.release.in in the following: - $all_spl_sources]) - ]) - - dnl # - dnl # The existence of the spl_config.h is used to identify a valid - dnl # spl object directory. In many cases the object and source - dnl # directory are the same, however the objects may also reside - dnl # is a subdirectory named after the kernel version. - dnl # - dnl # This file is supposed to be available after DKMS finishes - dnl # building the SPL kernel module for the target kernel. The - dnl # '--with-spl-timeout' option can be passed to pause here, - dnl # waiting for the file to appear from a concurrently building - dnl # SPL package. - dnl # - AC_MSG_CHECKING([spl build directory]) - - all_spl_config_locs="${splsrc}/${LINUX_VERSION} - ${splsrc}" - - while true; do - AS_IF([test -z "$splbuild"], [ - AS_IF([ test -e "${splsrc}/${LINUX_VERSION}/spl_config.h" ], [ - splbuild="${splsrc}/${LINUX_VERSION}" - ], [ test -e "${splsrc}/spl_config.h" ], [ - splbuild="${splsrc}" - ], [ find -L "${splsrc}" -name spl_config.h 2> /dev/null | grep -wq spl_config.h ], [ - splbuild=$(find -L "${splsrc}" -name spl_config.h | sed 's,/spl_config.h,,') - ], [ - splbuild="[Not found]" - ]) - ]) - AS_IF([test -e "$splbuild/spl_config.h" -o $timeout -le 0], [ - break; - ], [ - sleep 1 - timeout=$((timeout-1)) - ]) - done - - AC_MSG_RESULT([$splbuild]) - AS_IF([ ! test -e "$splbuild/spl_config.h"], [ - AC_MSG_ERROR([ - *** Please make sure the kmod spl devel package for your - *** distribution is installed then try again. If that fails you - *** can specify the location of the spl objects with the - *** '--with-spl-obj=PATH' option. Failed to find spl_config.h in - *** any of the following: - $all_spl_config_locs]) - ]) - - AC_MSG_CHECKING([spl source version]) - AS_IF([test -r $splbuild/spl_config.h && - fgrep -q SPL_META_VERSION $splbuild/spl_config.h], [ - - splsrcver=`(echo "#include "; - echo "splsrcver=SPL_META_VERSION-SPL_META_RELEASE") | - cpp -I $splbuild | - grep "^splsrcver=" | tr -d \" | cut -d= -f2` - ]) - - AS_IF([test -z "$splsrcver"], [ - AC_MSG_RESULT([Not found]) - AC_MSG_ERROR([ - *** Cannot determine the version of the spl source. - *** Please prepare the spl source before running this script]) - ]) - - AC_MSG_RESULT([$splsrcver]) - - SPL=${splsrc} - SPL_OBJ=${splbuild} - SPL_VERSION=${splsrcver} - - AC_SUBST(SPL) - AC_SUBST(SPL_OBJ) - AC_SUBST(SPL_VERSION) - - dnl # - dnl # Detect the name used for the SPL Module.symvers file. If one - dnl # does not exist this is likely because the SPL has been configured - dnl # but not built. The '--with-spl-timeout' option can be passed - dnl # to pause here, waiting for the file to appear from a concurrently - dnl # building SPL package. If the file does not appear in time, a good - dnl # guess is made as to what this file will be named based on what it - dnl # is named in the kernel build products. This file will first be - dnl # used at link time so if the guess is wrong the build will fail - dnl # then. This unfortunately means the ZFS package does not contain a - dnl # reliable mechanism to detect symbols exported by the SPL at - dnl # configure time. - dnl # - AC_MSG_CHECKING([spl file name for module symbols]) - SPL_SYMBOLS=NONE - - while true; do - AS_IF([test -r $SPL_OBJ/Module.symvers], [ - SPL_SYMBOLS=Module.symvers - ], [test -r $SPL_OBJ/Modules.symvers], [ - SPL_SYMBOLS=Modules.symvers - ], [test -r $SPL_OBJ/module/Module.symvers], [ - SPL_SYMBOLS=Module.symvers - ], [test -r $SPL_OBJ/module/Modules.symvers], [ - SPL_SYMBOLS=Modules.symvers - ]) - - AS_IF([test $SPL_SYMBOLS != NONE -o $timeout -le 0], [ - break; - ], [ - sleep 1 - timeout=$((timeout-1)) - ]) - done - - AS_IF([test "$SPL_SYMBOLS" = NONE], [ - SPL_SYMBOLS=$LINUX_SYMBOLS - ]) - - AC_MSG_RESULT([$SPL_SYMBOLS]) - AC_SUBST(SPL_SYMBOLS) -]) - dnl # dnl # Detect the QAT module to be built against dnl # QAT provides hardware acceleration for data compression: @@ -603,6 +434,9 @@ AC_DEFUN([ZFS_AC_KERNEL_CONFIG], [ ZFS_AC_KERNEL_CONFIG_THREAD_SIZE ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC + ZFS_AC_KERNEL_CONFIG_TRIM_UNUSED_KSYMS + ZFS_AC_KERNEL_CONFIG_ZLIB_INFLATE + ZFS_AC_KERNEL_CONFIG_ZLIB_DEFLATE ]) dnl # @@ -672,6 +506,27 @@ AC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC], [ ], []) ]) +dnl # +dnl # Check CONFIG_TRIM_UNUSED_KSYMS +dnl # +dnl # Verify the kernel has CONFIG_TRIM_UNUSED_KSYMS disabled. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CONFIG_TRIM_UNUSED_KSYMS], [ + AC_MSG_CHECKING([whether CONFIG_TRIM_UNUSED_KSYM is disabled]) + ZFS_LINUX_TRY_COMPILE([ + #if defined(CONFIG_TRIM_UNUSED_KSYMS) + #error CONFIG_TRIM_UNUSED_KSYMS not defined + #endif + ],[ ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([ + *** This kernel has unused symbols trimming enabled, please disable. + *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set.]) + ]) +]) + dnl # dnl # ZFS_LINUX_CONFTEST_H dnl # diff --git a/config/zfs-build.m4 b/config/zfs-build.m4 index 49a4096d688..1d47b038484 100644 --- a/config/zfs-build.m4 +++ b/config/zfs-build.m4 @@ -95,6 +95,63 @@ AC_DEFUN([ZFS_AC_DEBUGINFO], [ AC_MSG_RESULT([$enable_debuginfo]) ]) +dnl # +dnl # Disabled by default, provides basic memory tracking. Track the total +dnl # number of bytes allocated with kmem_alloc() and freed with kmem_free(). +dnl # Then at module unload time if any bytes were leaked it will be reported +dnl # on the console. +dnl # +AC_DEFUN([ZFS_AC_DEBUG_KMEM], [ + AC_MSG_CHECKING([whether basic kmem accounting is enabled]) + AC_ARG_ENABLE([debug-kmem], + [AS_HELP_STRING([--enable-debug-kmem], + [Enable basic kmem accounting @<:@default=no@:>@])], + [], + [enable_debug_kmem=no]) + + AS_IF([test "x$enable_debug_kmem" = xyes], [ + KERNEL_DEBUG_CPPFLAGS+=" -DDEBUG_KMEM" + DEBUG_KMEM_ZFS="_with_debug_kmem" + ], [ + DEBUG_KMEM_ZFS="_without_debug_kmem" + ]) + + AC_SUBST(KERNEL_DEBUG_CPPFLAGS) + AC_SUBST(DEBUG_KMEM_ZFS) + + AC_MSG_RESULT([$enable_debug_kmem]) +]) + +dnl # +dnl # Disabled by default, provides detailed memory tracking. This feature +dnl # also requires --enable-debug-kmem to be set. When enabled not only will +dnl # total bytes be tracked but also the location of every kmem_alloc() and +dnl # kmem_free(). When the module is unloaded a list of all leaked addresses +dnl # and where they were allocated will be dumped to the console. Enabling +dnl # this feature has a significant impact on performance but it makes finding +dnl # memory leaks straight forward. +dnl # +AC_DEFUN([ZFS_AC_DEBUG_KMEM_TRACKING], [ + AC_MSG_CHECKING([whether detailed kmem tracking is enabled]) + AC_ARG_ENABLE([debug-kmem-tracking], + [AS_HELP_STRING([--enable-debug-kmem-tracking], + [Enable detailed kmem tracking @<:@default=no@:>@])], + [], + [enable_debug_kmem_tracking=no]) + + AS_IF([test "x$enable_debug_kmem_tracking" = xyes], [ + KERNEL_DEBUG_CPPFLAGS+=" -DDEBUG_KMEM_TRACKING" + DEBUG_KMEM_TRACKING_ZFS="_with_debug_kmem_tracking" + ], [ + DEBUG_KMEM_TRACKING_ZFS="_without_debug_kmem_tracking" + ]) + + AC_SUBST(KERNEL_DEBUG_CPPFLAGS) + AC_SUBST(DEBUG_KMEM_TRACKING_ZFS) + + AC_MSG_RESULT([$enable_debug_kmem_tracking]) +]) + AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [ ZFS_AC_CONFIG_ALWAYS_CC_NO_UNUSED_BUT_SET_VARIABLE ZFS_AC_CONFIG_ALWAYS_CC_NO_BOOL_COMPARE @@ -183,10 +240,11 @@ AC_DEFUN([ZFS_AC_RPM], [ ]) RPM_DEFINE_COMMON='--define "$(DEBUG_ZFS) 1"' + RPM_DEFINE_COMMON+=' --define "$(DEBUG_KMEM_ZFS) 1"' + RPM_DEFINE_COMMON+=' --define "$(DEBUG_KMEM_TRACKING_ZFS) 1"' RPM_DEFINE_COMMON+=' --define "$(DEBUGINFO_ZFS) 1"' RPM_DEFINE_COMMON+=' --define "$(ASAN_ZFS) 1"' - RPM_DEFINE_UTIL=' --define "_initconfdir $(DEFAULT_INITCONF_DIR)"' dnl # Make the next three RPM_DEFINE_UTIL additions conditional, since @@ -221,8 +279,6 @@ AC_DEFUN([ZFS_AC_RPM], [ ]) RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)"' - RPM_DEFINE_KMOD+=' --define "require_spldir $(SPL)"' - RPM_DEFINE_KMOD+=' --define "require_splobj $(SPL_OBJ)"' RPM_DEFINE_KMOD+=' --define "ksrc $(LINUX)"' RPM_DEFINE_KMOD+=' --define "kobj $(LINUX_OBJ)"' RPM_DEFINE_KMOD+=' --define "_wrong_version_format_terminate_build 0"' diff --git a/config/zfs-meta.m4 b/config/zfs-meta.m4 index 3e1429d99d8..aa0fc142093 100644 --- a/config/zfs-meta.m4 +++ b/config/zfs-meta.m4 @@ -60,9 +60,12 @@ AC_DEFUN([ZFS_AC_META], [ ZFS_META_VERSION=_ZFS_AC_META_GETVAL([Version]); if test -n "$ZFS_META_VERSION"; then - AC_DEFINE_UNQUOTED([ZFS_META_VERSION], ["$ZFS_META_VERSION"], - [Define the project version.] - ) + AC_DEFINE_UNQUOTED([ZFS_META_VERSION], + ["$ZFS_META_VERSION"], + [Define the project version.]) + AC_DEFINE_UNQUOTED([SPL_META_VERSION], + [ZFS_META_VERSION], + [Defined for legacy compatibility.]) AC_SUBST([ZFS_META_VERSION]) fi @@ -86,9 +89,12 @@ AC_DEFUN([ZFS_AC_META], [ fi if test -n "$ZFS_META_RELEASE"; then - AC_DEFINE_UNQUOTED([ZFS_META_RELEASE], ["$ZFS_META_RELEASE"], - [Define the project release.] - ) + AC_DEFINE_UNQUOTED([ZFS_META_RELEASE], + ["$ZFS_META_RELEASE"], + [Define the project release.]) + AC_DEFINE_UNQUOTED([SPL_META_RELEASE], + [ZFS_META_RELEASE], + [Defined for legacy compatibility.]) AC_SUBST([ZFS_META_RELEASE]) RELEASE="$ZFS_META_RELEASE" @@ -108,9 +114,11 @@ AC_DEFUN([ZFS_AC_META], [ test -n "$ZFS_META_RELEASE" && ZFS_META_ALIAS="$ZFS_META_ALIAS-$ZFS_META_RELEASE" AC_DEFINE_UNQUOTED([ZFS_META_ALIAS], - ["$ZFS_META_ALIAS"], - [Define the project alias string.] - ) + ["$ZFS_META_ALIAS"], + [Define the project alias string.]) + AC_DEFINE_UNQUOTED([SPL_META_ALIAS], + [ZFS_META_ALIAS], + [Defined for legacy compatibility.]) AC_SUBST([ZFS_META_ALIAS]) fi diff --git a/configure.ac b/configure.ac index a57724c13a6..e171e785f6e 100644 --- a/configure.ac +++ b/configure.ac @@ -57,6 +57,8 @@ ZFS_AC_PACKAGE ZFS_AC_CONFIG ZFS_AC_DEBUG ZFS_AC_DEBUGINFO +ZFS_AC_DEBUG_KMEM +ZFS_AC_DEBUG_KMEM_TRACKING AC_CONFIG_FILES([ Makefile @@ -135,8 +137,12 @@ AC_CONFIG_FILES([ module/zfs/Makefile module/lua/Makefile module/icp/Makefile + module/spl/Makefile include/Makefile include/linux/Makefile + include/spl/Makefile + include/spl/rpc/Makefile + include/spl/sys/Makefile include/sys/Makefile include/sys/fs/Makefile include/sys/fm/Makefile diff --git a/copy-builtin b/copy-builtin index 795025b3801..02c0926c325 100755 --- a/copy-builtin +++ b/copy-builtin @@ -32,7 +32,7 @@ make clean || true rm -rf "$KERNEL_DIR/include/zfs" "$KERNEL_DIR/fs/zfs" cp --recursive include "$KERNEL_DIR/include/zfs" cp --recursive module "$KERNEL_DIR/fs/zfs" -cp zfs_config.h "$KERNEL_DIR/" +cp zfs_config.h "$KERNEL_DIR/include/zfs/" for MODULE in "${MODULES[@]}" do @@ -43,7 +43,6 @@ done cat > "$KERNEL_DIR/fs/zfs/Kconfig" <<"EOF" config ZFS tristate "ZFS filesystem support" - depends on SPL depends on EFI_PARTITION select ZLIB_INFLATE select ZLIB_DEFLATE @@ -60,11 +59,10 @@ EOF { cat <<-"EOF" ZFS_MODULE_CFLAGS = -I$(srctree)/include/zfs - ZFS_MODULE_CFLAGS += -I$(srctree)/include/spl - ZFS_MODULE_CFLAGS += -include $(srctree)/spl_config.h - ZFS_MODULE_CFLAGS += -include $(srctree)/zfs_config.h + ZFS_MODULE_CFLAGS += -I$(srctree)/include/zfs/spl + ZFS_MODULE_CFLAGS += -include $(srctree)/include/zfs/zfs_config.h ZFS_MODULE_CFLAGS += -std=gnu99 -Wno-declaration-after-statement - ZFS_MODULE_CPPFLAGS = -DHAVE_SPL -D_KERNEL + ZFS_MODULE_CPPFLAGS = -D_KERNEL ZFS_MODULE_CPPFLAGS += -UDEBUG -DNDEBUG export ZFS_MODULE_CFLAGS ZFS_MODULE_CPPFLAGS diff --git a/include/Makefile.am b/include/Makefile.am index 23e15dac4bd..5f13505f279 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = linux sys +SUBDIRS = linux spl sys COMMON_H = \ $(top_srcdir)/include/zfeature_common.h \ diff --git a/include/linux/Makefile.am b/include/linux/Makefile.am index 89c2689f6f0..efb49520e63 100644 --- a/include/linux/Makefile.am +++ b/include/linux/Makefile.am @@ -10,7 +10,8 @@ KERNEL_H = \ $(top_srcdir)/include/linux/simd_x86.h \ $(top_srcdir)/include/linux/simd_aarch64.h \ $(top_srcdir)/include/linux/mod_compat.h \ - $(top_srcdir)/include/linux/page_compat.h + $(top_srcdir)/include/linux/page_compat.h \ + $(top_srcdir)/include/linux/compiler_compat.h USER_H = diff --git a/include/linux/blkdev_compat.h b/include/linux/blkdev_compat.h index f99980ab3e0..c42cdd37a47 100644 --- a/include/linux/blkdev_compat.h +++ b/include/linux/blkdev_compat.h @@ -32,6 +32,7 @@ #include #include #include +#include #ifndef HAVE_FMODE_T typedef unsigned __bitwise__ fmode_t; diff --git a/lib/libspl/include/attr.h b/include/linux/compiler_compat.h similarity index 75% rename from lib/libspl/include/attr.h rename to include/linux/compiler_compat.h index da1671a7562..921d32f246c 100644 --- a/lib/libspl/include/attr.h +++ b/include/linux/compiler_compat.h @@ -19,7 +19,17 @@ * CDDL HEADER END */ -#ifndef _LIBSPL_ATTR_H -#define _LIBSPL_ATTR_H +/* + * Copyright (C) 2018 Lawrence Livermore National Security, LLC. + */ + +#ifndef _ZFS_COMPILER_COMPAT_H +#define _ZFS_COMPILER_COMPAT_H + +#include + +#if !defined(READ_ONCE) +#define READ_ONCE(x) ACCESS_ONCE(x) +#endif -#endif /* _LIBSPL_ATTR_H */ +#endif /* _ZFS_COMPILER_COMPAT_H */ diff --git a/include/spl/Makefile.am b/include/spl/Makefile.am new file mode 100644 index 00000000000..bd781c08f14 --- /dev/null +++ b/include/spl/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = rpc sys diff --git a/include/spl/rpc/Makefile.am b/include/spl/rpc/Makefile.am new file mode 100644 index 00000000000..5110cc0f0c5 --- /dev/null +++ b/include/spl/rpc/Makefile.am @@ -0,0 +1,7 @@ +KERNEL_H = \ + $(top_srcdir)/include/spl/rpc/xdr.h + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include/spl/rpc +kernel_HEADERS = $(KERNEL_H) +endif diff --git a/include/spl/sys/Makefile.am b/include/spl/sys/Makefile.am new file mode 100644 index 00000000000..d58ed0e20b1 --- /dev/null +++ b/include/spl/sys/Makefile.am @@ -0,0 +1,61 @@ +KERNEL_H = \ + $(top_srcdir)/include/spl/sys/acl.h \ + $(top_srcdir)/include/spl/sys/atomic.h \ + $(top_srcdir)/include/spl/sys/byteorder.h \ + $(top_srcdir)/include/spl/sys/callb.h \ + $(top_srcdir)/include/spl/sys/callo.h \ + $(top_srcdir)/include/spl/sys/cmn_err.h \ + $(top_srcdir)/include/spl/sys/condvar.h \ + $(top_srcdir)/include/spl/sys/console.h \ + $(top_srcdir)/include/spl/sys/cred.h \ + $(top_srcdir)/include/spl/sys/ctype.h \ + $(top_srcdir)/include/spl/sys/debug.h \ + $(top_srcdir)/include/spl/sys/disp.h \ + $(top_srcdir)/include/spl/sys/dkioc_free_util.h \ + $(top_srcdir)/include/spl/sys/dkio.h \ + $(top_srcdir)/include/spl/sys/errno.h \ + $(top_srcdir)/include/spl/sys/fcntl.h \ + $(top_srcdir)/include/spl/sys/file.h \ + $(top_srcdir)/include/spl/sys/inttypes.h \ + $(top_srcdir)/include/spl/sys/isa_defs.h \ + $(top_srcdir)/include/spl/sys/kmem_cache.h \ + $(top_srcdir)/include/spl/sys/kmem.h \ + $(top_srcdir)/include/spl/sys/kobj.h \ + $(top_srcdir)/include/spl/sys/kstat.h \ + $(top_srcdir)/include/spl/sys/list.h \ + $(top_srcdir)/include/spl/sys/mode.h \ + $(top_srcdir)/include/spl/sys/mutex.h \ + $(top_srcdir)/include/spl/sys/param.h \ + $(top_srcdir)/include/spl/sys/processor.h \ + $(top_srcdir)/include/spl/sys/proc.h \ + $(top_srcdir)/include/spl/sys/random.h \ + $(top_srcdir)/include/spl/sys/rwlock.h \ + $(top_srcdir)/include/spl/sys/shrinker.h \ + $(top_srcdir)/include/spl/sys/sid.h \ + $(top_srcdir)/include/spl/sys/signal.h \ + $(top_srcdir)/include/spl/sys/stat.h \ + $(top_srcdir)/include/spl/sys/strings.h \ + $(top_srcdir)/include/spl/sys/sunddi.h \ + $(top_srcdir)/include/spl/sys/sysmacros.h \ + $(top_srcdir)/include/spl/sys/systeminfo.h \ + $(top_srcdir)/include/spl/sys/taskq.h \ + $(top_srcdir)/include/spl/sys/thread.h \ + $(top_srcdir)/include/spl/sys/time.h \ + $(top_srcdir)/include/spl/sys/timer.h \ + $(top_srcdir)/include/spl/sys/tsd.h \ + $(top_srcdir)/include/spl/sys/types32.h \ + $(top_srcdir)/include/spl/sys/types.h \ + $(top_srcdir)/include/spl/sys/uio.h \ + $(top_srcdir)/include/spl/sys/user.h \ + $(top_srcdir)/include/spl/sys/vfs.h \ + $(top_srcdir)/include/spl/sys/vmem.h \ + $(top_srcdir)/include/spl/sys/vmsystm.h \ + $(top_srcdir)/include/spl/sys/vnode.h \ + $(top_srcdir)/include/spl/sys/wait.h \ + $(top_srcdir)/include/spl/sys/zmod.h \ + $(top_srcdir)/include/spl/sys/zone.h + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include/spl/sys +kernel_HEADERS = $(KERNEL_H) +endif diff --git a/include/spl/sys/debug.h b/include/spl/sys/debug.h index a4a4580666a..692d6c61ecb 100644 --- a/include/spl/sys/debug.h +++ b/include/spl/sys/debug.h @@ -92,7 +92,6 @@ void spl_dumpstack(void); */ #ifdef NDEBUG -#define SPL_DEBUG_STR "" #define ASSERT(x) ((void)0) #define ASSERTV(x) #define ASSERT3B(x,y,z) ((void)0) @@ -108,7 +107,6 @@ void spl_dumpstack(void); */ #else -#define SPL_DEBUG_STR " (DEBUG mode)" #define ASSERT(cond) VERIFY(cond) #define ASSERTV(x) x #define ASSERT3B(x,y,z) VERIFY3B(x, y, z) diff --git a/lib/libspl/include/sys/compress.h b/include/spl/sys/errno.h similarity index 60% rename from lib/libspl/include/sys/compress.h rename to include/spl/sys/errno.h index 282f178ba96..6015b1a3e2f 100644 --- a/lib/libspl/include/sys/compress.h +++ b/include/spl/sys/errno.h @@ -20,11 +20,28 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2000 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#ifndef _LIBSPL_SYS_COMPRESS_H -#define _LIBSPL_SYS_COMPRESS_H +/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ -#endif /* _LIBSPL_SYS_COMPRESS_H */ +/* + * University Copyright- Copyright (c) 1982, 1986, 1988 + * The Regents of the University of California + * All Rights Reserved + * + * University Acknowledgment- Portions of this document are derived from + * software developed by the University of California, Berkeley, and its + * contributors. + */ + +#ifndef _SYS_ERRNO_H +#define _SYS_ERRNO_H + +#include + +#define ENOTSUP EOPNOTSUPP + +#endif /* _SYS_ERRNO_H */ diff --git a/include/spl/sys/mutex.h b/include/spl/sys/mutex.h index f906d49d4a7..ed0cd4932cf 100644 --- a/include/spl/sys/mutex.h +++ b/include/spl/sys/mutex.h @@ -28,6 +28,7 @@ #include #include #include +#include typedef enum { MUTEX_DEFAULT = 0, @@ -59,7 +60,7 @@ spl_mutex_clear_owner(kmutex_t *mp) mp->m_owner = NULL; } -#define mutex_owner(mp) (ACCESS_ONCE((mp)->m_owner)) +#define mutex_owner(mp) (READ_ONCE((mp)->m_owner)) #define mutex_owned(mp) (mutex_owner(mp) == current) #define MUTEX_HELD(mp) mutex_owned(mp) #define MUTEX_NOT_HELD(mp) (!MUTEX_HELD(mp)) diff --git a/include/spl/sys/rwlock.h b/include/spl/sys/rwlock.h index b44ceab667f..088e28b443c 100644 --- a/include/spl/sys/rwlock.h +++ b/include/spl/sys/rwlock.h @@ -27,6 +27,7 @@ #include #include +#include /* Linux kernel compatibility */ #if defined(CONFIG_PREEMPT_RT_FULL) diff --git a/include/spl/sys/sysmacros.h b/include/spl/sys/sysmacros.h index 839e7fd8c48..e4bd80aa132 100644 --- a/include/spl/sys/sysmacros.h +++ b/include/spl/sys/sysmacros.h @@ -79,7 +79,6 @@ #define max_ncpus num_possible_cpus() #define boot_ncpus num_online_cpus() #define CPU_SEQID smp_processor_id() -#define _NOTE(x) #define is_system_labeled() 0 #ifndef RLIM64_INFINITY diff --git a/include/spl/sys/types.h b/include/spl/sys/types.h index a5b478127a7..3bb3ed3e25e 100644 --- a/include/spl/sys/types.h +++ b/include/spl/sys/types.h @@ -28,11 +28,11 @@ #include #ifndef ULLONG_MAX -#define ULLONG_MAX (~0ULL) +#define ULLONG_MAX (~0ULL) #endif #ifndef LLONG_MAX -#define LLONG_MAX ((long long)(~0ULL>>1)) +#define LLONG_MAX ((long long)(~0ULL>>1)) #endif typedef enum { diff --git a/include/spl/sys/vnode.h b/include/spl/sys/vnode.h index a3f7828e743..d3b903f13a5 100644 --- a/include/spl/sys/vnode.h +++ b/include/spl/sys/vnode.h @@ -86,7 +86,7 @@ #define AT_MTIME ATTR_MTIME #define AT_CTIME ATTR_CTIME -#define ATTR_XVATTR (1 << 31) +#define ATTR_XVATTR (1U << 31) #define AT_XVATTR ATTR_XVATTR #define ATTR_IATTR_MASK (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE | \ @@ -120,7 +120,7 @@ typedef enum vtype { typedef struct vattr { enum vtype va_type; /* vnode type */ - uint_t va_mask; /* attribute bit-mask */ + uint32_t va_mask; /* attribute bit-mask */ ushort_t va_mode; /* acc mode */ uid_t va_uid; /* owner uid */ gid_t va_gid; /* owner gid */ diff --git a/include/sys/Makefile.am b/include/sys/Makefile.am index e73be52f3ec..06306b87643 100644 --- a/include/sys/Makefile.am +++ b/include/sys/Makefile.am @@ -42,6 +42,7 @@ COMMON_H = \ $(top_srcdir)/include/sys/mmp.h \ $(top_srcdir)/include/sys/mntent.h \ $(top_srcdir)/include/sys/multilist.h \ + $(top_srcdir)/include/sys/note.h \ $(top_srcdir)/include/sys/nvpair.h \ $(top_srcdir)/include/sys/nvpair_impl.h \ $(top_srcdir)/include/sys/pathname.h \ diff --git a/include/sys/abd.h b/include/sys/abd.h index cd710501370..077bb9d1761 100644 --- a/include/sys/abd.h +++ b/include/sys/abd.h @@ -27,7 +27,6 @@ #define _ABD_H #include -#include #include #include #ifdef _KERNEL @@ -116,7 +115,7 @@ int abd_cmp(abd_t *, abd_t *); int abd_cmp_buf_off(abd_t *, const void *, size_t, size_t); void abd_zero_off(abd_t *, size_t, size_t); -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) unsigned int abd_scatter_bio_map_off(struct bio *, abd_t *, unsigned int, size_t); unsigned long abd_nr_pages_off(abd_t *, unsigned int, size_t); diff --git a/include/sys/fm/protocol.h b/include/sys/fm/protocol.h index 74aef3a9227..78031f7c15e 100644 --- a/include/sys/fm/protocol.h +++ b/include/sys/fm/protocol.h @@ -31,7 +31,6 @@ extern "C" { #endif #ifdef _KERNEL -#include #include #else #include diff --git a/lib/libspl/include/sys/note.h b/include/sys/note.h similarity index 98% rename from lib/libspl/include/sys/note.h rename to include/sys/note.h index 6625b68d9eb..33b5476686e 100644 --- a/lib/libspl/include/sys/note.h +++ b/include/sys/note.h @@ -47,6 +47,8 @@ extern "C" { #define _NOTE(s) #endif +#define NOTE(s) _NOTE(s) + #ifdef __cplusplus } #endif diff --git a/include/sys/nvpair.h b/include/sys/nvpair.h index d2dfad5ca2b..a840c4b05b2 100644 --- a/include/sys/nvpair.h +++ b/include/sys/nvpair.h @@ -29,11 +29,6 @@ #include #include #include -#include - -#if defined(_KERNEL) && !defined(_BOOT) -#include -#endif #ifdef __cplusplus extern "C" { @@ -142,7 +137,7 @@ struct nv_alloc_ops { extern const nv_alloc_ops_t *nv_fixed_ops; extern nv_alloc_t *nv_alloc_nosleep; -#if defined(_KERNEL) && !defined(_BOOT) +#if defined(_KERNEL) extern nv_alloc_t *nv_alloc_sleep; extern nv_alloc_t *nv_alloc_pushpage; #endif diff --git a/include/sys/xvattr.h b/include/sys/xvattr.h index 1c919454d8e..68610c496b1 100644 --- a/include/sys/xvattr.h +++ b/include/sys/xvattr.h @@ -40,6 +40,7 @@ #define _SYS_XVATTR_H #include +#include #define AV_SCANSTAMP_SZ 32 /* length of anti-virus scanstamp */ diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h index 37bdc533c4c..170a909b4e4 100644 --- a/include/sys/zfs_context.h +++ b/include/sys/zfs_context.h @@ -32,31 +32,25 @@ #include #include -#include #include #include -#include +#include +#include #include #include #include #include #include -#include #include -#include -#include #include -#include #include #include #include +#include #include -#include #include #include -#include #include -#include #include #include #include @@ -76,8 +70,6 @@ #define _SYS_MUTEX_H #define _SYS_RWLOCK_H #define _SYS_CONDVAR_H -#define _SYS_SYSTM_H -#define _SYS_T_LOCK_H #define _SYS_VNODE_H #define _SYS_VFS_H #define _SYS_SUNDDI_H diff --git a/include/sys/zfs_delay.h b/include/sys/zfs_delay.h index b56a7daa7c6..40e617dba96 100644 --- a/include/sys/zfs_delay.h +++ b/include/sys/zfs_delay.h @@ -22,7 +22,7 @@ #ifndef _SYS_FS_ZFS_DELAY_H #define _SYS_FS_ZFS_DELAY_H -#include +#include /* * Generic wrapper to sleep until a given time. diff --git a/include/sys/zfs_fuid.h b/include/sys/zfs_fuid.h index 0feb3ce4bb7..5c56f7fccc2 100644 --- a/include/sys/zfs_fuid.h +++ b/include/sys/zfs_fuid.h @@ -27,7 +27,6 @@ #define _SYS_FS_ZFS_FUID_H #ifdef _KERNEL -#include #include #include #include diff --git a/include/sys/zfs_znode.h b/include/sys/zfs_znode.h index 311babe5915..3f2bd1fbb14 100644 --- a/include/sys/zfs_znode.h +++ b/include/sys/zfs_znode.h @@ -30,7 +30,6 @@ #ifdef _KERNEL #include #include -#include #include #include #include diff --git a/include/sys/zpl.h b/include/sys/zpl.h index 65ed4313603..5df7bd1ac9c 100644 --- a/include/sys/zpl.h +++ b/include/sys/zpl.h @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include diff --git a/lib/libefi/rdwr_efi.c b/lib/libefi/rdwr_efi.c index e8a5ddd318b..455fe527da4 100644 --- a/lib/libefi/rdwr_efi.c +++ b/lib/libefi/rdwr_efi.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include diff --git a/lib/libnvpair/libnvpair.c b/lib/libnvpair/libnvpair.c index 0cf38c9505c..2e9ea1c174e 100644 --- a/lib/libnvpair/libnvpair.c +++ b/lib/libnvpair/libnvpair.c @@ -28,8 +28,8 @@ #include #include #include +#include #include -#include #include "libnvpair.h" /* diff --git a/lib/libshare/nfs.c b/lib/libshare/nfs.c index 0cfd42c1af0..5c8976e15aa 100644 --- a/lib/libshare/nfs.c +++ b/lib/libshare/nfs.c @@ -26,8 +26,10 @@ */ #include +#include #include #include +#include #include #include #include diff --git a/lib/libshare/smb.c b/lib/libshare/smb.c index 76145bd9316..ffae5699c01 100644 --- a/lib/libshare/smb.c +++ b/lib/libshare/smb.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include diff --git a/lib/libspl/include/Makefile.am b/lib/libspl/include/Makefile.am index 7882c1b9c6d..7f4098a16aa 100644 --- a/lib/libspl/include/Makefile.am +++ b/lib/libspl/include/Makefile.am @@ -4,19 +4,16 @@ libspldir = $(includedir)/libspl libspl_HEADERS = \ $(top_srcdir)/lib/libspl/include/assert.h \ $(top_srcdir)/lib/libspl/include/atomic.h \ - $(top_srcdir)/lib/libspl/include/attr.h \ $(top_srcdir)/lib/libspl/include/devid.h \ $(top_srcdir)/lib/libspl/include/libdevinfo.h \ $(top_srcdir)/lib/libspl/include/libgen.h \ $(top_srcdir)/lib/libspl/include/libshare.h \ $(top_srcdir)/lib/libspl/include/limits.h \ $(top_srcdir)/lib/libspl/include/locale.h \ - $(top_srcdir)/lib/libspl/include/note.h \ $(top_srcdir)/lib/libspl/include/statcommon.h \ $(top_srcdir)/lib/libspl/include/stdio.h \ $(top_srcdir)/lib/libspl/include/stdlib.h \ $(top_srcdir)/lib/libspl/include/string.h \ - $(top_srcdir)/lib/libspl/include/strings.h \ $(top_srcdir)/lib/libspl/include/stropts.h \ $(top_srcdir)/lib/libspl/include/synch.h \ $(top_srcdir)/lib/libspl/include/thread.h \ diff --git a/lib/libspl/include/note.h b/lib/libspl/include/note.h deleted file mode 100644 index cb6b33e1d91..00000000000 --- a/lib/libspl/include/note.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright (c) 1994 by Sun Microsystems, Inc. - */ - -/* - * note.h: interface for annotating source with info for tools - * - * NOTE is the default interface, but if the identifier NOTE is in use for - * some other purpose, you may prepare a similar header file using your own - * identifier, mapping that identifier to _NOTE. Also, exported header - * files should *not* use NOTE, since the name may already be in use in - * a program's namespace. Rather, exported header files should include - * sys/note.h directly and use _NOTE. For consistency, all kernel source - * should use _NOTE. - */ - -#ifndef _NOTE_H -#define _NOTE_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define NOTE _NOTE - -#ifdef __cplusplus -} -#endif - -#endif /* _NOTE_H */ diff --git a/lib/libspl/include/sys/Makefile.am b/lib/libspl/include/sys/Makefile.am index 9c67e14b079..e7af317e0c6 100644 --- a/lib/libspl/include/sys/Makefile.am +++ b/lib/libspl/include/sys/Makefile.am @@ -8,7 +8,6 @@ libspl_HEADERS = \ $(top_srcdir)/lib/libspl/include/sys/byteorder.h \ $(top_srcdir)/lib/libspl/include/sys/callb.h \ $(top_srcdir)/lib/libspl/include/sys/cmn_err.h \ - $(top_srcdir)/lib/libspl/include/sys/compress.h \ $(top_srcdir)/lib/libspl/include/sys/cred.h \ $(top_srcdir)/lib/libspl/include/sys/debug.h \ $(top_srcdir)/lib/libspl/include/sys/dkio.h \ @@ -28,7 +27,6 @@ libspl_HEADERS = \ $(top_srcdir)/lib/libspl/include/sys/mkdev.h \ $(top_srcdir)/lib/libspl/include/sys/mnttab.h \ $(top_srcdir)/lib/libspl/include/sys/mount.h \ - $(top_srcdir)/lib/libspl/include/sys/note.h \ $(top_srcdir)/lib/libspl/include/sys/param.h \ $(top_srcdir)/lib/libspl/include/sys/policy.h \ $(top_srcdir)/lib/libspl/include/sys/poll.h \ @@ -37,11 +35,12 @@ libspl_HEADERS = \ $(top_srcdir)/lib/libspl/include/sys/signal.h \ $(top_srcdir)/lib/libspl/include/sys/stack.h \ $(top_srcdir)/lib/libspl/include/sys/stat.h \ + $(top_srcdir)/lib/libspl/include/sys/stdtypes.h \ + $(top_srcdir)/lib/libspl/include/sys/strings.h \ $(top_srcdir)/lib/libspl/include/sys/stropts.h \ $(top_srcdir)/lib/libspl/include/sys/sunddi.h \ $(top_srcdir)/lib/libspl/include/sys/sysmacros.h \ $(top_srcdir)/lib/libspl/include/sys/systeminfo.h \ - $(top_srcdir)/lib/libspl/include/sys/systm.h \ $(top_srcdir)/lib/libspl/include/sys/time.h \ $(top_srcdir)/lib/libspl/include/sys/types32.h \ $(top_srcdir)/lib/libspl/include/sys/types.h \ diff --git a/lib/libspl/include/sys/systm.h b/lib/libspl/include/sys/stdtypes.h similarity index 53% rename from lib/libspl/include/sys/systm.h rename to lib/libspl/include/sys/stdtypes.h index 1ed031d4e8f..c26e2dc96c4 100644 --- a/lib/libspl/include/sys/systm.h +++ b/lib/libspl/include/sys/stdtypes.h @@ -19,12 +19,36 @@ * * CDDL HEADER END */ -/* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ -#ifndef _LIBSPL_SYS_SYSTM_H -#define _LIBSPL_SYS_SYSTM_H +#ifndef __SYS_STDTYPES_H +#define __SYS_STDTYPES_H + +typedef enum { + B_FALSE = 0, + B_TRUE = 1 +} boolean_t; + +typedef unsigned char uchar_t; +typedef unsigned short ushort_t; +typedef unsigned int uint_t; +typedef unsigned long ulong_t; +typedef unsigned long long u_longlong_t; +typedef long long longlong_t; + +typedef longlong_t offset_t; +typedef u_longlong_t u_offset_t; +typedef u_longlong_t len_t; +typedef longlong_t diskaddr_t; + +typedef ulong_t pgcnt_t; /* number of pages */ +typedef long spgcnt_t; /* signed number of pages */ + +typedef short pri_t; +typedef ushort_t o_mode_t; /* old file attribute type */ + +typedef int major_t; +typedef int minor_t; + +typedef short index_t; -#endif /* _LIBSPL_SYS_SYSTM_H */ +#endif /* __SYS_STDTYPES_H */ diff --git a/lib/libspl/include/strings.h b/lib/libspl/include/sys/strings.h similarity index 92% rename from lib/libspl/include/strings.h rename to lib/libspl/include/sys/strings.h index 3f35af4a4fa..c142047dcdb 100644 --- a/lib/libspl/include/strings.h +++ b/lib/libspl/include/sys/strings.h @@ -24,10 +24,10 @@ * Use is subject to license terms. */ -#ifndef _LIBSPL_STRINGS_H -#define _LIBSPL_STRINGS_H +#ifndef _LIBSPL_SYS_STRINGS_H +#define _LIBSPL_SYS_STRINGS_H #include -#include_next +#include #endif diff --git a/lib/libspl/include/sys/sysmacros.h b/lib/libspl/include/sys/sysmacros.h index 31f347c6fd5..22fcb04b94e 100644 --- a/lib/libspl/include/sys/sysmacros.h +++ b/lib/libspl/include/sys/sysmacros.h @@ -98,4 +98,6 @@ #define offsetof(s, m) ((size_t)(&(((s *)0)->m))) #endif +#define _NOTE(x) + #endif /* _LIBSPL_SYS_SYSMACROS_H */ diff --git a/lib/libspl/include/sys/types.h b/lib/libspl/include/sys/types.h index 7fb53730f85..ea02ffac93a 100644 --- a/lib/libspl/include/sys/types.h +++ b/lib/libspl/include/sys/types.h @@ -38,40 +38,15 @@ #include_next #include #include +#include #ifndef HAVE_INTTYPES #include - -typedef enum boolean { B_FALSE, B_TRUE } boolean_t; - -typedef unsigned char uchar_t; -typedef unsigned short ushort_t; -typedef unsigned int uint_t; -typedef unsigned long ulong_t; - -typedef long long longlong_t; -typedef unsigned long long u_longlong_t; #endif /* HAVE_INTTYPES */ -typedef longlong_t offset_t; -typedef u_longlong_t u_offset_t; -typedef u_longlong_t len_t; -typedef longlong_t diskaddr_t; - -typedef ulong_t pgcnt_t; /* number of pages */ -typedef long spgcnt_t; /* signed number of pages */ - -typedef short pri_t; - typedef int zoneid_t; typedef int projid_t; -typedef int major_t; -typedef int minor_t; - -typedef ushort_t o_mode_t; /* old file attribute type */ -typedef short index_t; - /* * Definitions remaining from previous partial support for 64-bit file * offsets. This partial support for devices greater than 2gb requires diff --git a/lib/libspl/include/sys/types32.h b/lib/libspl/include/sys/types32.h index 9ab3b0782fa..bb41aa34bee 100644 --- a/lib/libspl/include/sys/types32.h +++ b/lib/libspl/include/sys/types32.h @@ -26,8 +26,6 @@ #ifndef _SYS_TYPES32_H #define _SYS_TYPES32_H - - #include #ifdef __cplusplus diff --git a/lib/libspl/include/umem.h b/lib/libspl/include/umem.h index 5b10ac801de..59dc9314426 100644 --- a/lib/libspl/include/umem.h +++ b/lib/libspl/include/umem.h @@ -39,6 +39,7 @@ #include #include +#include #ifdef __cplusplus extern "C" { diff --git a/lib/libuutil/uu_dprintf.c b/lib/libuutil/uu_dprintf.c index d51fa81e897..6958057b29c 100644 --- a/lib/libuutil/uu_dprintf.c +++ b/lib/libuutil/uu_dprintf.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #define FACILITY_FMT "%s (%s): " diff --git a/lib/libzfs/libzfs_diff.c b/lib/libzfs/libzfs_diff.c index 249334acd95..fb7a1fcf419 100644 --- a/lib/libzfs/libzfs_diff.c +++ b/lib/libzfs/libzfs_diff.c @@ -37,7 +37,6 @@ #include #include #include -#include #include #include #include @@ -49,7 +48,7 @@ #include "libzfs_impl.h" #define ZDIFF_SNAPDIR "/.zfs/snapshot/" -#define ZDIFF_SHARESDIR "/.zfs/shares/" +#define ZDIFF_SHARESDIR "/.zfs/shares/" #define ZDIFF_PREFIX "zfs-diff-%d" #define ZDIFF_ADDED '+' diff --git a/man/man1/zhack.1 b/man/man1/zhack.1 index 96910119c13..11d300b7001 100644 --- a/man/man1/zhack.1 +++ b/man/man1/zhack.1 @@ -93,7 +93,6 @@ descriptions_obj: .SH AUTHORS This man page was written by Darik Horn . .SH SEE ALSO -.BR splat (1), .BR zfs (8), .BR zpool-features (5), .BR ztest (1) diff --git a/man/man5/Makefile.am b/man/man5/Makefile.am index 4746914c593..1c0683ee309 100644 --- a/man/man5/Makefile.am +++ b/man/man5/Makefile.am @@ -1,4 +1,9 @@ -dist_man_MANS = vdev_id.conf.5 zpool-features.5 zfs-module-parameters.5 zfs-events.5 +dist_man_MANS = \ + vdev_id.conf.5 \ + zpool-features.5 \ + spl-module-parameters.5 \ + zfs-module-parameters.5 \ + zfs-events.5 install-data-local: $(INSTALL) -d -m 0755 "$(DESTDIR)$(mandir)/man5" diff --git a/module/Makefile.in b/module/Makefile.in index 4cd6988bbac..82d155dd31a 100644 --- a/module/Makefile.in +++ b/module/Makefile.in @@ -2,6 +2,7 @@ subdir-m += avl subdir-m += icp subdir-m += lua subdir-m += nvpair +subdir-m += spl subdir-m += unicode subdir-m += zcommon subdir-m += zfs @@ -10,11 +11,11 @@ INSTALL_MOD_DIR ?= extra ZFS_MODULE_CFLAGS += -std=gnu99 -Wno-declaration-after-statement ZFS_MODULE_CFLAGS += @KERNEL_DEBUG_CFLAGS@ -ZFS_MODULE_CFLAGS += -include @SPL_OBJ@/spl_config.h ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h -ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include -I@SPL@/include -I@SPL@ +ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include/spl +ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include -ZFS_MODULE_CPPFLAGS += -DHAVE_SPL -D_KERNEL +ZFS_MODULE_CPPFLAGS += -D_KERNEL ZFS_MODULE_CPPFLAGS += @KERNEL_DEBUG_CPPFLAGS@ @CONFIG_QAT_TRUE@ZFS_MODULE_CFLAGS += -I@QAT_SRC@/include @@ -25,21 +26,6 @@ export ZFS_MODULE_CFLAGS ZFS_MODULE_CPPFLAGS SUBDIR_TARGETS = icp lua modules: - @# Make the exported SPL symbols available to these modules. - @# They may be in the root of SPL_OBJ when building against - @# installed devel headers, or they may be in the module - @# subdirectory when building against the spl source tree. - @if [ -f @SPL_OBJ@/@SPL_SYMBOLS@ ]; then \ - cp @SPL_OBJ@/@SPL_SYMBOLS@ .; \ - elif [ -f @SPL_OBJ@/module/@SPL_SYMBOLS@ ]; then \ - cp @SPL_OBJ@/module/@SPL_SYMBOLS@ .; \ - else \ - echo -e "\n" \ - "*** Missing spl symbols ensure you have built the spl:\n" \ - "*** - @SPL_OBJ@/@SPL_SYMBOLS@, or\n" \ - "*** - @SPL_OBJ@/module/@SPL_SYMBOLS@\n"; \ - exit 1; \ - fi list='$(SUBDIR_TARGETS)'; for targetdir in $$list; do \ $(MAKE) -C $$targetdir; \ done @@ -50,7 +36,6 @@ clean: @# is defined. This indicates that kernel modules should be built. @CONFIG_KERNEL_TRUE@ $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNEL_MAKE@ $@ - if [ -f @SPL_SYMBOLS@ ]; then $(RM) @SPL_SYMBOLS@; fi if [ -f @LINUX_SYMBOLS@ ]; then $(RM) @LINUX_SYMBOLS@; fi if [ -f Module.markers ]; then $(RM) Module.markers; fi diff --git a/module/avl/avl.c b/module/avl/avl.c index f024cdf61cb..736dcee8457 100644 --- a/module/avl/avl.c +++ b/module/avl/avl.c @@ -992,7 +992,9 @@ avl_destroy_nodes(avl_tree_t *tree, void **cookie) return (AVL_NODE2DATA(node, off)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) +#include + static int __init avl_init(void) { diff --git a/module/icp/algs/edonr/edonr.c b/module/icp/algs/edonr/edonr.c index 8ae98989086..7c677095f1e 100644 --- a/module/icp/algs/edonr/edonr.c +++ b/module/icp/algs/edonr/edonr.c @@ -29,12 +29,7 @@ * Portions copyright (c) 2013, Saso Kiselkov, All rights reserved */ -/* determine where we can get bcopy/bzero declarations */ -#ifdef _KERNEL -#include -#else -#include -#endif +#include #include #include diff --git a/module/icp/algs/edonr/edonr_byteorder.h b/module/icp/algs/edonr/edonr_byteorder.h index d17e8f1fd4b..532dfd7434c 100644 --- a/module/icp/algs/edonr/edonr_byteorder.h +++ b/module/icp/algs/edonr/edonr_byteorder.h @@ -34,7 +34,7 @@ #ifndef _CRYPTO_EDONR_BYTEORDER_H #define _CRYPTO_EDONR_BYTEORDER_H - +#include #include #if defined(__BYTE_ORDER) diff --git a/module/icp/algs/skein/skein.c b/module/icp/algs/skein/skein.c index 0981eee0892..0187f7be6ca 100644 --- a/module/icp/algs/skein/skein.c +++ b/module/icp/algs/skein/skein.c @@ -7,8 +7,8 @@ #define SKEIN_PORT_CODE /* instantiate any code in skein_port.h */ +#include #include -#include #include /* get the Skein API definitions */ #include "skein_impl.h" /* get internal definitions */ diff --git a/module/icp/algs/skein/skein_impl.h b/module/icp/algs/skein/skein_impl.h index e83a06971bb..ea834e6199f 100644 --- a/module/icp/algs/skein/skein_impl.h +++ b/module/icp/algs/skein/skein_impl.h @@ -25,16 +25,11 @@ #define _SKEIN_IMPL_H_ #include +#include +#include #include "skein_impl.h" #include "skein_port.h" -/* determine where we can get bcopy/bzero declarations */ -#ifdef _KERNEL -#include -#else -#include -#endif - /* * "Internal" Skein definitions * -- not needed for sequential hashing API, but will be diff --git a/module/icp/algs/skein/skein_port.h b/module/icp/algs/skein/skein_port.h index 1b022523699..4fe268bb5a4 100644 --- a/module/icp/algs/skein/skein_port.h +++ b/module/icp/algs/skein/skein_port.h @@ -16,7 +16,6 @@ #define _SKEIN_PORT_H_ #include /* get integer type definitions */ -#include /* for bcopy() */ #ifndef RotL_64 #define RotL_64(x, N) (((x) << (N)) | ((x) >> (64 - (N)))) diff --git a/module/icp/api/kcf_cipher.c b/module/icp/api/kcf_cipher.c index 2585b7fedae..1c9f6873e2c 100644 --- a/module/icp/api/kcf_cipher.c +++ b/module/icp/api/kcf_cipher.c @@ -915,7 +915,7 @@ crypto_decrypt_single(crypto_context_t context, crypto_data_t *ciphertext, return (error); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(crypto_cipher_init_prov); EXPORT_SYMBOL(crypto_cipher_init); EXPORT_SYMBOL(crypto_encrypt_prov); diff --git a/module/icp/api/kcf_ctxops.c b/module/icp/api/kcf_ctxops.c index 3f90674b0a3..b9b9cb74e04 100644 --- a/module/icp/api/kcf_ctxops.c +++ b/module/icp/api/kcf_ctxops.c @@ -145,7 +145,7 @@ crypto_destroy_ctx_template(crypto_ctx_template_t tmpl) kmem_free(ctx_tmpl, sizeof (kcf_ctx_template_t)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(crypto_create_ctx_template); EXPORT_SYMBOL(crypto_destroy_ctx_template); #endif diff --git a/module/icp/api/kcf_digest.c b/module/icp/api/kcf_digest.c index b58d3b45282..87090fd527d 100644 --- a/module/icp/api/kcf_digest.c +++ b/module/icp/api/kcf_digest.c @@ -482,7 +482,7 @@ crypto_digest_single(crypto_context_t context, crypto_data_t *data, return (error); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(crypto_digest_prov); EXPORT_SYMBOL(crypto_digest); EXPORT_SYMBOL(crypto_digest_init_prov); diff --git a/module/icp/api/kcf_mac.c b/module/icp/api/kcf_mac.c index 2b4691c0371..21ab94fa5bd 100644 --- a/module/icp/api/kcf_mac.c +++ b/module/icp/api/kcf_mac.c @@ -635,7 +635,7 @@ crypto_mac_single(crypto_context_t context, crypto_data_t *data, return (error); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(crypto_mac_prov); EXPORT_SYMBOL(crypto_mac); EXPORT_SYMBOL(crypto_mac_verify_prov); diff --git a/module/icp/api/kcf_miscapi.c b/module/icp/api/kcf_miscapi.c index 09d50f7be17..c0f415b264a 100644 --- a/module/icp/api/kcf_miscapi.c +++ b/module/icp/api/kcf_miscapi.c @@ -122,6 +122,6 @@ kcf_walk_ntfylist(uint32_t event, void *event_arg) mutex_exit(&ntfy_list_lock); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(crypto_mech2id); #endif diff --git a/module/icp/illumos-crypto.c b/module/icp/illumos-crypto.c index a3986a2e5c5..c2fcf1ff729 100644 --- a/module/icp/illumos-crypto.c +++ b/module/icp/illumos-crypto.c @@ -149,7 +149,7 @@ icp_init(void) return (0); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) module_exit(icp_fini); module_init(icp_init); MODULE_AUTHOR(ZFS_META_AUTHOR); diff --git a/module/icp/io/edonr_mod.c b/module/icp/io/edonr_mod.c index cb748a954e2..544814a9847 100644 --- a/module/icp/io/edonr_mod.c +++ b/module/icp/io/edonr_mod.c @@ -27,7 +27,6 @@ #include #include #include -#include #include /* diff --git a/module/icp/io/skein_mod.c b/module/icp/io/skein_mod.c index 90e8a6a0252..88215fe89b4 100644 --- a/module/icp/io/skein_mod.c +++ b/module/icp/io/skein_mod.c @@ -27,7 +27,6 @@ #include #include #include -#include #define SKEIN_MODULE_IMPL #include diff --git a/module/lua/lapi.c b/module/lua/lapi.c index 54c74d38e91..81969673b9e 100644 --- a/module/lua/lapi.c +++ b/module/lua/lapi.c @@ -1279,7 +1279,7 @@ LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1, luaC_objbarrier(L, f1, *up2); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) static int __init lua_init(void) diff --git a/module/lua/lauxlib.c b/module/lua/lauxlib.c index 85ed00c64e2..1e0356e7c00 100644 --- a/module/lua/lauxlib.c +++ b/module/lua/lauxlib.c @@ -788,7 +788,7 @@ LUALIB_API void luaL_checkversion_ (lua_State *L, lua_Number ver) { lua_pop(L, 1); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(luaL_argerror); EXPORT_SYMBOL(luaL_error); diff --git a/module/lua/lbaselib.c b/module/lua/lbaselib.c index 004a1939d27..854649a0fb4 100644 --- a/module/lua/lbaselib.c +++ b/module/lua/lbaselib.c @@ -288,7 +288,7 @@ LUAMOD_API int luaopen_base (lua_State *L) { return 1; } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(luaopen_base); diff --git a/module/lua/lcorolib.c b/module/lua/lcorolib.c index af8bea69514..0300e7ee17d 100644 --- a/module/lua/lcorolib.c +++ b/module/lua/lcorolib.c @@ -151,7 +151,7 @@ LUAMOD_API int luaopen_coroutine (lua_State *L) { return 1; } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(luaopen_coroutine); diff --git a/module/lua/lstrlib.c b/module/lua/lstrlib.c index 24a3321bdef..49ba70fafdb 100644 --- a/module/lua/lstrlib.c +++ b/module/lua/lstrlib.c @@ -1032,7 +1032,7 @@ LUAMOD_API int luaopen_string (lua_State *L) { return 1; } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(luaopen_string); diff --git a/module/lua/ltablib.c b/module/lua/ltablib.c index d01b5ba076b..be5b6375e4a 100644 --- a/module/lua/ltablib.c +++ b/module/lua/ltablib.c @@ -281,7 +281,7 @@ LUAMOD_API int luaopen_table (lua_State *L) { return 1; } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(luaopen_table); diff --git a/module/nvpair/fnvpair.c b/module/nvpair/fnvpair.c index a91b9524d8a..ce151d6920f 100644 --- a/module/nvpair/fnvpair.c +++ b/module/nvpair/fnvpair.c @@ -508,7 +508,7 @@ fnvpair_value_nvlist(nvpair_t *nvp) return (rv); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(fnvlist_alloc); EXPORT_SYMBOL(fnvlist_free); diff --git a/module/nvpair/nvpair.c b/module/nvpair/nvpair.c index 512f9a99842..97ab7de40eb 100644 --- a/module/nvpair/nvpair.c +++ b/module/nvpair/nvpair.c @@ -24,25 +24,20 @@ * Copyright (c) 2015, 2017 by Delphix. All rights reserved. */ -#include #include #include -#include #include #include -#include +#include +#include #include -#if defined(_KERNEL) && !defined(_BOOT) -#include -#include +#if defined(_KERNEL) #include #include #else #include #include -#include -#include #include #endif @@ -270,7 +265,7 @@ nvlist_nvflag(nvlist_t *nvl) static nv_alloc_t * nvlist_nv_alloc(int kmflag) { -#if defined(_KERNEL) && !defined(_BOOT) +#if defined(_KERNEL) switch (kmflag) { case KM_SLEEP: return (nv_alloc_sleep); @@ -281,7 +276,7 @@ nvlist_nv_alloc(int kmflag) } #else return (nv_alloc_nosleep); -#endif /* _KERNEL && !_BOOT */ +#endif /* _KERNEL */ } /* @@ -1680,7 +1675,7 @@ nvlist_lookup_nvpair_ei_sep(nvlist_t *nvl, const char *name, const char sep, sepp = idxp; /* determine the index value */ -#if defined(_KERNEL) && !defined(_BOOT) +#if defined(_KERNEL) if (ddi_strtol(idxp, &idxep, 0, &idx)) goto fail; #else @@ -3320,7 +3315,7 @@ nvs_xdr(nvstream_t *nvs, nvlist_t *nvl, char *buf, size_t *buflen) return (err); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) static int __init nvpair_init(void) { diff --git a/module/nvpair/nvpair_alloc_fixed.c b/module/nvpair/nvpair_alloc_fixed.c index 0d4e12b972b..c8a604a2bfa 100644 --- a/module/nvpair/nvpair_alloc_fixed.c +++ b/module/nvpair/nvpair_alloc_fixed.c @@ -24,18 +24,9 @@ * Use is subject to license terms. */ - - -#include #include #include #include -#if defined(_KERNEL) && !defined(_BOOT) -#include -#else -#include -#include -#endif /* * This allocator is very simple. @@ -119,6 +110,6 @@ const nv_alloc_ops_t nv_fixed_ops_def = { const nv_alloc_ops_t *nv_fixed_ops = &nv_fixed_ops_def; -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(nv_fixed_ops); #endif diff --git a/module/spl/Makefile.in b/module/spl/Makefile.in new file mode 100644 index 00000000000..97a431f22f1 --- /dev/null +++ b/module/spl/Makefile.in @@ -0,0 +1,28 @@ +src = @abs_top_srcdir@/module/spl +obj = @abs_builddir@ + +MODULE := spl + +obj-$(CONFIG_ZFS) := $(MODULE).o + +ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) + +$(MODULE)-objs += spl-atomic.o +$(MODULE)-objs += spl-condvar.o +$(MODULE)-objs += spl-cred.o +$(MODULE)-objs += spl-err.o +$(MODULE)-objs += spl-generic.o +$(MODULE)-objs += spl-kmem.o +$(MODULE)-objs += spl-kmem-cache.o +$(MODULE)-objs += spl-kobj.o +$(MODULE)-objs += spl-kstat.o +$(MODULE)-objs += spl-mutex.o +$(MODULE)-objs += spl-proc.o +$(MODULE)-objs += spl-rwlock.o +$(MODULE)-objs += spl-taskq.o +$(MODULE)-objs += spl-thread.o +$(MODULE)-objs += spl-tsd.o +$(MODULE)-objs += spl-vmem.o +$(MODULE)-objs += spl-vnode.o +$(MODULE)-objs += spl-xdr.o +$(MODULE)-objs += spl-zlib.o diff --git a/module/spl/spl-condvar.c b/module/spl/spl-condvar.c index f0060bbdcd6..1e6e38b7874 100644 --- a/module/spl/spl-condvar.c +++ b/module/spl/spl-condvar.c @@ -27,6 +27,7 @@ #include #include #include +#include void __cv_init(kcondvar_t *cvp, char *name, kcv_type_t type, void *arg) @@ -89,7 +90,7 @@ cv_wait_common(kcondvar_t *cvp, kmutex_t *mp, int state, int io) ASSERT(mutex_owned(mp)); atomic_inc(&cvp->cv_refs); - m = ACCESS_ONCE(cvp->cv_mutex); + m = READ_ONCE(cvp->cv_mutex); if (!m) m = xchg(&cvp->cv_mutex, mp); /* Ensure the same mutex is used by all callers */ @@ -202,7 +203,7 @@ __cv_timedwait_common(kcondvar_t *cvp, kmutex_t *mp, clock_t expire_time, return (-1); atomic_inc(&cvp->cv_refs); - m = ACCESS_ONCE(cvp->cv_mutex); + m = READ_ONCE(cvp->cv_mutex); if (!m) m = xchg(&cvp->cv_mutex, mp); /* Ensure the same mutex is used by all callers */ @@ -290,7 +291,7 @@ __cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t expire_time, return (-1); atomic_inc(&cvp->cv_refs); - m = ACCESS_ONCE(cvp->cv_mutex); + m = READ_ONCE(cvp->cv_mutex); if (!m) m = xchg(&cvp->cv_mutex, mp); /* Ensure the same mutex is used by all callers */ diff --git a/module/spl/spl-err.c b/module/spl/spl-err.c index 6b71296e8a6..4c8f818a9c7 100644 --- a/module/spl/spl-err.c +++ b/module/spl/spl-err.c @@ -26,7 +26,6 @@ #include #include -#include /* * It is often useful to actually have the panic crash the node so you @@ -40,19 +39,11 @@ module_param(spl_panic_halt, uint, 0644); MODULE_PARM_DESC(spl_panic_halt, "Cause kernel panic on assertion failures"); /* END CSTYLED */ -/* - * Limit the number of stack traces dumped to not more than 5 every - * 60 seconds to prevent denial-of-service attacks from debug code. - */ -DEFINE_RATELIMIT_STATE(dumpstack_ratelimit_state, 60 * HZ, 5); - void spl_dumpstack(void) { - if (__ratelimit(&dumpstack_ratelimit_state)) { - printk("Showing stack for process %d\n", current->pid); - dump_stack(); - } + printk("Showing stack for process %d\n", current->pid); + dump_stack(); } EXPORT_SYMBOL(spl_dumpstack); diff --git a/module/spl/spl-generic.c b/module/spl/spl-generic.c index b38fe254cf0..7c1ad390be4 100644 --- a/module/spl/spl-generic.c +++ b/module/spl/spl-generic.c @@ -46,12 +46,13 @@ #include #include -char spl_version[32] = "SPL v" SPL_META_VERSION "-" SPL_META_RELEASE; +char spl_version[32] = "SPL v" ZFS_META_VERSION "-" ZFS_META_RELEASE; EXPORT_SYMBOL(spl_version); /* BEGIN CSTYLED */ unsigned long spl_hostid = 0; EXPORT_SYMBOL(spl_hostid); +/* BEGIN CSTYLED */ module_param(spl_hostid, ulong, 0644); MODULE_PARM_DESC(spl_hostid, "The system hostid."); /* END CSTYLED */ @@ -719,8 +720,6 @@ spl_init(void) if ((rc = spl_zlib_init())) goto out10; - printk(KERN_NOTICE "SPL: Loaded module v%s-%s%s\n", SPL_META_VERSION, - SPL_META_RELEASE, SPL_DEBUG_STR); return (rc); out10: @@ -742,18 +741,12 @@ spl_init(void) out2: spl_kvmem_fini(); out1: - printk(KERN_NOTICE "SPL: Failed to Load Solaris Porting Layer " - "v%s-%s%s, rc = %d\n", SPL_META_VERSION, SPL_META_RELEASE, - SPL_DEBUG_STR, rc); - return (rc); } static void __exit spl_fini(void) { - printk(KERN_NOTICE "SPL: Unloaded module v%s-%s%s\n", - SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR); spl_zlib_fini(); spl_kstat_fini(); spl_proc_fini(); @@ -770,6 +763,6 @@ module_init(spl_init); module_exit(spl_fini); MODULE_DESCRIPTION("Solaris Porting Layer"); -MODULE_AUTHOR(SPL_META_AUTHOR); -MODULE_LICENSE(SPL_META_LICENSE); -MODULE_VERSION(SPL_META_VERSION "-" SPL_META_RELEASE); +MODULE_AUTHOR(ZFS_META_AUTHOR); +MODULE_LICENSE("GPL"); +MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE); diff --git a/module/spl/spl-kmem.c b/module/spl/spl-kmem.c index e0d551041fd..1fdb61e6fce 100644 --- a/module/spl/spl-kmem.c +++ b/module/spl/spl-kmem.c @@ -27,7 +27,6 @@ #include #include #include -#include /* * As a general rule kmem_alloc() allocations should be small, preferably @@ -134,12 +133,6 @@ strfree(char *str) } EXPORT_SYMBOL(strfree); -/* - * Limit the number of large allocation stack traces dumped to not more than - * 5 every 60 seconds to prevent denial-of-service attacks from debug code. - */ -DEFINE_RATELIMIT_STATE(kmem_alloc_ratelimit_state, 60 * HZ, 5); - /* * General purpose unified implementation of kmem_alloc(). It is an * amalgamation of Linux and Illumos allocator design. It should never be @@ -160,7 +153,7 @@ spl_kmem_alloc_impl(size_t size, int flags, int node) * through the vmem_alloc()/vmem_zalloc() interfaces. */ if ((spl_kmem_alloc_warn > 0) && (size > spl_kmem_alloc_warn) && - !(flags & KM_VMEM) && __ratelimit(&kmem_alloc_ratelimit_state)) { + !(flags & KM_VMEM)) { printk(KERN_WARNING "Large kmem_alloc(%lu, 0x%x), please file an issue at:\n" "https://github.com/zfsonlinux/zfs/issues/new\n", @@ -207,14 +200,6 @@ spl_kmem_alloc_impl(size_t size, int flags, int node) continue; } - if (unlikely(__ratelimit(&kmem_alloc_ratelimit_state))) { - printk(KERN_WARNING - "Possible memory allocation deadlock: " - "size=%lu lflags=0x%x", - (unsigned long)size, lflags); - dump_stack(); - } - /* * Use cond_resched() instead of congestion_wait() to avoid * deadlocking systems where there are no block devices. @@ -535,9 +520,12 @@ spl_kmem_fini_tracking(struct list_head *list, spinlock_t *lock) int spl_kmem_init(void) { + #ifdef DEBUG_KMEM kmem_alloc_used_set(0); + + #ifdef DEBUG_KMEM_TRACKING spl_kmem_init_tracking(&kmem_list, &kmem_lock, KMEM_TABLE_SIZE); #endif /* DEBUG_KMEM_TRACKING */ diff --git a/module/spl/spl-rwlock.c b/module/spl/spl-rwlock.c index 9a992cc3ab3..cf03bc593f9 100644 --- a/module/spl/spl-rwlock.c +++ b/module/spl/spl-rwlock.c @@ -25,6 +25,7 @@ */ #include +#include #if defined(CONFIG_PREEMPT_RT_FULL) diff --git a/module/spl/spl-taskq.c b/module/spl/spl-taskq.c index 2919a942a1c..7684257be7a 100644 --- a/module/spl/spl-taskq.c +++ b/module/spl/spl-taskq.c @@ -60,7 +60,7 @@ static taskq_thread_t *taskq_thread_create(taskq_t *); /* List of all taskqs */ LIST_HEAD(tq_list); -DECLARE_RWSEM(tq_list_sem); +struct rw_semaphore tq_list_sem; static uint_t taskq_tsd; static int @@ -1257,6 +1257,7 @@ MODULE_PARM_DESC(spl_taskq_kick, int spl_taskq_init(void) { + init_rwsem(&tq_list_sem); tsd_create(&taskq_tsd, NULL); system_taskq = taskq_create("spl_system_taskq", MAX(boot_ncpus, 64), diff --git a/module/spl/spl-vnode.c b/module/spl/spl-vnode.c index 28ce21276e4..aebee0a8260 100644 --- a/module/spl/spl-vnode.c +++ b/module/spl/spl-vnode.c @@ -40,7 +40,7 @@ EXPORT_SYMBOL(rootdir); static spl_kmem_cache_t *vn_cache; static spl_kmem_cache_t *vn_file_cache; -static DEFINE_SPINLOCK(vn_file_lock); +static spinlock_t vn_file_lock; static LIST_HEAD(vn_file_list); static int @@ -744,6 +744,8 @@ vn_file_cache_destructor(void *buf, void *cdrarg) int spl_vn_init(void) { + vn_file_lock = __SPIN_LOCK_UNLOCKED(vn_file_lock); + vn_cache = kmem_cache_create("spl_vn_cache", sizeof (struct vnode), 64, vn_cache_constructor, vn_cache_destructor, NULL, NULL, NULL, 0); diff --git a/module/spl/spl-xdr.c b/module/spl/spl-xdr.c index 2cc3e2a0360..1dd31ffc148 100644 --- a/module/spl/spl-xdr.c +++ b/module/spl/spl-xdr.c @@ -131,8 +131,6 @@ static struct xdr_ops xdrmem_encode_ops; static struct xdr_ops xdrmem_decode_ops; -typedef int bool_t; - void xdrmem_create(XDR *xdrs, const caddr_t addr, const uint_t size, const enum xdr_op op) diff --git a/module/unicode/u8_textprep.c b/module/unicode/u8_textprep.c index 0330032fa0e..4e6105b2e8d 100644 --- a/module/unicode/u8_textprep.c +++ b/module/unicode/u8_textprep.c @@ -36,18 +36,13 @@ */ #include -#ifdef _KERNEL +#include #include #include -#include #include #include -#include #include -#else #include -#include -#endif /* _KERNEL */ #include #include #include @@ -2130,7 +2125,7 @@ u8_textprep_str(char *inarray, size_t *inlen, char *outarray, size_t *outlen, return (ret_val); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) static int __init unicode_init(void) { diff --git a/module/unicode/uconv.c b/module/unicode/uconv.c index 7a827832262..d812d5f9695 100644 --- a/module/unicode/uconv.c +++ b/module/unicode/uconv.c @@ -38,7 +38,6 @@ #ifdef _KERNEL #include #include -#include #include #include #include @@ -854,7 +853,7 @@ uconv_u8tou32(const uchar_t *u8s, size_t *utf8len, return (0); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(uconv_u16tou32); EXPORT_SYMBOL(uconv_u16tou8); EXPORT_SYMBOL(uconv_u32tou16); diff --git a/module/zcommon/zfeature_common.c b/module/zcommon/zfeature_common.c index 6ab3abe1191..ea1bccf5092 100644 --- a/module/zcommon/zfeature_common.c +++ b/module/zcommon/zfeature_common.c @@ -26,9 +26,7 @@ * Copyright (c) 2014, Nexenta Systems, Inc. All rights reserved. */ -#ifdef _KERNEL -#include -#else +#ifndef _KERNEL #include #include #endif @@ -351,7 +349,7 @@ zpool_feature_init(void) } } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zfeature_lookup_name); EXPORT_SYMBOL(zfeature_is_supported); EXPORT_SYMBOL(zfeature_is_valid_guid); diff --git a/module/zcommon/zfs_comutil.c b/module/zcommon/zfs_comutil.c index 685a20c448e..b31e0ab2749 100644 --- a/module/zcommon/zfs_comutil.c +++ b/module/zcommon/zfs_comutil.c @@ -29,15 +29,12 @@ * then a separate file should to be created. */ -#if defined(_KERNEL) -#include -#else +#if !defined(_KERNEL) #include #endif #include #include -#include #include #include "zfs_comutil.h" #include @@ -207,7 +204,7 @@ const char *zfs_history_event_names[ZFS_NUM_LEGACY_HISTORY_EVENTS] = { "pool split", }; -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zfs_allocatable_devs); EXPORT_SYMBOL(zpool_get_rewind_policy); EXPORT_SYMBOL(zfs_zpl_version_map); diff --git a/module/zcommon/zfs_deleg.c b/module/zcommon/zfs_deleg.c index c6ba278cffd..8d98f720a6c 100644 --- a/module/zcommon/zfs_deleg.c +++ b/module/zcommon/zfs_deleg.c @@ -28,16 +28,15 @@ #include #if defined(_KERNEL) -#include #include #include #else #include #include -#include #include #include #endif +#include #include #include "zfs_prop.h" #include "zfs_deleg.h" @@ -244,7 +243,7 @@ zfs_deleg_whokey(char *attr, zfs_deleg_who_type_t type, } } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zfs_deleg_verify_nvlist); EXPORT_SYMBOL(zfs_deleg_whokey); EXPORT_SYMBOL(zfs_deleg_canonicalize_perm); diff --git a/module/zcommon/zfs_fletcher.c b/module/zcommon/zfs_fletcher.c index 0cd992979ce..5a991ba6073 100644 --- a/module/zcommon/zfs_fletcher.c +++ b/module/zcommon/zfs_fletcher.c @@ -867,7 +867,7 @@ zio_abd_checksum_func_t fletcher_4_abd_ops = { }; -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) #include static int diff --git a/module/zcommon/zfs_fletcher_aarch64_neon.c b/module/zcommon/zfs_fletcher_aarch64_neon.c index b72c1bafd2d..bd2db2b20fe 100644 --- a/module/zcommon/zfs_fletcher_aarch64_neon.c +++ b/module/zcommon/zfs_fletcher_aarch64_neon.c @@ -45,8 +45,8 @@ #include #include +#include #include -#include static void fletcher_4_aarch64_neon_init(fletcher_4_ctx_t *ctx) diff --git a/module/zcommon/zfs_fletcher_avx512.c b/module/zcommon/zfs_fletcher_avx512.c index ed93c115923..7260a9864be 100644 --- a/module/zcommon/zfs_fletcher_avx512.c +++ b/module/zcommon/zfs_fletcher_avx512.c @@ -28,8 +28,8 @@ #include #include #include +#include #include -#include #define __asm __asm__ __volatile__ diff --git a/module/zcommon/zfs_fletcher_intel.c b/module/zcommon/zfs_fletcher_intel.c index a479b9d5694..6dac047dad0 100644 --- a/module/zcommon/zfs_fletcher_intel.c +++ b/module/zcommon/zfs_fletcher_intel.c @@ -44,8 +44,8 @@ #include #include +#include #include -#include static void fletcher_4_avx2_init(fletcher_4_ctx_t *ctx) diff --git a/module/zcommon/zfs_fletcher_sse.c b/module/zcommon/zfs_fletcher_sse.c index 90b7d7d4ef7..a0b42e5f5fa 100644 --- a/module/zcommon/zfs_fletcher_sse.c +++ b/module/zcommon/zfs_fletcher_sse.c @@ -46,8 +46,8 @@ #include #include #include +#include #include -#include static void fletcher_4_sse2_init(fletcher_4_ctx_t *ctx) diff --git a/module/zcommon/zfs_fletcher_superscalar.c b/module/zcommon/zfs_fletcher_superscalar.c index 02c5d53c7d9..fbbbf80603a 100644 --- a/module/zcommon/zfs_fletcher_superscalar.c +++ b/module/zcommon/zfs_fletcher_superscalar.c @@ -43,8 +43,8 @@ #include #include +#include #include -#include static void fletcher_4_superscalar_init(fletcher_4_ctx_t *ctx) diff --git a/module/zcommon/zfs_fletcher_superscalar4.c b/module/zcommon/zfs_fletcher_superscalar4.c index 4fd37d91c41..97fdb7b7d30 100644 --- a/module/zcommon/zfs_fletcher_superscalar4.c +++ b/module/zcommon/zfs_fletcher_superscalar4.c @@ -43,8 +43,8 @@ #include #include +#include #include -#include static void fletcher_4_superscalar4_init(fletcher_4_ctx_t *ctx) diff --git a/module/zcommon/zfs_namecheck.c b/module/zcommon/zfs_namecheck.c index 42a7c6c93be..aefde90876a 100644 --- a/module/zcommon/zfs_namecheck.c +++ b/module/zcommon/zfs_namecheck.c @@ -38,9 +38,7 @@ * Each function returns 0 on success, -1 on error. */ -#if defined(_KERNEL) -#include -#else +#if !defined(_KERNEL) #include #endif @@ -349,7 +347,7 @@ pool_namecheck(const char *pool, namecheck_err_t *why, char *what) return (0); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(pool_namecheck); EXPORT_SYMBOL(dataset_namecheck); EXPORT_SYMBOL(zfs_component_namecheck); diff --git a/module/zcommon/zfs_prop.c b/module/zcommon/zfs_prop.c index 34b7228ec9b..698fb8e214f 100644 --- a/module/zcommon/zfs_prop.c +++ b/module/zcommon/zfs_prop.c @@ -39,9 +39,7 @@ #include "zfs_deleg.h" #include "zfs_fletcher.h" -#if defined(_KERNEL) -#include -#else +#if !defined(_KERNEL) #include #include #include @@ -847,7 +845,7 @@ zfs_prop_align_right(zfs_prop_t prop) #endif -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) static int __init zcommon_init(void) { diff --git a/module/zcommon/zfs_uio.c b/module/zcommon/zfs_uio.c index 7b4175bbeee..af9716126f6 100644 --- a/module/zcommon/zfs_uio.c +++ b/module/zcommon/zfs_uio.c @@ -49,6 +49,8 @@ #include #include +#include +#include #include /* diff --git a/module/zcommon/zpool_prop.c b/module/zcommon/zpool_prop.c index fd21f31176a..bc38eca7de9 100644 --- a/module/zcommon/zpool_prop.c +++ b/module/zcommon/zpool_prop.c @@ -32,9 +32,7 @@ #include "zfs_prop.h" -#if defined(_KERNEL) -#include -#else +#if !defined(_KERNEL) #include #include #include @@ -244,7 +242,7 @@ zpool_prop_align_right(zpool_prop_t prop) } #endif -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* zpool property functions */ EXPORT_SYMBOL(zpool_prop_init); EXPORT_SYMBOL(zpool_prop_get_type); diff --git a/module/zcommon/zprop_common.c b/module/zcommon/zprop_common.c index a4528d248e1..838988a4cde 100644 --- a/module/zcommon/zprop_common.c +++ b/module/zcommon/zprop_common.c @@ -41,8 +41,9 @@ #include "zfs_deleg.h" #if defined(_KERNEL) -#include -#include +#include +#define qsort(base, num, size, cmp) \ + sort(base, num, size, cmp, NULL) #else #include #include @@ -435,7 +436,7 @@ zprop_width(int prop, boolean_t *fixed, zfs_type_t type) #endif -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* Common routines to initialize property tables */ EXPORT_SYMBOL(zprop_register_impl); EXPORT_SYMBOL(zprop_register_string); diff --git a/module/zfs/abd.c b/module/zfs/abd.c index 0bd7a262f79..555e8c1d253 100644 --- a/module/zfs/abd.c +++ b/module/zfs/abd.c @@ -1466,7 +1466,7 @@ abd_raidz_rec_iterate(abd_t **cabds, abd_t **tabds, local_irq_restore(flags); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* * bio_nr_pages for ABD. * @off is the offset in @abd diff --git a/module/zfs/arc.c b/module/zfs/arc.c index 6662e0fae30..be9964bff21 100644 --- a/module/zfs/arc.c +++ b/module/zfs/arc.c @@ -292,11 +292,9 @@ #include #include #ifdef _KERNEL +#include #include -#include -#include #include -#include #include #endif #include @@ -1199,7 +1197,7 @@ buf_fini(void) { int i; -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* * Large allocations which do not require contiguous pages * should be using vmem_free() in the linux kernel\ @@ -1360,7 +1358,7 @@ buf_init(void) hsize <<= 1; retry: buf_hash_table.ht_mask = hsize - 1; -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* * Large allocations which do not require contiguous pages * should be using vmem_alloc() in the linux kernel @@ -9050,7 +9048,7 @@ l2arc_stop(void) mutex_exit(&l2arc_feed_thr_lock); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(arc_buf_size); EXPORT_SYMBOL(arc_write); EXPORT_SYMBOL(arc_read); diff --git a/module/zfs/dbuf.c b/module/zfs/dbuf.c index bc03317a26c..a8c48167ad1 100644 --- a/module/zfs/dbuf.c +++ b/module/zfs/dbuf.c @@ -762,7 +762,7 @@ dbuf_init(void) retry: h->hash_table_mask = hsize - 1; -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* * Large allocations which do not require contiguous pages * should be using vmem_alloc() in the linux kernel @@ -847,7 +847,7 @@ dbuf_fini(void) for (i = 0; i < DBUF_MUTEXES; i++) mutex_destroy(&h->hash_mutexes[i]); -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* * Large allocations which do not require contiguous pages * should be using vmem_free() in the linux kernel @@ -4341,7 +4341,7 @@ dbuf_write(dbuf_dirty_record_t *dr, arc_buf_t *data, dmu_tx_t *tx) } } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dbuf_find); EXPORT_SYMBOL(dbuf_is_metadata); EXPORT_SYMBOL(dbuf_destroy); diff --git a/module/zfs/dbuf_stats.c b/module/zfs/dbuf_stats.c index 6c26718f2d8..84232338fca 100644 --- a/module/zfs/dbuf_stats.c +++ b/module/zfs/dbuf_stats.c @@ -225,7 +225,7 @@ dbuf_stats_destroy(void) dbuf_stats_hash_table_destroy(); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) module_param(zfs_dbuf_state_index, int, 0644); MODULE_PARM_DESC(zfs_dbuf_state_index, "Calculate arc header index"); #endif diff --git a/module/zfs/ddt.c b/module/zfs/ddt.c index 681033d7178..f7fe2ae8089 100644 --- a/module/zfs/ddt.c +++ b/module/zfs/ddt.c @@ -1236,7 +1236,7 @@ ddt_walk(spa_t *spa, ddt_bookmark_t *ddb, ddt_entry_t *dde) return (SET_ERROR(ENOENT)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) module_param(zfs_dedup_prefetch, int, 0644); MODULE_PARM_DESC(zfs_dedup_prefetch, "Enable prefetching dedup-ed blks"); #endif diff --git a/module/zfs/ddt_zap.c b/module/zfs/ddt_zap.c index fc9cfec045a..77c0784cca0 100644 --- a/module/zfs/ddt_zap.c +++ b/module/zfs/ddt_zap.c @@ -29,7 +29,6 @@ #include #include #include -#include int ddt_zap_leaf_blockshift = 12; int ddt_zap_indirect_blockshift = 12; diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c index 2d2586a8c6b..32a8fd319ac 100644 --- a/module/zfs/dmu.c +++ b/module/zfs/dmu.c @@ -2505,7 +2505,7 @@ dmu_fini(void) abd_fini(); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dmu_bonus_hold); EXPORT_SYMBOL(dmu_buf_hold_array_by_bonus); EXPORT_SYMBOL(dmu_buf_rele_array); diff --git a/module/zfs/dmu_object.c b/module/zfs/dmu_object.c index 1fc71d1036f..21e8e5a9475 100644 --- a/module/zfs/dmu_object.c +++ b/module/zfs/dmu_object.c @@ -411,7 +411,7 @@ dmu_object_free_zapified(objset_t *mos, uint64_t object, dmu_tx_t *tx) VERIFY0(dmu_object_free(mos, object, tx)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dmu_object_alloc); EXPORT_SYMBOL(dmu_object_alloc_dnsize); EXPORT_SYMBOL(dmu_object_claim); diff --git a/module/zfs/dmu_objset.c b/module/zfs/dmu_objset.c index b6371d3823c..92de3705734 100644 --- a/module/zfs/dmu_objset.c +++ b/module/zfs/dmu_objset.c @@ -2950,7 +2950,7 @@ dmu_objset_willuse_space(objset_t *os, int64_t space, dmu_tx_t *tx) } } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dmu_objset_zil); EXPORT_SYMBOL(dmu_objset_pool); EXPORT_SYMBOL(dmu_objset_ds); diff --git a/module/zfs/dmu_traverse.c b/module/zfs/dmu_traverse.c index cffcd2d00ec..a5f468ac8db 100644 --- a/module/zfs/dmu_traverse.c +++ b/module/zfs/dmu_traverse.c @@ -769,7 +769,7 @@ traverse_pool(spa_t *spa, uint64_t txg_start, int flags, return (err); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(traverse_dataset); EXPORT_SYMBOL(traverse_pool); diff --git a/module/zfs/dmu_tx.c b/module/zfs/dmu_tx.c index 861769b4065..374bb710c06 100644 --- a/module/zfs/dmu_tx.c +++ b/module/zfs/dmu_tx.c @@ -37,7 +37,6 @@ #include #include #include -#include #include typedef void (*dmu_tx_hold_func_t)(dmu_tx_t *tx, struct dnode *dn, @@ -1372,7 +1371,7 @@ dmu_tx_fini(void) } } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dmu_tx_create); EXPORT_SYMBOL(dmu_tx_hold_write); EXPORT_SYMBOL(dmu_tx_hold_write_by_dnode); diff --git a/module/zfs/dmu_zfetch.c b/module/zfs/dmu_zfetch.c index e22560ed1d4..2133518ff4e 100644 --- a/module/zfs/dmu_zfetch.c +++ b/module/zfs/dmu_zfetch.c @@ -357,7 +357,7 @@ dmu_zfetch(zfetch_t *zf, uint64_t blkid, uint64_t nblks, boolean_t fetch_data) ZFETCHSTAT_BUMP(zfetchstat_hits); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* BEGIN CSTYLED */ module_param(zfs_prefetch_disable, int, 0644); MODULE_PARM_DESC(zfs_prefetch_disable, "Disable all ZFS prefetching"); diff --git a/module/zfs/dsl_dataset.c b/module/zfs/dsl_dataset.c index 9823f3183d1..7a4721e17f1 100644 --- a/module/zfs/dsl_dataset.c +++ b/module/zfs/dsl_dataset.c @@ -4237,7 +4237,7 @@ dsl_dataset_create_remap_deadlist(dsl_dataset_t *ds, dmu_tx_t *tx) spa_feature_incr(spa, SPA_FEATURE_OBSOLETE_COUNTS, tx); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) #if defined(_LP64) module_param(zfs_max_recordsize, int, 0644); MODULE_PARM_DESC(zfs_max_recordsize, "Max allowed record size"); diff --git a/module/zfs/dsl_deleg.c b/module/zfs/dsl_deleg.c index f17cedb0821..cef460f0204 100644 --- a/module/zfs/dsl_deleg.c +++ b/module/zfs/dsl_deleg.c @@ -768,7 +768,7 @@ dsl_delegation_on(objset_t *os) return (!!spa_delegation(os->os_spa)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dsl_deleg_get); EXPORT_SYMBOL(dsl_deleg_set); #endif diff --git a/module/zfs/dsl_destroy.c b/module/zfs/dsl_destroy.c index e11508c90d0..b3296ceee3b 100644 --- a/module/zfs/dsl_destroy.c +++ b/module/zfs/dsl_destroy.c @@ -1095,7 +1095,7 @@ dsl_destroy_inconsistent(const char *dsname, void *arg) } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dsl_destroy_head); EXPORT_SYMBOL(dsl_destroy_head_sync_impl); EXPORT_SYMBOL(dsl_dataset_user_hold_check_one); diff --git a/module/zfs/dsl_dir.c b/module/zfs/dsl_dir.c index a866c3074d3..4b85208d87e 100644 --- a/module/zfs/dsl_dir.c +++ b/module/zfs/dsl_dir.c @@ -2165,7 +2165,7 @@ dsl_dir_is_zapified(dsl_dir_t *dd) return (doi.doi_type == DMU_OTN_ZAP_METADATA); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dsl_dir_set_quota); EXPORT_SYMBOL(dsl_dir_set_reservation); #endif diff --git a/module/zfs/dsl_pool.c b/module/zfs/dsl_pool.c index 094b6bec010..1bb49c13ae1 100644 --- a/module/zfs/dsl_pool.c +++ b/module/zfs/dsl_pool.c @@ -1208,7 +1208,7 @@ dsl_pool_config_held_writer(dsl_pool_t *dp) return (RRW_WRITE_HELD(&dp->dp_config_rwlock)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dsl_pool_config_enter); EXPORT_SYMBOL(dsl_pool_config_exit); diff --git a/module/zfs/dsl_prop.c b/module/zfs/dsl_prop.c index 57b8eb7941d..9f892acdbf8 100644 --- a/module/zfs/dsl_prop.c +++ b/module/zfs/dsl_prop.c @@ -1251,7 +1251,7 @@ dsl_prop_nvlist_add_string(nvlist_t *nv, zfs_prop_t prop, const char *value) nvlist_free(propval); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dsl_prop_register); EXPORT_SYMBOL(dsl_prop_unregister); EXPORT_SYMBOL(dsl_prop_unregister_all); diff --git a/module/zfs/dsl_scan.c b/module/zfs/dsl_scan.c index c19a1b75cd6..2c349474618 100644 --- a/module/zfs/dsl_scan.c +++ b/module/zfs/dsl_scan.c @@ -3909,7 +3909,7 @@ dsl_scan_freed(spa_t *spa, const blkptr_t *bp) dsl_scan_freed_dva(spa, bp, i); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* CSTYLED */ module_param(zfs_scan_vdev_limit, ulong, 0644); MODULE_PARM_DESC(zfs_scan_vdev_limit, diff --git a/module/zfs/dsl_synctask.c b/module/zfs/dsl_synctask.c index 28130d25711..d8eb10d3768 100644 --- a/module/zfs/dsl_synctask.c +++ b/module/zfs/dsl_synctask.c @@ -185,7 +185,7 @@ dsl_sync_task_sync(dsl_sync_task_t *dst, dmu_tx_t *tx) kmem_free(dst, sizeof (*dst)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(dsl_sync_task); EXPORT_SYMBOL(dsl_sync_task_nowait); #endif diff --git a/module/zfs/fm.c b/module/zfs/fm.c index 52d4acaa23e..5c30066700c 100644 --- a/module/zfs/fm.c +++ b/module/zfs/fm.c @@ -57,7 +57,6 @@ #include #include #include -#include #include #include #include @@ -67,10 +66,6 @@ #ifdef _KERNEL #include #include -#include -#include -#include -#include #include #include #include diff --git a/module/zfs/gzip.c b/module/zfs/gzip.c index 40166b3fe52..5cac2a7de62 100644 --- a/module/zfs/gzip.c +++ b/module/zfs/gzip.c @@ -28,22 +28,19 @@ #include #include +#include #include "qat.h" #ifdef _KERNEL -#include #include - typedef size_t zlen_t; #define compress_func z_compress_level #define uncompress_func z_uncompress #else /* _KERNEL */ -#include #include - typedef uLongf zlen_t; #define compress_func compress2 #define uncompress_func uncompress diff --git a/module/zfs/metaslab.c b/module/zfs/metaslab.c index 9f0065b532d..c11e459e0f0 100644 --- a/module/zfs/metaslab.c +++ b/module/zfs/metaslab.c @@ -3850,7 +3850,7 @@ metaslab_check_free(spa_t *spa, const blkptr_t *bp) spa_config_exit(spa, SCL_VDEV, FTAG); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* CSTYLED */ module_param(metaslab_aliquot, ulong, 0644); MODULE_PARM_DESC(metaslab_aliquot, @@ -3904,4 +3904,4 @@ MODULE_PARM_DESC(zfs_metaslab_switch_threshold, module_param(metaslab_force_ganging, ulong, 0644); MODULE_PARM_DESC(metaslab_force_ganging, "blocks larger than this size are forced to be gang blocks"); -#endif /* _KERNEL && HAVE_SPL */ +#endif diff --git a/module/zfs/mmp.c b/module/zfs/mmp.c index f51952ee408..6fd5d3e9a4f 100644 --- a/module/zfs/mmp.c +++ b/module/zfs/mmp.c @@ -597,7 +597,7 @@ mmp_signal_all_threads(void) mutex_exit(&spa_namespace_lock); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) #include static int diff --git a/module/zfs/multilist.c b/module/zfs/multilist.c index 48137b3fc1e..2a594c56cbd 100644 --- a/module/zfs/multilist.c +++ b/module/zfs/multilist.c @@ -403,7 +403,7 @@ multilist_link_active(multilist_node_t *link) return (list_link_active(link)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* BEGIN CSTYLED */ diff --git a/module/zfs/pathname.c b/module/zfs/pathname.c index 4ec1320661f..e3e97c9bb36 100644 --- a/module/zfs/pathname.c +++ b/module/zfs/pathname.c @@ -38,9 +38,9 @@ #include -#include #include #include +#include /* * Pathname utilities. diff --git a/module/zfs/sa.c b/module/zfs/sa.c index 4a863f9a564..5b6b90642d6 100644 --- a/module/zfs/sa.c +++ b/module/zfs/sa.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include diff --git a/module/zfs/spa.c b/module/zfs/spa.c index dba6efe7be9..50862adcd95 100644 --- a/module/zfs/spa.c +++ b/module/zfs/spa.c @@ -85,11 +85,7 @@ #ifdef _KERNEL #include #include -#include #include -#include -#include -#include #include #endif /* _KERNEL */ @@ -162,7 +158,6 @@ static int spa_load_impl(spa_t *spa, spa_import_type_t type, char **ereport, static void spa_vdev_resilver_done(spa_t *spa); uint_t zio_taskq_batch_pct = 75; /* 1 thread per cpu in pset */ -id_t zio_taskq_psrset_bind = PS_NONE; boolean_t zio_taskq_sysdc = B_TRUE; /* use SDC scheduling class */ uint_t zio_taskq_basedc = 80; /* base duty cycle */ @@ -1088,6 +1083,7 @@ spa_create_zio_taskqs(spa_t *spa) static void spa_thread(void *arg) { + psetid_t zio_taskq_psrset_bind = PS_NONE; callb_cpr_t cprinfo; spa_t *spa = arg; @@ -7795,7 +7791,7 @@ spa_event_notify(spa_t *spa, vdev_t *vd, nvlist_t *hist_nvl, const char *name) spa_event_post(spa_event_create(spa, vd, hist_nvl, name)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* state manipulation functions */ EXPORT_SYMBOL(spa_open); EXPORT_SYMBOL(spa_open_rewind); @@ -7852,7 +7848,7 @@ EXPORT_SYMBOL(spa_prop_clear_bootfs); EXPORT_SYMBOL(spa_event_notify); #endif -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) module_param(spa_load_verify_maxinflight, int, 0644); MODULE_PARM_DESC(spa_load_verify_maxinflight, "Max concurrent traversal I/Os while verifying pool during import -X"); diff --git a/module/zfs/spa_config.c b/module/zfs/spa_config.c index 50bba234540..b94f0fc8445 100644 --- a/module/zfs/spa_config.c +++ b/module/zfs/spa_config.c @@ -600,7 +600,7 @@ spa_config_update(spa_t *spa, int what) spa_config_update(spa, SPA_CONFIG_UPDATE_VDEVS); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(spa_config_load); EXPORT_SYMBOL(spa_all_configs); EXPORT_SYMBOL(spa_config_set); diff --git a/module/zfs/spa_errlog.c b/module/zfs/spa_errlog.c index 1299faa58b3..e42f8a0212f 100644 --- a/module/zfs/spa_errlog.c +++ b/module/zfs/spa_errlog.c @@ -404,7 +404,7 @@ spa_errlog_sync(spa_t *spa, uint64_t txg) mutex_exit(&spa->spa_errlog_lock); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* error handling */ EXPORT_SYMBOL(spa_log_error); EXPORT_SYMBOL(spa_get_errlog_size); diff --git a/module/zfs/spa_history.c b/module/zfs/spa_history.c index 511bf109424..969fdb000d2 100644 --- a/module/zfs/spa_history.c +++ b/module/zfs/spa_history.c @@ -183,11 +183,7 @@ static char * spa_history_zone(void) { #ifdef _KERNEL -#ifdef HAVE_SPL return ("linux"); -#else - return (curproc->p_zone->zone_name); -#endif #else return (NULL); #endif @@ -626,7 +622,7 @@ spa_history_log_version(spa_t *spa, const char *operation, dmu_tx_t *tx) u->nodename, u->release, u->version, u->machine); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(spa_history_create_obj); EXPORT_SYMBOL(spa_history_get); EXPORT_SYMBOL(spa_history_log); diff --git a/module/zfs/spa_misc.c b/module/zfs/spa_misc.c index 234e5c60d80..288e5378b0a 100644 --- a/module/zfs/spa_misc.c +++ b/module/zfs/spa_misc.c @@ -2254,7 +2254,7 @@ spa_set_missing_tvds(spa_t *spa, uint64_t missing) spa->spa_missing_tvds = missing; } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) #include diff --git a/module/zfs/spa_stats.c b/module/zfs/spa_stats.c index f604836c823..3f137d9c75b 100644 --- a/module/zfs/spa_stats.c +++ b/module/zfs/spa_stats.c @@ -1017,7 +1017,7 @@ spa_stats_destroy(spa_t *spa) spa_mmp_history_destroy(spa); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* CSTYLED */ module_param(zfs_read_history, int, 0644); MODULE_PARM_DESC(zfs_read_history, diff --git a/module/zfs/txg.c b/module/zfs/txg.c index 2c7f5303b1f..30f25157300 100644 --- a/module/zfs/txg.c +++ b/module/zfs/txg.c @@ -934,7 +934,7 @@ txg_list_next(txg_list_t *tl, void *p, uint64_t txg) return (tn == NULL ? NULL : (char *)tn - tl->tl_offset); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(txg_init); EXPORT_SYMBOL(txg_fini); EXPORT_SYMBOL(txg_sync_start); diff --git a/module/zfs/vdev.c b/module/zfs/vdev.c index 7bb27f0ec7e..388be361795 100644 --- a/module/zfs/vdev.c +++ b/module/zfs/vdev.c @@ -4237,7 +4237,7 @@ vdev_deadman(vdev_t *vd, char *tag) } } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(vdev_fault); EXPORT_SYMBOL(vdev_degrade); EXPORT_SYMBOL(vdev_online); diff --git a/module/zfs/vdev_cache.c b/module/zfs/vdev_cache.c index 0570ceb2e68..0f1d9448b59 100644 --- a/module/zfs/vdev_cache.c +++ b/module/zfs/vdev_cache.c @@ -425,7 +425,7 @@ vdev_cache_stat_fini(void) } } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) module_param(zfs_vdev_cache_max, int, 0644); MODULE_PARM_DESC(zfs_vdev_cache_max, "Inflate reads small than max"); diff --git a/module/zfs/vdev_disk.c b/module/zfs/vdev_disk.c index 9c3a1ba8021..5cdfd960c89 100644 --- a/module/zfs/vdev_disk.c +++ b/module/zfs/vdev_disk.c @@ -33,7 +33,6 @@ #include #include #include -#include #include char *zfs_vdev_scheduler = VDEV_SCHEDULER; diff --git a/module/zfs/vdev_indirect.c b/module/zfs/vdev_indirect.c index 0a42f5196a3..7529b514f64 100644 --- a/module/zfs/vdev_indirect.c +++ b/module/zfs/vdev_indirect.c @@ -1687,7 +1687,7 @@ vdev_ops_t vdev_indirect_ops = { B_FALSE /* leaf vdev */ }; -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(rs_alloc); EXPORT_SYMBOL(spa_condense_fini); EXPORT_SYMBOL(spa_start_indirect_condensing_thread); diff --git a/module/zfs/vdev_indirect_births.c b/module/zfs/vdev_indirect_births.c index a0163b2e5d6..1c44a64287d 100644 --- a/module/zfs/vdev_indirect_births.c +++ b/module/zfs/vdev_indirect_births.c @@ -213,7 +213,7 @@ vdev_indirect_births_physbirth(vdev_indirect_births_t *vib, uint64_t offset, return (-1); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(vdev_indirect_births_add_entry); EXPORT_SYMBOL(vdev_indirect_births_alloc); EXPORT_SYMBOL(vdev_indirect_births_close); diff --git a/module/zfs/vdev_indirect_mapping.c b/module/zfs/vdev_indirect_mapping.c index dbd6a7635b4..d91f2338366 100644 --- a/module/zfs/vdev_indirect_mapping.c +++ b/module/zfs/vdev_indirect_mapping.c @@ -596,7 +596,7 @@ vdev_indirect_mapping_free_obsolete_counts(vdev_indirect_mapping_t *vim, vmem_free(counts, vim->vim_phys->vimp_num_entries * sizeof (uint32_t)); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(vdev_indirect_mapping_add_entries); EXPORT_SYMBOL(vdev_indirect_mapping_alloc); EXPORT_SYMBOL(vdev_indirect_mapping_bytes_mapped); diff --git a/module/zfs/vdev_mirror.c b/module/zfs/vdev_mirror.c index 1c591cd6472..65357d84180 100644 --- a/module/zfs/vdev_mirror.c +++ b/module/zfs/vdev_mirror.c @@ -774,7 +774,7 @@ vdev_ops_t vdev_spare_ops = { B_FALSE /* not a leaf vdev */ }; -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* BEGIN CSTYLED */ module_param(zfs_vdev_mirror_rotating_inc, int, 0644); MODULE_PARM_DESC(zfs_vdev_mirror_rotating_inc, diff --git a/module/zfs/vdev_queue.c b/module/zfs/vdev_queue.c index 3ac31a87278..4f29d0043b0 100644 --- a/module/zfs/vdev_queue.c +++ b/module/zfs/vdev_queue.c @@ -883,7 +883,7 @@ vdev_queue_last_offset(vdev_t *vd) return (vd->vdev_queue.vq_last_offset); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) module_param(zfs_vdev_aggregation_limit, int, 0644); MODULE_PARM_DESC(zfs_vdev_aggregation_limit, "Max vdev I/O aggregation size"); diff --git a/module/zfs/vdev_raidz_math.c b/module/zfs/vdev_raidz_math.c index ba4dcc480d9..e6112bc0213 100644 --- a/module/zfs/vdev_raidz_math.c +++ b/module/zfs/vdev_raidz_math.c @@ -614,7 +614,7 @@ vdev_raidz_impl_set(const char *val) return (err); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) #include static int diff --git a/module/zfs/vdev_removal.c b/module/zfs/vdev_removal.c index 826e5c421a6..bb4f1e84fe0 100644 --- a/module/zfs/vdev_removal.c +++ b/module/zfs/vdev_removal.c @@ -1939,7 +1939,7 @@ spa_removal_get_stats(spa_t *spa, pool_removal_stat_t *prs) return (0); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) module_param(zfs_remove_max_segment, int, 0644); MODULE_PARM_DESC(zfs_remove_max_segment, "Largest contiguous segment to allocate when removing device"); diff --git a/module/zfs/zap_micro.c b/module/zfs/zap_micro.c index 791cbee8881..6ab2551b62c 100644 --- a/module/zfs/zap_micro.c +++ b/module/zfs/zap_micro.c @@ -1629,7 +1629,7 @@ zap_get_stats(objset_t *os, uint64_t zapobj, zap_stats_t *zs) return (0); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zap_create); EXPORT_SYMBOL(zap_create_dnsize); EXPORT_SYMBOL(zap_create_norm); diff --git a/module/zfs/zcp.c b/module/zfs/zcp.c index 31230dc52b0..e7194344b7d 100644 --- a/module/zfs/zcp.c +++ b/module/zfs/zcp.c @@ -100,7 +100,6 @@ #include #include #include -#include #ifndef KM_NORMALPRI #define KM_NORMALPRI 0 diff --git a/module/zfs/zfs_acl.c b/module/zfs/zfs_acl.c index 9fee4744517..b1af4da2f4a 100644 --- a/module/zfs/zfs_acl.c +++ b/module/zfs/zfs_acl.c @@ -27,9 +27,7 @@ #include #include #include -#include #include -#include #include #include #include @@ -38,7 +36,6 @@ #include #include #include -#include #include #include #include @@ -54,7 +51,6 @@ #include #include #include -#include "fs/fs_subr.h" #define ALLOW ACE_ACCESS_ALLOWED_ACE_TYPE #define DENY ACE_ACCESS_DENIED_ACE_TYPE @@ -98,6 +94,8 @@ #define ALL_MODE_EXECS (S_IXUSR | S_IXGRP | S_IXOTH) +#define IDMAP_WK_CREATOR_OWNER_UID 2147483648U + static uint16_t zfs_ace_v0_get_type(void *acep) { diff --git a/module/zfs/zfs_byteswap.c b/module/zfs/zfs_byteswap.c index 16327a22505..7893bde4e2d 100644 --- a/module/zfs/zfs_byteswap.c +++ b/module/zfs/zfs_byteswap.c @@ -198,7 +198,7 @@ zfs_znode_byteswap(void *buf, size_t size) } } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zfs_oldacl_byteswap); EXPORT_SYMBOL(zfs_acl_byteswap); EXPORT_SYMBOL(zfs_znode_byteswap); diff --git a/module/zfs/zfs_ctldir.c b/module/zfs/zfs_ctldir.c index 2b7272d4ffd..f0720e58a12 100644 --- a/module/zfs/zfs_ctldir.c +++ b/module/zfs/zfs_ctldir.c @@ -71,11 +71,9 @@ #include #include #include -#include #include #include #include -#include #include #include #include @@ -85,7 +83,6 @@ #include #include #include -#include #include #include "zfs_namecheck.h" diff --git a/module/zfs/zfs_dir.c b/module/zfs/zfs_dir.c index 7eb426b7811..8a591904f6a 100644 --- a/module/zfs/zfs_dir.c +++ b/module/zfs/zfs_dir.c @@ -28,9 +28,7 @@ #include #include #include -#include #include -#include #include #include #include @@ -41,7 +39,6 @@ #include #include #include -#include #include #include #include @@ -49,7 +46,6 @@ #include #include #include -#include "fs/fs_subr.h" #include #include #include @@ -57,8 +53,6 @@ #include #include #include -#include -#include /* * zfs_match_find() is used by zfs_dirent_lock() to peform zap lookups diff --git a/module/zfs/zfs_fm.c b/module/zfs/zfs_fm.c index e28e46e7ad3..e604f33c838 100644 --- a/module/zfs/zfs_fm.c +++ b/module/zfs/zfs_fm.c @@ -1041,7 +1041,7 @@ zfs_post_state_change(spa_t *spa, vdev_t *vd, uint64_t laststate) #endif } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zfs_ereport_post); EXPORT_SYMBOL(zfs_ereport_post_checksum); EXPORT_SYMBOL(zfs_post_remove); diff --git a/module/zfs/zfs_fuid.c b/module/zfs/zfs_fuid.c index 5cfb0c975c6..e57753593c6 100644 --- a/module/zfs/zfs_fuid.c +++ b/module/zfs/zfs_fuid.c @@ -29,7 +29,6 @@ #include #include #ifdef _KERNEL -#include #include #include #include diff --git a/module/zfs/zfs_ioctl.c b/module/zfs/zfs_ioctl.c index eacbf930d50..f95b77db72e 100644 --- a/module/zfs/zfs_ioctl.c +++ b/module/zfs/zfs_ioctl.c @@ -144,12 +144,8 @@ #include #include #include -#include -#include -#include #include #include -#include #include #include #include @@ -160,7 +156,6 @@ #include #include #include -#include #include #include #include @@ -169,14 +164,11 @@ #include #include #include -#include #include -#include #include #include #include #include -#include #include #include #include @@ -184,7 +176,6 @@ #include #include #include -#include #include #include @@ -7115,7 +7106,7 @@ _fini(void) ZFS_META_VERSION, ZFS_META_RELEASE, ZFS_DEBUG_STR); } -#ifdef HAVE_SPL +#if defined(_KERNEL) module_init(_init); module_exit(_fini); @@ -7123,4 +7114,4 @@ MODULE_DESCRIPTION("ZFS"); MODULE_AUTHOR(ZFS_META_AUTHOR); MODULE_LICENSE(ZFS_META_LICENSE); MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE); -#endif /* HAVE_SPL */ +#endif diff --git a/module/zfs/zfs_log.c b/module/zfs/zfs_log.c index ce7b84927e1..15c396ce032 100644 --- a/module/zfs/zfs_log.c +++ b/module/zfs/zfs_log.c @@ -26,7 +26,6 @@ #include #include -#include #include #include #include @@ -45,7 +44,6 @@ #include #include #include -#include #include /* @@ -720,7 +718,7 @@ zfs_log_acl(zilog_t *zilog, dmu_tx_t *tx, znode_t *zp, zil_itx_assign(zilog, itx, tx); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) module_param(zfs_immediate_write_sz, long, 0644); MODULE_PARM_DESC(zfs_immediate_write_sz, "Largest data block to write to zil"); #endif diff --git a/module/zfs/zfs_onexit.c b/module/zfs/zfs_onexit.c index bc3892645fe..31f77ce81b3 100644 --- a/module/zfs/zfs_onexit.c +++ b/module/zfs/zfs_onexit.c @@ -26,13 +26,9 @@ #include #include #include -#include #include -#include -#include #include #include -#include #include #include diff --git a/module/zfs/zfs_replay.c b/module/zfs/zfs_replay.c index e2ff0078935..ba103084f0c 100644 --- a/module/zfs/zfs_replay.c +++ b/module/zfs/zfs_replay.c @@ -26,7 +26,6 @@ #include #include -#include #include #include #include diff --git a/module/zfs/zfs_rlock.c b/module/zfs/zfs_rlock.c index d7fc014968b..7ecc353d262 100644 --- a/module/zfs/zfs_rlock.c +++ b/module/zfs/zfs_rlock.c @@ -96,6 +96,7 @@ */ #include +#include /* * Check if a write lock can be grabbed, or wait and recheck until available. diff --git a/module/zfs/zfs_vfsops.c b/module/zfs/zfs_vfsops.c index 2577860acb0..b890bbaf942 100644 --- a/module/zfs/zfs_vfsops.c +++ b/module/zfs/zfs_vfsops.c @@ -27,17 +27,13 @@ #include #include -#include #include #include #include #include #include -#include #include -#include #include -#include "fs/fs_subr.h" #include #include #include @@ -51,18 +47,12 @@ #include #include #include -#include #include #include -#include -#include -#include #include #include #include -#include #include -#include #include #include #include @@ -2341,7 +2331,7 @@ zfs_fini(void) zfsctl_fini(); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zfs_suspend_fs); EXPORT_SYMBOL(zfs_resume_fs); EXPORT_SYMBOL(zfs_userspace_one); diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c index d7d73201dba..832e4bfc9b6 100644 --- a/module/zfs/zfs_vnops.c +++ b/module/zfs/zfs_vnops.c @@ -33,11 +33,8 @@ #include #include #include -#include #include -#include #include -#include #include #include #include @@ -45,11 +42,9 @@ #include #include #include -#include #include #include #include -#include #include #include #include @@ -61,22 +56,16 @@ #include #include #include -#include #include #include #include #include -#include "fs/fs_subr.h" #include #include #include #include -#include #include -#include -#include #include -#include #include #include #include @@ -5234,7 +5223,7 @@ zfs_retzcbuf(struct inode *ip, xuio_t *xuio, cred_t *cr) } #endif /* HAVE_UIO_ZEROCOPY */ -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zfs_open); EXPORT_SYMBOL(zfs_close); EXPORT_SYMBOL(zfs_read); diff --git a/module/zfs/zfs_znode.c b/module/zfs/zfs_znode.c index c8a613f14f7..bb18c1b9a35 100644 --- a/module/zfs/zfs_znode.c +++ b/module/zfs/zfs_znode.c @@ -29,24 +29,17 @@ #include #include #include -#include #include -#include #include -#include #include #include #include -#include #include #include #include #include -#include #include #include -#include -#include "fs/fs_subr.h" #include #include #include @@ -56,7 +49,6 @@ #include #include #include -#include #include #endif /* _KERNEL */ @@ -2243,7 +2235,7 @@ zfs_obj_to_stats(objset_t *osp, uint64_t obj, zfs_stat_t *sb, return (error); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zfs_create_fs); EXPORT_SYMBOL(zfs_obj_to_path); diff --git a/module/zfs/zil.c b/module/zfs/zil.c index d0a1002525d..da3ee450005 100644 --- a/module/zfs/zil.c +++ b/module/zfs/zil.c @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -3406,7 +3405,7 @@ zil_reset(const char *osname, void *arg) return (0); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zil_alloc); EXPORT_SYMBOL(zil_free); EXPORT_SYMBOL(zil_open); diff --git a/module/zfs/zio.c b/module/zfs/zio.c index 81ae65c3191..8a495988b2a 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -4712,7 +4712,7 @@ zbookmark_subtree_completed(const dnode_phys_t *dnp, last_block) <= 0); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zio_type_name); EXPORT_SYMBOL(zio_buf_alloc); EXPORT_SYMBOL(zio_data_buf_alloc); diff --git a/module/zfs/zio_compress.c b/module/zfs/zio_compress.c index 974af03d12c..971e8de8b5a 100644 --- a/module/zfs/zio_compress.c +++ b/module/zfs/zio_compress.c @@ -32,7 +32,6 @@ */ #include -#include #include #include #include diff --git a/module/zfs/zio_crypt.c b/module/zfs/zio_crypt.c index 2e617678290..2533aee139f 100644 --- a/module/zfs/zio_crypt.c +++ b/module/zfs/zio_crypt.c @@ -2026,7 +2026,7 @@ zio_do_crypt_abd(boolean_t encrypt, zio_crypt_key_t *key, dmu_object_type_t ot, return (ret); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) /* BEGIN CSTYLED */ module_param(zfs_key_max_salt_uses, ulong, 0644); MODULE_PARM_DESC(zfs_key_max_salt_uses, "Max number of times a salt value " diff --git a/module/zfs/zio_inject.c b/module/zfs/zio_inject.c index 26f255c7b2c..87d32a11556 100644 --- a/module/zfs/zio_inject.c +++ b/module/zfs/zio_inject.c @@ -855,7 +855,7 @@ zio_inject_fini(void) rw_destroy(&inject_lock); } -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zio_injection_enabled); EXPORT_SYMBOL(zio_inject_fault); EXPORT_SYMBOL(zio_inject_list_next); diff --git a/module/zfs/zpl_file.c b/module/zfs/zpl_file.c index e03a0481cff..5b6839dd478 100644 --- a/module/zfs/zpl_file.c +++ b/module/zfs/zpl_file.c @@ -27,6 +27,7 @@ #ifdef CONFIG_COMPAT #include #endif +#include #include #include #include diff --git a/module/zfs/zpl_xattr.c b/module/zfs/zpl_xattr.c index ebb6e7be2ca..09e38ee8bda 100644 --- a/module/zfs/zpl_xattr.c +++ b/module/zfs/zpl_xattr.c @@ -1498,7 +1498,7 @@ zpl_posix_acl_free(void *arg) * a is not last node, make sure next pointer is set * by the adder and advance the head. */ - while (ACCESS_ONCE(a->next) == NULL) + while (READ_ONCE(a->next) == NULL) cpu_relax(); acl_rel_head = a->next; a->next = freelist; diff --git a/module/zfs/zrlock.c b/module/zfs/zrlock.c index 4f4854436e4..014a5cc6c7e 100644 --- a/module/zfs/zrlock.c +++ b/module/zfs/zrlock.c @@ -189,7 +189,7 @@ zrl_owner(zrlock_t *zrl) } #endif -#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_KERNEL) EXPORT_SYMBOL(zrl_add_impl); EXPORT_SYMBOL(zrl_remove); diff --git a/rpm/generic/zfs-dkms.spec.in b/rpm/generic/zfs-dkms.spec.in index 58cbce477be..6c800dcb878 100644 --- a/rpm/generic/zfs-dkms.spec.in +++ b/rpm/generic/zfs-dkms.spec.in @@ -21,10 +21,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch Requires: dkms >= 2.2.0.3 -Requires: spl-dkms = %{version} Requires: gcc, make, perl %if 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version} Requires: kernel-devel +Obsoletes: spl-dkms %endif Provides: %{module}-kmod = %{version} AutoReqProv: no diff --git a/rpm/generic/zfs-kmod.spec.in b/rpm/generic/zfs-kmod.spec.in index e8d91b4e943..f7f462a11d5 100644 --- a/rpm/generic/zfs-kmod.spec.in +++ b/rpm/generic/zfs-kmod.spec.in @@ -79,13 +79,6 @@ BuildRequires: %{_bindir}/kmodtool %endif %endif -%if 0%{?rhel}%{?fedora}%{?suse_version} -BuildRequires: kmod-spl-devel = %{version} -%global KmodsRequires kmod-spl -%global KmodsDevelRequires kmod-spl-devel -%global KmodsMetaRequires spl-kmod -%endif - # LDFLAGS are not sanitized by arch/*/Makefile for these architectures. %ifarch ppc ppc64 ppc64le aarch64 %global __global_ldflags %{nil} @@ -98,7 +91,7 @@ BuildRequires: kmod-spl-devel = %{version} # Kmodtool does its magic here. A patched version of kmodtool is shipped # with the source rpm until kmod development packages are supported upstream. # https://bugzilla.rpmfusion.org/show_bug.cgi?id=2714 -%{expand:%(bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) } +%{expand:%(bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} --obsolete-name spl --obsolete-version 0.8 2>/dev/null) } %description @@ -109,7 +102,7 @@ This package contains the ZFS kernel modules. %{?kmodtool_check} # Print kmodtool output for debugging purposes: -bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null +bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} --obsolete-name spl --obsolete-version 0.8 2>/dev/null %if %{with debug} %define debug --enable-debug @@ -123,28 +116,6 @@ bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{ %define debuginfo --disable-debuginfo %endif -# -# Allow the overriding of spl locations -# -%if %{defined require_splver} -%define splver %{require_splver} -%else -%define splver %{version} -%endif - -%if %{defined require_spldir} -%define spldir %{require_spldir} -%else -%define spldir %{_usrsrc}/spl-%{splver} -%endif - -%if %{defined require_splobj} -%define splobj %{require_splobj} -%else -%define splobj %{spldir}/${kernel_version%%___*} -%endif - - # Leverage VPATH from configure to avoid making multiple copies. %define _configure ../%{module}-%{version}/configure @@ -161,8 +132,6 @@ for kernel_version in %{?kernel_versions}; do --with-config=kernel \ --with-linux=%{ksrc} \ --with-linux-obj=%{kobj} \ - --with-spl="%{spldir}" \ - --with-spl-obj="%{splobj}" \ %{debug} \ %{debuginfo} make %{?_smp_mflags} diff --git a/rpm/generic/zfs.spec.in b/rpm/generic/zfs.spec.in index e0862b14b6b..b60a66f77e6 100644 --- a/rpm/generic/zfs.spec.in +++ b/rpm/generic/zfs.spec.in @@ -80,13 +80,13 @@ License: @ZFS_META_LICENSE@ URL: http://zfsonlinux.org/ Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -Requires: spl = %{version} Requires: libzpool2 = %{version} Requires: libnvpair1 = %{version} Requires: libuutil1 = %{version} Requires: libzfs2 = %{version} Requires: %{name}-kmod = %{version} Provides: %{name}-kmod-common = %{version} +Obsoletes: spl # zfs-fuse provides the same commands and man pages that ZoL does. Renaming # those on either side would conflict with all available documentation. diff --git a/rpm/redhat/zfs-kmod.spec.in b/rpm/redhat/zfs-kmod.spec.in index f43adba7625..28a64841800 100644 --- a/rpm/redhat/zfs-kmod.spec.in +++ b/rpm/redhat/zfs-kmod.spec.in @@ -10,16 +10,15 @@ Group: System Environment/Kernel License: @ZFS_META_LICENSE@ URL: http://zfsonlinux.org/ BuildRequires: %kernel_module_package_buildreqs -BuildRequires: kmod-spl-devel = %{version} Source0: @PACKAGE@-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # Additional dependency information for the kmod sub-package must be specified # by generating a preamble text file which kmodtool can append to the spec file. %(/bin/echo -e "\ -Requires: spl-kmod\n\ Requires: @PACKAGE@ = %{version}\n\ -Conflicts: @PACKAGE@-dkms\n\n" > %{_sourcedir}/kmod-preamble) +Conflicts: @PACKAGE@-dkms\n\n" > %{_sourcedir}/kmod-preamble\n\ +Obsoletes: spl-kmod) # LDFLAGS are not sanitized by arch/*/Makefile for these architectures. %ifarch ppc ppc64 ppc64le aarch64 @@ -35,17 +34,13 @@ This package contains the ZFS kernel modules. %define ksrc %{_usrsrc}/kernels/%{kverrel} %define kobj %{ksrc} -%define splsrc %{_usrsrc}/spl-%{version} -%define splobj %{splsrc}/%{kverrel} %package -n kmod-%{kmod_name}-devel Summary: ZFS kernel module(s) devel common Group: System Environment/Kernel -Requires: kmod-spl-devel = %{version} %description -n kmod-%{kmod_name}-devel -This package provides the header files and objects to build kernel modules -which depend on the spl kernel module. +This package provides the header files and objects to build kernel modules. %prep if ! [ -d "%{ksrc}" ]; then @@ -71,8 +66,6 @@ fi --with-config=kernel \ --with-linux=%{ksrc} \ --with-linux-obj=%{kobj} \ - --with-spl="%{splsrc}" \ - --with-spl-obj="%{splobj}" \ %{debug} \ %{debuginfo} make %{?_smp_mflags} @@ -91,3 +84,4 @@ rm -rf $RPM_BUILD_ROOT %files -n kmod-%{kmod_name}-devel %{_usrsrc}/%{kmod_name}-%{version} +%{_usrsrc}/spl-%{version} diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 093cb1f90df..28d6185628b 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -40,8 +40,7 @@ export INSTALL_MOUNT_HELPER_DIR=@mounthelperdir@ export INSTALL_SYSCONF_DIR=@sysconfdir@ export INSTALL_PYTHON_DIR=@pythonsitedir@ -export KMOD_SPL=@SPL_OBJ@/module/spl/spl.ko -export KMOD_SPLAT=@SPL_OBJ@/module/splat/splat.ko +export KMOD_SPL=@abs_top_builddir@/module/spl/spl.ko export KMOD_ZAVL=@abs_top_builddir@/module/avl/zavl.ko export KMOD_ZNVPAIR=@abs_top_builddir@/module/nvpair/znvpair.ko export KMOD_ZUNICODE=@abs_top_builddir@/module/unicode/zunicode.ko diff --git a/scripts/dkms.mkconf b/scripts/dkms.mkconf index 35da3b69c80..f3bebc71b19 100755 --- a/scripts/dkms.mkconf +++ b/scripts/dkms.mkconf @@ -27,9 +27,6 @@ PRE_BUILD="configure --with-config=kernel --with-linux=\${kernel_source_dir} --with-linux-obj=\${kernel_source_dir} - --with-spl=\${source_tree}/spl-\${PACKAGE_VERSION} - --with-spl-obj=\${dkms_tree}/spl/\${PACKAGE_VERSION}/\${kernelver}/\${arch} - --with-spl-timeout=300 \$( [[ -n \"\${ICP_ROOT}\" ]] && \\ { @@ -56,7 +53,6 @@ POST_BUILD="scripts/dkms.postbuild -k \${kernelver} -t \${dkms_tree} " -BUILD_DEPENDS[0]="spl" AUTOINSTALL="yes" REMAKE_INITRD="no" MAKE[0]="make" @@ -73,6 +69,7 @@ STRIP[3]="\${STRIP[0]}" STRIP[4]="\${STRIP[0]}" STRIP[5]="\${STRIP[0]}" STRIP[6]="\${STRIP[0]}" +STRIP[7]="\${STRIP[0]}" BUILT_MODULE_NAME[0]="zavl" BUILT_MODULE_LOCATION[0]="module/avl/" DEST_MODULE_LOCATION[0]="/extra/avl/avl" @@ -94,4 +91,7 @@ DEST_MODULE_LOCATION[5]="/extra/icp/icp" BUILT_MODULE_NAME[6]="zlua" BUILT_MODULE_LOCATION[6]="module/lua/" DEST_MODULE_LOCATION[6]="/extra/lua/zlua" +BUILT_MODULE_NAME[7]="spl" +BUILT_MODULE_LOCATION[7]="module/spl/" +DEST_MODULE_LOCATION[7]="/extra/spl/spl" EOF diff --git a/scripts/kmodtool b/scripts/kmodtool index ce3f042947a..27a14cdac23 100755 --- a/scripts/kmodtool +++ b/scripts/kmodtool @@ -237,10 +237,16 @@ the ${kmodname}-devel- objects for the newest kernel. %defattr(644,root,root,755) %{_usrsrc}/${kmodname}-%{version} EOF + if [[ ${obsolete_name} ]]; then + echo "%{_usrsrc}/${obsolete_name}-%{version}" + fi for kernel in ${1}; do local kernel_uname_r=${kernel} echo "%exclude %{_usrsrc}/${kmodname}-%{version}/${kernel_uname_r}" + if [[ ${obsolete_name} ]]; then + echo "%exclude %{_usrsrc}/${obsolete_name}-%{version}/${kernel_uname_r}" + fi done echo @@ -295,9 +301,10 @@ kernel ${kernel_uname_r} for the %{_target_cpu} family of processors. %files -n kmod-${kmodname}-devel-${kernel_uname_r} %defattr(644,root,root,755) %{_usrsrc}/${kmodname}-%{version}/${kernel_uname_r} - - EOF + if [[ ${obsolete_name} ]]; then + echo "%{_usrsrc}/${obsolete_name}-%{version}/${kernel_uname_r}" + fi } print_rpmtemplate_kmodmetapkg () diff --git a/scripts/zfs.sh b/scripts/zfs.sh index 185eb5279a3..5ff181fb9e3 100755 --- a/scripts/zfs.sh +++ b/scripts/zfs.sh @@ -21,7 +21,6 @@ LDMOD=${LDMOD:-/sbin/modprobe} KMOD_ZLIB_DEFLATE=${KMOD_ZLIB_DEFLATE:-zlib_deflate} KMOD_ZLIB_INFLATE=${KMOD_ZLIB_INFLATE:-zlib_inflate} KMOD_SPL=${KMOD_SPL:-spl} -KMOD_SPLAT=${KMOD_SPLAT:-splat} KMOD_ZAVL=${KMOD_ZAVL:-zavl} KMOD_ZNVPAIR=${KMOD_ZNVPAIR:-znvpair} KMOD_ZUNICODE=${KMOD_ZUNICODE:-zunicode} @@ -76,7 +75,7 @@ check_modules() { LOADED_MODULES="" MISSING_MODULES="" - for KMOD in $KMOD_SPL $KMOD_SPLAT $KMOD_ZAVL $KMOD_ZNVPAIR \ + for KMOD in $KMOD_SPL $KMOD_ZAVL $KMOD_ZNVPAIR \ $KMOD_ZUNICODE $KMOD_ZCOMMON $KMOD_ZLUA $KMOD_ICP $KMOD_ZFS; do NAME=$(basename "$KMOD" .ko) @@ -135,7 +134,7 @@ load_modules() { modprobe "$KMOD_ZLIB_INFLATE" >/dev/null 2>&1 fi - for KMOD in $KMOD_SPL $KMOD_SPLAT $KMOD_ZAVL $KMOD_ZNVPAIR \ + for KMOD in $KMOD_SPL $KMOD_ZAVL $KMOD_ZNVPAIR \ $KMOD_ZUNICODE $KMOD_ZCOMMON $KMOD_ZLUA $KMOD_ICP $KMOD_ZFS; do load_module "$KMOD" || return 1 done @@ -165,7 +164,7 @@ unload_module() { unload_modules() { for KMOD in $KMOD_ZFS $KMOD_ICP $KMOD_ZLUA $KMOD_ZCOMMON $KMOD_ZUNICODE \ - $KMOD_ZNVPAIR $KMOD_ZAVL $KMOD_SPLAT $KMOD_SPL; do + $KMOD_ZNVPAIR $KMOD_ZAVL $KMOD_SPL; do NAME=$(basename "$KMOD" .ko) USE_COUNT=$(lsmod | grep -E "^${NAME} " | awk '{print $3}') diff --git a/scripts/zimport.sh b/scripts/zimport.sh index 61c9aba4a6e..426c329c9e1 100755 --- a/scripts/zimport.sh +++ b/scripts/zimport.sh @@ -42,9 +42,7 @@ # --------------------- ZFS on Linux Source Versions -------------- # zfs-0.6.2 master 0.6.2-175_g36eb554 # ----------------------------------------------------------------- -# Clone SPL Local Local Skip # Clone ZFS Local Local Skip -# Build SPL Pass Pass Skip # Build ZFS Pass Pass Skip # ----------------------------------------------------------------- # zevo-1.1.1 Pass Pass Pass @@ -190,7 +188,6 @@ trap 'rm -Rf "$SRC_DIR"' INT TERM EXIT populate "$SRC_DIR" 10 100 SRC_DIR="$TEST_DIR/src" -SRC_DIR_SPL="$SRC_DIR/spl" SRC_DIR_ZFS="$SRC_DIR/zfs" if [ "$COLOR" = "no" ]; then @@ -224,9 +221,6 @@ fail() { # # Set several helper variables which are derived from a source tag. # -# SPL_TAG - The tag zfs-x.y.z is translated to spl-x.y.z. -# SPL_DIR - The spl directory name. -# SPL_URL - The spl github URL to fetch the tarball. # ZFS_TAG - The passed zfs-x.y.z tag # ZFS_DIR - The zfs directory name # ZFS_URL - The zfs github URL to fetch the tarball @@ -234,10 +228,6 @@ fail() { src_set_vars() { local TAG=$1 - SPL_TAG="${TAG//zfs/spl}" - SPL_DIR="$SRC_DIR_SPL/$SPL_TAG" - SPL_URL="$REPO/spl/tarball/$SPL_TAG" - ZFS_TAG="$TAG" ZFS_DIR="$SRC_DIR_ZFS/$ZFS_TAG" ZFS_URL="$REPO/zfs/tarball/$ZFS_TAG" @@ -393,43 +383,6 @@ for TAG in $SRC_TAGS; do done echo -e "\n-----------------------------------------------------------------" -# -# Attempt to generate the tarball from your local git repository, if that -# fails then attempt to download the tarball from Github. -# -printf "%-16s" "Clone SPL" -for TAG in $SRC_TAGS; do - src_set_vars "$TAG" - - if [ -d "$SPL_DIR" ]; then - skip_nonewline - elif [ "$SPL_TAG" = "installed" ]; then - skip_nonewline - else - cd "$SRC_DIR" || fail "Failed 'cd $SRC_DIR'" - - if [ ! -d "$SRC_DIR_SPL" ]; then - mkdir -p "$SRC_DIR_SPL" - fi - - git archive --format=tar --prefix="$SPL_TAG/ $SPL_TAG" \ - -o "$SRC_DIR_SPL/$SPL_TAG.tar" &>/dev/null || \ - rm "$SRC_DIR_SPL/$SPL_TAG.tar" - if [ -s "$SRC_DIR_SPL/$SPL_TAG.tar" ]; then - tar -xf "$SRC_DIR_SPL/$SPL_TAG.tar" -C "$SRC_DIR_SPL" - rm "$SRC_DIR_SPL/$SPL_TAG.tar" - echo -n -e "${COLOR_GREEN}Local${COLOR_RESET}\t\t" - else - mkdir -p "$SPL_DIR" || fail "Failed to create $SPL_DIR" - curl -sL "$SPL_URL" | tar -xz -C "$SPL_DIR" \ - --strip-components=1 || \ - fail "Failed to download $SPL_URL" - echo -n -e "${COLOR_GREEN}Remote${COLOR_RESET}\t\t" - fi - fi -done -printf "\n" - # # Attempt to generate the tarball from your local git repository, if that # fails then attempt to download the tarball from Github. @@ -467,31 +420,6 @@ for TAG in $SRC_TAGS; do done printf "\n" -# Build the listed tags -printf "%-16s" "Build SPL" -for TAG in $SRC_TAGS; do - src_set_vars "$TAG" - - if [ -f "$SPL_DIR/module/spl/spl.ko" ]; then - skip_nonewline - elif [ "$SPL_TAG" = "installed" ]; then - skip_nonewline - else - cd "$SPL_DIR" || fail "Failed 'cd $SPL_DIR'" - make distclean &>/dev/null - ./autogen.sh >>"$CONFIG_LOG" 2>&1 || \ - fail "Failed SPL 'autogen.sh'" - # shellcheck disable=SC2086 - ./configure $CONFIG_OPTIONS >>"$CONFIG_LOG" 2>&1 || \ - fail "Failed SPL 'configure $CONFIG_OPTIONS'" - # shellcheck disable=SC2086 - make $MAKE_OPTIONS >>"$MAKE_LOG" 2>&1 || \ - fail "Failed SPL 'make $MAKE_OPTIONS'" - pass_nonewline - fi -done -printf "\n" - # Build the listed tags printf "%-16s" "Build ZFS" for TAG in $SRC_TAGS; do @@ -507,8 +435,7 @@ for TAG in $SRC_TAGS; do ./autogen.sh >>"$CONFIG_LOG" 2>&1 || \ fail "Failed ZFS 'autogen.sh'" # shellcheck disable=SC2086 - ./configure --with-spl="$SPL_DIR" $CONFIG_OPTIONS \ - >>"$CONFIG_LOG" 2>&1 || \ + ./configure $CONFIG_OPTIONS >>"$CONFIG_LOG" 2>&1 || \ fail "Failed ZFS 'configure $CONFIG_OPTIONS'" # shellcheck disable=SC2086 make $MAKE_OPTIONS >>"$MAKE_LOG" 2>&1 || \ diff --git a/tests/zfs-tests/tests/functional/checksum/edonr_test.c b/tests/zfs-tests/tests/functional/checksum/edonr_test.c index 1ea8e991e97..a2a924e5d89 100644 --- a/tests/zfs-tests/tests/functional/checksum/edonr_test.c +++ b/tests/zfs-tests/tests/functional/checksum/edonr_test.c @@ -36,8 +36,9 @@ #include #include #include +#include #include -#define NOTE(x) + typedef enum boolean { B_FALSE, B_TRUE } boolean_t; typedef unsigned long long u_longlong_t;