]> git.proxmox.com Git - mirror_spl.git/commitdiff
Prepare SPL repo to merge with ZFS repo master
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 15 Feb 2018 01:01:15 +0000 (17:01 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 29 May 2018 23:11:40 +0000 (16:11 -0700)
This commit removes everything from the repository except the core
SPL implementation for Linux.  Those files which remain have been
moved to non-conflicting locations to facilitate the merge.
The README.md and associated files have been updated accordingly.

Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Olaf Faaland <faaland1@llnl.gov>
Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
277 files changed:
.gitignore [deleted file]
COPYING [deleted file]
DISCLAIMER [deleted file]
LICENSE [new file with mode: 0644]
META [deleted file]
Makefile.am [deleted file]
NOTICE [new file with mode: 0644]
README.markdown [deleted file]
README.md [new file with mode: 0644]
autogen.sh [deleted file]
cmd/Makefile.am [deleted file]
cmd/splat/.gitignore [deleted file]
cmd/splat/Makefile.am [deleted file]
cmd/splat/splat.c [deleted file]
cmd/splat/splat.h [deleted file]
cmd/splslab/Makefile.am [deleted file]
cmd/splslab/splslab.py [deleted file]
config/.gitignore [deleted file]
config/Rules.am [deleted file]
config/config.awk [deleted file]
config/deb.am [deleted file]
config/kernel-fallocate-pax.m4 [new file with mode: 0644]
config/kernel-fallocate.m4 [deleted file]
config/kernel-kmem.m4 [new file with mode: 0644]
config/kernel-truncate-range.m4 [deleted file]
config/rpm.am [deleted file]
config/spl-build.m4 [deleted file]
config/spl-meta.m4 [deleted file]
config/tgz.am [deleted file]
configure.ac [deleted file]
copy-builtin [deleted file]
include/Makefile.am [deleted file]
include/fs/Makefile.am [deleted file]
include/fs/fs_subr.h [deleted file]
include/linux/Makefile.am [deleted file]
include/linux/bitops_compat.h [deleted file]
include/linux/compiler_compat.h [deleted file]
include/linux/delay_compat.h [deleted file]
include/linux/file_compat.h [deleted file]
include/linux/list_compat.h [deleted file]
include/linux/math64_compat.h [deleted file]
include/linux/mm_compat.h [deleted file]
include/linux/proc_compat.h [deleted file]
include/linux/rwsem_compat.h [deleted file]
include/linux/wait_compat.h [deleted file]
include/linux/zlib_compat.h [deleted file]
include/rpc/Makefile.am [deleted file]
include/rpc/types.h [deleted file]
include/rpc/xdr.h [deleted file]
include/sharefs/Makefile.am [deleted file]
include/sharefs/share.h [deleted file]
include/spl-ctl.h [deleted file]
include/spl/rpc/xdr.h [new file with mode: 0644]
include/spl/sys/acl.h [new file with mode: 0644]
include/spl/sys/atomic.h [new file with mode: 0644]
include/spl/sys/byteorder.h [new file with mode: 0644]
include/spl/sys/callb.h [new file with mode: 0644]
include/spl/sys/callo.h [new file with mode: 0644]
include/spl/sys/cmn_err.h [new file with mode: 0644]
include/spl/sys/condvar.h [new file with mode: 0644]
include/spl/sys/console.h [new file with mode: 0644]
include/spl/sys/cred.h [new file with mode: 0644]
include/spl/sys/ctype.h [new file with mode: 0644]
include/spl/sys/debug.h [new file with mode: 0644]
include/spl/sys/disp.h [new file with mode: 0644]
include/spl/sys/dkio.h [new file with mode: 0644]
include/spl/sys/dkioc_free_util.h [new file with mode: 0644]
include/spl/sys/fcntl.h [new file with mode: 0644]
include/spl/sys/file.h [new file with mode: 0644]
include/spl/sys/inttypes.h [new file with mode: 0644]
include/spl/sys/isa_defs.h [new file with mode: 0644]
include/spl/sys/kmem.h [new file with mode: 0644]
include/spl/sys/kmem_cache.h [new file with mode: 0644]
include/spl/sys/kobj.h [new file with mode: 0644]
include/spl/sys/kstat.h [new file with mode: 0644]
include/spl/sys/list.h [new file with mode: 0644]
include/spl/sys/mode.h [new file with mode: 0644]
include/spl/sys/mutex.h [new file with mode: 0644]
include/spl/sys/param.h [new file with mode: 0644]
include/spl/sys/proc.h [new file with mode: 0644]
include/spl/sys/processor.h [new file with mode: 0644]
include/spl/sys/random.h [new file with mode: 0644]
include/spl/sys/rwlock.h [new file with mode: 0644]
include/spl/sys/shrinker.h [new file with mode: 0644]
include/spl/sys/sid.h [new file with mode: 0644]
include/spl/sys/signal.h [new file with mode: 0644]
include/spl/sys/stat.h [new file with mode: 0644]
include/spl/sys/strings.h [new file with mode: 0644]
include/spl/sys/sunddi.h [new file with mode: 0644]
include/spl/sys/sysmacros.h [new file with mode: 0644]
include/spl/sys/systeminfo.h [new file with mode: 0644]
include/spl/sys/taskq.h [new file with mode: 0644]
include/spl/sys/thread.h [new file with mode: 0644]
include/spl/sys/time.h [new file with mode: 0644]
include/spl/sys/timer.h [new file with mode: 0644]
include/spl/sys/tsd.h [new file with mode: 0644]
include/spl/sys/types.h [new file with mode: 0644]
include/spl/sys/types32.h [new file with mode: 0644]
include/spl/sys/uio.h [new file with mode: 0644]
include/spl/sys/user.h [new file with mode: 0644]
include/spl/sys/vfs.h [new file with mode: 0644]
include/spl/sys/vmem.h [new file with mode: 0644]
include/spl/sys/vmsystm.h [new file with mode: 0644]
include/spl/sys/vnode.h [new file with mode: 0644]
include/spl/sys/wait.h [new file with mode: 0644]
include/spl/sys/zmod.h [new file with mode: 0644]
include/spl/sys/zone.h [new file with mode: 0644]
include/splat-ctl.h [deleted file]
include/strings.h [deleted file]
include/sys/Makefile.am [deleted file]
include/sys/acl.h [deleted file]
include/sys/acl_impl.h [deleted file]
include/sys/atomic.h [deleted file]
include/sys/attr.h [deleted file]
include/sys/bitmap.h [deleted file]
include/sys/bootconf.h [deleted file]
include/sys/bootprops.h [deleted file]
include/sys/buf.h [deleted file]
include/sys/byteorder.h [deleted file]
include/sys/callb.h [deleted file]
include/sys/callo.h [deleted file]
include/sys/cmn_err.h [deleted file]
include/sys/compress.h [deleted file]
include/sys/condvar.h [deleted file]
include/sys/conf.h [deleted file]
include/sys/console.h [deleted file]
include/sys/cpupart.h [deleted file]
include/sys/cpuvar.h [deleted file]
include/sys/crc32.h [deleted file]
include/sys/cred.h [deleted file]
include/sys/ctype.h [deleted file]
include/sys/ddi.h [deleted file]
include/sys/debug.h [deleted file]
include/sys/dirent.h [deleted file]
include/sys/disp.h [deleted file]
include/sys/dkio.h [deleted file]
include/sys/dkioc_free_util.h [deleted file]
include/sys/dklabel.h [deleted file]
include/sys/dnlc.h [deleted file]
include/sys/dumphdr.h [deleted file]
include/sys/efi_partition.h [deleted file]
include/sys/errno.h [deleted file]
include/sys/extdirent.h [deleted file]
include/sys/fcntl.h [deleted file]
include/sys/file.h [deleted file]
include/sys/fm/Makefile.am [deleted file]
include/sys/fm/protocol.h [deleted file]
include/sys/fm/util.h [deleted file]
include/sys/fs/Makefile.am [deleted file]
include/sys/fs/swapnode.h [deleted file]
include/sys/idmap.h [deleted file]
include/sys/int_limits.h [deleted file]
include/sys/int_types.h [deleted file]
include/sys/inttypes.h [deleted file]
include/sys/isa_defs.h [deleted file]
include/sys/kidmap.h [deleted file]
include/sys/kmem.h [deleted file]
include/sys/kmem_cache.h [deleted file]
include/sys/kobj.h [deleted file]
include/sys/kstat.h [deleted file]
include/sys/list.h [deleted file]
include/sys/mkdev.h [deleted file]
include/sys/mntent.h [deleted file]
include/sys/modctl.h [deleted file]
include/sys/mode.h [deleted file]
include/sys/mount.h [deleted file]
include/sys/mutex.h [deleted file]
include/sys/note.h [deleted file]
include/sys/open.h [deleted file]
include/sys/param.h [deleted file]
include/sys/pathname.h [deleted file]
include/sys/policy.h [deleted file]
include/sys/pool.h [deleted file]
include/sys/priv_impl.h [deleted file]
include/sys/proc.h [deleted file]
include/sys/processor.h [deleted file]
include/sys/pset.h [deleted file]
include/sys/random.h [deleted file]
include/sys/refstr.h [deleted file]
include/sys/resource.h [deleted file]
include/sys/rwlock.h [deleted file]
include/sys/sdt.h [deleted file]
include/sys/sid.h [deleted file]
include/sys/signal.h [deleted file]
include/sys/stat.h [deleted file]
include/sys/stropts.h [deleted file]
include/sys/sunddi.h [deleted file]
include/sys/sunldi.h [deleted file]
include/sys/sysdc.h [deleted file]
include/sys/sysmacros.h [deleted file]
include/sys/systeminfo.h [deleted file]
include/sys/systm.h [deleted file]
include/sys/t_lock.h [deleted file]
include/sys/taskq.h [deleted file]
include/sys/thread.h [deleted file]
include/sys/time.h [deleted file]
include/sys/timer.h [deleted file]
include/sys/tsd.h [deleted file]
include/sys/types.h [deleted file]
include/sys/types32.h [deleted file]
include/sys/u8_textprep.h [deleted file]
include/sys/uio.h [deleted file]
include/sys/unistd.h [deleted file]
include/sys/user.h [deleted file]
include/sys/va_list.h [deleted file]
include/sys/varargs.h [deleted file]
include/sys/vfs.h [deleted file]
include/sys/vfs_opreg.h [deleted file]
include/sys/vmem.h [deleted file]
include/sys/vmsystm.h [deleted file]
include/sys/vnode.h [deleted file]
include/sys/zmod.h [deleted file]
include/sys/zone.h [deleted file]
include/unistd.h [deleted file]
include/util/Makefile.am [deleted file]
include/util/qsort.h [deleted file]
include/util/sscanf.h [deleted file]
include/vm/Makefile.am [deleted file]
include/vm/anon.h [deleted file]
include/vm/pvn.h [deleted file]
include/vm/seg_kmem.h [deleted file]
lib/Makefile.am [deleted file]
lib/list.c [deleted file]
lib/list.h [deleted file]
man/Makefile.am [deleted file]
man/man1/Makefile.am [deleted file]
man/man1/splat.1 [deleted file]
man/man5/Makefile.am [deleted file]
module/.gitignore [deleted file]
module/Makefile.in [deleted file]
module/spl/Makefile.in [deleted file]
module/spl/THIRDPARTYLICENSE.gplv2 [new file with mode: 0644]
module/spl/THIRDPARTYLICENSE.gplv2.descrip [new file with mode: 0644]
module/spl/spl-generic.c
module/spl/spl-kmem-cache.c
module/spl/spl-kstat.c
module/spl/spl-proc.c
module/spl/spl-vmem.c
module/spl/spl-vnode.c
module/spl/spl-xdr.c
module/spl/spl-zlib.c
module/splat/Makefile.in [deleted file]
module/splat/splat-atomic.c [deleted file]
module/splat/splat-condvar.c [deleted file]
module/splat/splat-cred.c [deleted file]
module/splat/splat-ctl.c [deleted file]
module/splat/splat-generic.c [deleted file]
module/splat/splat-internal.h [deleted file]
module/splat/splat-kmem.c [deleted file]
module/splat/splat-kobj.c [deleted file]
module/splat/splat-linux.c [deleted file]
module/splat/splat-list.c [deleted file]
module/splat/splat-mutex.c [deleted file]
module/splat/splat-random.c [deleted file]
module/splat/splat-rwlock.c [deleted file]
module/splat/splat-taskq.c [deleted file]
module/splat/splat-thread.c [deleted file]
module/splat/splat-time.c [deleted file]
module/splat/splat-vnode.c [deleted file]
module/splat/splat-zlib.c [deleted file]
rpm/Makefile.am [deleted file]
rpm/generic/.gitignore [deleted file]
rpm/generic/Makefile.am [deleted file]
rpm/generic/spl-dkms.spec.in [deleted file]
rpm/generic/spl-kmod.spec.in [deleted file]
rpm/generic/spl.spec.in [deleted file]
rpm/redhat/.gitignore [deleted file]
rpm/redhat/Makefile.am [deleted file]
rpm/redhat/spl-dkms.spec.in [deleted symlink]
rpm/redhat/spl-kmod.spec.in [deleted file]
rpm/redhat/spl.spec.in [deleted symlink]
scripts/Makefile.am [deleted file]
scripts/check.sh [deleted file]
scripts/dkms.mkconf [deleted file]
scripts/dkms.postbuild [deleted file]
scripts/kmodtool [deleted file]
spl.release.in [deleted file]

diff --git a/.gitignore b/.gitignore
deleted file mode 100644 (file)
index de9d878..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# N.B.
-# This is the toplevel .gitignore file.
-# This is not the place for entries that are specific to
-# a subdirectory.  Instead add those files to the
-# .gitignore file in that subdirectory.
-#
-# N.B.
-# Please use 'git ls-files -i --exclude-standard'
-# command after changing this file, to see if there are
-# any tracked files which get ignored after the change.
-
-#
-# Normal rules
-#
-*.[oad]
-*.lo
-*.la
-*~
-*.swp
-.deps
-.libs
-.DS_Store
-Makefile
-Makefile.in
-
-#
-# Top level generated files specific to this top level dir
-#
-/configure
-/config.log
-/config.status
-/libtool
-/spl_config.h
-/spl_config.h.in
-/spl.release
-/stamp-h1
-/aclocal.m4
-/autom4te.cache
-
-#
-# Top level generic files
-#
-!.gitignore
-tags
-TAGS
-cscope.*
-*.rpm
-*.deb
-*.tar.gz
-*.patch
-*.orig
diff --git a/COPYING b/COPYING
deleted file mode 100644 (file)
index d159169..0000000
--- a/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/DISCLAIMER b/DISCLAIMER
deleted file mode 100644 (file)
index 1bb04be..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-This work 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.
-
-This work was prepared as an account of work sponsored by an agency of
-the United States Government.  Neither the United States Government nor
-Lawrence Livermore National Security, LLC nor any of their employees,
-makes any warranty, express or implied, or assumes any liability or
-responsibility for the accuracy, completeness, or usefulness of any
-information, apparatus, product, or process disclosed, or represents
-that its use would not infringe privately-owned rights.
-
-Reference herein to any specific commercial products, process, or
-services by trade name, trademark, manufacturer or otherwise does
-not necessarily constitute or imply its endorsement, recommendation,
-or favoring by the United States Government or Lawrence Livermore
-National Security, LLC.  The views and opinions of authors expressed
-herein do not necessarily state or reflect those of the Untied States
-Government or Lawrence Livermore National Security, LLC, and shall
-not be used for advertising or product endorsement purposes.
-
-The precise terms and conditions for copying, distribution, and
-modification are specified in the file "COPYING".
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..d159169
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,339 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/META b/META
deleted file mode 100644 (file)
index 740b294..0000000
--- a/META
+++ /dev/null
@@ -1,8 +0,0 @@
-Meta:         1
-Name:         spl
-Branch:       1.0
-Version:      0.7.0
-Release:      1
-Release-Tags: relext
-License:      GPL
-Author:       OpenZFS on Linux
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644 (file)
index 05107cb..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-ACLOCAL_AMFLAGS = -I config
-
-include config/rpm.am
-include config/deb.am
-include config/tgz.am
-
-SUBDIRS = include rpm
-if CONFIG_USER
-SUBDIRS += lib cmd man scripts
-endif
-if CONFIG_KERNEL
-SUBDIRS += module
-
-extradir = @prefix@/src/spl-$(VERSION)
-extra_HEADERS = spl.release.in spl_config.h.in
-
-kerneldir = @prefix@/src/spl-$(VERSION)/$(LINUX_VERSION)
-nodist_kernel_HEADERS = spl.release spl_config.h module/$(LINUX_SYMBOLS)
-endif
-
-AUTOMAKE_OPTIONS = foreign
-EXTRA_DIST  = autogen.sh META DISCLAIMER copy-builtin
-EXTRA_DIST += config/config.awk config/rpm.am config/deb.am config/tgz.am
-
-distclean-local::
-       -$(RM) -R autom4te*.cache
-       -find . \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \
-               -o -name .pc -o -name .hg -o -name .git \) -prune -o \
-               \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
-               -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
-               -o -name '.*.rej' -o -name 'aclocal.m4' -o -size 0 \
-               -o -name '*%' -o -name '.*.cmd' -o -name 'core' \
-               -o -name 'Makefile' -o -name '$(LINUX_SYMBOLS)' \
-               -o -name '*.order' -o -name '*.markers' \) \
-               -type f -print | xargs $(RM)
-
-dist-hook:
-       sed -i 's/Release:[[:print:]]*/Release:      $(RELEASE)/' \
-               $(distdir)/META
-
-ctags:
-       $(RM) tags
-       find $(top_srcdir) -name .git -prune -o -name '*.[hc]' | xargs ctags
-
-etags:
-       $(RM) TAGS
-       find $(top_srcdir) -name .pc -prune -o -name '*.[hc]' | xargs etags -a
-
-tags: ctags etags
-
-pkg: @DEFAULT_PACKAGE@
-pkg-dkms: @DEFAULT_PACKAGE@-dkms
-pkg-kmod: @DEFAULT_PACKAGE@-kmod
-pkg-utils: @DEFAULT_PACKAGE@-utils
diff --git a/NOTICE b/NOTICE
new file mode 100644 (file)
index 0000000..3218920
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,16 @@
+This work was produced under the auspices of the U.S. Department of Energy by
+Lawrence Livermore National Laboratory under Contract DE-AC52-07NA27344.
+
+This work was prepared as an account of work sponsored by an agency of the
+United States Government. Neither the United States Government nor Lawrence
+Livermore National Security, LLC, nor any of their employees makes any warranty,
+expressed or implied, or assumes any legal liability or responsibility for the
+accuracy, completeness, or usefulness of any information, apparatus, product, or
+process disclosed, or represents that its use would not infringe privately owned
+rights. Reference herein to any specific commercial product, process, or service
+by trade name, trademark, manufacturer, or otherwise does not necessarily
+constitute or imply its endorsement, recommendation, or favoring by the United
+States Government or Lawrence Livermore National Security, LLC. The views and
+opinions of authors expressed herein do not necessarily state or reflect those
+of the United States Government or Lawrence Livermore National Security, LLC,
+and shall not be used for advertising or product endorsement purposes.
diff --git a/README.markdown b/README.markdown
deleted file mode 100644 (file)
index bdf63ac..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-The Solaris Porting Layer (SPL) is a Linux kernel module which provides
-many of the Solaris kernel APIs.  This shim layer makes it possible to
-run Solaris kernel code in the Linux kernel with relatively minimal
-modification.  This can be particularly useful when you want to track
-upstream Solaris development closely and do not want the overhead of
-maintaining a large patch which converts Solaris primitives to Linux
-primitives.
-
-To build packages for your distribution:
-
-    $ sh autogen.sh
-    $ ./configure
-    $ make pkg
-
-If you are building directly from the git tree and not an officially
-released tarball you will need to generate the configure script.
-This can be done by executing the autogen.sh script after installing
-the GNU autotools for your distribution.
-
-To copy the kernel code inside your kernel source tree for builtin
-compilation:
-
-    $ sh autogen.sh
-    $ ./configure --enable-linux-builtin --with-linux=/usr/src/linux-...
-    $ ./copy-builtin /usr/src/linux-...
-
-The SPL comes with an automated test suite called SPLAT.  The test suite
-is implemented in two parts.  There is a kernel module which contains
-the tests and a user space utility which controls which tests are run.
-To run the full test suite:
-
-    $ sudo insmod ./module/splat/splat.ko
-    $ sudo ./cmd/splat --all
-
-Full documentation for building, configuring, testing, and using the
-SPL can be found at: <http://zfsonlinux.org>
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..64283ec
--- /dev/null
+++ b/README.md
@@ -0,0 +1,21 @@
+![img](http://zfsonlinux.org/images/zfs-linux.png)
+
+The Solaris Porting Layer, SPL, is a Linux kernel module which provides a
+compatibility layer used by the [ZFS on Linux](http://zfsonlinux.org) project.
+
+# Installation
+
+The latest version of the SPL is maintained as part of the ZFS on Linux
+Github repository:
+
+  * Latest Version: https://github.com/zfsonlinux/zfs  
+
+Cloning this repository is only needed when building version 0.7.x or earlier.
+
+  * Version 0.7.x: https://github.com/zfsonlinux/spl/tree/spl-0.7-release  
+  * Version 0.6.5.x: https://github.com/zfsonlinux/spl/tree/spl-0.6.5-release  
+
+# Release
+
+The SPL is released under a GPLv2 license. For more details see the NOTICE
+and LICENSE files; `UCRL-CODE-235197`
diff --git a/autogen.sh b/autogen.sh
deleted file mode 100755 (executable)
index 427394a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-autoreconf -fiv
-rm -Rf autom4te.cache
diff --git a/cmd/Makefile.am b/cmd/Makefile.am
deleted file mode 100644 (file)
index 63a3c76..0000000
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = splat splslab
diff --git a/cmd/splat/.gitignore b/cmd/splat/.gitignore
deleted file mode 100644 (file)
index 97325b3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/splat
diff --git a/cmd/splat/Makefile.am b/cmd/splat/Makefile.am
deleted file mode 100644 (file)
index 01afdcf..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-include $(top_srcdir)/config/Rules.am
-
-DEFAULT_INCLUDES += \
-       -I$(top_srcdir)/lib
-
-sbin_PROGRAMS = splat
-
-splat_SOURCES = splat.c
-splat_LDFLAGS = $(top_builddir)/lib/libcommon.la
-
-EXTRA_DIST = splat.h
diff --git a/cmd/splat/splat.c b/cmd/splat/splat.c
deleted file mode 100644 (file)
index d11a64c..0000000
+++ /dev/null
@@ -1,836 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) User Space Interface.
- */
-
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <getopt.h>
-#include <assert.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include "splat.h"
-
-#undef ioctl
-
-static const char shortOpts[] = "hvlat:xc";
-static const struct option longOpts[] = {
-       { "help",            no_argument,       0, 'h' },
-       { "verbose",         no_argument,       0, 'v' },
-       { "list",            no_argument,       0, 'l' },
-       { "all",             no_argument,       0, 'a' },
-       { "test",            required_argument, 0, 't' },
-       { "exit",            no_argument,       0, 'x' },
-       { "nocolor",         no_argument,       0, 'c' },
-       { 0,                 0,                 0, 0   }
-};
-
-#define VERSION_SIZE   64
-
-static List subsystems;                                /* Subsystem/tests */
-static int splatctl_fd;                                /* Control file descriptor */
-static char splat_version[VERSION_SIZE];       /* Kernel version string */
-static char *splat_buffer = NULL;              /* Scratch space area */
-static int splat_buffer_size = 0;              /* Scratch space size */
-
-
-static void test_list(List, int);
-static int dev_clear(void);
-static void subsystem_fini(subsystem_t *);
-static void test_fini(test_t *);
-
-
-static int usage(void) {
-       fprintf(stderr, "usage: splat [hvla] [-t <subsystem:<tests>>]\n");
-       fprintf(stderr,
-       "  --help      -h               This help\n"
-       "  --verbose   -v               Increase verbosity\n"
-       "  --list      -l               List all tests in all subsystems\n"
-       "  --all       -a               Run all tests in all subsystems\n"
-       "  --test      -t <sub:test>    Run 'test' in subsystem 'sub'\n"
-       "  --exit      -x               Exit on first test error\n"
-       "  --nocolor   -c               Do not colorize output\n");
-       fprintf(stderr, "\n"
-       "Examples:\n"
-       "  splat -t kmem:all     # Runs all kmem tests\n"
-       "  splat -t taskq:0x201  # Run taskq test 0x201\n");
-
-       return 0;
-}
-
-static subsystem_t *subsystem_init(splat_user_t *desc)
-{
-       subsystem_t *sub;
-
-       sub = (subsystem_t *)malloc(sizeof(*sub));
-       if (sub == NULL)
-               return NULL;
-
-       memcpy(&sub->sub_desc, desc, sizeof(*desc));
-
-       sub->sub_tests = list_create((ListDelF)test_fini);
-       if (sub->sub_tests == NULL) {
-               free(sub);
-               return NULL;
-       }
-
-       return sub;
-}
-
-static void subsystem_fini(subsystem_t *sub)
-{
-       assert(sub != NULL);
-       free(sub);
-}
-
-static int subsystem_setup(void)
-{
-       splat_cfg_t *cfg;
-       int i, rc, size, cfg_size;
-       subsystem_t *sub;
-       splat_user_t *desc;
-
-       /* Aquire the number of registered subsystems */
-       cfg_size = sizeof(*cfg);
-       cfg = (splat_cfg_t *)malloc(cfg_size);
-       if (cfg == NULL)
-               return -ENOMEM;
-
-       memset(cfg, 0, cfg_size);
-       cfg->cfg_magic = SPLAT_CFG_MAGIC;
-        cfg->cfg_cmd   = SPLAT_CFG_SUBSYSTEM_COUNT;
-
-       rc = ioctl(splatctl_fd, SPLAT_CFG, cfg);
-       if (rc) {
-               fprintf(stderr, "Ioctl() error 0x%lx / %d: %d\n",
-                       (unsigned long)SPLAT_CFG, cfg->cfg_cmd, errno);
-               free(cfg);
-               return rc;
-       }
-
-       size = cfg->cfg_rc1;
-       free(cfg);
-
-       /* Based on the newly acquired number of subsystems allocate
-        * memory to get the descriptive information for them all. */
-       cfg_size = sizeof(*cfg) + size * sizeof(splat_user_t);
-       cfg = (splat_cfg_t *)malloc(cfg_size);
-       if (cfg == NULL)
-               return -ENOMEM;
-
-       memset(cfg, 0, cfg_size);
-       cfg->cfg_magic = SPLAT_CFG_MAGIC;
-       cfg->cfg_cmd   = SPLAT_CFG_SUBSYSTEM_LIST;
-       cfg->cfg_data.splat_subsystems.size = size;
-
-       rc = ioctl(splatctl_fd, SPLAT_CFG, cfg);
-       if (rc) {
-               fprintf(stderr, "Ioctl() error %lu / %d: %d\n",
-                       (unsigned long) SPLAT_CFG, cfg->cfg_cmd, errno);
-               free(cfg);
-               return rc;
-       }
-
-       /* Add the new subsystems in to the global list */
-       size = cfg->cfg_rc1;
-       for (i = 0; i < size; i++) {
-               desc = &(cfg->cfg_data.splat_subsystems.descs[i]);
-
-               sub = subsystem_init(desc);
-               if (sub == NULL) {
-                       fprintf(stderr, "Error initializing subsystem: %s\n",
-                               desc->name);
-                       free(cfg);
-                       return -ENOMEM;
-               }
-
-               list_append(subsystems, sub);
-       }
-
-       free(cfg);
-       return 0;
-}
-
-static void subsystem_list(List l, int indent)
-{
-       ListIterator i;
-       subsystem_t *sub;
-
-       fprintf(stdout,
-               "------------------------------ "
-               "Available SPLAT Tests "
-               "------------------------------\n");
-
-       i = list_iterator_create(l);
-
-       while ((sub = list_next(i))) {
-               fprintf(stdout, "%*s0x%0*x %-*s ---- %s ----\n",
-                       indent, "",
-                       4, sub->sub_desc.id,
-                       SPLAT_NAME_SIZE + 7, sub->sub_desc.name,
-                       sub->sub_desc.desc);
-               test_list(sub->sub_tests, indent + 7);
-       }
-
-       list_iterator_destroy(i);
-}
-
-static test_t *test_init(subsystem_t *sub, splat_user_t *desc)
-{
-       test_t *test;
-
-       test = (test_t *)malloc(sizeof(*test));
-       if (test == NULL)
-               return NULL;
-
-       test->test_sub = sub;
-       memcpy(&test->test_desc, desc, sizeof(*desc));
-
-       return test;
-}
-
-static void test_fini(test_t *test)
-{
-       assert(test != NULL);
-       free(test);
-}
-
-static int test_setup(subsystem_t *sub)
-{
-       splat_cfg_t *cfg;
-       int i, rc, size;
-       test_t *test;
-       splat_user_t *desc;
-
-       /* Aquire the number of registered tests for the give subsystem */
-       cfg = (splat_cfg_t *)malloc(sizeof(*cfg));
-       if (cfg == NULL)
-               return -ENOMEM;
-
-       memset(cfg, 0, sizeof(*cfg));
-       cfg->cfg_magic = SPLAT_CFG_MAGIC;
-        cfg->cfg_cmd   = SPLAT_CFG_TEST_COUNT;
-       cfg->cfg_arg1  = sub->sub_desc.id; /* Subsystem of interest */
-
-       rc = ioctl(splatctl_fd, SPLAT_CFG, cfg);
-       if (rc) {
-               fprintf(stderr, "Ioctl() error %lu / %d: %d\n",
-                       (unsigned long) SPLAT_CFG, cfg->cfg_cmd, errno);
-               free(cfg);
-               return rc;
-       }
-
-       size = cfg->cfg_rc1;
-       free(cfg);
-
-       /* Based on the newly aquired number of tests allocate enough
-        * memory to get the descriptive information for them all. */
-       cfg = (splat_cfg_t *)malloc(sizeof(*cfg) + size*sizeof(splat_user_t));
-       if (cfg == NULL)
-               return -ENOMEM;
-
-       memset(cfg, 0, sizeof(*cfg) + size * sizeof(splat_user_t));
-       cfg->cfg_magic = SPLAT_CFG_MAGIC;
-       cfg->cfg_cmd   = SPLAT_CFG_TEST_LIST;
-       cfg->cfg_arg1  = sub->sub_desc.id; /* Subsystem of interest */
-       cfg->cfg_data.splat_tests.size = size;
-
-       rc = ioctl(splatctl_fd, SPLAT_CFG, cfg);
-       if (rc) {
-               fprintf(stderr, "Ioctl() error %lu / %d: %d\n",
-                       (unsigned long) SPLAT_CFG, cfg->cfg_cmd, errno);
-               free(cfg);
-               return rc;
-       }
-
-       /* Add the new tests in to the relevant subsystems */
-       size = cfg->cfg_rc1;
-       for (i = 0; i < size; i++) {
-               desc = &(cfg->cfg_data.splat_tests.descs[i]);
-
-               test = test_init(sub, desc);
-               if (test == NULL) {
-                       fprintf(stderr, "Error initializing test: %s\n",
-                               desc->name);
-                       free(cfg);
-                       return -ENOMEM;
-               }
-
-               list_append(sub->sub_tests, test);
-       }
-
-       free(cfg);
-       return 0;
-}
-
-static test_t *test_copy(test_t *test)
-{
-       return test_init(test->test_sub, &test->test_desc);
-}
-
-static void test_list(List l, int indent)
-{
-       ListIterator i;
-       test_t *test;
-
-       i = list_iterator_create(l);
-
-       while ((test = list_next(i)))
-               fprintf(stdout, "%*s0x%0*x %-*s %s\n",
-                       indent, "", 04, test->test_desc.id,
-                       SPLAT_NAME_SIZE, test->test_desc.name,
-                       test->test_desc.desc);
-
-       list_iterator_destroy(i);
-}
-
-static test_t *test_find(char *sub_str, char *test_str)
-{
-       ListIterator si, ti;
-       subsystem_t *sub;
-       test_t *test;
-       __u32 sub_num, test_num;
-
-       /*
-        * No error checking here because it may not be a number, it's
-        * perfectly OK for it to be a string.  Since we're just using
-        * it for comparison purposes this is all very safe.
-        */
-       sub_num = strtoul(sub_str, NULL, 0);
-       test_num = strtoul(test_str, NULL, 0);
-
-        si = list_iterator_create(subsystems);
-
-        while ((sub = list_next(si))) {
-
-               if (strncmp(sub->sub_desc.name, sub_str, SPLAT_NAME_SIZE) &&
-                   sub->sub_desc.id != sub_num)
-                       continue;
-
-               ti = list_iterator_create(sub->sub_tests);
-
-               while ((test = list_next(ti))) {
-
-                       if (!strncmp(test->test_desc.name, test_str,
-                           SPLAT_NAME_SIZE) || test->test_desc.id==test_num) {
-                               list_iterator_destroy(ti);
-                               list_iterator_destroy(si);
-                               return test;
-                       }
-               }
-
-               list_iterator_destroy(ti);
-        }
-
-        list_iterator_destroy(si);
-
-       return NULL;
-}
-
-static int test_add(cmd_args_t *args, test_t *test)
-{
-       test_t *tmp;
-
-       tmp = test_copy(test);
-       if (tmp == NULL)
-               return -ENOMEM;
-
-       list_append(args->args_tests, tmp);
-       return 0;
-}
-
-static int test_add_all(cmd_args_t *args)
-{
-       ListIterator si, ti;
-       subsystem_t *sub;
-       test_t *test;
-       int rc;
-
-        si = list_iterator_create(subsystems);
-
-        while ((sub = list_next(si))) {
-               ti = list_iterator_create(sub->sub_tests);
-
-               while ((test = list_next(ti))) {
-                       if ((rc = test_add(args, test))) {
-                               list_iterator_destroy(ti);
-                               list_iterator_destroy(si);
-                               return rc;
-                       }
-               }
-
-               list_iterator_destroy(ti);
-        }
-
-        list_iterator_destroy(si);
-
-       return 0;
-}
-
-static int test_run(cmd_args_t *args, test_t *test)
-{
-       subsystem_t *sub = test->test_sub;
-       splat_cmd_t *cmd;
-       int rc, cmd_size;
-
-       dev_clear();
-
-       cmd_size = sizeof(*cmd);
-       cmd = (splat_cmd_t *)malloc(cmd_size);
-       if (cmd == NULL)
-               return -ENOMEM;
-
-       memset(cmd, 0, cmd_size);
-       cmd->cmd_magic = SPLAT_CMD_MAGIC;
-        cmd->cmd_subsystem = sub->sub_desc.id;
-       cmd->cmd_test = test->test_desc.id;
-       cmd->cmd_data_size = 0; /* Unused feature */
-
-       fprintf(stdout, "%*s:%-*s ",
-               SPLAT_NAME_SIZE, sub->sub_desc.name,
-               SPLAT_NAME_SIZE, test->test_desc.name);
-       fflush(stdout);
-       rc = ioctl(splatctl_fd, SPLAT_CMD, cmd);
-       if (args->args_do_color) {
-               fprintf(stdout, "%s  %s\n", rc ?
-                       COLOR_RED "Fail" COLOR_RESET :
-                       COLOR_GREEN "Pass" COLOR_RESET,
-                       rc ? strerror(errno) : "");
-       } else {
-               fprintf(stdout, "%s  %s\n", rc ?
-                       "Fail" : "Pass",
-                       rc ? strerror(errno) : "");
-       }
-       fflush(stdout);
-       free(cmd);
-
-       if ((args->args_verbose == 1 && rc) ||
-           (args->args_verbose >= 2)) {
-               if ((rc = read(splatctl_fd, splat_buffer,
-                              splat_buffer_size - 1)) < 0) {
-                       fprintf(stdout, "Error reading results: %d\n", rc);
-               } else {
-                       fprintf(stdout, "\n%s\n", splat_buffer);
-                       fflush(stdout);
-               }
-       }
-
-       return rc;
-}
-
-static int tests_run(cmd_args_t *args)
-{
-        ListIterator i;
-       test_t *test;
-       int rc;
-
-       fprintf(stdout,
-               "------------------------------ "
-               "Running SPLAT Tests "
-               "------------------------------\n");
-
-       i = list_iterator_create(args->args_tests);
-
-       while ((test = list_next(i))) {
-               rc = test_run(args, test);
-               if (rc && args->args_exit_on_error) {
-                       list_iterator_destroy(i);
-                       return rc;
-               }
-       }
-
-       list_iterator_destroy(i);
-       return 0;
-}
-
-static int args_parse_test(cmd_args_t *args, char *str)
-{
-        ListIterator si, ti;
-       subsystem_t *s;
-       test_t *t;
-       char *sub_str, *test_str;
-       int sub_num, test_num;
-       int sub_all = 0, test_all = 0;
-       int rc, flag = 0;
-
-       test_str = strchr(str, ':');
-       if (test_str == NULL) {
-               fprintf(stderr, "Test must be of the "
-                       "form <subsystem:test>\n");
-               return -EINVAL;
-       }
-
-       sub_str = str;
-       test_str[0] = '\0';
-       test_str = test_str + 1;
-
-       sub_num = strtol(sub_str, NULL, 0);
-       test_num = strtol(test_str, NULL, 0);
-
-       if (!strncasecmp(sub_str, "all", strlen(sub_str)) || (sub_num == -1))
-               sub_all = 1;
-
-       if (!strncasecmp(test_str,"all",strlen(test_str)) || (test_num == -1))
-               test_all = 1;
-
-       si = list_iterator_create(subsystems);
-
-       if (sub_all) {
-               if (test_all) {
-                       /* Add all tests from all subsystems */
-                       while ((s = list_next(si))) {
-                               ti = list_iterator_create(s->sub_tests);
-                               while ((t = list_next(ti))) {
-                                       if ((rc = test_add(args, t))) {
-                                               list_iterator_destroy(ti);
-                                               goto error_run;
-                                       }
-                               }
-                               list_iterator_destroy(ti);
-                       }
-               } else {
-                       /* Add a specific test from all subsystems */
-                       while ((s = list_next(si))) {
-                               if ((t=test_find(s->sub_desc.name,test_str))) {
-                                       if ((rc = test_add(args, t)))
-                                               goto error_run;
-
-                                       flag = 1;
-                               }
-                       }
-
-                       if (!flag)
-                               fprintf(stderr, "No tests '%s:%s' could be "
-                                       "found\n", sub_str, test_str);
-               }
-       } else {
-               if (test_all) {
-                       /* Add all tests from a specific subsystem */
-                       while ((s = list_next(si))) {
-                               if (strncasecmp(sub_str, s->sub_desc.name,
-                                   strlen(sub_str)))
-                                       continue;
-
-                               ti = list_iterator_create(s->sub_tests);
-                               while ((t = list_next(ti))) {
-                                       if ((rc = test_add(args, t))) {
-                                               list_iterator_destroy(ti);
-                                               goto error_run;
-                                       }
-                               }
-                               list_iterator_destroy(ti);
-                       }
-               } else {
-                       /* Add a specific test from a specific subsystem */
-                       if ((t = test_find(sub_str, test_str))) {
-                               if ((rc = test_add(args, t)))
-                                       goto error_run;
-                       } else {
-                               fprintf(stderr, "Test '%s:%s' could not be "
-                                       "found\n", sub_str, test_str);
-                               return -EINVAL;
-                       }
-               }
-       }
-
-       list_iterator_destroy(si);
-
-       return 0;
-
-error_run:
-       list_iterator_destroy(si);
-
-       fprintf(stderr, "Test '%s:%s' not added to run list: %d\n",
-               sub_str, test_str, rc);
-
-       return rc;
-}
-
-static void args_fini(cmd_args_t *args)
-{
-       assert(args != NULL);
-
-       if (args->args_tests != NULL)
-               list_destroy(args->args_tests);
-
-       free(args);
-}
-
-static cmd_args_t *
-args_init(int argc, char **argv)
-{
-       cmd_args_t *args;
-       int c, rc;
-
-       if (argc == 1) {
-               usage();
-               return (cmd_args_t *) NULL;
-       }
-
-       /* Configure and populate the args structures */
-       args = malloc(sizeof(*args));
-       if (args == NULL)
-               return NULL;
-
-       memset(args, 0, sizeof(*args));
-       args->args_verbose = 0;
-       args->args_do_list = 0;
-       args->args_do_all  = 0;
-       args->args_do_color = 1;
-       args->args_exit_on_error = 0;
-       args->args_tests = list_create((ListDelF)test_fini);
-       if (args->args_tests == NULL) {
-               args_fini(args);
-               return NULL;
-       }
-
-       while ((c = getopt_long(argc, argv, shortOpts, longOpts, NULL)) != -1){
-               switch (c) {
-               case 'v':  args->args_verbose++;                        break;
-               case 'l':  args->args_do_list = 1;                      break;
-               case 'a':  args->args_do_all = 1;                       break;
-               case 'c':  args->args_do_color = 0;                     break;
-               case 'x':  args->args_exit_on_error = 1;                break;
-               case 't':
-                       if (args->args_do_all) {
-                               fprintf(stderr, "Option -t <subsystem:test> is "
-                                       "useless when used with -a\n");
-                               args_fini(args);
-                               return NULL;
-                       }
-
-                       rc = args_parse_test(args, argv[optind - 1]);
-                       if (rc) {
-                               args_fini(args);
-                               return NULL;
-                       }
-                       break;
-               case 'h':
-               case '?':
-                       usage();
-                       args_fini(args);
-                       return NULL;
-               default:
-                       fprintf(stderr, "Unknown option '%s'\n",
-                               argv[optind - 1]);
-                       break;
-               }
-       }
-
-       return args;
-}
-
-static int
-dev_clear(void)
-{
-       splat_cfg_t cfg;
-       int rc;
-
-       memset(&cfg, 0, sizeof(cfg));
-       cfg.cfg_magic = SPLAT_CFG_MAGIC;
-        cfg.cfg_cmd   = SPLAT_CFG_BUFFER_CLEAR;
-       cfg.cfg_arg1  = 0;
-
-       rc = ioctl(splatctl_fd, SPLAT_CFG, &cfg);
-       if (rc)
-               fprintf(stderr, "Ioctl() error %lu / %d: %d\n",
-                       (unsigned long) SPLAT_CFG, cfg.cfg_cmd, errno);
-
-       lseek(splatctl_fd, 0, SEEK_SET);
-
-       return rc;
-}
-
-static int
-dev_size(int size)
-{
-       splat_cfg_t cfg;
-       int rc;
-
-       memset(&cfg, 0, sizeof(cfg));
-       cfg.cfg_magic = SPLAT_CFG_MAGIC;
-        cfg.cfg_cmd   = SPLAT_CFG_BUFFER_SIZE;
-       cfg.cfg_arg1  = size;
-
-       rc = ioctl(splatctl_fd, SPLAT_CFG, &cfg);
-       if (rc) {
-               fprintf(stderr, "Ioctl() error %lu / %d: %d\n",
-                       (unsigned long) SPLAT_CFG, cfg.cfg_cmd, errno);
-               return rc;
-       }
-
-       return cfg.cfg_rc1;
-}
-
-static void
-dev_fini(void)
-{
-       if (splat_buffer)
-               free(splat_buffer);
-
-       if (splatctl_fd != -1) {
-               if (close(splatctl_fd) == -1) {
-                       fprintf(stderr, "Unable to close %s: %d\n",
-                               SPLAT_DEV, errno);
-               }
-       }
-}
-
-static int
-dev_init(void)
-{
-       ListIterator i;
-       subsystem_t *sub;
-       int rc;
-
-       splatctl_fd = open(SPLAT_DEV, O_RDONLY);
-       if (splatctl_fd == -1) {
-               fprintf(stderr, "Unable to open %s: %d\n"
-                       "Is the splat module loaded?\n", SPLAT_DEV, errno);
-               rc = errno;
-               goto error;
-       }
-
-       /* Determine kernel module version string */
-       memset(splat_version, 0, VERSION_SIZE);
-       if ((rc = read(splatctl_fd, splat_version, VERSION_SIZE - 1)) == -1)
-               goto error;
-
-       if ((rc = dev_clear()))
-               goto error;
-
-       if ((rc = dev_size(0)) < 0)
-               goto error;
-
-       splat_buffer_size = rc;
-       splat_buffer = (char *)malloc(splat_buffer_size);
-       if (splat_buffer == NULL) {
-               rc = -ENOMEM;
-               goto error;
-       }
-
-       memset(splat_buffer, 0, splat_buffer_size);
-
-       /* Determine available subsystems */
-       if ((rc = subsystem_setup()) != 0)
-               goto error;
-
-       /* Determine available tests for all subsystems */
-       i = list_iterator_create(subsystems);
-
-       while ((sub = list_next(i))) {
-               if ((rc = test_setup(sub)) != 0) {
-                       list_iterator_destroy(i);
-                       goto error;
-               }
-       }
-
-       list_iterator_destroy(i);
-       return 0;
-
-error:
-       if (splatctl_fd != -1) {
-               if (close(splatctl_fd) == -1) {
-                       fprintf(stderr, "Unable to close %s: %d\n",
-                               SPLAT_DEV, errno);
-               }
-       }
-
-       return rc;
-}
-
-int
-init(void)
-{
-       int rc = 0;
-
-       /* Allocate the subsystem list */
-       subsystems = list_create((ListDelF)subsystem_fini);
-       if (subsystems == NULL)
-               rc = ENOMEM;
-
-       return rc;
-}
-
-void
-fini(void)
-{
-       list_destroy(subsystems);
-}
-
-
-int
-main(int argc, char **argv)
-{
-       cmd_args_t *args = NULL;
-       int rc = 0;
-
-       /* General init */
-       if ((rc = init()))
-               return rc;
-
-       /* Device specific init */
-       if ((rc = dev_init()))
-               goto out;
-
-       /* Argument init and parsing */
-       if ((args = args_init(argc, argv)) == NULL) {
-               rc = -1;
-               goto out;
-       }
-
-       /* Generic kernel version string */
-       if (args->args_verbose)
-               fprintf(stdout, "%s", splat_version);
-
-       /* Print the available test list and exit */
-       if (args->args_do_list) {
-               subsystem_list(subsystems, 0);
-               goto out;
-       }
-
-       /* Add all available test to the list of tests to run */
-       if (args->args_do_all) {
-               if ((rc = test_add_all(args)))
-                       goto out;
-       }
-
-       /* Run all the requested tests */
-       if ((rc = tests_run(args)))
-               goto out;
-
-out:
-       if (args != NULL)
-               args_fini(args);
-
-       dev_fini();
-       fini();
-       return rc;
-}
diff --git a/cmd/splat/splat.h b/cmd/splat/splat.h
deleted file mode 100644 (file)
index 8fbc97c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPLAT_H
-#define _SPLAT_H
-
-#include "list.h"
-#include "../include/splat-ctl.h"
-
-#define DEV_NAME                       "/dev/splatctl"
-#define COLOR_BLACK                    "\033[0;30m"
-#define COLOR_DK_GRAY                  "\033[1;30m"
-#define COLOR_BLUE                     "\033[0;34m"
-#define COLOR_LT_BLUE                  "\033[1;34m"
-#define COLOR_GREEN                    "\033[0;32m"
-#define COLOR_LT_GREEN                 "\033[1;32m"
-#define COLOR_CYAN                     "\033[0;36m"
-#define COLOR_LT_CYAN                  "\033[1;36m"
-#define COLOR_RED                      "\033[0;31m"
-#define COLOR_LT_RED                   "\033[1;31m"
-#define COLOR_PURPLE                   "\033[0;35m"
-#define COLOR_LT_PURPLE                        "\033[1;35m"
-#define COLOR_BROWN                    "\033[0;33m"
-#define COLOR_YELLOW                   "\033[1;33m"
-#define COLOR_LT_GRAY                  "\033[0;37m"
-#define COLOR_WHITE                    "\033[1;37m"
-#define COLOR_RESET                    "\033[0m"
-
-typedef struct subsystem {
-       splat_user_t sub_desc;          /* Subsystem description */
-       List sub_tests;                 /* Assocated subsystem tests list */
-} subsystem_t;
-
-typedef struct test {
-       splat_user_t test_desc;         /* Test description */
-       subsystem_t *test_sub;          /* Parent subsystem */
-} test_t;
-
-typedef struct cmd_args {
-       int args_verbose;               /* Verbose flag */
-       int args_do_list;               /* Display all tests flag */
-       int args_do_all;                /* Run all tests flag */
-       int args_do_color;              /* Colorize output */
-       int args_exit_on_error;         /* Exit on first error flag */
-       List args_tests;                /* Requested subsystems/tests */
-} cmd_args_t;
-
-#endif /* _SPLAT_H */
-
diff --git a/cmd/splslab/Makefile.am b/cmd/splslab/Makefile.am
deleted file mode 100644 (file)
index b18d52d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-bin_SCRIPTS = splslab.py
-EXTRA_DIST = $(bin_SCRIPTS)
diff --git a/cmd/splslab/splslab.py b/cmd/splslab/splslab.py
deleted file mode 100755 (executable)
index 160fb27..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/usr/bin/python
-
-import sys
-import time
-import getopt
-import re
-import signal
-from collections import defaultdict
-
-class Stat:
-    # flag definitions based on the kmem.h
-    NOTOUCH = 1
-    NODEBUG = 2
-    KMEM = 32
-    VMEM = 64
-    SLAB = 128
-    OFFSLAB = 256
-    NOEMERGENCY = 512
-    DEADLOCKED = 16384
-    GROWING = 32768
-    REAPING = 65536
-    DESTROY = 131072
-
-    fdefs = {
-        NOTOUCH : "NTCH",
-        NODEBUG : "NDBG", 
-        KMEM : "KMEM",
-        VMEM : "VMEM",
-        SLAB : "SLAB",
-        OFFSLAB : "OFSL",
-        NOEMERGENCY : "NEMG",
-        DEADLOCKED : "DDLK",
-        GROWING : "GROW",
-        REAPING : "REAP",
-        DESTROY : "DSTR"
-        }
-
-    def __init__(self, name, flags, size, alloc, slabsize, objsize):
-        self._name = name
-        self._flags = self.f2str(flags)
-        self._size = size
-        self._alloc = alloc
-        self._slabsize = slabsize
-        self._objsize = objsize
-
-    def f2str(self, flags):
-        fstring = ''
-        for k in Stat.fdefs.keys():
-            if flags & k:
-                fstring = fstring + Stat.fdefs[k] + '|'
-
-        fstring = fstring[:-1]
-        return fstring
-
-class CumulativeStat:
-    def __init__(self, skey="a"):
-        self._size = 0
-        self._alloc = 0
-        self._pct = 0
-        self._skey = skey
-        self._regexp = \
-            re.compile('(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+');
-        self._stats = defaultdict(list)
-
-    # Add another stat to the dictionary and re-calculate the totals
-    def add(self, s):
-        key = 0
-        if self._skey == "a":
-            key = s._alloc
-        else:
-            key = s._size
-        self._stats[key].append(s)
-        self._size = self._size + s._size
-        self._alloc = self._alloc + s._alloc
-        if self._size:
-            self._pct = self._alloc * 100 / self._size
-        else:
-            self._pct = 0
-
-    # Parse the slab info in the procfs
-    # Calculate cumulative stats
-    def slab_update(self):
-        k = [line.strip() for line in open('/proc/spl/kmem/slab')]
-
-        if not k:
-            sys.stderr.write("No SPL slab stats found\n")
-            sys.exit(1)
-
-        del k[0:2]
-
-        for s in k:
-            if not s:
-                continue
-            m = self._regexp.match(s)
-            if m:
-                self.add(Stat(m.group(1), int(m.group(2),16), int(m.group(3)),
-                            int(m.group(4)), int(m.group(5)), int(m.group(6))))
-            else:
-                sys.stderr.write("Error: unexpected input format\n" % s)
-                exit(-1)
-
-    def show_header(self):
-        sys.stdout.write("\n%25s %20s %15s %15s %15s %15s\n\n" % \
-            ("cache name", "flags", "size", "alloc", "slabsize", "objsize"))
-
-    # Show up to the number of 'rows' of output sorted in descending order
-    # by the key specified earlier; if rows == 0, all rows are shown
-    def show(self, rows):
-        self.show_header()
-        i = 1
-        done = False
-        for k in reversed(sorted(self._stats.keys())):
-            for s in self._stats[k]:
-                sys.stdout.write("%25s %20s %15d %15d %15d %15d\n" % \
-                                     (s._name, s._flags, s._size, s._alloc, \
-                                          s._slabsize, s._objsize))
-                i = i + 1
-                if rows != 0 and i > rows:
-                    done = True
-                    break
-            if done:
-                break
-        sys.stdout.write("%25s %36d %15d (%d%%)\n\n" % \
-            ("Totals:", self._size, self._alloc, self._pct))
-
-def usage():
-    cmd = "Usage: splslab.py [-n|--num-rows] number [-s|--sort-by] " + \
-        "[interval] [count]";
-    sys.stderr.write("%s\n" % cmd)
-    sys.stderr.write("\t-h : print help\n")
-    sys.stderr.write("\t-n : --num-rows N : limit output to N top " +
-                     "largest slabs (default: all)\n")
-    sys.stderr.write("\t-s : --sort-by key : sort output in descending " +
-                     "order by total size (s)\n\t\tor allocated size (a) " +
-                     "(default: a)\n")
-    sys.stderr.write("\tinterval : repeat every interval seconds\n")
-    sys.stderr.write("\tcount : output statistics count times and exit\n")
-    
-
-def main():
-
-    rows = 0
-    count = 0
-    skey = "a"
-    interval = 1
-
-    signal.signal(signal.SIGINT, signal.SIG_DFL)
-
-    try:
-        opts, args = getopt.getopt(
-            sys.argv[1:],
-            "n:s:h",
-            [
-                "num-rows",
-                "sort-by",
-                "help"
-            ]
-        )
-    except getopt.error as e:
-        sys.stderr.write("Error: %s\n" % e.msg)
-        usage()
-        exit(-1)
-
-    i = 1
-    for opt, arg in opts:
-        if opt in ('-n', '--num-rows'):
-            rows = int(arg)
-            i = i + 2
-        elif opt in ('-s', '--sort-by'):
-            if arg != "s" and arg != "a":
-                sys.stderr.write("Error: invalid sorting key \"%s\"\n" % arg)
-                usage()
-                exit(-1)
-            skey = arg
-            i = i + 2
-        elif opt in ('-h', '--help'):
-            usage()
-            exit(0)
-        else:
-            break
-
-    args = sys.argv[i:]
-
-    interval = int(args[0]) if len(args) else interval
-    count = int(args[1]) if len(args) > 1 else count
-
-    i = 0
-    while True:
-        cs = CumulativeStat(skey)
-        cs.slab_update()
-        cs.show(rows)
-
-        i = i + 1
-        if count and i >= count:
-            break
-
-        time.sleep(interval)
-
-    return 0
-
-if __name__ == '__main__':
-    main()
diff --git a/config/.gitignore b/config/.gitignore
deleted file mode 100644 (file)
index cd811a0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/compile
-/config.guess
-/config.sub
-/depcomp
-/install-sh
-/ltmain.sh
-/missing
-/libtool.m4
-/lt*.m4
diff --git a/config/Rules.am b/config/Rules.am
deleted file mode 100644 (file)
index 7c5d328..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
-# Copyright (C) 2007 The Regents of the University of California.
-# Written by Brian Behlendorf <behlendorf1@llnl.gov>.
-###############################################################################
-# Common rules for user space components.
-###############################################################################
-
-DEFAULT_INCLUDES = -include ${top_builddir}/spl_config.h
-
-AM_LIBTOOLFLAGS = --silent
-AM_CPPFLAGS = -D__USE_LARGEFILE64
-AM_CFLAGS  = -Wall -Wshadow -Wstrict-prototypes -fno-strict-aliasing
-AM_CFLAGS += ${DEBUG_CFLAGS}
diff --git a/config/config.awk b/config/config.awk
deleted file mode 100644 (file)
index cc4b7cc..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# Remove default preprocessor define's from config.h
-#   PACKAGE
-#   PACKAGE_BUGREPORT
-#   PACKAGE_NAME
-#   PACKAGE_STRING
-#   PACKAGE_TARNAME
-#   PACKAGE_VERSION
-#   STDC_HEADERS
-#   VERSION
-
-BEGIN { RS = "" ; FS = "\n" }     \
-       !/.#define PACKAGE./ &&   \
-       !/.#define VERSION./ &&   \
-       !/.#define STDC_HEADERS./ \
-       { print $0"\n" }
diff --git a/config/deb.am b/config/deb.am
deleted file mode 100644 (file)
index f745c91..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-# Copyright (C) 2010 Lawrence Livermore National Security, LLC.
-# Written by Brian Behlendorf <behlendorf1@llnl.gov>.
-###############################################################################
-# Build targets for DEB packages.
-#
-# Long term native distro specific Debian style packaging should be added.
-# In the short term RPM packages are built and converted to DEB packages
-# using alien.  If someone familiar with Debian style packaging were to
-# update the build system to correctly build Debian style packages I would
-# happily take it.  Until then we will have to make due with alien.
-#
-###############################################################################
-
-deb-local:
-       @(if test "${HAVE_DPKGBUILD}" = "no"; then \
-               echo -e "\n" \
-       "*** Required util ${DPKGBUILD} missing.  Please install the\n" \
-        "*** package for your distribution which provides ${DPKGBUILD},\n" \
-       "*** re-run configure, and try again.\n"; \
-                exit 1; \
-       fi; \
-       if test "${HAVE_ALIEN}" = "no"; then \
-               echo -e "\n" \
-       "*** Required util ${ALIEN} missing.  Please install the\n" \
-        "*** package for your distribution which provides ${ALIEN},\n" \
-       "*** re-run configure, and try again.\n"; \
-                exit 1; \
-       fi)
-
-deb-kmod: deb-local rpm-kmod
-       name=${PACKAGE}; \
-       version=${VERSION}-${RELEASE}; \
-       arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \
-       debarch=`$(DPKG) --print-architecture`; \
-       pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \
-       fakeroot $(ALIEN) --bump=0 --scripts --to-deb --target=$$debarch $$pkg1; \
-       $(RM) $$pkg1
-
-deb-dkms: deb-local rpm-dkms
-       name=${PACKAGE}; \
-       version=${VERSION}-${RELEASE}; \
-       arch=`$(RPM) -qp $${name}-dkms-$${version}.src.rpm --qf %{arch} | tail -1`; \
-       debarch=`$(DPKG) --print-architecture`; \
-       pkg1=$${name}-dkms-$${version}.$${arch}.rpm; \
-       fakeroot $(ALIEN) --bump=0 --scripts --to-deb --target=$$debarch $$pkg1; \
-       $(RM) $$pkg1
-
-deb-utils: deb-local rpm-utils
-       name=${PACKAGE}; \
-       version=${VERSION}-${RELEASE}; \
-       arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \
-       debarch=`$(DPKG) --print-architecture`; \
-       pkg1=$${name}-$${version}.$${arch}.rpm; \
-       fakeroot $(ALIEN) --bump=0 --scripts --to-deb --target=$$debarch $$pkg1; \
-       $(RM) $$pkg1
-
-deb: deb-kmod deb-dkms deb-utils
diff --git a/config/kernel-fallocate-pax.m4 b/config/kernel-fallocate-pax.m4
new file mode 100644 (file)
index 0000000..ac75a4c
--- /dev/null
@@ -0,0 +1,19 @@
+dnl #
+dnl # PaX Linux 2.6.38 - 3.x API
+dnl #
+AC_DEFUN([SPL_AC_PAX_KERNEL_FILE_FALLOCATE], [
+       AC_MSG_CHECKING([whether fops->fallocate() exists])
+       SPL_LINUX_TRY_COMPILE([
+               #include <linux/fs.h>
+       ],[
+               long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
+               struct file_operations_no_const fops __attribute__ ((unused)) = {
+                       .fallocate = fallocate,
+               };
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+])
diff --git a/config/kernel-fallocate.m4 b/config/kernel-fallocate.m4
deleted file mode 100644 (file)
index b8c82f4..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-dnl #
-dnl # Linux 2.6.38 - 3.x API
-dnl #
-AC_DEFUN([SPL_AC_KERNEL_FILE_FALLOCATE], [
-       AC_MSG_CHECKING([whether fops->fallocate() exists])
-       SPL_LINUX_TRY_COMPILE([
-               #include <linux/fs.h>
-       ],[
-               long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
-               struct file_operations fops __attribute__ ((unused)) = {
-                       .fallocate = fallocate,
-               };
-       ],[
-               AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
-       ],[
-               AC_MSG_RESULT(no)
-       ])
-])
-dnl #
-dnl # Linux 2.6.x - 2.6.37 API
-dnl #
-AC_DEFUN([SPL_AC_KERNEL_INODE_FALLOCATE], [
-       AC_MSG_CHECKING([whether iops->fallocate() exists])
-       SPL_LINUX_TRY_COMPILE([
-               #include <linux/fs.h>
-       ],[
-               long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL;
-               struct inode_operations fops __attribute__ ((unused)) = {
-                       .fallocate = fallocate,
-               };
-       ],[
-               AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_INODE_FALLOCATE, 1, [fops->fallocate() exists])
-       ],[
-               AC_MSG_RESULT(no)
-       ])
-])
-
-dnl #
-dnl # PaX Linux 2.6.38 - 3.x API
-dnl #
-AC_DEFUN([SPL_AC_PAX_KERNEL_FILE_FALLOCATE], [
-       AC_MSG_CHECKING([whether fops->fallocate() exists])
-       SPL_LINUX_TRY_COMPILE([
-               #include <linux/fs.h>
-       ],[
-               long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
-               struct file_operations_no_const fops __attribute__ ((unused)) = {
-                       .fallocate = fallocate,
-               };
-       ],[
-               AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
-       ],[
-               AC_MSG_RESULT(no)
-       ])
-])
-
-dnl #
-dnl # The fallocate callback was moved from the inode_operations
-dnl # structure to the file_operations structure.
-dnl #
-AC_DEFUN([SPL_AC_KERNEL_FALLOCATE], [
-       SPL_AC_KERNEL_FILE_FALLOCATE
-       SPL_AC_KERNEL_INODE_FALLOCATE
-       SPL_AC_PAX_KERNEL_FILE_FALLOCATE
-])
diff --git a/config/kernel-kmem.m4 b/config/kernel-kmem.m4
new file mode 100644 (file)
index 0000000..cc055e5
--- /dev/null
@@ -0,0 +1,58 @@
+dnl #
+dnl # Enabled by default it provides a minimal level of memory tracking.
+dnl # A total count of bytes allocated is kept for each alloc and free.
+dnl # Then at module unload time a report to the console will be printed
+dnl # if memory was leaked.
+dnl #
+AC_DEFUN([SPL_AC_DEBUG_KMEM], [
+       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],
+       [
+               KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM"
+               DEBUG_KMEM="_with_debug_kmem"
+               AC_DEFINE([DEBUG_KMEM], [1],
+               [Define to 1 to enable basic kmem accounting])
+       ], [
+               DEBUG_KMEM="_without_debug_kmem"
+       ])
+
+       AC_SUBST(DEBUG_KMEM)
+       AC_MSG_CHECKING([whether basic kmem accounting is enabled])
+       AC_MSG_RESULT([$enable_debug_kmem])
+])
+
+dnl #
+dnl # Disabled by default it provides detailed memory tracking.  This
+dnl # feature also requires --enable-debug-kmem to be set.  When enabled
+dnl # not only will total bytes be tracked but also the location of every
+dnl # alloc and free.  When the SPL module is unloaded a list of all leaked
+dnl # addresses and where they were allocated will be dumped to the console.
+dnl # Enabling this feature has a significant impact on performance but it
+dnl # makes finding memory leaks pretty straight forward.
+dnl #
+AC_DEFUN([SPL_AC_DEBUG_KMEM_TRACKING], [
+       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],
+       [
+               KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING"
+               DEBUG_KMEM_TRACKING="_with_debug_kmem_tracking"
+               AC_DEFINE([DEBUG_KMEM_TRACKING], [1],
+               [Define to 1 to enable detailed kmem tracking])
+       ], [
+               DEBUG_KMEM_TRACKING="_without_debug_kmem_tracking"
+       ])
+
+       AC_SUBST(DEBUG_KMEM_TRACKING)
+       AC_MSG_CHECKING([whether detailed kmem tracking is enabled])
+       AC_MSG_RESULT([$enable_debug_kmem_tracking])
+])
diff --git a/config/kernel-truncate-range.m4 b/config/kernel-truncate-range.m4
deleted file mode 100644 (file)
index 4b1600b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-dnl #
-dnl # 3.5 API change,
-dnl # inode_operations.truncate_range removed
-dnl #
-AC_DEFUN([SPL_AC_INODE_TRUNCATE_RANGE], [
-       AC_MSG_CHECKING([whether truncate_range() inode operation is available])
-       SPL_LINUX_TRY_COMPILE([
-               #include <linux/fs.h>
-       ],[
-               struct inode_operations ops;
-               ops.truncate_range = NULL;
-       ],[
-               AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_INODE_TRUNCATE_RANGE, 1,
-                       [truncate_range() inode operation is available])
-       ],[
-               AC_MSG_RESULT(no)
-       ])
-])
diff --git a/config/rpm.am b/config/rpm.am
deleted file mode 100644 (file)
index 51a20b3..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC.
-# Copyright (C) 2007 The Regents of the University of California.
-# Written by Brian Behlendorf <behlendorf1@llnl.gov>.
-###############################################################################
-# Build targets for RPM packages.
-###############################################################################
-
-srpm-kmod:
-       $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \
-               def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_KMOD}' srpm-common
-
-srpm-dkms:
-       $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \
-               def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_DKMS}' srpm-common
-
-srpm-utils:
-       $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \
-               def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_UTIL}' srpm-common
-
-srpm: srpm-kmod srpm-dkms srpm-utils
-srpms: srpm-kmod srpm-dkms srpm-utils
-
-rpm-kmod: srpm-kmod
-       $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \
-               def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_KMOD}' rpm-common
-
-rpm-dkms: srpm-dkms
-       $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \
-               def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_DKMS}' rpm-common
-
-rpm-utils: srpm-utils
-       $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \
-               def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_UTIL}' rpm-common
-
-rpm: rpm-kmod rpm-dkms rpm-utils
-rpms: rpm-kmod rpm-dkms rpm-utils
-
-rpm-local:
-       @(if test "${HAVE_RPMBUILD}" = "no"; then \
-               echo -e "\n" \
-       "*** Required util ${RPMBUILD} missing.  Please install the\n" \
-       "*** package for your distribution which provides ${RPMBUILD},\n" \
-       "*** re-run configure, and try again.\n"; \
-               exit 1; \
-       fi; \
-       mkdir -p $(rpmbuild)/TMP && \
-       mkdir -p $(rpmbuild)/BUILD && \
-       mkdir -p $(rpmbuild)/RPMS && \
-       mkdir -p $(rpmbuild)/SRPMS && \
-       mkdir -p $(rpmbuild)/SPECS && \
-       cp ${RPM_SPEC_DIR}/$(rpmspec) $(rpmbuild)/SPECS && \
-       mkdir -p $(rpmbuild)/SOURCES && \
-       cp $(top_srcdir)/scripts/kmodtool $(rpmbuild)/SOURCES && \
-       cp $(distdir).tar.gz $(rpmbuild)/SOURCES)
-
-srpm-common: dist
-       @(dist=`$(RPM) --eval %{?dist}`; \
-       rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \
-       rpmspec=$(pkg).spec; \
-       rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
-       $(MAKE) $(AM_MAKEFLAGS) \
-               rpmbuild="$$rpmbuild" \
-               rpmspec="$$rpmspec" \
-               rpm-local || exit 1; \
-       LANG=C $(RPMBUILD) \
-               --define "_tmppath $$rpmbuild/TMP" \
-               --define "_topdir $$rpmbuild" \
-               $(def) -bs $$rpmbuild/SPECS/$$rpmspec || exit 1; \
-       cp $$rpmbuild/SRPMS/$$rpmpkg . || exit 1; \
-       rm -R $$rpmbuild)
-
-rpm-common: 
-       @(dist=`$(RPM) --eval %{?dist}`; \
-       rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \
-       rpmspec=$(pkg).spec; \
-       rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
-       $(MAKE) $(AM_MAKEFLAGS) \
-               rpmbuild="$$rpmbuild" \
-               rpmspec="$$rpmspec" \
-               rpm-local || exit 1; \
-       LANG=C ${RPMBUILD} \
-               --define "_tmppath $$rpmbuild/TMP" \
-               --define "_topdir $$rpmbuild" \
-               $(def) --rebuild $$rpmpkg || exit 1; \
-       cp $$rpmbuild/RPMS/*/* . || exit 1; \
-       rm -R $$rpmbuild)
diff --git a/config/spl-build.m4 b/config/spl-build.m4
deleted file mode 100644 (file)
index 5c6c02a..0000000
+++ /dev/null
@@ -1,755 +0,0 @@
-###############################################################################
-# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
-# Copyright (C) 2007 The Regents of the University of California.
-# Written by Brian Behlendorf <behlendorf1@llnl.gov>.
-###############################################################################
-# SPL_AC_CONFIG_KERNEL: Default SPL kernel configuration.
-###############################################################################
-
-AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
-       SPL_AC_KERNEL
-
-       if test "${LINUX_OBJ}" != "${LINUX}"; then
-               KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
-       fi
-       AC_SUBST(KERNELMAKE_PARAMS)
-
-       KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes"
-       AC_SUBST(KERNELCPPFLAGS)
-
-       SPL_AC_TEST_MODULE
-       SPL_AC_ATOMIC_SPINLOCK
-       SPL_AC_SHRINKER_CALLBACK
-       SPL_AC_CTL_NAME
-       SPL_AC_CONFIG_TRIM_UNUSED_KSYMS
-       SPL_AC_PDE_DATA
-       SPL_AC_SET_FS_PWD_WITH_CONST
-       SPL_AC_2ARGS_VFS_FSYNC
-       SPL_AC_INODE_TRUNCATE_RANGE
-       SPL_AC_FS_STRUCT_SPINLOCK
-       SPL_AC_KUIDGID_T
-       SPL_AC_KERNEL_FALLOCATE
-       SPL_AC_CONFIG_ZLIB_INFLATE
-       SPL_AC_CONFIG_ZLIB_DEFLATE
-       SPL_AC_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE
-       SPL_AC_SHRINK_CONTROL_STRUCT
-       SPL_AC_RWSEM_SPINLOCK_IS_RAW
-       SPL_AC_RWSEM_ACTIVITY
-       SPL_AC_RWSEM_ATOMIC_LONG_COUNT
-       SPL_AC_SCHED_RT_HEADER
-       SPL_AC_SCHED_SIGNAL_HEADER
-       SPL_AC_4ARGS_VFS_GETATTR
-       SPL_AC_3ARGS_VFS_GETATTR
-       SPL_AC_2ARGS_VFS_GETATTR
-       SPL_AC_USLEEP_RANGE
-       SPL_AC_KMEM_CACHE_ALLOCFLAGS
-       SPL_AC_WAIT_ON_BIT
-       SPL_AC_INODE_LOCK
-       SPL_AC_GROUP_INFO_GID
-       SPL_AC_KMEM_CACHE_CREATE_USERCOPY
-       SPL_AC_WAIT_QUEUE_ENTRY_T
-       SPL_AC_WAIT_QUEUE_HEAD_ENTRY
-       SPL_AC_IO_SCHEDULE_TIMEOUT
-       SPL_AC_KERNEL_WRITE
-       SPL_AC_KERNEL_READ
-       SPL_AC_KERNEL_TIMER_FUNCTION_TIMER_LIST
-])
-
-AC_DEFUN([SPL_AC_MODULE_SYMVERS], [
-       modpost=$LINUX/scripts/Makefile.modpost
-       AC_MSG_CHECKING([kernel file name for module symbols])
-       if test "x$enable_linux_builtin" != xyes -a -f "$modpost"; then
-               if grep -q Modules.symvers $modpost; then
-                       LINUX_SYMBOLS=Modules.symvers
-               else
-                       LINUX_SYMBOLS=Module.symvers
-               fi
-
-               if ! test -f "$LINUX_OBJ/$LINUX_SYMBOLS"; then
-                       AC_MSG_ERROR([
-       *** Please make sure the kernel devel package for your distribution
-       *** is installed.  If you are building with a custom kernel, make sure the
-       *** kernel is configured, built, and the '--with-linux=PATH' configure
-       *** option refers to the location of the kernel source.])
-               fi
-       else
-               LINUX_SYMBOLS=NONE
-       fi
-       AC_MSG_RESULT($LINUX_SYMBOLS)
-       AC_SUBST(LINUX_SYMBOLS)
-])
-
-AC_DEFUN([SPL_AC_KERNEL], [
-       AC_ARG_WITH([linux],
-               AS_HELP_STRING([--with-linux=PATH],
-               [Path to kernel source]),
-               [kernelsrc="$withval"])
-
-       AC_ARG_WITH([linux-obj],
-               AS_HELP_STRING([--with-linux-obj=PATH],
-               [Path to kernel build objects]),
-               [kernelbuild="$withval"])
-
-       AC_MSG_CHECKING([kernel source directory])
-       if test -z "$kernelsrc"; then
-               if test -e "/lib/modules/$(uname -r)/source"; then
-                       headersdir="/lib/modules/$(uname -r)/source"
-                       sourcelink=$(readlink -f "$headersdir")
-               elif test -e "/lib/modules/$(uname -r)/build"; then
-                       headersdir="/lib/modules/$(uname -r)/build"
-                       sourcelink=$(readlink -f "$headersdir")
-               else
-                       sourcelink=$(ls -1d /usr/src/kernels/* \
-                                    /usr/src/linux-* \
-                                    2>/dev/null | grep -v obj | tail -1)
-               fi
-
-               if test -n "$sourcelink" && test -e ${sourcelink}; then
-                       kernelsrc=`readlink -f ${sourcelink}`
-               else
-                       kernelsrc="[Not found]"
-               fi
-       else
-               if test "$kernelsrc" = "NONE"; then
-                       kernsrcver=NONE
-               fi
-               withlinux=yes
-       fi
-
-       AC_MSG_RESULT([$kernelsrc])
-       if test ! -d "$kernelsrc"; then
-               AC_MSG_ERROR([
-       *** Please make sure the kernel devel package for your distribution
-       *** is installed and then try again.  If that fails, you can specify the
-       *** location of the kernel source with the '--with-linux=PATH' option.])
-       fi
-
-       AC_MSG_CHECKING([kernel build directory])
-       if test -z "$kernelbuild"; then
-               if test x$withlinux != xyes -a -e "/lib/modules/$(uname -r)/build"; then
-                       kernelbuild=`readlink -f /lib/modules/$(uname -r)/build`
-               elif test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}; then
-                       kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu}
-               elif test -d ${kernelsrc}-obj/${target_cpu}/default; then
-                       kernelbuild=${kernelsrc}-obj/${target_cpu}/default
-               elif test -d `dirname ${kernelsrc}`/build-${target_cpu}; then
-                       kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu}
-               else
-                       kernelbuild=${kernelsrc}
-               fi
-       fi
-       AC_MSG_RESULT([$kernelbuild])
-
-       AC_MSG_CHECKING([kernel source version])
-       utsrelease1=$kernelbuild/include/linux/version.h
-       utsrelease2=$kernelbuild/include/linux/utsrelease.h
-       utsrelease3=$kernelbuild/include/generated/utsrelease.h
-       if test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1; then
-               utsrelease=linux/version.h
-       elif test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2; then
-               utsrelease=linux/utsrelease.h
-       elif test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3; then
-               utsrelease=generated/utsrelease.h
-       fi
-
-       if test "$utsrelease"; then
-               kernsrcver=`(echo "#include <$utsrelease>";
-                            echo "kernsrcver=UTS_RELEASE") | 
-                            cpp -I $kernelbuild/include |
-                            grep "^kernsrcver=" | cut -d \" -f 2`
-
-               if test -z "$kernsrcver"; then
-                       AC_MSG_RESULT([Not found])
-                       AC_MSG_ERROR([*** Cannot determine kernel version.])
-               fi
-       else
-               AC_MSG_RESULT([Not found])
-               if test "x$enable_linux_builtin" != xyes; then
-                       AC_MSG_ERROR([*** Cannot find UTS_RELEASE definition.])
-               else
-                       AC_MSG_ERROR([
-       *** Cannot find UTS_RELEASE definition.
-       *** Please run 'make prepare' inside the kernel source tree.])
-               fi
-       fi
-
-       AC_MSG_RESULT([$kernsrcver])
-
-       LINUX=${kernelsrc}
-       LINUX_OBJ=${kernelbuild}
-       LINUX_VERSION=${kernsrcver}
-
-       AC_SUBST(LINUX)
-       AC_SUBST(LINUX_OBJ)
-       AC_SUBST(LINUX_VERSION)
-
-       SPL_AC_MODULE_SYMVERS
-])
-
-dnl #
-dnl # Default SPL user configuration
-dnl #
-AC_DEFUN([SPL_AC_CONFIG_USER], [])
-
-dnl #
-dnl # Check for rpm+rpmbuild to build RPM packages.  If these tools
-dnl # are missing, it is non-fatal, but you will not be able to build
-dnl # RPM packages and will be warned if you try too.
-dnl #
-dnl # By default, the generic spec file will be used because it requires
-dnl # minimal dependencies.  Distribution specific spec files can be
-dnl # placed under the 'rpm/<distribution>' directory and enabled using
-dnl # the --with-spec=<distribution> configure option.
-dnl #
-AC_DEFUN([SPL_AC_RPM], [
-       RPM=rpm
-       RPMBUILD=rpmbuild
-
-       AC_MSG_CHECKING([whether $RPM is available])
-       AS_IF([tmp=$($RPM --version 2>/dev/null)], [
-               RPM_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
-               HAVE_RPM=yes
-               AC_MSG_RESULT([$HAVE_RPM ($RPM_VERSION)])
-       ],[
-               HAVE_RPM=no
-               AC_MSG_RESULT([$HAVE_RPM])
-       ])
-
-       AC_MSG_CHECKING([whether $RPMBUILD is available])
-       AS_IF([tmp=$($RPMBUILD --version 2>/dev/null)], [
-               RPMBUILD_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
-               HAVE_RPMBUILD=yes
-               AC_MSG_RESULT([$HAVE_RPMBUILD ($RPMBUILD_VERSION)])
-       ],[
-               HAVE_RPMBUILD=no
-               AC_MSG_RESULT([$HAVE_RPMBUILD])
-       ])
-
-       RPM_DEFINE_COMMON='--define "$(DEBUG_SPL) 1"'
-       RPM_DEFINE_COMMON+=' --define "$(DEBUG_KMEM) 1"'
-       RPM_DEFINE_COMMON+=' --define "$(DEBUG_KMEM_TRACKING) 1"'
-       RPM_DEFINE_UTIL=
-       RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)"'
-       RPM_DEFINE_KMOD+=' --define "_wrong_version_format_terminate_build 0"'
-       RPM_DEFINE_DKMS=
-
-       SRPM_DEFINE_COMMON='--define "build_src_rpm 1"'
-       SRPM_DEFINE_UTIL=
-       SRPM_DEFINE_KMOD=
-       SRPM_DEFINE_DKMS=
-
-       RPM_SPEC_DIR="rpm/generic"
-       AC_ARG_WITH([spec],
-               AS_HELP_STRING([--with-spec=SPEC],
-               [Spec files 'generic|redhat']),
-               [RPM_SPEC_DIR="rpm/$withval"])
-
-       AC_MSG_CHECKING([whether spec files are available])
-       AC_MSG_RESULT([yes ($RPM_SPEC_DIR/*.spec.in)])
-
-       AC_SUBST(HAVE_RPM)
-       AC_SUBST(RPM)
-       AC_SUBST(RPM_VERSION)
-
-       AC_SUBST(HAVE_RPMBUILD)
-       AC_SUBST(RPMBUILD)
-       AC_SUBST(RPMBUILD_VERSION)
-
-       AC_SUBST(RPM_SPEC_DIR)
-       AC_SUBST(RPM_DEFINE_UTIL)
-       AC_SUBST(RPM_DEFINE_KMOD)
-       AC_SUBST(RPM_DEFINE_DKMS)
-       AC_SUBST(RPM_DEFINE_COMMON)
-       AC_SUBST(SRPM_DEFINE_UTIL)
-       AC_SUBST(SRPM_DEFINE_KMOD)
-       AC_SUBST(SRPM_DEFINE_DKMS)
-       AC_SUBST(SRPM_DEFINE_COMMON)
-])
-
-dnl #
-dnl # Check for dpkg+dpkg-buildpackage to build DEB packages.  If these
-dnl # tools are missing it is non-fatal but you will not be able to build
-dnl # DEB packages and will be warned if you try too.
-dnl #
-AC_DEFUN([SPL_AC_DPKG], [
-       DPKG=dpkg
-       DPKGBUILD=dpkg-buildpackage
-
-       AC_MSG_CHECKING([whether $DPKG is available])
-       AS_IF([tmp=$($DPKG --version 2>/dev/null)], [
-               DPKG_VERSION=$(echo $tmp | $AWK '/Debian/ { print $[7] }')
-               HAVE_DPKG=yes
-               AC_MSG_RESULT([$HAVE_DPKG ($DPKG_VERSION)])
-       ],[
-               HAVE_DPKG=no
-               AC_MSG_RESULT([$HAVE_DPKG])
-       ])
-
-       AC_MSG_CHECKING([whether $DPKGBUILD is available])
-       AS_IF([tmp=$($DPKGBUILD --version 2>/dev/null)], [
-               DPKGBUILD_VERSION=$(echo $tmp | \
-                   $AWK '/Debian/ { print $[4] }' | cut -f-4 -d'.')
-               HAVE_DPKGBUILD=yes
-               AC_MSG_RESULT([$HAVE_DPKGBUILD ($DPKGBUILD_VERSION)])
-       ],[
-               HAVE_DPKGBUILD=no
-               AC_MSG_RESULT([$HAVE_DPKGBUILD])
-       ])
-
-       AC_SUBST(HAVE_DPKG)
-       AC_SUBST(DPKG)
-       AC_SUBST(DPKG_VERSION)
-
-       AC_SUBST(HAVE_DPKGBUILD)
-       AC_SUBST(DPKGBUILD)
-       AC_SUBST(DPKGBUILD_VERSION)
-])
-
-dnl #
-dnl # Until native packaging for various different packing systems
-dnl # can be added the least we can do is attempt to use alien to
-dnl # convert the RPM packages to the needed package type.  This is
-dnl # a hack but so far it has worked reasonable well.
-dnl #
-AC_DEFUN([SPL_AC_ALIEN], [
-       ALIEN=alien
-
-       AC_MSG_CHECKING([whether $ALIEN is available])
-       AS_IF([tmp=$($ALIEN --version 2>/dev/null)], [
-               ALIEN_VERSION=$(echo $tmp | $AWK '{ print $[3] }')
-               HAVE_ALIEN=yes
-               AC_MSG_RESULT([$HAVE_ALIEN ($ALIEN_VERSION)])
-       ],[
-               HAVE_ALIEN=no
-               AC_MSG_RESULT([$HAVE_ALIEN])
-       ])
-
-       AC_SUBST(HAVE_ALIEN)
-       AC_SUBST(ALIEN)
-       AC_SUBST(ALIEN_VERSION)
-])
-
-dnl #
-dnl # Using the VENDOR tag from config.guess set the default
-dnl # package type for 'make pkg': (rpm | deb | tgz)
-dnl #
-AC_DEFUN([SPL_AC_DEFAULT_PACKAGE], [
-       AC_MSG_CHECKING([linux distribution])
-       if test -f /etc/toss-release ; then
-               VENDOR=toss ;
-       elif test -f /etc/fedora-release ; then
-               VENDOR=fedora ;
-       elif test -f /etc/redhat-release ; then
-               VENDOR=redhat ;
-       elif test -f /etc/gentoo-release ; then
-               VENDOR=gentoo ;
-       elif test -f /etc/arch-release ; then
-               VENDOR=arch ;
-       elif test -f /etc/SuSE-release ; then
-               VENDOR=sles ;
-       elif test -f /etc/slackware-version ; then
-               VENDOR=slackware ;
-       elif test -f /etc/lunar.release ; then
-               VENDOR=lunar ;
-       elif test -f /etc/lsb-release ; then
-               VENDOR=ubuntu ;
-       elif test -f /etc/debian_version ; then
-               VENDOR=debian ;
-       else
-               VENDOR= ;
-       fi
-       AC_MSG_RESULT([$VENDOR])
-       AC_SUBST(VENDOR)
-
-       AC_MSG_CHECKING([default package type])
-       case "$VENDOR" in
-               toss)       DEFAULT_PACKAGE=rpm  ;;
-               redhat)     DEFAULT_PACKAGE=rpm  ;;
-               fedora)     DEFAULT_PACKAGE=rpm  ;;
-               gentoo)     DEFAULT_PACKAGE=tgz  ;;
-               arch)       DEFAULT_PACKAGE=tgz  ;;
-               sles)       DEFAULT_PACKAGE=rpm  ;;
-               slackware)  DEFAULT_PACKAGE=tgz  ;;
-               lunar)      DEFAULT_PACKAGE=tgz  ;;
-               ubuntu)     DEFAULT_PACKAGE=deb  ;;
-               debian)     DEFAULT_PACKAGE=deb  ;;
-               *)          DEFAULT_PACKAGE=rpm  ;;
-       esac
-
-       AC_MSG_RESULT([$DEFAULT_PACKAGE])
-       AC_SUBST(DEFAULT_PACKAGE)
-])
-
-dnl #
-dnl # Default SPL user configuration
-dnl #
-AC_DEFUN([SPL_AC_PACKAGE], [
-       SPL_AC_DEFAULT_PACKAGE
-       SPL_AC_RPM
-       SPL_AC_DPKG
-       SPL_AC_ALIEN
-])
-
-AC_DEFUN([SPL_AC_LICENSE], [
-       AC_MSG_CHECKING([spl author])
-       AC_MSG_RESULT([$SPL_META_AUTHOR])
-
-       AC_MSG_CHECKING([spl license])
-       AC_MSG_RESULT([$SPL_META_LICENSE])
-])
-
-AC_DEFUN([SPL_AC_CONFIG], [
-       SPL_CONFIG=all
-       AC_ARG_WITH([config],
-               AS_HELP_STRING([--with-config=CONFIG],
-               [Config file 'kernel|user|all|srpm']),
-               [SPL_CONFIG="$withval"])
-       AC_ARG_ENABLE([linux-builtin],
-               [AC_HELP_STRING([--enable-linux-builtin],
-               [Configure for builtin in-tree kernel modules @<:@default=no@:>@])],
-               [],
-               [enable_linux_builtin=no])
-
-       AC_MSG_CHECKING([spl config])
-       AC_MSG_RESULT([$SPL_CONFIG]);
-       AC_SUBST(SPL_CONFIG)
-
-       case "$SPL_CONFIG" in
-               kernel) SPL_AC_CONFIG_KERNEL ;;
-               user)   SPL_AC_CONFIG_USER   ;;
-               all)    SPL_AC_CONFIG_KERNEL
-                       SPL_AC_CONFIG_USER   ;;
-               srpm)                        ;;
-               *)
-               AC_MSG_RESULT([Error!])
-               AC_MSG_ERROR([Bad value "$SPL_CONFIG" for --with-config,
-                            user kernel|user|all|srpm]) ;;
-       esac
-
-       AM_CONDITIONAL([CONFIG_USER],
-                      [test "$SPL_CONFIG" = user -o "$SPL_CONFIG" = all])
-       AM_CONDITIONAL([CONFIG_KERNEL],
-                      [test "$SPL_CONFIG" = kernel -o "$SPL_CONFIG" = all] &&
-                      [test "x$enable_linux_builtin" != xyes ])
-])
-
-dnl #
-dnl # Enable if the SPL should be compiled with internal debugging enabled.
-dnl # By default this support is disabled.
-dnl #
-AC_DEFUN([SPL_AC_DEBUG], [
-       AC_MSG_CHECKING([whether debugging is enabled])
-       AC_ARG_ENABLE([debug],
-               [AS_HELP_STRING([--enable-debug],
-               [Enable generic debug support @<:@default=no@:>@])],
-               [],
-               [enable_debug=no])
-
-       AS_IF([test "x$enable_debug" = xyes],
-       [
-               KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror"
-               DEBUG_CFLAGS="-DDEBUG -Werror"
-               DEBUG_SPL="_with_debug"
-       ], [
-               KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
-               DEBUG_CFLAGS="-DNDEBUG"
-               DEBUG_SPL="_without_debug"
-       ])
-
-       AC_SUBST(DEBUG_CFLAGS)
-       AC_SUBST(DEBUG_SPL)
-       AC_MSG_RESULT([$enable_debug])
-])
-
-dnl #
-dnl # Enabled by default it provides a minimal level of memory tracking.
-dnl # A total count of bytes allocated is kept for each alloc and free.
-dnl # Then at module unload time a report to the console will be printed
-dnl # if memory was leaked.
-dnl #
-AC_DEFUN([SPL_AC_DEBUG_KMEM], [
-       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],
-       [
-               KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM"
-               DEBUG_KMEM="_with_debug_kmem"
-               AC_DEFINE([DEBUG_KMEM], [1],
-               [Define to 1 to enable basic kmem accounting])
-       ], [
-               DEBUG_KMEM="_without_debug_kmem"
-       ])
-
-       AC_SUBST(DEBUG_KMEM)
-       AC_MSG_CHECKING([whether basic kmem accounting is enabled])
-       AC_MSG_RESULT([$enable_debug_kmem])
-])
-
-dnl #
-dnl # Disabled by default it provides detailed memory tracking.  This
-dnl # feature also requires --enable-debug-kmem to be set.  When enabled
-dnl # not only will total bytes be tracked but also the location of every
-dnl # alloc and free.  When the SPL module is unloaded a list of all leaked
-dnl # addresses and where they were allocated will be dumped to the console.
-dnl # Enabling this feature has a significant impact on performance but it
-dnl # makes finding memory leaks pretty straight forward.
-dnl #
-AC_DEFUN([SPL_AC_DEBUG_KMEM_TRACKING], [
-       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],
-       [
-               KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING"
-               DEBUG_KMEM_TRACKING="_with_debug_kmem_tracking"
-               AC_DEFINE([DEBUG_KMEM_TRACKING], [1],
-               [Define to 1 to enable detailed kmem tracking])
-       ], [
-               DEBUG_KMEM_TRACKING="_without_debug_kmem_tracking"
-       ])
-
-       AC_SUBST(DEBUG_KMEM_TRACKING)
-       AC_MSG_CHECKING([whether detailed kmem tracking is enabled])
-       AC_MSG_RESULT([$enable_debug_kmem_tracking])
-])
-
-dnl #
-dnl # SPL_LINUX_CONFTEST
-dnl #
-AC_DEFUN([SPL_LINUX_CONFTEST], [
-cat confdefs.h - <<_ACEOF >conftest.c
-$1
-_ACEOF
-])
-
-dnl #
-dnl # SPL_LANG_PROGRAM(C)([PROLOGUE], [BODY])
-dnl #
-m4_define([SPL_LANG_PROGRAM], [
-$1
-int
-main (void)
-{
-dnl Do *not* indent the following line: there may be CPP directives.
-dnl Don't move the `;' right after for the same reason.
-$2
-  ;
-  return 0;
-}
-])
-
-dnl #
-dnl # SPL_LINUX_COMPILE_IFELSE / like AC_COMPILE_IFELSE
-dnl #
-AC_DEFUN([SPL_LINUX_COMPILE_IFELSE], [
-       m4_ifvaln([$1], [SPL_LINUX_CONFTEST([$1])])
-       rm -Rf build && mkdir -p build && touch build/conftest.mod.c
-       echo "obj-m := conftest.o" >build/Makefile
-       modpost_flag=''
-       test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
-       AS_IF(
-               [AC_TRY_COMMAND(cp conftest.c build && make [$2] -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag) >/dev/null && AC_TRY_COMMAND([$3])],
-               [$4],
-               [_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])]
-       )
-       rm -Rf build
-])
-
-dnl #
-dnl # SPL_LINUX_TRY_COMPILE like AC_TRY_COMPILE
-dnl #
-AC_DEFUN([SPL_LINUX_TRY_COMPILE],
-       [SPL_LINUX_COMPILE_IFELSE(
-       [AC_LANG_SOURCE([SPL_LANG_PROGRAM([[$1]], [[$2]])])],
-       [modules],
-       [test -s build/conftest.o],
-       [$3], [$4])
-])
-
-dnl #
-dnl # SPL_CHECK_SYMBOL_EXPORT
-dnl # check symbol exported or not
-dnl #
-AC_DEFUN([SPL_CHECK_SYMBOL_EXPORT], [
-       grep -q -E '[[[:space:]]]$1[[[:space:]]]' \
-               $LINUX_OBJ/Module*.symvers 2>/dev/null
-       rc=$?
-       if test $rc -ne 0; then
-               export=0
-               for file in $2; do
-                       grep -q -E "EXPORT_SYMBOL.*($1)" \
-                               "$LINUX_OBJ/$file" 2>/dev/null
-                       rc=$?
-                       if test $rc -eq 0; then
-                               export=1
-                               break;
-                       fi
-               done
-               if test $export -eq 0; then :
-                       $4
-               else :
-                       $3
-               fi
-       else :
-               $3
-       fi
-])
-
-dnl #
-dnl # SPL_LINUX_TRY_COMPILE_SYMBOL
-dnl # like SPL_LINUX_TRY_COMPILE, except SPL_CHECK_SYMBOL_EXPORT
-dnl # is called if not compiling for builtin
-dnl #
-AC_DEFUN([SPL_LINUX_TRY_COMPILE_SYMBOL], [
-       SPL_LINUX_TRY_COMPILE([$1], [$2], [rc=0], [rc=1])
-       if test $rc -ne 0; then :
-               $6
-       else
-               if test "x$enable_linux_builtin" != xyes; then
-                       SPL_CHECK_SYMBOL_EXPORT([$3], [$4], [rc=0], [rc=1])
-               fi
-               if test $rc -ne 0; then :
-                       $6
-               else :
-                       $5
-               fi
-       fi
-])
-
-dnl #
-dnl # SPL_CHECK_SYMBOL_HEADER
-dnl # check if a symbol prototype is defined in listed headers.
-dnl #
-AC_DEFUN([SPL_CHECK_SYMBOL_HEADER], [
-       AC_MSG_CHECKING([whether symbol $1 exists in header])
-       header=0
-       for file in $3; do
-               grep -q "$2" "$LINUX/$file" 2>/dev/null
-               rc=$?
-               if test $rc -eq 0; then
-                       header=1
-                       break;
-               fi
-       done
-       if test $header -eq 0; then
-               AC_MSG_RESULT([no])
-               $5
-       else
-               AC_MSG_RESULT([yes])
-               $4
-       fi
-])
-
-dnl #
-dnl # SPL_CHECK_HEADER
-dnl # check whether header exists and define HAVE_$2_HEADER
-dnl #
-AC_DEFUN([SPL_CHECK_HEADER],
-       [AC_MSG_CHECKING([whether header $1 exists])
-       SPL_LINUX_TRY_COMPILE([
-               #include <$1>
-       ],[
-               return 0;
-       ],[
-               AC_DEFINE(HAVE_$2_HEADER, 1, [$1 exists])
-               AC_MSG_RESULT(yes)
-               $3
-       ],[
-               AC_MSG_RESULT(no)
-               $4
-       ])
-])
-
-dnl #
-dnl # Basic toolchain sanity check.  Verify that kernel modules can
-dnl # be built and which symbols can be used.
-dnl #
-AC_DEFUN([SPL_AC_TEST_MODULE],
-       [AC_MSG_CHECKING([whether modules can be built])
-       SPL_LINUX_TRY_COMPILE([],[],[
-               AC_MSG_RESULT([yes])
-       ],[
-               AC_MSG_RESULT([no])
-               if test "x$enable_linux_builtin" != xyes; then
-                       AC_MSG_ERROR([*** Unable to build an empty module.])
-               else
-                       AC_MSG_ERROR([
-       *** Unable to build an empty module.
-       *** Please run 'make scripts' inside the kernel source tree.])
-               fi
-       ])
-
-       AS_IF([test "x$cross_compiling" != xyes], [
-               AC_RUN_IFELSE([
-                       AC_LANG_PROGRAM([
-                               #include "$LINUX/include/linux/license.h"
-                       ], [
-                               return !license_is_gpl_compatible(
-                                   "$SPL_META_LICENSE");
-                       ])
-               ], [
-                       AC_DEFINE([SPL_IS_GPL_COMPATIBLE], [1],
-                           [Define to 1 if GPL-only symbols can be used])
-               ], [
-               ])
-       ])
-])
-
-dnl #
-dnl # Use the atomic implemenation based on global spinlocks.  This
-dnl # should only be needed by 32-bit kernels which do not provide
-dnl # the atomic64_* API.  It may be optionally enabled as a fallback
-dnl # if problems are observed with the direct mapping to the native
-dnl # Linux atomic operations.  You may not disable atomic spinlocks
-dnl # if you kernel does not an atomic64_* API.
-dnl #
-AC_DEFUN([SPL_AC_ATOMIC_SPINLOCK], [
-       AC_ARG_ENABLE([atomic-spinlocks],
-               [AS_HELP_STRING([--enable-atomic-spinlocks],
-               [Atomic types use spinlocks @<:@default=check@:>@])],
-               [],
-               [enable_atomic_spinlocks=check])
-
-       SPL_LINUX_TRY_COMPILE([
-               #include <linux/fs.h>
-       ],[
-               atomic64_t *ptr __attribute__ ((unused));
-       ],[
-               have_atomic64_t=yes
-               AC_DEFINE(HAVE_ATOMIC64_T, 1,
-                       [kernel defines atomic64_t])
-       ],[
-               have_atomic64_t=no
-       ])
-
-       AS_IF([test "x$enable_atomic_spinlocks" = xcheck], [
-               AS_IF([test "x$have_atomic64_t" = xyes], [
-                       enable_atomic_spinlocks=no
-               ],[
-                       enable_atomic_spinlocks=yes
-               ])
-       ])
-
-       AS_IF([test "x$enable_atomic_spinlocks" = xyes], [
-               AC_DEFINE([ATOMIC_SPINLOCK], [1],
-                       [Atomic types use spinlocks])
-       ],[
-               AS_IF([test "x$have_atomic64_t" = xno], [
-                       AC_MSG_FAILURE(
-                       [--disable-atomic-spinlocks given but required atomic64 support is unavailable])
-               ])
-       ])
-
-       AC_MSG_CHECKING([whether atomic types use spinlocks])
-       AC_MSG_RESULT([$enable_atomic_spinlocks])
-
-       AC_MSG_CHECKING([whether kernel defines atomic64_t])
-       AC_MSG_RESULT([$have_atomic64_t])
-])
diff --git a/config/spl-meta.m4 b/config/spl-meta.m4
deleted file mode 100644 (file)
index fbfaec4..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-dnl #
-dnl # DESCRIPTION:
-dnl # Read meta data from the META file.  When building from a git repository
-dnl # the SPL_META_RELEASE field will be overwritten if there is an annotated
-dnl # tag matching the form SPL_META_NAME-SPL_META_VERSION-*.  This allows
-dnl # for working builds to be uniquely identified using the git commit hash.
-dnl #
-dnl #    The META file format is as follows:
-dnl #      ^[ ]*KEY:[ \t]+VALUE$
-dnl #
-dnl #    In other words:
-dnl #    - KEY is separated from VALUE by a colon and one or more spaces/tabs.
-dnl #    - KEY and VALUE are case sensitive.
-dnl #    - Leading spaces are ignored.
-dnl #    - First match wins for duplicate keys.
-dnl #
-dnl #    A line can be commented out by preceding it with a '#' (or technically
-dnl #    any non-space character since that will prevent the regex from
-dnl #    matching).
-dnl #
-dnl # WARNING:
-dnl #   Placing a colon followed by a space or tab (ie, ":[ \t]+") within the
-dnl #   VALUE will prematurely terminate the string since that sequence is
-dnl #   used as the awk field separator.
-dnl #
-dnl # KEYS:
-dnl #   The following META keys are recognized:
-dnl #     Name, Version, Release, Date, Author, LT_Current, LT_Revision, LT_Age
-dnl #
-dnl # Written by Chris Dunlap <cdunlap@llnl.gov>.
-dnl # Modified by Brian Behlendorf <behlendorf1@llnl.gov>.
-dnl #
-AC_DEFUN([SPL_AC_META], [
-       AC_PROG_AWK
-       AC_MSG_CHECKING([metadata])
-
-       META="$srcdir/META"
-       _spl_ac_meta_type="none"
-       if test -f "$META"; then
-               _spl_ac_meta_type="META file"
-
-               SPL_META_NAME=_SPL_AC_META_GETVAL([(Name|Project|Package)]);
-               if test -n "$SPL_META_NAME"; then
-                       AC_DEFINE_UNQUOTED([SPL_META_NAME], ["$SPL_META_NAME"],
-                               [Define the project name.]
-                       )
-                       AC_SUBST([SPL_META_NAME])
-               fi
-
-               SPL_META_VERSION=_SPL_AC_META_GETVAL([Version]);
-               if test -n "$SPL_META_VERSION"; then
-                       AC_DEFINE_UNQUOTED([SPL_META_VERSION], ["$SPL_META_VERSION"],
-                               [Define the project version.]
-                       )
-                       AC_SUBST([SPL_META_VERSION])
-               fi
-
-               SPL_META_RELEASE=_SPL_AC_META_GETVAL([Release]);
-               if test ! -f ".nogitrelease" && git rev-parse --git-dir > /dev/null 2>&1; then
-                       _match="${SPL_META_NAME}-${SPL_META_VERSION}"
-                       _alias=$(git describe --match=${_match} 2>/dev/null)
-                       _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g')
-                       if test -n "${_release}"; then
-                               SPL_META_RELEASE=${_release}
-                               _spl_ac_meta_type="git describe"
-                       else
-                               _match="${SPL_META_NAME}-${SPL_META_VERSION}-${SPL_META_RELEASE}"
-                               _alias=$(git describe --match=${_match} 2>/dev/null)
-                               _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g')
-                               if test -n "${_release}"; then
-                                       SPL_META_RELEASE=${_release}
-                                       _spl_ac_meta_type="git describe"
-                               fi
-                       fi
-               fi
-
-               if test -n "$SPL_META_RELEASE"; then
-                       AC_DEFINE_UNQUOTED([SPL_META_RELEASE], ["$SPL_META_RELEASE"],
-                               [Define the project release.]
-                       )
-                       AC_SUBST([SPL_META_RELEASE])
-
-                       RELEASE="$SPL_META_RELEASE"
-                       AC_SUBST([RELEASE])
-               fi
-
-               SPL_META_LICENSE=_SPL_AC_META_GETVAL([License]);
-               if test -n "$SPL_META_LICENSE"; then
-                       AC_DEFINE_UNQUOTED([SPL_META_LICENSE], ["$SPL_META_LICENSE"],
-                               [Define the project license.]
-                       )
-                       AC_SUBST([SPL_META_LICENSE])
-               fi
-
-               if test -n "$SPL_META_NAME" -a -n "$SPL_META_VERSION"; then
-                               SPL_META_ALIAS="$SPL_META_NAME-$SPL_META_VERSION"
-                               test -n "$SPL_META_RELEASE" && 
-                                       SPL_META_ALIAS="$SPL_META_ALIAS-$SPL_META_RELEASE"
-                               AC_DEFINE_UNQUOTED([SPL_META_ALIAS],
-                                       ["$SPL_META_ALIAS"],
-                                       [Define the project alias string.] 
-                               )
-                               AC_SUBST([SPL_META_ALIAS])
-               fi
-
-               SPL_META_DATA=_SPL_AC_META_GETVAL([Date]);
-               if test -n "$SPL_META_DATA"; then
-                       AC_DEFINE_UNQUOTED([SPL_META_DATA], ["$SPL_META_DATA"],
-                               [Define the project release date.] 
-                       )
-                       AC_SUBST([SPL_META_DATA])
-               fi
-
-               SPL_META_AUTHOR=_SPL_AC_META_GETVAL([Author]);
-               if test -n "$SPL_META_AUTHOR"; then
-                       AC_DEFINE_UNQUOTED([SPL_META_AUTHOR], ["$SPL_META_AUTHOR"],
-                               [Define the project author.]
-                       )
-                       AC_SUBST([SPL_META_AUTHOR])
-               fi
-
-               m4_pattern_allow([^LT_(CURRENT|REVISION|AGE)$])
-               SPL_META_LT_CURRENT=_SPL_AC_META_GETVAL([LT_Current]);
-               SPL_META_LT_REVISION=_SPL_AC_META_GETVAL([LT_Revision]);
-               SPL_META_LT_AGE=_SPL_AC_META_GETVAL([LT_Age]);
-               if test -n "$SPL_META_LT_CURRENT" \
-                                -o -n "$SPL_META_LT_REVISION" \
-                                -o -n "$SPL_META_LT_AGE"; then
-                       test -n "$SPL_META_LT_CURRENT" || SPL_META_LT_CURRENT="0"
-                       test -n "$SPL_META_LT_REVISION" || SPL_META_LT_REVISION="0"
-                       test -n "$SPL_META_LT_AGE" || SPL_META_LT_AGE="0"
-                       AC_DEFINE_UNQUOTED([SPL_META_LT_CURRENT],
-                               ["$SPL_META_LT_CURRENT"],
-                               [Define the libtool library 'current'
-                                version information.]
-                       )
-                       AC_DEFINE_UNQUOTED([SPL_META_LT_REVISION],
-                               ["$SPL_META_LT_REVISION"],
-                               [Define the libtool library 'revision'
-                                version information.]
-                       )
-                       AC_DEFINE_UNQUOTED([SPL_META_LT_AGE], ["$SPL_META_LT_AGE"],
-                               [Define the libtool library 'age' 
-                                version information.]
-                       )
-                       AC_SUBST([SPL_META_LT_CURRENT])
-                       AC_SUBST([SPL_META_LT_REVISION])
-                       AC_SUBST([SPL_META_LT_AGE])
-               fi
-       fi
-
-       AC_MSG_RESULT([$_spl_ac_meta_type])
-       ]
-)
-
-dnl # _SPL_AC_META_GETVAL (KEY_NAME_OR_REGEX)
-dnl #
-dnl # Returns the META VALUE associated with the given KEY_NAME_OR_REGEX expr.
-dnl #
-dnl # Despite their resemblance to line noise,
-dnl #   the "@<:@" and "@:>@" constructs are quadrigraphs for "[" and "]".
-dnl #   <www.gnu.org/software/autoconf/manual/autoconf.html#Quadrigraphs>
-dnl #
-dnl # The "$[]1" and "$[]2" constructs prevent M4 parameter expansion
-dnl #   so a literal $1 and $2 will be passed to the resulting awk script,
-dnl #   whereas the "$1" will undergo M4 parameter expansion for the META key.
-dnl #
-AC_DEFUN([_SPL_AC_META_GETVAL],
-       [`$AWK -F ':@<:@ \t@:>@+' '$[]1 ~ /^ *$1$/ { print $[]2; exit }' $META`]dnl
-)
diff --git a/config/tgz.am b/config/tgz.am
deleted file mode 100644 (file)
index 765be43..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-###############################################################################
-# Copyright (C) 2010 Lawrence Livermore National Security, LLC.
-# Written by Brian Behlendorf <behlendorf1@llnl.gov>.
-###############################################################################
-# Build targets for TGZ packages.
-#
-# Long term native distro specific Slackware style packaging should be added.
-# In the short term RPM packages are built and converted to TGZ packages
-# using alien.  If someone familiar with Slackware style packaging were to
-# update the build system to correctly build Slackware style packages I would
-# happily take it.  Until then we will have to make due with alien.
-#
-###############################################################################
-
-tgz-local:
-       @(if test "${HAVE_ALIEN}" = "no"; then \
-               echo -e "\n" \
-       "*** Required util ${ALIEN} missing.  Please install the\n" \
-        "*** package for your distribution which provides ${ALIEN},\n" \
-       "*** re-run configure, and try again.\n"; \
-                exit 1; \
-       fi)
-
-tgz-kmod: tgz-local rpm-kmod
-if CONFIG_KERNEL
-       name=${PACKAGE}; \
-       version=${VERSION}-${RELEASE}; \
-       arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \
-       pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \
-       fakeroot $(ALIEN) --scripts --to-tgz $$pkg1; \
-       $(RM) $$pkg1
-endif
-
-tgz-utils: tgz-local rpm-utils
-if CONFIG_USER
-       name=${PACKAGE}; \
-       version=${VERSION}-${RELEASE}; \
-       arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \
-       pkg1=$${name}-$${version}.$${arch}.rpm; \
-       fakeroot $(ALIEN) --scripts --to-tgz $$pkg1; \
-       $(RM) $$pkg1
-endif
-
-tgz: tgz-kmod tgz-utils
diff --git a/configure.ac b/configure.ac
deleted file mode 100644 (file)
index ab53879..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-###############################################################################
-# SPL AutoConf Configuration
-###############################################################################
-# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
-# Copyright (C) 2007 The Regents of the University of California.
-# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-# Written by Brian Behlendorf <behlendorf1@llnl.gov>.
-# UCRL-CODE-235197
-#
-# This file is part of the SPL, Solaris Porting Layer.
-# For details, see <http://zfsonlinux.org/>.
-#
-# The SPL is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# The SPL is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with the SPL.  If not, see <http://www.gnu.org/licenses/>.
-###############################################################################
-
-AC_INIT(m4_esyscmd(grep Name META | cut -d ':' -f 2 | tr -d ' \n'),
-       m4_esyscmd(grep Version META | cut -d ':' -f 2 | tr -d ' \n'))
-AC_LANG(C)
-SPL_AC_META
-AC_CONFIG_AUX_DIR([config])
-AC_CONFIG_MACRO_DIR([config])
-AC_CANONICAL_SYSTEM
-AM_MAINTAINER_MODE
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-AM_INIT_AUTOMAKE
-AC_CONFIG_HEADERS([spl_config.h], [
-       (mv spl_config.h spl_config.h.tmp &&
-       awk -f ${ac_srcdir}/config/config.awk spl_config.h.tmp >spl_config.h &&
-       rm spl_config.h.tmp) || exit 1])
-
-AC_PROG_INSTALL
-AC_PROG_CC
-AC_PROG_LIBTOOL
-
-SPL_AC_LICENSE
-SPL_AC_PACKAGE
-SPL_AC_CONFIG
-SPL_AC_DEBUG
-SPL_AC_DEBUG_KMEM
-SPL_AC_DEBUG_KMEM_TRACKING
-
-AC_CONFIG_FILES([
-       Makefile
-       man/Makefile
-       man/man1/Makefile
-       man/man5/Makefile
-       lib/Makefile
-       cmd/Makefile
-       cmd/splat/Makefile
-       cmd/splslab/Makefile
-       module/Makefile
-       module/spl/Makefile
-       module/splat/Makefile
-       include/Makefile
-       include/fs/Makefile
-       include/linux/Makefile
-       include/rpc/Makefile
-       include/sharefs/Makefile
-       include/sys/Makefile
-       include/sys/fm/Makefile
-       include/sys/fs/Makefile
-       include/util/Makefile
-       include/vm/Makefile
-       scripts/Makefile
-       rpm/Makefile
-       rpm/redhat/Makefile
-       rpm/redhat/spl.spec
-       rpm/redhat/spl-kmod.spec
-       rpm/redhat/spl-dkms.spec
-       rpm/generic/Makefile
-       rpm/generic/spl.spec
-       rpm/generic/spl-kmod.spec
-       rpm/generic/spl-dkms.spec
-       spl.release
-])
-
-AC_OUTPUT
diff --git a/copy-builtin b/copy-builtin
deleted file mode 100755 (executable)
index 34c482b..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/bin/bash
-
-set -e
-
-usage()
-{
-       echo "usage: $0 <kernel source tree>" >&2
-       exit 1
-}
-
-[ "$#" -eq 1 ] || usage
-KERNEL_DIR="$(readlink --canonicalize-existing "$1")"
-
-MODULES=()
-for MODULE_DIR in module/*
-do
-       [ -d "$MODULE_DIR" ] || continue
-       MODULES+=("${MODULE_DIR##*/}")
-done
-
-if ! [ -e 'spl_config.h' ]
-then
-       echo >&2
-       echo "    $0: you did not run configure, or you're not in the SPL source directory." >&2
-       echo "    $0: run configure with --with-linux=$KERNEL_DIR and --enable-linux-builtin." >&2
-       echo >&2
-       exit 1
-fi
-
-make clean || true
-
-rm -rf "$KERNEL_DIR/include/spl" "$KERNEL_DIR/spl"
-cp --recursive include "$KERNEL_DIR/include/spl"
-cp --recursive module "$KERNEL_DIR/spl"
-cp spl_config.h "$KERNEL_DIR/"
-cp spl.release.in "$KERNEL_DIR/"
-
-adjust_obj_paths()
-{
-       local FILE="$1"
-       local LINE OBJPATH
-
-       while IFS='' read -r LINE
-       do
-               OBJPATH="${LINE#\$(MODULE)-objs += }"
-               if [ "$OBJPATH" = "$LINE" ]
-               then
-                       echo "$LINE"
-               else
-                       echo "\$(MODULE)-objs += ${OBJPATH##*/}"
-               fi
-       done < "$FILE" > "$FILE.new"
-       mv "$FILE.new" "$FILE"
-}
-
-for MODULE in "${MODULES[@]}"
-do
-       adjust_obj_paths "$KERNEL_DIR/spl/$MODULE/Makefile"
-       sed -i.bak '/obj =/d' "$KERNEL_DIR/spl/$MODULE/Makefile"
-       sed -i.bak '/src =/d' "$KERNEL_DIR/spl/$MODULE/Makefile"
-done
-
-cat > "$KERNEL_DIR/spl/Kconfig" <<"EOF"
-config SPL
-       tristate "Solaris Porting Layer (SPL)"
-       help
-         This is the SPL library from the ZFS On Linux project.
-
-         See http://zfsonlinux.org/
-
-         To compile this library as a module, choose M here.
-
-         If unsure, say N.
-EOF
-
-{
-       cat <<-"EOF"
-       SPL_MODULE_CFLAGS  = -I$(srctree)/include/spl
-       SPL_MODULE_CFLAGS += -include $(srctree)/spl_config.h
-       export SPL_MODULE_CFLAGS
-
-       obj-$(CONFIG_SPL) :=
-       EOF
-
-       for MODULE in "${MODULES[@]}"
-       do
-               echo 'obj-$(CONFIG_SPL) += ' "$MODULE/"
-       done
-} > "$KERNEL_DIR/spl/Kbuild"
-
-add_after()
-{
-       local FILE="$1"
-       local MARKER="$2"
-       local NEW="$3"
-       local LINE
-
-       while IFS='' read -r LINE
-       do
-               echo "$LINE"
-
-               if [ -n "$MARKER" -a "$LINE" = "$MARKER" ]
-               then
-                       echo "$NEW"
-                       MARKER=''
-                       if IFS='' read -r LINE
-                       then
-                               [ "$LINE" != "$NEW" ] && echo "$LINE"
-                       fi
-               fi
-       done < "$FILE" > "$FILE.new"
-
-       mv "$FILE.new" "$FILE"
-}
-
-add_after "$KERNEL_DIR/Kconfig" 'source "arch/$SRCARCH/Kconfig"' 'source "spl/Kconfig"'
-# We must take care to build SPL before ZFS, otherwise the symbols required
-# to link ZFS will not be available.
-sed -i 's~mm/ fs/~mm/ spl/ fs/~' "$KERNEL_DIR/Makefile"
-
-echo >&2
-echo "    $0: done." >&2
-echo "    $0: now you can build the kernel with SPL support." >&2
-echo "    $0: make sure you enable SPL support (CONFIG_SPL) before building." >&2
-echo >&2
-
diff --git a/include/Makefile.am b/include/Makefile.am
deleted file mode 100644 (file)
index 3200222..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-SUBDIRS = fs linux rpc sharefs sys util vm
-
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/splat-ctl.h \
-       $(top_srcdir)/include/spl-ctl.h \
-       $(top_srcdir)/include/strings.h \
-       $(top_srcdir)/include/unistd.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include
-kernel_HEADERS = $(KERNEL_H)
-endif
diff --git a/include/fs/Makefile.am b/include/fs/Makefile.am
deleted file mode 100644 (file)
index e0da4b3..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/fs/fs_subr.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include/fs
-kernel_HEADERS = $(KERNEL_H)
-endif
diff --git a/include/fs/fs_subr.h b/include/fs/fs_subr.h
deleted file mode 100644 (file)
index 71f0742..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_FS_FS_SUBR_H
-#define        _SPL_FS_FS_SUBR_H
-
-#endif /* SPL_FS_FS_SUBR_H */
diff --git a/include/linux/Makefile.am b/include/linux/Makefile.am
deleted file mode 100644 (file)
index 712e94e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/linux/bitops_compat.h \
-       $(top_srcdir)/include/linux/compiler_compat.h \
-       $(top_srcdir)/include/linux/delay_compat.h \
-       $(top_srcdir)/include/linux/file_compat.h \
-       $(top_srcdir)/include/linux/list_compat.h \
-       $(top_srcdir)/include/linux/math64_compat.h \
-       $(top_srcdir)/include/linux/mm_compat.h \
-       $(top_srcdir)/include/linux/proc_compat.h \
-       $(top_srcdir)/include/linux/rwsem_compat.h \
-       $(top_srcdir)/include/linux/wait_compat.h \
-       $(top_srcdir)/include/linux/zlib_compat.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include/linux
-kernel_HEADERS = $(KERNEL_H)
-endif
diff --git a/include/linux/bitops_compat.h b/include/linux/bitops_compat.h
deleted file mode 100644 (file)
index a62b628..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_BITOPS_COMPAT_H
-#define        _SPL_BITOPS_COMPAT_H
-
-#include <linux/bitops.h>
-
-#endif /* _SPL_BITOPS_COMPAT_H */
diff --git a/include/linux/compiler_compat.h b/include/linux/compiler_compat.h
deleted file mode 100644 (file)
index 696d795..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_COMPILER_COMPAT_H
-#define        _SPL_COMPILER_COMPAT_H
-
-#include <linux/compiler.h>
-
-#ifndef ACCESS_ONCE
-/*
- * Prevent the compiler from merging or refetching accesses.  The compiler
- * is also forbidden from reordering successive instances of ACCESS_ONCE(),
- * but only when the compiler is aware of some particular ordering.  One way
- * to make the compiler aware of ordering is to put the two invocations of
- * ACCESS_ONCE() in different C statements.
- *
- * This macro does absolutely -nothing- to prevent the CPU from reordering,
- * merging, or refetching absolutely anything at any time.  Its main intended
- * use is to mediate communication between process-level code and irq/NMI
- * handlers, all running on the same CPU.
- */
-/* Taken from 2.6.33.2 */
-#define        ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
-#endif
-
-#endif /* _SPL_COMPILER_COMPAT_H */
diff --git a/include/linux/delay_compat.h b/include/linux/delay_compat.h
deleted file mode 100644 (file)
index c7a3811..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_DELAY_COMPAT_H
-#define        _SPL_DELAY_COMPAT_H
-
-#include <linux/delay.h>
-#include <linux/time.h>
-
-/* usleep_range() introduced in 2.6.36 */
-#ifndef HAVE_USLEEP_RANGE
-
-static inline void
-usleep_range(unsigned long min, unsigned long max)
-{
-       unsigned int min_ms = min / USEC_PER_MSEC;
-
-       if (min >= MAX_UDELAY_MS)
-               msleep(min_ms);
-       else
-               udelay(min);
-}
-
-#endif /* HAVE_USLEEP_RANGE */
-
-#endif /* _SPL_DELAY_COMPAT_H */
diff --git a/include/linux/file_compat.h b/include/linux/file_compat.h
deleted file mode 100644 (file)
index 55ba2cc..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_FILE_COMPAT_H
-#define        _SPL_FILE_COMPAT_H
-
-#include <linux/fs.h>
-#include <linux/uaccess.h>
-#ifdef HAVE_FDTABLE_HEADER
-#include <linux/fdtable.h>
-#endif
-
-static inline struct file *
-spl_filp_open(const char *name, int flags, int mode, int *err)
-{
-       struct file *filp = NULL;
-       int rc;
-
-       filp = filp_open(name, flags, mode);
-       if (IS_ERR(filp)) {
-               rc = PTR_ERR(filp);
-               if (err)
-                       *err = rc;
-               filp = NULL;
-       }
-       return (filp);
-}
-
-#define        spl_filp_close(f)               filp_close(f, NULL)
-#define        spl_filp_poff(f)                (&(f)->f_pos)
-#define        spl_filp_write(fp, b, s, p)     (fp)->f_op->write((fp), (b), (s), p)
-
-static inline int
-spl_filp_fallocate(struct file *fp, int mode, loff_t offset, loff_t len)
-{
-       int error = -EOPNOTSUPP;
-
-#ifdef HAVE_FILE_FALLOCATE
-       if (fp->f_op->fallocate)
-               error = fp->f_op->fallocate(fp, mode, offset, len);
-#else
-#ifdef HAVE_INODE_FALLOCATE
-       if (fp->f_dentry && fp->f_dentry->d_inode &&
-           fp->f_dentry->d_inode->i_op->fallocate)
-               error = fp->f_dentry->d_inode->i_op->fallocate(
-                   fp->f_dentry->d_inode, mode, offset, len);
-#endif /* HAVE_INODE_FALLOCATE */
-#endif /* HAVE_FILE_FALLOCATE */
-
-       return (error);
-}
-
-static inline ssize_t
-spl_kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos)
-{
-#if defined(HAVE_KERNEL_WRITE_PPOS)
-       return (kernel_write(file, buf, count, pos));
-#else
-       mm_segment_t saved_fs;
-       ssize_t ret;
-
-       saved_fs = get_fs();
-       set_fs(get_ds());
-
-       ret = vfs_write(file, (__force const char __user *)buf, count, pos);
-
-       set_fs(saved_fs);
-
-       return (ret);
-#endif
-}
-
-static inline ssize_t
-spl_kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
-{
-#if defined(HAVE_KERNEL_READ_PPOS)
-       return (kernel_read(file, buf, count, pos));
-#else
-       mm_segment_t saved_fs;
-       ssize_t ret;
-
-       saved_fs = get_fs();
-       set_fs(get_ds());
-
-       ret = vfs_read(file, (void __user *)buf, count, pos);
-
-       set_fs(saved_fs);
-
-       return (ret);
-#endif
-}
-
-#ifdef HAVE_2ARGS_VFS_FSYNC
-#define        spl_filp_fsync(fp, sync)        vfs_fsync(fp, sync)
-#else
-#define        spl_filp_fsync(fp, sync)        vfs_fsync(fp, (fp)->f_dentry, sync)
-#endif /* HAVE_2ARGS_VFS_FSYNC */
-
-#ifdef HAVE_INODE_LOCK_SHARED
-#define        spl_inode_lock(ip)              inode_lock(ip)
-#define        spl_inode_unlock(ip)            inode_unlock(ip)
-#define        spl_inode_lock_shared(ip)       inode_lock_shared(ip)
-#define        spl_inode_unlock_shared(ip)     inode_unlock_shared(ip)
-#define        spl_inode_trylock(ip)           inode_trylock(ip)
-#define        spl_inode_trylock_shared(ip)    inode_trylock_shared(ip)
-#define        spl_inode_is_locked(ip)         inode_is_locked(ip)
-#define        spl_inode_lock_nested(ip, s)    inode_lock_nested(ip, s)
-#else
-#define        spl_inode_lock(ip)              mutex_lock(&(ip)->i_mutex)
-#define        spl_inode_unlock(ip)            mutex_unlock(&(ip)->i_mutex)
-#define        spl_inode_lock_shared(ip)       mutex_lock(&(ip)->i_mutex)
-#define        spl_inode_unlock_shared(ip)     mutex_unlock(&(ip)->i_mutex)
-#define        spl_inode_trylock(ip)           mutex_trylock(&(ip)->i_mutex)
-#define        spl_inode_trylock_shared(ip)    mutex_trylock(&(ip)->i_mutex)
-#define        spl_inode_is_locked(ip)         mutex_is_locked(&(ip)->i_mutex)
-#define        spl_inode_lock_nested(ip, s)    mutex_lock_nested(&(ip)->i_mutex, s)
-#endif
-
-#endif /* SPL_FILE_COMPAT_H */
diff --git a/include/linux/list_compat.h b/include/linux/list_compat.h
deleted file mode 100644 (file)
index fece8ad..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_LIST_COMPAT_H
-#define        _SPL_LIST_COMPAT_H
-
-#include <linux/list.h>
-
-#ifndef list_for_each_entry_safe_reverse
-
-/*
- * list_for_each_entry_safe_reverse
- * @pos:       the type * to use as a loop cursor.
- * @n:         another type * to use as temporary storage
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- *
- * Iterate backwards over list of given type, safe against removal
- * of list entry.
- */
-#define        list_for_each_entry_safe_reverse(pos, n, head, member)          \
-       for (pos = list_entry((head)->prev, typeof(*pos), member),      \
-           n = list_entry(pos->member.prev, typeof(*pos), member);     \
-           &pos->member != (head);                                     \
-           pos = n, n = list_entry(n->member.prev, typeof(*n), member))
-
-#endif /* list_for_each_entry_safe_reverse */
-
-#endif /* SPL_LIST_COMPAT_H */
diff --git a/include/linux/math64_compat.h b/include/linux/math64_compat.h
deleted file mode 100644 (file)
index c02f584..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_MATH64_COMPAT_H
-#define        _SPL_MATH64_COMPAT_H
-
-#ifndef abs64
-/* CSTYLED */
-#define        abs64(x)        ({ uint64_t t = (x) >> 63; ((x) ^ t) - t; })
-#endif
-
-#endif /* _SPL_MATH64_COMPAT_H */
diff --git a/include/linux/mm_compat.h b/include/linux/mm_compat.h
deleted file mode 100644 (file)
index c10652e..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_MM_COMPAT_H
-#define        _SPL_MM_COMPAT_H
-
-#include <linux/mm.h>
-#include <linux/fs.h>
-
-#if !defined(HAVE_SHRINK_CONTROL_STRUCT)
-struct shrink_control {
-       gfp_t gfp_mask;
-       unsigned long nr_to_scan;
-};
-#endif /* HAVE_SHRINK_CONTROL_STRUCT */
-
-/*
- * Due to frequent changes in the shrinker API the following
- * compatibility wrappers should be used.  They are as follows:
- *
- * SPL_SHRINKER_DECLARE is used to declare the shrinker which is
- * passed to spl_register_shrinker()/spl_unregister_shrinker().  Use
- * shrinker_name to set the shrinker variable name, shrinker_callback
- * to set the callback function, and seek_cost to define the cost of
- * reclaiming an object.
- *
- *   SPL_SHRINKER_DECLARE(shrinker_name, shrinker_callback, seek_cost);
- *
- * SPL_SHRINKER_CALLBACK_FWD_DECLARE is used when a forward declaration
- * of the shrinker callback function is required.  Only the callback
- * function needs to be passed.
- *
- *   SPL_SHRINKER_CALLBACK_FWD_DECLARE(shrinker_callback);
- *
- * SPL_SHRINKER_CALLBACK_WRAPPER is used to declare the callback function
- * which is registered with the shrinker.  This function will call your
- * custom shrinker which must use the following prototype.  Notice the
- * leading __'s, these must be appended to the callback_function name.
- *
- *   int  __shrinker_callback(struct shrinker *, struct shrink_control *)
- *   SPL_SHRINKER_CALLBACK_WRAPPER(shrinker_callback);a
- *
- *
- * Example:
- *
- * SPL_SHRINKER_CALLBACK_FWD_DECLARE(my_shrinker_fn);
- * SPL_SHRINKER_DECLARE(my_shrinker, my_shrinker_fn, 1);
- *
- * static int
- * __my_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc)
- * {
- *     if (sc->nr_to_scan) {
- *             ...scan objects in the cache and reclaim them...
- *     }
- *
- *     ...calculate number of objects in the cache...
- *
- *     return (number of objects in the cache);
- * }
- * SPL_SHRINKER_CALLBACK_WRAPPER(my_shrinker_fn);
- */
-
-#define        spl_register_shrinker(x)        register_shrinker(x)
-#define        spl_unregister_shrinker(x)      unregister_shrinker(x)
-
-/*
- * Linux 2.6.23 - 2.6.34 Shrinker API Compatibility.
- */
-#if defined(HAVE_2ARGS_OLD_SHRINKER_CALLBACK)
-#define        SPL_SHRINKER_DECLARE(s, x, y)                                   \
-static struct shrinker s = {                                           \
-       .shrink = x,                                                    \
-       .seeks = y                                                      \
-}
-
-#define        SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn)                           \
-static int fn(int nr_to_scan, unsigned int gfp_mask)
-
-#define        SPL_SHRINKER_CALLBACK_WRAPPER(fn)                               \
-static int                                                             \
-fn(int nr_to_scan, unsigned int gfp_mask)                              \
-{                                                                      \
-       struct shrink_control sc;                                       \
-                                                                       \
-       sc.nr_to_scan = nr_to_scan;                                     \
-       sc.gfp_mask = gfp_mask;                                         \
-                                                                       \
-       return (__ ## fn(NULL, &sc));                                   \
-}
-
-/*
- * Linux 2.6.35 to 2.6.39 Shrinker API Compatibility.
- */
-#elif defined(HAVE_3ARGS_SHRINKER_CALLBACK)
-#define        SPL_SHRINKER_DECLARE(s, x, y)                                   \
-static struct shrinker s = {                                           \
-       .shrink = x,                                                    \
-       .seeks = y                                                      \
-}
-
-#define        SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn)                           \
-static int fn(struct shrinker *, int, unsigned int)
-
-#define        SPL_SHRINKER_CALLBACK_WRAPPER(fn)                               \
-static int                                                             \
-fn(struct shrinker *shrink, int nr_to_scan, unsigned int gfp_mask)     \
-{                                                                      \
-       struct shrink_control sc;                                       \
-                                                                       \
-       sc.nr_to_scan = nr_to_scan;                                     \
-       sc.gfp_mask = gfp_mask;                                         \
-                                                                       \
-       return (__ ## fn(shrink, &sc));                                 \
-}
-
-/*
- * Linux 3.0 to 3.11 Shrinker API Compatibility.
- */
-#elif defined(HAVE_2ARGS_NEW_SHRINKER_CALLBACK)
-#define        SPL_SHRINKER_DECLARE(s, x, y)                                   \
-static struct shrinker s = {                                           \
-       .shrink = x,                                                    \
-       .seeks = y                                                      \
-}
-
-#define        SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn)                           \
-static int fn(struct shrinker *, struct shrink_control *)
-
-#define        SPL_SHRINKER_CALLBACK_WRAPPER(fn)                               \
-static int                                                             \
-fn(struct shrinker *shrink, struct shrink_control *sc)                 \
-{                                                                      \
-       return (__ ## fn(shrink, sc));                                  \
-}
-
-/*
- * Linux 3.12 and later Shrinker API Compatibility.
- */
-#elif defined(HAVE_SPLIT_SHRINKER_CALLBACK)
-#define        SPL_SHRINKER_DECLARE(s, x, y)                                   \
-static struct shrinker s = {                                           \
-       .count_objects = x ## _count_objects,                           \
-       .scan_objects = x ## _scan_objects,                             \
-       .seeks = y                                                      \
-}
-
-#define        SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn)                           \
-static unsigned long fn ## _count_objects(struct shrinker *,           \
-    struct shrink_control *);                                          \
-static unsigned long fn ## _scan_objects(struct shrinker *,            \
-    struct shrink_control *)
-
-#define        SPL_SHRINKER_CALLBACK_WRAPPER(fn)                               \
-static unsigned long                                                   \
-fn ## _count_objects(struct shrinker *shrink, struct shrink_control *sc)\
-{                                                                      \
-       int __ret__;                                                    \
-                                                                       \
-       sc->nr_to_scan = 0;                                             \
-       __ret__ = __ ## fn(NULL, sc);                                   \
-                                                                       \
-       /* Errors may not be returned and must be converted to zeros */ \
-       return ((__ret__ < 0) ? 0 : __ret__);                           \
-}                                                                      \
-                                                                       \
-static unsigned long                                                   \
-fn ## _scan_objects(struct shrinker *shrink, struct shrink_control *sc)        \
-{                                                                      \
-       int __ret__;                                                    \
-                                                                       \
-       __ret__ = __ ## fn(NULL, sc);                                   \
-       return ((__ret__ < 0) ? SHRINK_STOP : __ret__);                 \
-}
-#else
-/*
- * Linux 2.x to 2.6.22, or a newer shrinker API has been introduced.
- */
-#error "Unknown shrinker callback"
-#endif
-
-#if defined(HAVE_SPLIT_SHRINKER_CALLBACK)
-typedef unsigned long  spl_shrinker_t;
-#else
-typedef int            spl_shrinker_t;
-#define        SHRINK_STOP     (-1)
-#endif
-
-#endif /* SPL_MM_COMPAT_H */
diff --git a/include/linux/proc_compat.h b/include/linux/proc_compat.h
deleted file mode 100644 (file)
index 91d914e..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_PROC_COMPAT_H
-#define        _SPL_PROC_COMPAT_H
-
-#include <linux/proc_fs.h>
-
-extern struct proc_dir_entry *proc_spl_kstat;
-
-int spl_proc_init(void);
-void spl_proc_fini(void);
-
-#endif /* SPL_PROC_COMPAT_H */
diff --git a/include/linux/rwsem_compat.h b/include/linux/rwsem_compat.h
deleted file mode 100644 (file)
index 7a0dcf8..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_RWSEM_COMPAT_H
-#define        _SPL_RWSEM_COMPAT_H
-
-#include <linux/rwsem.h>
-
-#if defined(CONFIG_PREEMPT_RT_FULL)
-#define        SPL_RWSEM_SINGLE_READER_VALUE   (1)
-#define        SPL_RWSEM_SINGLE_WRITER_VALUE   (0)
-#elif defined(CONFIG_RWSEM_GENERIC_SPINLOCK)
-#define        SPL_RWSEM_SINGLE_READER_VALUE   (1)
-#define        SPL_RWSEM_SINGLE_WRITER_VALUE   (-1)
-#else
-#define        SPL_RWSEM_SINGLE_READER_VALUE   (RWSEM_ACTIVE_READ_BIAS)
-#define        SPL_RWSEM_SINGLE_WRITER_VALUE   (RWSEM_ACTIVE_WRITE_BIAS)
-#endif
-
-/* Linux 3.16 changed activity to count for rwsem-spinlock */
-#if defined(CONFIG_PREEMPT_RT_FULL)
-#define        RWSEM_COUNT(sem)        sem->read_depth
-#elif defined(HAVE_RWSEM_ACTIVITY)
-#define        RWSEM_COUNT(sem)        sem->activity
-/* Linux 4.8 changed count to an atomic_long_t for !rwsem-spinlock */
-#elif defined(HAVE_RWSEM_ATOMIC_LONG_COUNT)
-#define        RWSEM_COUNT(sem)        atomic_long_read(&(sem)->count)
-#else
-#define        RWSEM_COUNT(sem)        sem->count
-#endif
-
-int rwsem_tryupgrade(struct rw_semaphore *rwsem);
-
-#if defined(RWSEM_SPINLOCK_IS_RAW)
-#define        spl_rwsem_lock_irqsave(lk, fl)          raw_spin_lock_irqsave(lk, fl)
-#define        spl_rwsem_unlock_irqrestore(lk, fl)     \
-    raw_spin_unlock_irqrestore(lk, fl)
-#define        spl_rwsem_trylock_irqsave(lk, fl)       raw_spin_trylock_irqsave(lk, fl)
-#else
-#define        spl_rwsem_lock_irqsave(lk, fl)          spin_lock_irqsave(lk, fl)
-#define        spl_rwsem_unlock_irqrestore(lk, fl)     spin_unlock_irqrestore(lk, fl)
-#define        spl_rwsem_trylock_irqsave(lk, fl)       spin_trylock_irqsave(lk, fl)
-#endif /* RWSEM_SPINLOCK_IS_RAW */
-
-#define        spl_rwsem_is_locked(rwsem)              rwsem_is_locked(rwsem)
-
-#endif /* _SPL_RWSEM_COMPAT_H */
diff --git a/include/linux/wait_compat.h b/include/linux/wait_compat.h
deleted file mode 100644 (file)
index 10fe2d8..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Copyright (C) 2007-2014 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_WAIT_COMPAT_H
-#define        _SPL_WAIT_COMPAT_H
-
-#include <linux/sched.h>
-#include <linux/wait.h>
-
-#ifndef HAVE_WAIT_ON_BIT_ACTION
-#define        spl_wait_on_bit(word, bit, mode)        wait_on_bit(word, bit, mode)
-#else
-
-static inline int
-spl_bit_wait(void *word)
-{
-       schedule();
-       return (0);
-}
-
-#define        spl_wait_on_bit(word, bit, mode)                \
-       wait_on_bit(word, bit, spl_bit_wait, mode)
-
-#endif /* HAVE_WAIT_ON_BIT_ACTION */
-
-#ifdef HAVE_WAIT_QUEUE_ENTRY_T
-typedef wait_queue_head_t      spl_wait_queue_head_t;
-typedef wait_queue_entry_t     spl_wait_queue_entry_t;
-#else
-typedef wait_queue_head_t      spl_wait_queue_head_t;
-typedef wait_queue_t           spl_wait_queue_entry_t;
-#endif
-
-#endif /* SPL_WAIT_COMPAT_H */
diff --git a/include/linux/zlib_compat.h b/include/linux/zlib_compat.h
deleted file mode 100644 (file)
index 3c14285..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Copyright (C) 2011 Lawrence Livermore National Security, LLC.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_ZLIB_COMPAT_H
-#define        _SPL_ZLIB_COMPAT_H
-
-#include <linux/zlib.h>
-
-#ifdef HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE
-#define        spl_zlib_deflate_workspacesize(wb, ml) \
-       zlib_deflate_workspacesize(wb, ml)
-#else
-#define        spl_zlib_deflate_workspacesize(wb, ml) \
-       zlib_deflate_workspacesize()
-#endif /* HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE */
-
-#endif /* SPL_ZLIB_COMPAT_H */
diff --git a/include/rpc/Makefile.am b/include/rpc/Makefile.am
deleted file mode 100644 (file)
index cfc8246..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/rpc/types.h \
-       $(top_srcdir)/include/rpc/xdr.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include/rpc
-kernel_HEADERS = $(KERNEL_H)
-endif
diff --git a/include/rpc/types.h b/include/rpc/types.h
deleted file mode 100644 (file)
index 4fb5415..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_RPC_TYPES_H
-#define        _SPL_RPC_TYPES_H
-
-typedef int bool_t;
-
-#endif /* SPL_RPC_TYPES_H */
diff --git a/include/rpc/xdr.h b/include/rpc/xdr.h
deleted file mode 100644 (file)
index e349757..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- *  Copyright (c) 2008 Sun Microsystems, Inc.
- *  Written by Ricardo Correia <Ricardo.M.Correia@Sun.COM>
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_RPC_XDR_H
-#define        _SPL_RPC_XDR_H
-
-#include <sys/types.h>
-#include <rpc/types.h>
-
-/*
- * XDR enums and types.
- */
-enum xdr_op {
-       XDR_ENCODE,
-       XDR_DECODE
-};
-
-struct xdr_ops;
-
-typedef struct {
-       struct xdr_ops  *x_ops; /* Let caller know xdrmem_create() succeeds */
-       caddr_t         x_addr; /* Current buffer addr */
-       caddr_t         x_addr_end;     /* End of the buffer */
-       enum xdr_op     x_op;   /* Stream direction */
-} XDR;
-
-typedef bool_t (*xdrproc_t)(XDR *xdrs, void *ptr);
-
-struct xdr_ops {
-       bool_t (*xdr_control)(XDR *, int, void *);
-
-       bool_t (*xdr_char)(XDR *, char *);
-       bool_t (*xdr_u_short)(XDR *, unsigned short *);
-       bool_t (*xdr_u_int)(XDR *, unsigned *);
-       bool_t (*xdr_u_longlong_t)(XDR *, u_longlong_t *);
-
-       bool_t (*xdr_opaque)(XDR *, caddr_t, const uint_t);
-       bool_t (*xdr_string)(XDR *, char **, const uint_t);
-       bool_t (*xdr_array)(XDR *, caddr_t *, uint_t *, const uint_t,
-           const uint_t, const xdrproc_t);
-};
-
-/*
- * XDR control operator.
- */
-#define        XDR_GET_BYTES_AVAIL 1
-
-struct xdr_bytesrec {
-       bool_t xc_is_last_record;
-       size_t xc_num_avail;
-};
-
-/*
- * XDR functions.
- */
-void xdrmem_create(XDR *xdrs, const caddr_t addr, const uint_t size,
-    const enum xdr_op op);
-
-/* Currently not needed. If needed later, we'll add it to struct xdr_ops */
-#define        xdr_destroy(xdrs) ((void) 0)
-
-#define        xdr_control(xdrs, req, info) \
-       (xdrs)->x_ops->xdr_control((xdrs), (req), (info))
-
-/*
- * For precaution, the following are defined as static inlines instead of macros
- * to get some amount of type safety.
- *
- * Also, macros wouldn't work in the case where typecasting is done, because it
- * must be possible to reference the functions' addresses by these names.
- */
-static inline bool_t xdr_char(XDR *xdrs, char *cp)
-{
-       return (xdrs->x_ops->xdr_char(xdrs, cp));
-}
-
-static inline bool_t xdr_u_short(XDR *xdrs, unsigned short *usp)
-{
-       return (xdrs->x_ops->xdr_u_short(xdrs, usp));
-}
-
-static inline bool_t xdr_short(XDR *xdrs, short *sp)
-{
-       BUILD_BUG_ON(sizeof (short) != 2);
-       return (xdrs->x_ops->xdr_u_short(xdrs, (unsigned short *) sp));
-}
-
-static inline bool_t xdr_u_int(XDR *xdrs, unsigned *up)
-{
-       return (xdrs->x_ops->xdr_u_int(xdrs, up));
-}
-
-static inline bool_t xdr_int(XDR *xdrs, int *ip)
-{
-       BUILD_BUG_ON(sizeof (int) != 4);
-       return (xdrs->x_ops->xdr_u_int(xdrs, (unsigned *)ip));
-}
-
-static inline bool_t xdr_u_longlong_t(XDR *xdrs, u_longlong_t *ullp)
-{
-       return (xdrs->x_ops->xdr_u_longlong_t(xdrs, ullp));
-}
-
-static inline bool_t xdr_longlong_t(XDR *xdrs, longlong_t *llp)
-{
-       BUILD_BUG_ON(sizeof (longlong_t) != 8);
-       return (xdrs->x_ops->xdr_u_longlong_t(xdrs, (u_longlong_t *)llp));
-}
-
-/*
- * Fixed-length opaque data.
- */
-static inline bool_t xdr_opaque(XDR *xdrs, caddr_t cp, const uint_t cnt)
-{
-       return (xdrs->x_ops->xdr_opaque(xdrs, cp, cnt));
-}
-
-/*
- * Variable-length string.
- * The *sp buffer must have (maxsize + 1) bytes.
- */
-static inline bool_t xdr_string(XDR *xdrs, char **sp, const uint_t maxsize)
-{
-       return (xdrs->x_ops->xdr_string(xdrs, sp, maxsize));
-}
-
-/*
- * Variable-length arrays.
- */
-static inline bool_t xdr_array(XDR *xdrs, caddr_t *arrp, uint_t *sizep,
-    const uint_t maxsize, const uint_t elsize, const xdrproc_t elproc)
-{
-       return xdrs->x_ops->xdr_array(xdrs, arrp, sizep, maxsize, elsize,
-           elproc);
-}
-
-#endif /* SPL_RPC_XDR_H */
diff --git a/include/sharefs/Makefile.am b/include/sharefs/Makefile.am
deleted file mode 100644 (file)
index 10e7093..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/sharefs/share.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include/sharefs
-kernel_HEADERS = $(KERNEL_H)
-endif
diff --git a/include/sharefs/share.h b/include/sharefs/share.h
deleted file mode 100644 (file)
index a5bf0e2..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SHARE_H
-#define        _SPL_SHARE_H
-
-#endif /* SPL_SHARE_H */
diff --git a/include/spl-ctl.h b/include/spl-ctl.h
deleted file mode 100644 (file)
index 571887d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _DEBUG_CTL_H
-#define        _DEBUG_CTL_H
-
-/*
- * Contains shared definitions which both the user space
- * and kernel space portions of splat must agree on.
- */
-typedef struct spl_debug_header {
-       int ph_len;
-       int ph_flags;
-       int ph_subsys;
-       int ph_mask;
-       int ph_cpu_id;
-       int ph_sec;
-       long ph_usec;
-       int ph_stack;
-       int ph_pid;
-       int ph_line_num;
-} spl_debug_header_t;
-
-#endif /* _DEBUG_CTL_H */
diff --git a/include/spl/rpc/xdr.h b/include/spl/rpc/xdr.h
new file mode 100644 (file)
index 0000000..0b39b46
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ *  Copyright (c) 2008 Sun Microsystems, Inc.
+ *  Written by Ricardo Correia <Ricardo.M.Correia@Sun.COM>
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_RPC_XDR_H
+#define        _SPL_RPC_XDR_H
+
+#include <sys/types.h>
+
+typedef int bool_t;
+
+/*
+ * XDR enums and types.
+ */
+enum xdr_op {
+       XDR_ENCODE,
+       XDR_DECODE
+};
+
+struct xdr_ops;
+
+typedef struct {
+       struct xdr_ops  *x_ops; /* Let caller know xdrmem_create() succeeds */
+       caddr_t         x_addr; /* Current buffer addr */
+       caddr_t         x_addr_end;     /* End of the buffer */
+       enum xdr_op     x_op;   /* Stream direction */
+} XDR;
+
+typedef bool_t (*xdrproc_t)(XDR *xdrs, void *ptr);
+
+struct xdr_ops {
+       bool_t (*xdr_control)(XDR *, int, void *);
+
+       bool_t (*xdr_char)(XDR *, char *);
+       bool_t (*xdr_u_short)(XDR *, unsigned short *);
+       bool_t (*xdr_u_int)(XDR *, unsigned *);
+       bool_t (*xdr_u_longlong_t)(XDR *, u_longlong_t *);
+
+       bool_t (*xdr_opaque)(XDR *, caddr_t, const uint_t);
+       bool_t (*xdr_string)(XDR *, char **, const uint_t);
+       bool_t (*xdr_array)(XDR *, caddr_t *, uint_t *, const uint_t,
+           const uint_t, const xdrproc_t);
+};
+
+/*
+ * XDR control operator.
+ */
+#define        XDR_GET_BYTES_AVAIL 1
+
+struct xdr_bytesrec {
+       bool_t xc_is_last_record;
+       size_t xc_num_avail;
+};
+
+/*
+ * XDR functions.
+ */
+void xdrmem_create(XDR *xdrs, const caddr_t addr, const uint_t size,
+    const enum xdr_op op);
+
+/* Currently not needed. If needed later, we'll add it to struct xdr_ops */
+#define        xdr_destroy(xdrs) ((void) 0)
+
+#define        xdr_control(xdrs, req, info) \
+       (xdrs)->x_ops->xdr_control((xdrs), (req), (info))
+
+/*
+ * For precaution, the following are defined as static inlines instead of macros
+ * to get some amount of type safety.
+ *
+ * Also, macros wouldn't work in the case where typecasting is done, because it
+ * must be possible to reference the functions' addresses by these names.
+ */
+static inline bool_t xdr_char(XDR *xdrs, char *cp)
+{
+       return (xdrs->x_ops->xdr_char(xdrs, cp));
+}
+
+static inline bool_t xdr_u_short(XDR *xdrs, unsigned short *usp)
+{
+       return (xdrs->x_ops->xdr_u_short(xdrs, usp));
+}
+
+static inline bool_t xdr_short(XDR *xdrs, short *sp)
+{
+       BUILD_BUG_ON(sizeof (short) != 2);
+       return (xdrs->x_ops->xdr_u_short(xdrs, (unsigned short *) sp));
+}
+
+static inline bool_t xdr_u_int(XDR *xdrs, unsigned *up)
+{
+       return (xdrs->x_ops->xdr_u_int(xdrs, up));
+}
+
+static inline bool_t xdr_int(XDR *xdrs, int *ip)
+{
+       BUILD_BUG_ON(sizeof (int) != 4);
+       return (xdrs->x_ops->xdr_u_int(xdrs, (unsigned *)ip));
+}
+
+static inline bool_t xdr_u_longlong_t(XDR *xdrs, u_longlong_t *ullp)
+{
+       return (xdrs->x_ops->xdr_u_longlong_t(xdrs, ullp));
+}
+
+static inline bool_t xdr_longlong_t(XDR *xdrs, longlong_t *llp)
+{
+       BUILD_BUG_ON(sizeof (longlong_t) != 8);
+       return (xdrs->x_ops->xdr_u_longlong_t(xdrs, (u_longlong_t *)llp));
+}
+
+/*
+ * Fixed-length opaque data.
+ */
+static inline bool_t xdr_opaque(XDR *xdrs, caddr_t cp, const uint_t cnt)
+{
+       return (xdrs->x_ops->xdr_opaque(xdrs, cp, cnt));
+}
+
+/*
+ * Variable-length string.
+ * The *sp buffer must have (maxsize + 1) bytes.
+ */
+static inline bool_t xdr_string(XDR *xdrs, char **sp, const uint_t maxsize)
+{
+       return (xdrs->x_ops->xdr_string(xdrs, sp, maxsize));
+}
+
+/*
+ * Variable-length arrays.
+ */
+static inline bool_t xdr_array(XDR *xdrs, caddr_t *arrp, uint_t *sizep,
+    const uint_t maxsize, const uint_t elsize, const xdrproc_t elproc)
+{
+       return xdrs->x_ops->xdr_array(xdrs, arrp, sizep, maxsize, elsize,
+           elproc);
+}
+
+#endif /* SPL_RPC_XDR_H */
diff --git a/include/spl/sys/acl.h b/include/spl/sys/acl.h
new file mode 100644 (file)
index 0000000..9fc79c0
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_ACL_H
+#define        _SPL_ACL_H
+
+#include <sys/types.h>
+
+typedef struct ace {
+       uid_t a_who;
+       uint32_t a_access_mask;
+       uint16_t a_flags;
+       uint16_t a_type;
+} ace_t;
+
+typedef struct ace_object {
+       uid_t           a_who;          /* uid or gid */
+       uint32_t        a_access_mask;  /* read,write,... */
+       uint16_t        a_flags;        /* see below */
+       uint16_t        a_type;         /* allow or deny */
+       uint8_t         a_obj_type[16]; /* obj type */
+       uint8_t         a_inherit_obj_type[16]; /* inherit obj */
+} ace_object_t;
+
+#define        MAX_ACL_ENTRIES                                 1024
+
+#define        ACE_READ_DATA                                   0x00000001
+#define        ACE_LIST_DIRECTORY                              0x00000001
+#define        ACE_WRITE_DATA                                  0x00000002
+#define        ACE_ADD_FILE                                    0x00000002
+#define        ACE_APPEND_DATA                                 0x00000004
+#define        ACE_ADD_SUBDIRECTORY                            0x00000004
+#define        ACE_READ_NAMED_ATTRS                            0x00000008
+#define        ACE_WRITE_NAMED_ATTRS                           0x00000010
+#define        ACE_EXECUTE                                     0x00000020
+#define        ACE_DELETE_CHILD                                0x00000040
+#define        ACE_READ_ATTRIBUTES                             0x00000080
+#define        ACE_WRITE_ATTRIBUTES                            0x00000100
+#define        ACE_DELETE                                      0x00010000
+#define        ACE_READ_ACL                                    0x00020000
+#define        ACE_WRITE_ACL                                   0x00040000
+#define        ACE_WRITE_OWNER                                 0x00080000
+#define        ACE_SYNCHRONIZE                                 0x00100000
+
+#define        ACE_FILE_INHERIT_ACE                            0x0001
+#define        ACE_DIRECTORY_INHERIT_ACE                       0x0002
+#define        ACE_NO_PROPAGATE_INHERIT_ACE                    0x0004
+#define        ACE_INHERIT_ONLY_ACE                            0x0008
+#define        ACE_SUCCESSFUL_ACCESS_ACE_FLAG                  0x0010
+#define        ACE_FAILED_ACCESS_ACE_FLAG                      0x0020
+#define        ACE_IDENTIFIER_GROUP                            0x0040
+#define        ACE_INHERITED_ACE                               0x0080
+#define        ACE_OWNER                                       0x1000
+#define        ACE_GROUP                                       0x2000
+#define        ACE_EVERYONE                                    0x4000
+
+#define        ACE_ACCESS_ALLOWED_ACE_TYPE                     0x0000
+#define        ACE_ACCESS_DENIED_ACE_TYPE                      0x0001
+#define        ACE_SYSTEM_AUDIT_ACE_TYPE                       0x0002
+#define        ACE_SYSTEM_ALARM_ACE_TYPE                       0x0003
+
+#define        ACL_AUTO_INHERIT                                0x0001
+#define        ACL_PROTECTED                                   0x0002
+#define        ACL_DEFAULTED                                   0x0004
+#define        ACL_FLAGS_ALL   (ACL_AUTO_INHERIT|ACL_PROTECTED|ACL_DEFAULTED)
+
+#define        ACE_ACCESS_ALLOWED_COMPOUND_ACE_TYPE            0x04
+#define        ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE              0x05
+#define        ACE_ACCESS_DENIED_OBJECT_ACE_TYPE               0x06
+#define        ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE                0x07
+#define        ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE                0x08
+#define        ACE_ACCESS_ALLOWED_CALLBACK_ACE_TYPE            0x09
+#define        ACE_ACCESS_DENIED_CALLBACK_ACE_TYPE             0x0A
+#define        ACE_ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE     0x0B
+#define        ACE_ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE      0x0C
+#define        ACE_SYSTEM_AUDIT_CALLBACK_ACE_TYPE              0x0D
+#define        ACE_SYSTEM_ALARM_CALLBACK_ACE_TYPE              0x0E
+#define        ACE_SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE       0x0F
+#define        ACE_SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE       0x10
+
+#define        ACE_ALL_TYPES   0x001F
+
+#define        ACE_TYPE_FLAGS  (ACE_OWNER|ACE_GROUP|ACE_EVERYONE|ACE_IDENTIFIER_GROUP)
+
+/* BEGIN CSTYLED */
+#define        ACE_ALL_PERMS   (ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \
+     ACE_ADD_FILE|ACE_APPEND_DATA|ACE_ADD_SUBDIRECTORY|ACE_READ_NAMED_ATTRS| \
+     ACE_WRITE_NAMED_ATTRS|ACE_EXECUTE|ACE_DELETE_CHILD|ACE_READ_ATTRIBUTES| \
+     ACE_WRITE_ATTRIBUTES|ACE_DELETE|ACE_READ_ACL|ACE_WRITE_ACL| \
+     ACE_WRITE_OWNER|ACE_SYNCHRONIZE)
+/* END CSTYLED */
+
+#define        VSA_ACE                                         0x0010
+#define        VSA_ACECNT                                      0x0020
+#define        VSA_ACE_ALLTYPES                                0x0040
+#define        VSA_ACE_ACLFLAGS                                0x0080
+
+#endif /* _SPL_ACL_H */
diff --git a/include/spl/sys/atomic.h b/include/spl/sys/atomic.h
new file mode 100644 (file)
index 0000000..51b5479
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_ATOMIC_H
+#define        _SPL_ATOMIC_H
+
+#include <linux/module.h>
+#include <linux/spinlock.h>
+#include <sys/types.h>
+
+/*
+ * Map the atomic_* functions to the Linux counterparts.  This relies on the
+ * fact that the atomic types are internally really a uint32 or uint64.  If
+ * this were to change an alternate approach would be needed.
+ *
+ * N.B. Due to the limitations of the original API atomicity is not strictly
+ * preserved when using the 64-bit functions on a 32-bit system.  In order
+ * to support this all consumers would need to be updated to use the Linux
+ * provided atomic_t and atomic64_t types.
+ */
+#define        atomic_inc_32(v)        atomic_inc((atomic_t *)(v))
+#define        atomic_dec_32(v)        atomic_dec((atomic_t *)(v))
+#define        atomic_add_32(v, i)     atomic_add((i), (atomic_t *)(v))
+#define        atomic_sub_32(v, i)     atomic_sub((i), (atomic_t *)(v))
+#define        atomic_inc_32_nv(v)     atomic_inc_return((atomic_t *)(v))
+#define        atomic_dec_32_nv(v)     atomic_dec_return((atomic_t *)(v))
+#define        atomic_add_32_nv(v, i)  atomic_add_return((i), (atomic_t *)(v))
+#define        atomic_sub_32_nv(v, i)  atomic_sub_return((i), (atomic_t *)(v))
+#define        atomic_cas_32(v, x, y)  atomic_cmpxchg((atomic_t *)(v), x, y)
+#define        atomic_swap_32(v, x)    atomic_xchg((atomic_t *)(v), x)
+#define        atomic_inc_64(v)        atomic64_inc((atomic64_t *)(v))
+#define        atomic_dec_64(v)        atomic64_dec((atomic64_t *)(v))
+#define        atomic_add_64(v, i)     atomic64_add((i), (atomic64_t *)(v))
+#define        atomic_sub_64(v, i)     atomic64_sub((i), (atomic64_t *)(v))
+#define        atomic_inc_64_nv(v)     atomic64_inc_return((atomic64_t *)(v))
+#define        atomic_dec_64_nv(v)     atomic64_dec_return((atomic64_t *)(v))
+#define        atomic_add_64_nv(v, i)  atomic64_add_return((i), (atomic64_t *)(v))
+#define        atomic_sub_64_nv(v, i)  atomic64_sub_return((i), (atomic64_t *)(v))
+#define        atomic_cas_64(v, x, y)  atomic64_cmpxchg((atomic64_t *)(v), x, y)
+#define        atomic_swap_64(v, x)    atomic64_xchg((atomic64_t *)(v), x)
+
+#ifdef _LP64
+static __inline__ void *
+atomic_cas_ptr(volatile void *target,  void *cmp, void *newval)
+{
+       return ((void *)atomic_cas_64((volatile uint64_t *)target,
+           (uint64_t)cmp, (uint64_t)newval));
+}
+#else /* _LP64 */
+static __inline__ void *
+atomic_cas_ptr(volatile void *target,  void *cmp, void *newval)
+{
+       return ((void *)atomic_cas_32((volatile uint32_t *)target,
+           (uint32_t)cmp, (uint32_t)newval));
+}
+#endif /* _LP64 */
+
+#endif  /* _SPL_ATOMIC_H */
diff --git a/include/spl/sys/byteorder.h b/include/spl/sys/byteorder.h
new file mode 100644 (file)
index 0000000..4777079
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_BYTEORDER_H
+#define        _SPL_BYTEORDER_H
+
+#include <asm/byteorder.h>
+#include <sys/isa_defs.h>
+
+#define        BSWAP_8(x)      ((x) & 0xff)
+#define        BSWAP_16(x)     ((BSWAP_8(x) << 8) | BSWAP_8((x) >> 8))
+#define        BSWAP_32(x)     ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16))
+#define        BSWAP_64(x)     ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32))
+
+#define        LE_16(x)        cpu_to_le16(x)
+#define        LE_32(x)        cpu_to_le32(x)
+#define        LE_64(x)        cpu_to_le64(x)
+#define        BE_16(x)        cpu_to_be16(x)
+#define        BE_32(x)        cpu_to_be32(x)
+#define        BE_64(x)        cpu_to_be64(x)
+
+#define        BE_IN8(xa) \
+       *((uint8_t *)(xa))
+
+#define        BE_IN16(xa) \
+       (((uint16_t)BE_IN8(xa) << 8) | BE_IN8((uint8_t *)(xa)+1))
+
+#define        BE_IN32(xa) \
+       (((uint32_t)BE_IN16(xa) << 16) | BE_IN16((uint8_t *)(xa)+2))
+
+#ifdef _BIG_ENDIAN
+static __inline__ uint64_t
+htonll(uint64_t n)
+{
+       return (n);
+}
+
+static __inline__ uint64_t
+ntohll(uint64_t n)
+{
+       return (n);
+}
+#else
+static __inline__ uint64_t
+htonll(uint64_t n)
+{
+       return ((((uint64_t)htonl(n)) << 32) + htonl(n >> 32));
+}
+
+static __inline__ uint64_t
+ntohll(uint64_t n)
+{
+       return ((((uint64_t)ntohl(n)) << 32) + ntohl(n >> 32));
+}
+#endif
+
+#endif /* SPL_BYTEORDER_H */
diff --git a/include/spl/sys/callb.h b/include/spl/sys/callb.h
new file mode 100644 (file)
index 0000000..f1826bf
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_CALLB_H
+#define        _SPL_CALLB_H
+
+#include <linux/module.h>
+#include <sys/mutex.h>
+
+#define        CALLB_CPR_ASSERT(cp)            ASSERT(MUTEX_HELD((cp)->cc_lockp));
+
+typedef struct callb_cpr {
+       kmutex_t        *cc_lockp;
+} callb_cpr_t;
+
+#define        CALLB_CPR_INIT(cp, lockp, func, name)   {               \
+       (cp)->cc_lockp = lockp;                                 \
+}
+
+#define        CALLB_CPR_SAFE_BEGIN(cp) {                              \
+       CALLB_CPR_ASSERT(cp);                                   \
+}
+
+#define        CALLB_CPR_SAFE_END(cp, lockp) {                         \
+       CALLB_CPR_ASSERT(cp);                                   \
+}
+
+#define        CALLB_CPR_EXIT(cp) {                                    \
+       ASSERT(MUTEX_HELD((cp)->cc_lockp));                     \
+       mutex_exit((cp)->cc_lockp);                             \
+}
+
+#endif  /* _SPL_CALLB_H */
diff --git a/include/spl/sys/callo.h b/include/spl/sys/callo.h
new file mode 100644 (file)
index 0000000..c43ac92
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ *  Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_CALLO_H
+#define        _SPL_CALLO_H
+
+/*
+ * Callout flags:
+ *
+ * CALLOUT_FLAG_ROUNDUP
+ *      Roundup the expiration time to the next resolution boundary.
+ *      If this flag is not specified, the expiration time is rounded down.
+ * CALLOUT_FLAG_ABSOLUTE
+ *      Normally, the expiration passed to the timeout API functions is an
+ *      expiration interval. If this flag is specified, then it is
+ *      interpreted as the expiration time itself.
+ * CALLOUT_FLAG_HRESTIME
+ *      Normally, callouts are not affected by changes to system time
+ *      (hrestime). This flag is used to create a callout that is affected
+ *      by system time. If system time changes, these timers must be
+ *      handled in a special way (see callout.c). These are used by condition
+ *      variables and LWP timers that need this behavior.
+ * CALLOUT_FLAG_32BIT
+ *      Legacy interfaces timeout() and realtime_timeout() pass this flag
+ *      to timeout_generic() to indicate that a 32-bit ID should be allocated.
+ */
+#define        CALLOUT_FLAG_ROUNDUP            0x1
+#define        CALLOUT_FLAG_ABSOLUTE           0x2
+#define        CALLOUT_FLAG_HRESTIME           0x4
+#define        CALLOUT_FLAG_32BIT              0x8
+
+#endif  /* _SPL_CALLB_H */
diff --git a/include/spl/sys/cmn_err.h b/include/spl/sys/cmn_err.h
new file mode 100644 (file)
index 0000000..be57358
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_CMN_ERR_H
+#define        _SPL_CMN_ERR_H
+
+#include <stdarg.h>
+
+#define        CE_CONT         0 /* continuation */
+#define        CE_NOTE         1 /* notice */
+#define        CE_WARN         2 /* warning */
+#define        CE_PANIC        3 /* panic */
+#define        CE_IGNORE       4 /* print nothing */
+
+extern void cmn_err(int, const char *, ...);
+extern void vcmn_err(int, const char *, va_list);
+extern void vpanic(const char *, va_list);
+
+#define        fm_panic        panic
+
+#endif /* SPL_CMN_ERR_H */
diff --git a/include/spl/sys/condvar.h b/include/spl/sys/condvar.h
new file mode 100644 (file)
index 0000000..1d47cdd
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_CONDVAR_H
+#define        _SPL_CONDVAR_H
+
+#include <linux/module.h>
+#include <sys/kmem.h>
+#include <sys/mutex.h>
+#include <sys/callo.h>
+#include <sys/wait.h>
+
+/*
+ * The kcondvar_t struct is protected by mutex taken externally before
+ * calling any of the wait/signal funs, and passed into the wait funs.
+ */
+#define        CV_MAGIC                        0x346545f4
+#define        CV_DESTROY                      0x346545f5
+
+typedef struct {
+       int cv_magic;
+       spl_wait_queue_head_t cv_event;
+       spl_wait_queue_head_t cv_destroy;
+       atomic_t cv_refs;
+       atomic_t cv_waiters;
+       kmutex_t *cv_mutex;
+} kcondvar_t;
+
+typedef enum { CV_DEFAULT = 0, CV_DRIVER } kcv_type_t;
+
+extern void __cv_init(kcondvar_t *, char *, kcv_type_t, void *);
+extern void __cv_destroy(kcondvar_t *);
+extern void __cv_wait(kcondvar_t *, kmutex_t *);
+extern void __cv_wait_io(kcondvar_t *, kmutex_t *);
+extern void __cv_wait_sig(kcondvar_t *, kmutex_t *);
+extern clock_t __cv_timedwait(kcondvar_t *, kmutex_t *, clock_t);
+extern clock_t __cv_timedwait_io(kcondvar_t *, kmutex_t *, clock_t);
+extern clock_t __cv_timedwait_sig(kcondvar_t *, kmutex_t *, clock_t);
+extern clock_t cv_timedwait_hires(kcondvar_t *, kmutex_t *, hrtime_t,
+    hrtime_t res, int flag);
+extern clock_t cv_timedwait_sig_hires(kcondvar_t *, kmutex_t *, hrtime_t,
+    hrtime_t res, int flag);
+extern void __cv_signal(kcondvar_t *);
+extern void __cv_broadcast(kcondvar_t *c);
+
+#define        cv_init(cvp, name, type, arg)           __cv_init(cvp, name, type, arg)
+#define        cv_destroy(cvp)                         __cv_destroy(cvp)
+#define        cv_wait(cvp, mp)                        __cv_wait(cvp, mp)
+#define        cv_wait_io(cvp, mp)                     __cv_wait_io(cvp, mp)
+#define        cv_wait_sig(cvp, mp)                    __cv_wait_sig(cvp, mp)
+#define        cv_wait_interruptible(cvp, mp)          cv_wait_sig(cvp, mp)
+#define        cv_timedwait(cvp, mp, t)                __cv_timedwait(cvp, mp, t)
+#define        cv_timedwait_io(cvp, mp, t)             __cv_timedwait_io(cvp, mp, t)
+#define        cv_timedwait_sig(cvp, mp, t)            __cv_timedwait_sig(cvp, mp, t)
+#define        cv_timedwait_interruptible(cvp, mp, t)  cv_timedwait_sig(cvp, mp, t)
+#define        cv_signal(cvp)                          __cv_signal(cvp)
+#define        cv_broadcast(cvp)                       __cv_broadcast(cvp)
+
+#endif /* _SPL_CONDVAR_H */
diff --git a/include/spl/sys/console.h b/include/spl/sys/console.h
new file mode 100644 (file)
index 0000000..3469cb7
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef        _SPL_CONSOLE_H
+#define        _SPL_CONSOLE_H
+
+void
+console_vprintf(const char *fmt, va_list args)
+{
+       vprintk(fmt, args);
+}
+
+void
+console_printf(const char *fmt, ...)
+{
+       va_list args;
+
+       va_start(args, fmt);
+       console_vprintf(fmt, args);
+       va_end(args);
+}
+
+#endif /* _SPL_CONSOLE_H */
diff --git a/include/spl/sys/cred.h b/include/spl/sys/cred.h
new file mode 100644 (file)
index 0000000..fd06339
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_CRED_H
+#define        _SPL_CRED_H
+
+#include <linux/module.h>
+#include <linux/cred.h>
+#include <sys/types.h>
+#include <sys/vfs.h>
+
+typedef struct cred cred_t;
+
+#define        kcred           ((cred_t *)(init_task.cred))
+#define        CRED()          ((cred_t *)current_cred())
+
+/* Linux 4.9 API change, GROUP_AT was removed */
+#ifndef GROUP_AT
+#define        GROUP_AT(gi, i) ((gi)->gid[i])
+#endif
+
+#ifdef HAVE_KUIDGID_T
+
+#define        KUID_TO_SUID(x)         (__kuid_val(x))
+#define        KGID_TO_SGID(x)         (__kgid_val(x))
+#define        SUID_TO_KUID(x)         (KUIDT_INIT(x))
+#define        SGID_TO_KGID(x)         (KGIDT_INIT(x))
+#define        KGIDP_TO_SGIDP(x)       (&(x)->val)
+
+#else /* HAVE_KUIDGID_T */
+
+#define        KUID_TO_SUID(x)         (x)
+#define        KGID_TO_SGID(x)         (x)
+#define        SUID_TO_KUID(x)         (x)
+#define        SGID_TO_KGID(x)         (x)
+#define        KGIDP_TO_SGIDP(x)       (x)
+
+#endif /* HAVE_KUIDGID_T */
+
+extern void crhold(cred_t *cr);
+extern void crfree(cred_t *cr);
+extern uid_t crgetuid(const cred_t *cr);
+extern uid_t crgetruid(const cred_t *cr);
+extern uid_t crgetsuid(const cred_t *cr);
+extern uid_t crgetfsuid(const cred_t *cr);
+extern gid_t crgetgid(const cred_t *cr);
+extern gid_t crgetrgid(const cred_t *cr);
+extern gid_t crgetsgid(const cred_t *cr);
+extern gid_t crgetfsgid(const cred_t *cr);
+extern int crgetngroups(const cred_t *cr);
+extern gid_t *crgetgroups(const cred_t *cr);
+extern int groupmember(gid_t gid, const cred_t *cr);
+
+#endif  /* _SPL_CRED_H */
diff --git a/include/spl/sys/ctype.h b/include/spl/sys/ctype.h
new file mode 100644 (file)
index 0000000..18beb1d
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_CTYPE_H
+#define        _SPL_CTYPE_H
+
+#include <linux/ctype.h>
+
+#endif /* SPL_CTYPE_H */
diff --git a/include/spl/sys/debug.h b/include/spl/sys/debug.h
new file mode 100644 (file)
index 0000000..a4a4580
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Available Solaris debug functions.  All of the ASSERT() macros will be
+ * compiled out when NDEBUG is defined, this is the default behavior for
+ * the SPL.  To enable assertions use the --enable-debug with configure.
+ * The VERIFY() functions are never compiled out and cannot be disabled.
+ *
+ * PANIC()     - Panic the node and print message.
+ * ASSERT()    - Assert X is true, if not panic.
+ * ASSERTV()   - Wraps a variable declaration which is only used by ASSERT().
+ * ASSERT3B()  - Assert boolean X OP Y is true, if not panic.
+ * ASSERT3S()  - Assert signed X OP Y is true, if not panic.
+ * ASSERT3U()  - Assert unsigned X OP Y is true, if not panic.
+ * ASSERT3P()  - Assert pointer X OP Y is true, if not panic.
+ * ASSERT0()   - Assert value is zero, if not panic.
+ * VERIFY()    - Verify X is true, if not panic.
+ * VERIFY3B()  - Verify boolean X OP Y is true, if not panic.
+ * VERIFY3S()  - Verify signed X OP Y is true, if not panic.
+ * VERIFY3U()  - Verify unsigned X OP Y is true, if not panic.
+ * VERIFY3P()  - Verify pointer X OP Y is true, if not panic.
+ * VERIFY0()   - Verify value is zero, if not panic.
+ */
+
+#ifndef _SPL_DEBUG_H
+#define        _SPL_DEBUG_H
+
+/*
+ * Common DEBUG functionality.
+ */
+int spl_panic(const char *file, const char *func, int line,
+    const char *fmt, ...);
+void spl_dumpstack(void);
+
+/* BEGIN CSTYLED */
+#define        PANIC(fmt, a...)                                                \
+       spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)
+
+#define        VERIFY(cond)                                                    \
+       (void) (unlikely(!(cond)) &&                                    \
+           spl_panic(__FILE__, __FUNCTION__, __LINE__,                 \
+           "%s", "VERIFY(" #cond ") failed\n"))
+
+#define        VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST)  do {            \
+               TYPE _verify3_left = (TYPE)(LEFT);                              \
+               TYPE _verify3_right = (TYPE)(RIGHT);                            \
+               if (!(_verify3_left OP _verify3_right))                 \
+                   spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
+                   "VERIFY3(" #LEFT " " #OP " " #RIGHT ") "            \
+                   "failed (" FMT " " #OP " " FMT ")\n",               \
+                   CAST (_verify3_left), CAST (_verify3_right));       \
+       } while (0)
+
+#define        VERIFY3B(x,y,z) VERIFY3_IMPL(x, y, z, boolean_t, "%d", (boolean_t))
+#define        VERIFY3S(x,y,z) VERIFY3_IMPL(x, y, z, int64_t, "%lld", (long long))
+#define        VERIFY3U(x,y,z) VERIFY3_IMPL(x, y, z, uint64_t, "%llu",         \
+                                   (unsigned long long))
+#define        VERIFY3P(x,y,z) VERIFY3_IMPL(x, y, z, uintptr_t, "%p", (void *))
+#define        VERIFY0(x)      VERIFY3_IMPL(0, ==, x, int64_t, "%lld", (long long))
+
+#define        CTASSERT_GLOBAL(x)              _CTASSERT(x, __LINE__)
+#define        CTASSERT(x)                     { _CTASSERT(x, __LINE__); }
+#define        _CTASSERT(x, y)                 __CTASSERT(x, y)
+#define        __CTASSERT(x, y)                                                \
+       typedef char __attribute__ ((unused))                           \
+       __compile_time_assertion__ ## y[(x) ? 1 : -1]
+
+/*
+ * Debugging disabled (--disable-debug)
+ */
+#ifdef NDEBUG
+
+#define        SPL_DEBUG_STR           ""
+#define        ASSERT(x)               ((void)0)
+#define        ASSERTV(x)
+#define        ASSERT3B(x,y,z)         ((void)0)
+#define        ASSERT3S(x,y,z)         ((void)0)
+#define        ASSERT3U(x,y,z)         ((void)0)
+#define        ASSERT3P(x,y,z)         ((void)0)
+#define        ASSERT0(x)              ((void)0)
+#define        IMPLY(A, B)             ((void)0)
+#define        EQUIV(A, B)             ((void)0)
+
+/*
+ * Debugging enabled (--enable-debug)
+ */
+#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)
+#define        ASSERT3S(x,y,z)         VERIFY3S(x, y, z)
+#define        ASSERT3U(x,y,z)         VERIFY3U(x, y, z)
+#define        ASSERT3P(x,y,z)         VERIFY3P(x, y, z)
+#define        ASSERT0(x)              VERIFY0(x)
+#define        IMPLY(A, B) \
+       ((void)(((!(A)) || (B)) || \
+           spl_panic(__FILE__, __FUNCTION__, __LINE__, \
+           "(" #A ") implies (" #B ")")))
+#define        EQUIV(A, B) \
+       ((void)((!!(A) == !!(B)) || \
+           spl_panic(__FILE__, __FUNCTION__, __LINE__, \
+           "(" #A ") is equivalent to (" #B ")")))
+/* END CSTYLED */
+
+#endif /* NDEBUG */
+
+#endif /* SPL_DEBUG_H */
diff --git a/include/spl/sys/disp.h b/include/spl/sys/disp.h
new file mode 100644 (file)
index 0000000..413b623
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_DISP_H
+#define        _SPL_DISP_H
+
+#include <linux/preempt.h>
+
+#define        kpreempt(unused)        schedule()
+#define        kpreempt_disable()      preempt_disable()
+#define        kpreempt_enable()       preempt_enable()
+
+#endif /* SPL_DISP_H */
diff --git a/include/spl/sys/dkio.h b/include/spl/sys/dkio.h
new file mode 100644 (file)
index 0000000..49f166a
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_DKIO_H
+#define        _SPL_DKIO_H
+
+#define        DFL_SZ(num_exts) \
+       (sizeof (dkioc_free_list_t) + (num_exts - 1) * 16)
+
+#define        DKIOC           (0x04 << 8)
+#define        DKIOCFLUSHWRITECACHE    (DKIOC|34)      /* flush cache to phys medium */
+
+/*
+ * ioctl to free space (e.g. SCSI UNMAP) off a disk.
+ * Pass a dkioc_free_list_t containing a list of extents to be freed.
+ */
+#define        DKIOCFREE       (DKIOC|50)
+
+#endif /* _SPL_DKIO_H */
diff --git a/include/spl/sys/dkioc_free_util.h b/include/spl/sys/dkioc_free_util.h
new file mode 100644 (file)
index 0000000..d519b2f
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_DKIOC_UTIL_H
+#define        _SPL_DKIOC_UTIL_H
+
+#include <sys/dkio.h>
+
+typedef struct dkioc_free_list_ext_s {
+       uint64_t                dfle_start;
+       uint64_t                dfle_length;
+} dkioc_free_list_ext_t;
+
+typedef struct dkioc_free_list_s {
+       uint64_t                dfl_flags;
+       uint64_t                dfl_num_exts;
+       int64_t                 dfl_offset;
+
+       /*
+        * N.B. this is only an internal debugging API! This is only called
+        * from debug builds of sd for pre-release checking. Remove before GA!
+        */
+       void                    (*dfl_ck_func)(uint64_t, uint64_t, void *);
+       void                    *dfl_ck_arg;
+
+       dkioc_free_list_ext_t   dfl_exts[1];
+} dkioc_free_list_t;
+
+static inline void dfl_free(dkioc_free_list_t *dfl) {
+       vmem_free(dfl, DFL_SZ(dfl->dfl_num_exts));
+}
+
+static inline dkioc_free_list_t *dfl_alloc(uint64_t dfl_num_exts, int flags) {
+       return (vmem_zalloc(DFL_SZ(dfl_num_exts), flags));
+}
+
+#endif /* _SPL_DKIOC_UTIL_H */
diff --git a/include/spl/sys/fcntl.h b/include/spl/sys/fcntl.h
new file mode 100644 (file)
index 0000000..3faa5da
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ *  Copyright (C) 2010 Lawrence Livermore National Security, LLC.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_FCNTL_H
+#define        _SPL_FCNTL_H
+
+#include <asm/fcntl.h>
+
+#define        F_FREESP 11
+
+#ifdef CONFIG_64BIT
+typedef struct flock flock64_t;
+#else
+typedef struct flock64 flock64_t;
+#endif /* CONFIG_64BIT */
+
+#endif /* _SPL_FCNTL_H */
diff --git a/include/spl/sys/file.h b/include/spl/sys/file.h
new file mode 100644 (file)
index 0000000..05dbc08
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_FILE_H
+#define        _SPL_FILE_H
+
+#define        FIGNORECASE             0x00080000
+#define        FKIOCTL                 0x80000000
+#define        ED_CASE_CONFLICT        0x10
+
+#ifdef HAVE_INODE_LOCK_SHARED
+#define        spl_inode_lock(ip)              inode_lock(ip)
+#define        spl_inode_unlock(ip)            inode_unlock(ip)
+#define        spl_inode_lock_shared(ip)       inode_lock_shared(ip)
+#define        spl_inode_unlock_shared(ip)     inode_unlock_shared(ip)
+#define        spl_inode_trylock(ip)           inode_trylock(ip)
+#define        spl_inode_trylock_shared(ip)    inode_trylock_shared(ip)
+#define        spl_inode_is_locked(ip)         inode_is_locked(ip)
+#define        spl_inode_lock_nested(ip, s)    inode_lock_nested(ip, s)
+#else
+#define        spl_inode_lock(ip)              mutex_lock(&(ip)->i_mutex)
+#define        spl_inode_unlock(ip)            mutex_unlock(&(ip)->i_mutex)
+#define        spl_inode_lock_shared(ip)       mutex_lock(&(ip)->i_mutex)
+#define        spl_inode_unlock_shared(ip)     mutex_unlock(&(ip)->i_mutex)
+#define        spl_inode_trylock(ip)           mutex_trylock(&(ip)->i_mutex)
+#define        spl_inode_trylock_shared(ip)    mutex_trylock(&(ip)->i_mutex)
+#define        spl_inode_is_locked(ip)         mutex_is_locked(&(ip)->i_mutex)
+#define        spl_inode_lock_nested(ip, s)    mutex_lock_nested(&(ip)->i_mutex, s)
+#endif
+
+#endif /* SPL_FILE_H */
diff --git a/include/spl/sys/inttypes.h b/include/spl/sys/inttypes.h
new file mode 100644 (file)
index 0000000..92e7620
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_INTTYPES_H
+#define        _SPL_INTTYPES_H
+
+#endif /* SPL_INTTYPES_H */
diff --git a/include/spl/sys/isa_defs.h b/include/spl/sys/isa_defs.h
new file mode 100644 (file)
index 0000000..089ae0f
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef        _SPL_ISA_DEFS_H
+#define        _SPL_ISA_DEFS_H
+
+/* x86_64 arch specific defines */
+#if defined(__x86_64) || defined(__x86_64__)
+
+#if !defined(__x86_64)
+#define        __x86_64
+#endif
+
+#if !defined(__amd64)
+#define        __amd64
+#endif
+
+#if !defined(__x86)
+#define        __x86
+#endif
+
+#if !defined(_LP64)
+#define        _LP64
+#endif
+
+#define        _ALIGNMENT_REQUIRED     1
+
+
+/* i386 arch specific defines */
+#elif defined(__i386) || defined(__i386__)
+
+#if !defined(__i386)
+#define        __i386
+#endif
+
+#if !defined(__x86)
+#define        __x86
+#endif
+
+#if !defined(_ILP32)
+#define        _ILP32
+#endif
+
+#define        _ALIGNMENT_REQUIRED     0
+
+/* powerpc (ppc64) arch specific defines */
+#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__)
+
+#if !defined(__powerpc)
+#define        __powerpc
+#endif
+
+#if !defined(__powerpc__)
+#define        __powerpc__
+#endif
+
+#if defined(__powerpc64__)
+#if !defined(_LP64)
+#define        _LP64
+#endif
+#else
+#if !defined(_ILP32)
+#define        _ILP32
+#endif
+#endif
+
+/*
+ * Illumos doesn't define _ALIGNMENT_REQUIRED for PPC, so default to 1
+ * out of paranoia.
+ */
+#define        _ALIGNMENT_REQUIRED     1
+
+/* arm arch specific defines */
+#elif defined(__arm) || defined(__arm__) || defined(__aarch64__)
+
+#if !defined(__arm)
+#define        __arm
+#endif
+
+#if !defined(__arm__)
+#define        __arm__
+#endif
+
+#if defined(__aarch64__)
+#if !defined(_LP64)
+#define        _LP64
+#endif
+#else
+#if !defined(_ILP32)
+#define        _ILP32
+#endif
+#endif
+
+#if defined(__ARMEL__) || defined(__AARCH64EL__)
+#define        _LITTLE_ENDIAN
+#else
+#define        _BIG_ENDIAN
+#endif
+
+/*
+ * Illumos doesn't define _ALIGNMENT_REQUIRED for ARM, so default to 1
+ * out of paranoia.
+ */
+#define        _ALIGNMENT_REQUIRED     1
+
+/* sparc arch specific defines */
+#elif defined(__sparc) || defined(__sparc__)
+
+#if !defined(__sparc)
+#define        __sparc
+#endif
+
+#if !defined(__sparc__)
+#define        __sparc__
+#endif
+
+#if defined(__arch64__)
+#if !defined(_LP64)
+#define        _LP64
+#endif
+#else
+#if !defined(_ILP32)
+#define        _ILP32
+#endif
+#endif
+
+#define        _BIG_ENDIAN
+#define        _SUNOS_VTOC_16
+#define        _ALIGNMENT_REQUIRED     1
+
+/* s390 arch specific defines */
+#elif defined(__s390__)
+#if defined(__s390x__)
+#if !defined(_LP64)
+#define        _LP64
+#endif
+#else
+#if !defined(_ILP32)
+#define        _ILP32
+#endif
+#endif
+
+#define        _BIG_ENDIAN
+
+/*
+ * Illumos doesn't define _ALIGNMENT_REQUIRED for s390, so default to 1
+ * out of paranoia.
+ */
+#define        _ALIGNMENT_REQUIRED     1
+
+/* MIPS arch specific defines */
+#elif defined(__mips__)
+
+#if defined(__MIPSEB__)
+#define        _BIG_ENDIAN
+#elif defined(__MIPSEL__)
+#define        _LITTLE_ENDIAN
+#else
+#error MIPS no endian specified
+#endif
+
+#ifndef _LP64
+#define        _ILP32
+#endif
+
+#define        _SUNOS_VTOC_16
+
+/*
+ * Illumos doesn't define _ALIGNMENT_REQUIRED for MIPS, so default to 1
+ * out of paranoia.
+ */
+#define        _ALIGNMENT_REQUIRED     1
+
+#else
+/*
+ * Currently supported:
+ * x86_64, i386, arm, powerpc, s390, sparc, and mips
+ */
+#error "Unsupported ISA type"
+#endif
+
+#if defined(_ILP32) && defined(_LP64)
+#error "Both _ILP32 and _LP64 are defined"
+#endif
+
+#if !defined(_ILP32) && !defined(_LP64)
+#error "Neither _ILP32 or _LP64 are defined"
+#endif
+
+#include <sys/byteorder.h>
+
+#if defined(__LITTLE_ENDIAN) && !defined(_LITTLE_ENDIAN)
+#define        _LITTLE_ENDIAN __LITTLE_ENDIAN
+#endif
+
+#if defined(__BIG_ENDIAN) && !defined(_BIG_ENDIAN)
+#define        _BIG_ENDIAN __BIG_ENDIAN
+#endif
+
+#if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
+#error "Both _LITTLE_ENDIAN and _BIG_ENDIAN are defined"
+#endif
+
+#if !defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
+#error "Neither _LITTLE_ENDIAN or _BIG_ENDIAN are defined"
+#endif
+
+#endif /* _SPL_ISA_DEFS_H */
diff --git a/include/spl/sys/kmem.h b/include/spl/sys/kmem.h
new file mode 100644 (file)
index 0000000..d6b4285
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_KMEM_H
+#define        _SPL_KMEM_H
+
+#include <sys/debug.h>
+#include <linux/slab.h>
+#include <linux/sched.h>
+
+extern int kmem_debugging(void);
+extern char *kmem_vasprintf(const char *fmt, va_list ap);
+extern char *kmem_asprintf(const char *fmt, ...);
+extern char *strdup(const char *str);
+extern void strfree(char *str);
+
+/*
+ * Memory allocation interfaces
+ */
+#define        KM_SLEEP        0x0000  /* can block for memory; success guaranteed */
+#define        KM_NOSLEEP      0x0001  /* cannot block for memory; may fail */
+#define        KM_PUSHPAGE     0x0004  /* can block for memory; may use reserve */
+#define        KM_ZERO         0x1000  /* zero the allocation */
+#define        KM_VMEM         0x2000  /* caller is vmem_* wrapper */
+
+#define        KM_PUBLIC_MASK  (KM_SLEEP | KM_NOSLEEP | KM_PUSHPAGE)
+
+static int spl_fstrans_check(void);
+
+/*
+ * Convert a KM_* flags mask to its Linux GFP_* counterpart.  The conversion
+ * function is context aware which means that KM_SLEEP allocations can be
+ * safely used in syncing contexts which have set PF_FSTRANS.
+ */
+static inline gfp_t
+kmem_flags_convert(int flags)
+{
+       gfp_t lflags = __GFP_NOWARN | __GFP_COMP;
+
+       if (flags & KM_NOSLEEP) {
+               lflags |= GFP_ATOMIC | __GFP_NORETRY;
+       } else {
+               lflags |= GFP_KERNEL;
+               if (spl_fstrans_check())
+                       lflags &= ~(__GFP_IO|__GFP_FS);
+       }
+
+       if (flags & KM_PUSHPAGE)
+               lflags |= __GFP_HIGH;
+
+       if (flags & KM_ZERO)
+               lflags |= __GFP_ZERO;
+
+       return (lflags);
+}
+
+typedef struct {
+       struct task_struct *fstrans_thread;
+       unsigned int saved_flags;
+} fstrans_cookie_t;
+
+/*
+ * Introduced in Linux 3.9, however this cannot be solely relied on before
+ * Linux 3.18 as it doesn't turn off __GFP_FS as it should.
+ */
+#ifdef PF_MEMALLOC_NOIO
+#define        __SPL_PF_MEMALLOC_NOIO (PF_MEMALLOC_NOIO)
+#else
+#define        __SPL_PF_MEMALLOC_NOIO (0)
+#endif
+
+/*
+ * PF_FSTRANS is removed from Linux 4.12
+ */
+#ifdef PF_FSTRANS
+#define        __SPL_PF_FSTRANS (PF_FSTRANS)
+#else
+#define        __SPL_PF_FSTRANS (0)
+#endif
+
+#define        SPL_FSTRANS (__SPL_PF_FSTRANS|__SPL_PF_MEMALLOC_NOIO)
+
+static inline fstrans_cookie_t
+spl_fstrans_mark(void)
+{
+       fstrans_cookie_t cookie;
+
+       BUILD_BUG_ON(SPL_FSTRANS == 0);
+
+       cookie.fstrans_thread = current;
+       cookie.saved_flags = current->flags & SPL_FSTRANS;
+       current->flags |= SPL_FSTRANS;
+
+       return (cookie);
+}
+
+static inline void
+spl_fstrans_unmark(fstrans_cookie_t cookie)
+{
+       ASSERT3P(cookie.fstrans_thread, ==, current);
+       ASSERT((current->flags & SPL_FSTRANS) == SPL_FSTRANS);
+
+       current->flags &= ~SPL_FSTRANS;
+       current->flags |= cookie.saved_flags;
+}
+
+static inline int
+spl_fstrans_check(void)
+{
+       return (current->flags & SPL_FSTRANS);
+}
+
+/*
+ * specifically used to check PF_FSTRANS flag, cannot be relied on for
+ * checking spl_fstrans_mark().
+ */
+static inline int
+__spl_pf_fstrans_check(void)
+{
+       return (current->flags & __SPL_PF_FSTRANS);
+}
+
+#ifdef HAVE_ATOMIC64_T
+#define        kmem_alloc_used_add(size)       atomic64_add(size, &kmem_alloc_used)
+#define        kmem_alloc_used_sub(size)       atomic64_sub(size, &kmem_alloc_used)
+#define        kmem_alloc_used_read()          atomic64_read(&kmem_alloc_used)
+#define        kmem_alloc_used_set(size)       atomic64_set(&kmem_alloc_used, size)
+extern atomic64_t kmem_alloc_used;
+extern unsigned long long kmem_alloc_max;
+#else  /* HAVE_ATOMIC64_T */
+#define        kmem_alloc_used_add(size)       atomic_add(size, &kmem_alloc_used)
+#define        kmem_alloc_used_sub(size)       atomic_sub(size, &kmem_alloc_used)
+#define        kmem_alloc_used_read()          atomic_read(&kmem_alloc_used)
+#define        kmem_alloc_used_set(size)       atomic_set(&kmem_alloc_used, size)
+extern atomic_t kmem_alloc_used;
+extern unsigned long long kmem_alloc_max;
+#endif /* HAVE_ATOMIC64_T */
+
+extern unsigned int spl_kmem_alloc_warn;
+extern unsigned int spl_kmem_alloc_max;
+
+#define        kmem_alloc(sz, fl)      spl_kmem_alloc((sz), (fl), __func__, __LINE__)
+#define        kmem_zalloc(sz, fl)     spl_kmem_zalloc((sz), (fl), __func__, __LINE__)
+#define        kmem_free(ptr, sz)      spl_kmem_free((ptr), (sz))
+
+extern void *spl_kmem_alloc(size_t sz, int fl, const char *func, int line);
+extern void *spl_kmem_zalloc(size_t sz, int fl, const char *func, int line);
+extern void spl_kmem_free(const void *ptr, size_t sz);
+
+/*
+ * The following functions are only available for internal use.
+ */
+extern void *spl_kmem_alloc_impl(size_t size, int flags, int node);
+extern void *spl_kmem_alloc_debug(size_t size, int flags, int node);
+extern void *spl_kmem_alloc_track(size_t size, int flags,
+    const char *func, int line, int node);
+extern void spl_kmem_free_impl(const void *buf, size_t size);
+extern void spl_kmem_free_debug(const void *buf, size_t size);
+extern void spl_kmem_free_track(const void *buf, size_t size);
+
+extern int spl_kmem_init(void);
+extern void spl_kmem_fini(void);
+
+#endif /* _SPL_KMEM_H */
diff --git a/include/spl/sys/kmem_cache.h b/include/spl/sys/kmem_cache.h
new file mode 100644 (file)
index 0000000..8fa14f6
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_KMEM_CACHE_H
+#define        _SPL_KMEM_CACHE_H
+
+#include <sys/taskq.h>
+
+/*
+ * Slab allocation interfaces.  The SPL slab differs from the standard
+ * Linux SLAB or SLUB primarily in that each cache may be backed by slabs
+ * allocated from the physical or virtal memory address space.  The virtual
+ * slabs allow for good behavior when allocation large objects of identical
+ * size.  This slab implementation also supports both constructors and
+ * destructors which the Linux slab does not.
+ */
+enum {
+       KMC_BIT_NOTOUCH         = 0,    /* Don't update ages */
+       KMC_BIT_NODEBUG         = 1,    /* Default behavior */
+       KMC_BIT_NOMAGAZINE      = 2,    /* XXX: Unsupported */
+       KMC_BIT_NOHASH          = 3,    /* XXX: Unsupported */
+       KMC_BIT_QCACHE          = 4,    /* XXX: Unsupported */
+       KMC_BIT_KMEM            = 5,    /* Use kmem cache */
+       KMC_BIT_VMEM            = 6,    /* Use vmem cache */
+       KMC_BIT_SLAB            = 7,    /* Use Linux slab cache */
+       KMC_BIT_OFFSLAB         = 8,    /* Objects not on slab */
+       KMC_BIT_NOEMERGENCY     = 9,    /* Disable emergency objects */
+       KMC_BIT_DEADLOCKED      = 14,   /* Deadlock detected */
+       KMC_BIT_GROWING         = 15,   /* Growing in progress */
+       KMC_BIT_REAPING         = 16,   /* Reaping in progress */
+       KMC_BIT_DESTROY         = 17,   /* Destroy in progress */
+       KMC_BIT_TOTAL           = 18,   /* Proc handler helper bit */
+       KMC_BIT_ALLOC           = 19,   /* Proc handler helper bit */
+       KMC_BIT_MAX             = 20,   /* Proc handler helper bit */
+};
+
+/* kmem move callback return values */
+typedef enum kmem_cbrc {
+       KMEM_CBRC_YES           = 0,    /* Object moved */
+       KMEM_CBRC_NO            = 1,    /* Object not moved */
+       KMEM_CBRC_LATER         = 2,    /* Object not moved, try again later */
+       KMEM_CBRC_DONT_NEED     = 3,    /* Neither object is needed */
+       KMEM_CBRC_DONT_KNOW     = 4,    /* Object unknown */
+} kmem_cbrc_t;
+
+#define        KMC_NOTOUCH             (1 << KMC_BIT_NOTOUCH)
+#define        KMC_NODEBUG             (1 << KMC_BIT_NODEBUG)
+#define        KMC_NOMAGAZINE          (1 << KMC_BIT_NOMAGAZINE)
+#define        KMC_NOHASH              (1 << KMC_BIT_NOHASH)
+#define        KMC_QCACHE              (1 << KMC_BIT_QCACHE)
+#define        KMC_KMEM                (1 << KMC_BIT_KMEM)
+#define        KMC_VMEM                (1 << KMC_BIT_VMEM)
+#define        KMC_SLAB                (1 << KMC_BIT_SLAB)
+#define        KMC_OFFSLAB             (1 << KMC_BIT_OFFSLAB)
+#define        KMC_NOEMERGENCY         (1 << KMC_BIT_NOEMERGENCY)
+#define        KMC_DEADLOCKED          (1 << KMC_BIT_DEADLOCKED)
+#define        KMC_GROWING             (1 << KMC_BIT_GROWING)
+#define        KMC_REAPING             (1 << KMC_BIT_REAPING)
+#define        KMC_DESTROY             (1 << KMC_BIT_DESTROY)
+#define        KMC_TOTAL               (1 << KMC_BIT_TOTAL)
+#define        KMC_ALLOC               (1 << KMC_BIT_ALLOC)
+#define        KMC_MAX                 (1 << KMC_BIT_MAX)
+
+#define        KMC_REAP_CHUNK          INT_MAX
+#define        KMC_DEFAULT_SEEKS       1
+
+#define        KMC_EXPIRE_AGE          0x1     /* Due to age */
+#define        KMC_EXPIRE_MEM          0x2     /* Due to low memory */
+
+#define        KMC_RECLAIM_ONCE        0x1     /* Force a single shrinker pass */
+
+extern unsigned int spl_kmem_cache_expire;
+extern struct list_head spl_kmem_cache_list;
+extern struct rw_semaphore spl_kmem_cache_sem;
+
+#define        SKM_MAGIC                       0x2e2e2e2e
+#define        SKO_MAGIC                       0x20202020
+#define        SKS_MAGIC                       0x22222222
+#define        SKC_MAGIC                       0x2c2c2c2c
+
+#define        SPL_KMEM_CACHE_DELAY            15      /* Minimum slab release age */
+#define        SPL_KMEM_CACHE_REAP             0       /* Default reap everything */
+#define        SPL_KMEM_CACHE_OBJ_PER_SLAB     8       /* Target objects per slab */
+#define        SPL_KMEM_CACHE_OBJ_PER_SLAB_MIN 1       /* Minimum objects per slab */
+#define        SPL_KMEM_CACHE_ALIGN            8       /* Default object alignment */
+#ifdef _LP64
+#define        SPL_KMEM_CACHE_MAX_SIZE         32      /* Max slab size in MB */
+#else
+#define        SPL_KMEM_CACHE_MAX_SIZE         4       /* Max slab size in MB */
+#endif
+
+#define        SPL_MAX_ORDER                   (MAX_ORDER - 3)
+#define        SPL_MAX_ORDER_NR_PAGES          (1 << (SPL_MAX_ORDER - 1))
+
+#ifdef CONFIG_SLUB
+#define        SPL_MAX_KMEM_CACHE_ORDER        PAGE_ALLOC_COSTLY_ORDER
+#define        SPL_MAX_KMEM_ORDER_NR_PAGES     (1 << (SPL_MAX_KMEM_CACHE_ORDER - 1))
+#else
+#define        SPL_MAX_KMEM_ORDER_NR_PAGES     (KMALLOC_MAX_SIZE >> PAGE_SHIFT)
+#endif
+
+#define        POINTER_IS_VALID(p)             0       /* Unimplemented */
+#define        POINTER_INVALIDATE(pp)                  /* Unimplemented */
+
+typedef int (*spl_kmem_ctor_t)(void *, void *, int);
+typedef void (*spl_kmem_dtor_t)(void *, void *);
+typedef void (*spl_kmem_reclaim_t)(void *);
+
+typedef struct spl_kmem_magazine {
+       uint32_t                skm_magic;      /* Sanity magic */
+       uint32_t                skm_avail;      /* Available objects */
+       uint32_t                skm_size;       /* Magazine size */
+       uint32_t                skm_refill;     /* Batch refill size */
+       struct spl_kmem_cache   *skm_cache;     /* Owned by cache */
+       unsigned long           skm_age;        /* Last cache access */
+       unsigned int            skm_cpu;        /* Owned by cpu */
+       void                    *skm_objs[0];   /* Object pointers */
+} spl_kmem_magazine_t;
+
+typedef struct spl_kmem_obj {
+       uint32_t                sko_magic;      /* Sanity magic */
+       void                    *sko_addr;      /* Buffer address */
+       struct spl_kmem_slab    *sko_slab;      /* Owned by slab */
+       struct list_head        sko_list;       /* Free object list linkage */
+} spl_kmem_obj_t;
+
+typedef struct spl_kmem_slab {
+       uint32_t                sks_magic;      /* Sanity magic */
+       uint32_t                sks_objs;       /* Objects per slab */
+       struct spl_kmem_cache   *sks_cache;     /* Owned by cache */
+       struct list_head        sks_list;       /* Slab list linkage */
+       struct list_head        sks_free_list;  /* Free object list */
+       unsigned long           sks_age;        /* Last modify jiffie */
+       uint32_t                sks_ref;        /* Ref count used objects */
+} spl_kmem_slab_t;
+
+typedef struct spl_kmem_alloc {
+       struct spl_kmem_cache   *ska_cache;     /* Owned by cache */
+       int                     ska_flags;      /* Allocation flags */
+       taskq_ent_t             ska_tqe;        /* Task queue entry */
+} spl_kmem_alloc_t;
+
+typedef struct spl_kmem_emergency {
+       struct rb_node          ske_node;       /* Emergency tree linkage */
+       unsigned long           ske_obj;        /* Buffer address */
+} spl_kmem_emergency_t;
+
+typedef struct spl_kmem_cache {
+       uint32_t                skc_magic;      /* Sanity magic */
+       uint32_t                skc_name_size;  /* Name length */
+       char                    *skc_name;      /* Name string */
+       spl_kmem_magazine_t     **skc_mag;      /* Per-CPU warm cache */
+       uint32_t                skc_mag_size;   /* Magazine size */
+       uint32_t                skc_mag_refill; /* Magazine refill count */
+       spl_kmem_ctor_t         skc_ctor;       /* Constructor */
+       spl_kmem_dtor_t         skc_dtor;       /* Destructor */
+       spl_kmem_reclaim_t      skc_reclaim;    /* Reclaimator */
+       void                    *skc_private;   /* Private data */
+       void                    *skc_vmp;       /* Unused */
+       struct kmem_cache       *skc_linux_cache; /* Linux slab cache if used */
+       unsigned long           skc_flags;      /* Flags */
+       uint32_t                skc_obj_size;   /* Object size */
+       uint32_t                skc_obj_align;  /* Object alignment */
+       uint32_t                skc_slab_objs;  /* Objects per slab */
+       uint32_t                skc_slab_size;  /* Slab size */
+       uint32_t                skc_delay;      /* Slab reclaim interval */
+       uint32_t                skc_reap;       /* Slab reclaim count */
+       atomic_t                skc_ref;        /* Ref count callers */
+       taskqid_t               skc_taskqid;    /* Slab reclaim task */
+       struct list_head        skc_list;       /* List of caches linkage */
+       struct list_head        skc_complete_list; /* Completely alloc'ed */
+       struct list_head        skc_partial_list;  /* Partially alloc'ed */
+       struct rb_root          skc_emergency_tree; /* Min sized objects */
+       spinlock_t              skc_lock;       /* Cache lock */
+       spl_wait_queue_head_t   skc_waitq;      /* Allocation waiters */
+       uint64_t                skc_slab_fail;  /* Slab alloc failures */
+       uint64_t                skc_slab_create;  /* Slab creates */
+       uint64_t                skc_slab_destroy; /* Slab destroys */
+       uint64_t                skc_slab_total; /* Slab total current */
+       uint64_t                skc_slab_alloc; /* Slab alloc current */
+       uint64_t                skc_slab_max;   /* Slab max historic  */
+       uint64_t                skc_obj_total;  /* Obj total current */
+       uint64_t                skc_obj_alloc;  /* Obj alloc current */
+       uint64_t                skc_obj_max;    /* Obj max historic */
+       uint64_t                skc_obj_deadlock;  /* Obj emergency deadlocks */
+       uint64_t                skc_obj_emergency; /* Obj emergency current */
+       uint64_t                skc_obj_emergency_max; /* Obj emergency max */
+} spl_kmem_cache_t;
+#define        kmem_cache_t            spl_kmem_cache_t
+
+extern spl_kmem_cache_t *spl_kmem_cache_create(char *name, size_t size,
+    size_t align, spl_kmem_ctor_t ctor, spl_kmem_dtor_t dtor,
+    spl_kmem_reclaim_t reclaim, void *priv, void *vmp, int flags);
+extern void spl_kmem_cache_set_move(spl_kmem_cache_t *,
+    kmem_cbrc_t (*)(void *, void *, size_t, void *));
+extern void spl_kmem_cache_destroy(spl_kmem_cache_t *skc);
+extern void *spl_kmem_cache_alloc(spl_kmem_cache_t *skc, int flags);
+extern void spl_kmem_cache_free(spl_kmem_cache_t *skc, void *obj);
+extern void spl_kmem_cache_set_allocflags(spl_kmem_cache_t *skc, gfp_t flags);
+extern void spl_kmem_cache_reap_now(spl_kmem_cache_t *skc, int count);
+extern void spl_kmem_reap(void);
+
+#define        kmem_cache_create(name, size, align, ctor, dtor, rclm, priv, vmp, fl) \
+    spl_kmem_cache_create(name, size, align, ctor, dtor, rclm, priv, vmp, fl)
+#define        kmem_cache_set_move(skc, move)  spl_kmem_cache_set_move(skc, move)
+#define        kmem_cache_destroy(skc)         spl_kmem_cache_destroy(skc)
+#define        kmem_cache_alloc(skc, flags)    spl_kmem_cache_alloc(skc, flags)
+#define        kmem_cache_free(skc, obj)       spl_kmem_cache_free(skc, obj)
+#define        kmem_cache_reap_now(skc)        \
+    spl_kmem_cache_reap_now(skc, skc->skc_reap)
+#define        kmem_reap()                     spl_kmem_reap()
+
+/*
+ * The following functions are only available for internal use.
+ */
+extern int spl_kmem_cache_init(void);
+extern void spl_kmem_cache_fini(void);
+
+#endif /* _SPL_KMEM_CACHE_H */
diff --git a/include/spl/sys/kobj.h b/include/spl/sys/kobj.h
new file mode 100644 (file)
index 0000000..558ec39
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_KOBJ_H
+#define        _SPL_KOBJ_H
+
+#include <sys/vnode.h>
+
+typedef struct _buf {
+       vnode_t *vp;
+} _buf_t;
+
+typedef struct _buf buf_t;
+
+extern struct _buf *kobj_open_file(const char *name);
+extern void kobj_close_file(struct _buf *file);
+extern int kobj_read_file(struct _buf *file, char *buf, unsigned size,
+    unsigned off);
+extern int kobj_get_filesize(struct _buf *file, uint64_t *size);
+
+#endif /* SPL_KOBJ_H */
diff --git a/include/spl/sys/kstat.h b/include/spl/sys/kstat.h
new file mode 100644 (file)
index 0000000..9170fe2
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_KSTAT_H
+#define        _SPL_KSTAT_H
+
+#include <linux/module.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/kmem.h>
+#include <sys/mutex.h>
+#include <sys/proc.h>
+
+#define        KSTAT_STRLEN            255
+#define        KSTAT_RAW_MAX           (128*1024)
+
+/*
+ * For reference valid classes are:
+ * disk, tape, net, controller, vm, kvm, hat, streams, kstat, misc
+ */
+
+#define        KSTAT_TYPE_RAW          0 /* can be anything; ks_ndata >= 1 */
+#define        KSTAT_TYPE_NAMED        1 /* name/value pair; ks_ndata >= 1 */
+#define        KSTAT_TYPE_INTR         2 /* interrupt stats; ks_ndata == 1 */
+#define        KSTAT_TYPE_IO           3 /* I/O stats; ks_ndata == 1 */
+#define        KSTAT_TYPE_TIMER        4 /* event timer; ks_ndata >= 1 */
+#define        KSTAT_NUM_TYPES         5
+
+#define        KSTAT_DATA_CHAR         0
+#define        KSTAT_DATA_INT32        1
+#define        KSTAT_DATA_UINT32       2
+#define        KSTAT_DATA_INT64        3
+#define        KSTAT_DATA_UINT64       4
+#define        KSTAT_DATA_LONG         5
+#define        KSTAT_DATA_ULONG        6
+#define        KSTAT_DATA_STRING       7
+#define        KSTAT_NUM_DATAS         8
+
+#define        KSTAT_INTR_HARD         0
+#define        KSTAT_INTR_SOFT         1
+#define        KSTAT_INTR_WATCHDOG     2
+#define        KSTAT_INTR_SPURIOUS     3
+#define        KSTAT_INTR_MULTSVC      4
+#define        KSTAT_NUM_INTRS         5
+
+#define        KSTAT_FLAG_VIRTUAL      0x01
+#define        KSTAT_FLAG_VAR_SIZE     0x02
+#define        KSTAT_FLAG_WRITABLE     0x04
+#define        KSTAT_FLAG_PERSISTENT   0x08
+#define        KSTAT_FLAG_DORMANT      0x10
+#define        KSTAT_FLAG_UNSUPPORTED  \
+       (KSTAT_FLAG_VAR_SIZE | KSTAT_FLAG_WRITABLE | \
+       KSTAT_FLAG_PERSISTENT | KSTAT_FLAG_DORMANT)
+
+
+#define        KS_MAGIC                0x9d9d9d9d
+
+/* Dynamic updates */
+#define        KSTAT_READ              0
+#define        KSTAT_WRITE             1
+
+struct kstat_s;
+typedef struct kstat_s kstat_t;
+
+typedef int kid_t;                             /* unique kstat id */
+typedef int kstat_update_t(struct kstat_s *, int); /* dynamic update cb */
+
+typedef struct kstat_module {
+       char ksm_name[KSTAT_STRLEN+1];          /* module name */
+       struct list_head ksm_module_list;       /* module linkage */
+       struct list_head ksm_kstat_list;        /* list of kstat entries */
+       struct proc_dir_entry *ksm_proc;        /* proc entry */
+} kstat_module_t;
+
+typedef struct kstat_raw_ops {
+       int (*headers)(char *buf, size_t size);
+       int (*data)(char *buf, size_t size, void *data);
+       void *(*addr)(kstat_t *ksp, loff_t index);
+} kstat_raw_ops_t;
+
+struct kstat_s {
+       int             ks_magic;               /* magic value */
+       kid_t           ks_kid;                 /* unique kstat ID */
+       hrtime_t        ks_crtime;              /* creation time */
+       hrtime_t        ks_snaptime;            /* last access time */
+       char            ks_module[KSTAT_STRLEN+1]; /* provider module name */
+       int             ks_instance;            /* provider module instance */
+       char            ks_name[KSTAT_STRLEN+1]; /* kstat name */
+       char            ks_class[KSTAT_STRLEN+1]; /* kstat class */
+       uchar_t         ks_type;                /* kstat data type */
+       uchar_t         ks_flags;               /* kstat flags */
+       void            *ks_data;               /* kstat type-specific data */
+       uint_t          ks_ndata;               /* # of data records */
+       size_t          ks_data_size;           /* size of kstat data section */
+       struct proc_dir_entry *ks_proc;         /* proc linkage */
+       kstat_update_t  *ks_update;             /* dynamic updates */
+       void            *ks_private;            /* private data */
+       kmutex_t        ks_private_lock;        /* kstat private data lock */
+       kmutex_t        *ks_lock;               /* kstat data lock */
+       struct list_head ks_list;               /* kstat linkage */
+       kstat_module_t  *ks_owner;              /* kstat module linkage */
+       kstat_raw_ops_t ks_raw_ops;             /* ops table for raw type */
+       char            *ks_raw_buf;            /* buf used for raw ops */
+       size_t          ks_raw_bufsize;         /* size of raw ops buffer */
+};
+
+typedef struct kstat_named_s {
+       char    name[KSTAT_STRLEN];     /* name of counter */
+       uchar_t data_type;              /* data type */
+       union {
+               char c[16];     /* 128-bit int */
+               int32_t i32;    /* 32-bit signed int */
+               uint32_t ui32;  /* 32-bit unsigned int */
+               int64_t i64;    /* 64-bit signed int */
+               uint64_t ui64;  /* 64-bit unsigned int */
+               long l;         /* native signed long */
+               ulong_t ul;     /* native unsigned long */
+               struct {
+                       union {
+                               char *ptr;      /* NULL-term string */
+                               char __pad[8];  /* 64-bit padding */
+                       } addr;
+                       uint32_t len;           /* # bytes for strlen + '\0' */
+               } string;
+       } value;
+} kstat_named_t;
+
+#define        KSTAT_NAMED_STR_PTR(knptr) ((knptr)->value.string.addr.ptr)
+#define        KSTAT_NAMED_STR_BUFLEN(knptr) ((knptr)->value.string.len)
+
+typedef struct kstat_intr {
+       uint_t intrs[KSTAT_NUM_INTRS];
+} kstat_intr_t;
+
+typedef struct kstat_io {
+       u_longlong_t    nread;          /* number of bytes read */
+       u_longlong_t    nwritten;       /* number of bytes written */
+       uint_t          reads;          /* number of read operations */
+       uint_t          writes;         /* number of write operations */
+       hrtime_t        wtime;          /* cumulative wait (pre-service) time */
+       hrtime_t        wlentime;       /* cumulative wait len*time product */
+       hrtime_t        wlastupdate;    /* last time wait queue changed */
+       hrtime_t        rtime;          /* cumulative run (service) time */
+       hrtime_t        rlentime;       /* cumulative run length*time product */
+       hrtime_t        rlastupdate;    /* last time run queue changed */
+       uint_t          wcnt;           /* count of elements in wait state */
+       uint_t          rcnt;           /* count of elements in run state */
+} kstat_io_t;
+
+typedef struct kstat_timer {
+       char            name[KSTAT_STRLEN+1]; /* event name */
+       u_longlong_t    num_events;      /* number of events */
+       hrtime_t        elapsed_time;    /* cumulative elapsed time */
+       hrtime_t        min_time;        /* shortest event duration */
+       hrtime_t        max_time;        /* longest event duration */
+       hrtime_t        start_time;      /* previous event start time */
+       hrtime_t        stop_time;       /* previous event stop time */
+} kstat_timer_t;
+
+int spl_kstat_init(void);
+void spl_kstat_fini(void);
+
+extern void __kstat_set_raw_ops(kstat_t *ksp,
+    int (*headers)(char *buf, size_t size),
+    int (*data)(char *buf, size_t size, void *data),
+    void* (*addr)(kstat_t *ksp, loff_t index));
+
+extern kstat_t *__kstat_create(const char *ks_module, int ks_instance,
+    const char *ks_name, const char *ks_class, uchar_t ks_type,
+    uint_t ks_ndata, uchar_t ks_flags);
+
+extern void __kstat_install(kstat_t *ksp);
+extern void __kstat_delete(kstat_t *ksp);
+extern void kstat_waitq_enter(kstat_io_t *);
+extern void kstat_waitq_exit(kstat_io_t *);
+extern void kstat_runq_enter(kstat_io_t *);
+extern void kstat_runq_exit(kstat_io_t *);
+
+#define        kstat_set_raw_ops(k, h, d, a) \
+    __kstat_set_raw_ops(k, h, d, a)
+#define        kstat_create(m, i, n, c, t, s, f) \
+    __kstat_create(m, i, n, c, t, s, f)
+
+#define        kstat_install(k)                __kstat_install(k)
+#define        kstat_delete(k)                 __kstat_delete(k)
+
+#endif  /* _SPL_KSTAT_H */
diff --git a/include/spl/sys/list.h b/include/spl/sys/list.h
new file mode 100644 (file)
index 0000000..74b784e
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_LIST_H
+#define        _SPL_LIST_H
+
+#include <sys/types.h>
+#include <linux/list.h>
+
+/*
+ * NOTE: I have implemented the Solaris list API in terms of the native
+ * linux API.  This has certain advantages in terms of leveraging the linux
+ * list debugging infrastructure, but it also means that the internals of a
+ * list differ slightly than on Solaris.  This is not a problem as long as
+ * all callers stick to the published API.  The two major differences are:
+ *
+ * 1) A list_node_t is mapped to a linux list_head struct which changes
+ *    the name of the list_next/list_prev pointers to next/prev respectively.
+ *
+ * 2) A list_node_t which is not attached to a list on Solaris is denoted
+ *    by having its list_next/list_prev pointers set to NULL.  Under linux
+ *    the next/prev pointers are set to LIST_POISON1 and LIST_POISON2
+ *    respectively.  At this moment this only impacts the implementation
+ *    of the list_link_init() and list_link_active() functions.
+ */
+
+typedef struct list_head list_node_t;
+
+typedef struct list {
+       size_t list_size;
+       size_t list_offset;
+       list_node_t list_head;
+} list_t;
+
+#define        list_d2l(a, obj) ((list_node_t *)(((char *)obj) + (a)->list_offset))
+#define        list_object(a, node) ((void *)(((char *)node) - (a)->list_offset))
+
+static inline int
+list_is_empty(list_t *list)
+{
+       return (list_empty(&list->list_head));
+}
+
+static inline void
+list_link_init(list_node_t *node)
+{
+       node->next = LIST_POISON1;
+       node->prev = LIST_POISON2;
+}
+
+static inline void
+list_create(list_t *list, size_t size, size_t offset)
+{
+       list->list_size = size;
+       list->list_offset = offset;
+       INIT_LIST_HEAD(&list->list_head);
+}
+
+static inline void
+list_destroy(list_t *list)
+{
+       list_del(&list->list_head);
+}
+
+static inline void
+list_insert_head(list_t *list, void *object)
+{
+       list_add(list_d2l(list, object), &list->list_head);
+}
+
+static inline void
+list_insert_tail(list_t *list, void *object)
+{
+       list_add_tail(list_d2l(list, object), &list->list_head);
+}
+
+static inline void
+list_insert_after(list_t *list, void *object, void *nobject)
+{
+       if (object == NULL)
+               list_insert_head(list, nobject);
+       else
+               list_add(list_d2l(list, nobject), list_d2l(list, object));
+}
+
+static inline void
+list_insert_before(list_t *list, void *object, void *nobject)
+{
+       if (object == NULL)
+               list_insert_tail(list, nobject);
+       else
+               list_add_tail(list_d2l(list, nobject), list_d2l(list, object));
+}
+
+static inline void
+list_remove(list_t *list, void *object)
+{
+       list_del(list_d2l(list, object));
+}
+
+static inline void *
+list_remove_head(list_t *list)
+{
+       list_node_t *head = list->list_head.next;
+       if (head == &list->list_head)
+               return (NULL);
+
+       list_del(head);
+       return (list_object(list, head));
+}
+
+static inline void *
+list_remove_tail(list_t *list)
+{
+       list_node_t *tail = list->list_head.prev;
+       if (tail == &list->list_head)
+               return (NULL);
+
+       list_del(tail);
+       return (list_object(list, tail));
+}
+
+static inline void *
+list_head(list_t *list)
+{
+       if (list_is_empty(list))
+               return (NULL);
+
+       return (list_object(list, list->list_head.next));
+}
+
+static inline void *
+list_tail(list_t *list)
+{
+       if (list_is_empty(list))
+               return (NULL);
+
+       return (list_object(list, list->list_head.prev));
+}
+
+static inline void *
+list_next(list_t *list, void *object)
+{
+       list_node_t *node = list_d2l(list, object);
+
+       if (node->next != &list->list_head)
+               return (list_object(list, node->next));
+
+       return (NULL);
+}
+
+static inline void *
+list_prev(list_t *list, void *object)
+{
+       list_node_t *node = list_d2l(list, object);
+
+       if (node->prev != &list->list_head)
+               return (list_object(list, node->prev));
+
+       return (NULL);
+}
+
+static inline int
+list_link_active(list_node_t *node)
+{
+       return (node->next != LIST_POISON1) && (node->prev != LIST_POISON2);
+}
+
+static inline void
+spl_list_move_tail(list_t *dst, list_t *src)
+{
+       list_splice_init(&src->list_head, dst->list_head.prev);
+}
+
+#define        list_move_tail(dst, src)        spl_list_move_tail(dst, src)
+
+static inline void
+list_link_replace(list_node_t *old_node, list_node_t *new_node)
+{
+       new_node->next = old_node->next;
+       new_node->prev = old_node->prev;
+       old_node->prev->next = new_node;
+       old_node->next->prev = new_node;
+       list_link_init(old_node);
+}
+
+#endif /* SPL_LIST_H */
diff --git a/include/spl/sys/mode.h b/include/spl/sys/mode.h
new file mode 100644 (file)
index 0000000..02802d0
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_MODE_H
+#define        _SPL_MODE_H
+
+#define        IFTOVT(mode)    vn_mode_to_vtype(mode)
+#define        VTTOIF(vtype)   vn_vtype_to_mode(vtype)
+#define        MAKEIMODE(T, M) (VTTOIF(T) | ((M) & ~S_IFMT))
+
+#endif /* SPL_MODE_H */
diff --git a/include/spl/sys/mutex.h b/include/spl/sys/mutex.h
new file mode 100644 (file)
index 0000000..f906d49
--- /dev/null
@@ -0,0 +1,184 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_MUTEX_H
+#define        _SPL_MUTEX_H
+
+#include <sys/types.h>
+#include <linux/mutex.h>
+#include <linux/lockdep.h>
+
+typedef enum {
+       MUTEX_DEFAULT   = 0,
+       MUTEX_SPIN      = 1,
+       MUTEX_ADAPTIVE  = 2,
+       MUTEX_NOLOCKDEP = 3
+} kmutex_type_t;
+
+typedef struct {
+       struct mutex            m_mutex;
+       spinlock_t              m_lock; /* used for serializing mutex_exit */
+       kthread_t               *m_owner;
+#ifdef CONFIG_LOCKDEP
+       kmutex_type_t           m_type;
+#endif /* CONFIG_LOCKDEP */
+} kmutex_t;
+
+#define        MUTEX(mp)               (&((mp)->m_mutex))
+
+static inline void
+spl_mutex_set_owner(kmutex_t *mp)
+{
+       mp->m_owner = current;
+}
+
+static inline void
+spl_mutex_clear_owner(kmutex_t *mp)
+{
+       mp->m_owner = NULL;
+}
+
+#define        mutex_owner(mp)         (ACCESS_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))
+
+#ifdef CONFIG_LOCKDEP
+static inline void
+spl_mutex_set_type(kmutex_t *mp, kmutex_type_t type)
+{
+       mp->m_type = type;
+}
+static inline void
+spl_mutex_lockdep_off_maybe(kmutex_t *mp)                      \
+{                                                              \
+       if (mp && mp->m_type == MUTEX_NOLOCKDEP)                \
+               lockdep_off();                                  \
+}
+static inline void
+spl_mutex_lockdep_on_maybe(kmutex_t *mp)                       \
+{                                                              \
+       if (mp && mp->m_type == MUTEX_NOLOCKDEP)                \
+               lockdep_on();                                   \
+}
+#else  /* CONFIG_LOCKDEP */
+#define        spl_mutex_set_type(mp, type)
+#define        spl_mutex_lockdep_off_maybe(mp)
+#define        spl_mutex_lockdep_on_maybe(mp)
+#endif /* CONFIG_LOCKDEP */
+
+/*
+ * The following functions must be a #define   and not static inline.
+ * This ensures that the native linux mutex functions (lock/unlock)
+ * will be correctly located in the users code which is important
+ * for the built in kernel lock analysis tools
+ */
+#undef mutex_init
+#define        mutex_init(mp, name, type, ibc)                         \
+{                                                              \
+       static struct lock_class_key __key;                     \
+       ASSERT(type == MUTEX_DEFAULT || type == MUTEX_NOLOCKDEP); \
+                                                               \
+       __mutex_init(MUTEX(mp), (name) ? (#name) : (#mp), &__key); \
+       spin_lock_init(&(mp)->m_lock);                          \
+       spl_mutex_clear_owner(mp);                              \
+       spl_mutex_set_type(mp, type);                           \
+}
+
+#undef mutex_destroy
+#define        mutex_destroy(mp)                                       \
+{                                                              \
+       VERIFY3P(mutex_owner(mp), ==, NULL);                    \
+}
+
+/* BEGIN CSTYLED */
+#define        mutex_tryenter(mp)                                      \
+({                                                             \
+       int _rc_;                                               \
+                                                               \
+       spl_mutex_lockdep_off_maybe(mp);                        \
+       if ((_rc_ = mutex_trylock(MUTEX(mp))) == 1)             \
+               spl_mutex_set_owner(mp);                        \
+       spl_mutex_lockdep_on_maybe(mp);                         \
+                                                               \
+       _rc_;                                                   \
+})
+/* END CSTYLED */
+
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+#define        mutex_enter_nested(mp, subclass)                        \
+{                                                              \
+       ASSERT3P(mutex_owner(mp), !=, current);                 \
+       spl_mutex_lockdep_off_maybe(mp);                        \
+       mutex_lock_nested(MUTEX(mp), (subclass));               \
+       spl_mutex_lockdep_on_maybe(mp);                         \
+       spl_mutex_set_owner(mp);                                \
+}
+#else /* CONFIG_DEBUG_LOCK_ALLOC */
+#define        mutex_enter_nested(mp, subclass)                        \
+{                                                              \
+       ASSERT3P(mutex_owner(mp), !=, current);                 \
+       spl_mutex_lockdep_off_maybe(mp);                        \
+       mutex_lock(MUTEX(mp));                                  \
+       spl_mutex_lockdep_on_maybe(mp);                         \
+       spl_mutex_set_owner(mp);                                \
+}
+#endif /*  CONFIG_DEBUG_LOCK_ALLOC */
+
+#define        mutex_enter(mp) mutex_enter_nested((mp), 0)
+
+/*
+ * The reason for the spinlock:
+ *
+ * The Linux mutex is designed with a fast-path/slow-path design such that it
+ * does not guarantee serialization upon itself, allowing a race where latter
+ * acquirers finish mutex_unlock before former ones.
+ *
+ * The race renders it unsafe to be used for serializing the freeing of an
+ * object in which the mutex is embedded, where the latter acquirer could go
+ * on to free the object while the former one is still doing mutex_unlock and
+ * causing memory corruption.
+ *
+ * However, there are many places in ZFS where the mutex is used for
+ * serializing object freeing, and the code is shared among other OSes without
+ * this issue. Thus, we need the spinlock to force the serialization on
+ * mutex_exit().
+ *
+ * See http://lwn.net/Articles/575477/ for the information about the race.
+ */
+#define        mutex_exit(mp)                                          \
+{                                                              \
+       spl_mutex_clear_owner(mp);                              \
+       spin_lock(&(mp)->m_lock);                               \
+       spl_mutex_lockdep_off_maybe(mp);                        \
+       mutex_unlock(MUTEX(mp));                                \
+       spl_mutex_lockdep_on_maybe(mp);                         \
+       spin_unlock(&(mp)->m_lock);                             \
+       /* NOTE: do not dereference mp after this point */      \
+}
+
+int spl_mutex_init(void);
+void spl_mutex_fini(void);
+
+#endif /* _SPL_MUTEX_H */
diff --git a/include/spl/sys/param.h b/include/spl/sys/param.h
new file mode 100644 (file)
index 0000000..4ef9291
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_PARAM_H
+#define        _SPL_PARAM_H
+
+#include <asm/page.h>
+
+/* Pages to bytes and back */
+#define        ptob(pages)                     ((pages) << PAGE_SHIFT)
+#define        btop(bytes)                     ((bytes) >> PAGE_SHIFT)
+
+#define        MAXUID                          UINT32_MAX
+
+#endif /* SPL_PARAM_H */
diff --git a/include/spl/sys/proc.h b/include/spl/sys/proc.h
new file mode 100644 (file)
index 0000000..2876839
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_PROC_H
+#define        _SPL_PROC_H
+
+#include <linux/proc_fs.h>
+
+extern struct proc_dir_entry *proc_spl_kstat;
+
+int spl_proc_init(void);
+void spl_proc_fini(void);
+
+#endif /* SPL_PROC_H */
diff --git a/include/spl/sys/processor.h b/include/spl/sys/processor.h
new file mode 100644 (file)
index 0000000..a70101f
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef        _SPL_PROCESSOR_H
+#define        _SPL_PROCESSOR_H
+
+#define        getcpuid() smp_processor_id()
+
+typedef int    processorid_t;
+
+#endif /* _SPL_PROCESSOR_H */
diff --git a/include/spl/sys/random.h b/include/spl/sys/random.h
new file mode 100644 (file)
index 0000000..93e244f
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_RANDOM_H
+#define        _SPL_RANDOM_H
+
+#include <linux/module.h>
+#include <linux/random.h>
+
+static __inline__ int
+random_get_bytes(uint8_t *ptr, size_t len)
+{
+       get_random_bytes((void *)ptr, (int)len);
+       return (0);
+}
+
+extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len);
+
+#endif /* _SPL_RANDOM_H */
diff --git a/include/spl/sys/rwlock.h b/include/spl/sys/rwlock.h
new file mode 100644 (file)
index 0000000..b44ceab
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_RWLOCK_H
+#define        _SPL_RWLOCK_H
+
+#include <sys/types.h>
+#include <linux/rwsem.h>
+
+/* Linux kernel compatibility */
+#if defined(CONFIG_PREEMPT_RT_FULL)
+#define        SPL_RWSEM_SINGLE_READER_VALUE   (1)
+#define        SPL_RWSEM_SINGLE_WRITER_VALUE   (0)
+#elif defined(CONFIG_RWSEM_GENERIC_SPINLOCK)
+#define        SPL_RWSEM_SINGLE_READER_VALUE   (1)
+#define        SPL_RWSEM_SINGLE_WRITER_VALUE   (-1)
+#else
+#define        SPL_RWSEM_SINGLE_READER_VALUE   (RWSEM_ACTIVE_READ_BIAS)
+#define        SPL_RWSEM_SINGLE_WRITER_VALUE   (RWSEM_ACTIVE_WRITE_BIAS)
+#endif
+
+/* Linux 3.16 changed activity to count for rwsem-spinlock */
+#if defined(CONFIG_PREEMPT_RT_FULL)
+#define        RWSEM_COUNT(sem)        sem->read_depth
+#elif defined(HAVE_RWSEM_ACTIVITY)
+#define        RWSEM_COUNT(sem)        sem->activity
+/* Linux 4.8 changed count to an atomic_long_t for !rwsem-spinlock */
+#elif defined(HAVE_RWSEM_ATOMIC_LONG_COUNT)
+#define        RWSEM_COUNT(sem)        atomic_long_read(&(sem)->count)
+#else
+#define        RWSEM_COUNT(sem)        sem->count
+#endif
+
+#if defined(RWSEM_SPINLOCK_IS_RAW)
+#define        spl_rwsem_lock_irqsave(lk, fl)          raw_spin_lock_irqsave(lk, fl)
+#define        spl_rwsem_unlock_irqrestore(lk, fl)     \
+    raw_spin_unlock_irqrestore(lk, fl)
+#define        spl_rwsem_trylock_irqsave(lk, fl)       raw_spin_trylock_irqsave(lk, fl)
+#else
+#define        spl_rwsem_lock_irqsave(lk, fl)          spin_lock_irqsave(lk, fl)
+#define        spl_rwsem_unlock_irqrestore(lk, fl)     spin_unlock_irqrestore(lk, fl)
+#define        spl_rwsem_trylock_irqsave(lk, fl)       spin_trylock_irqsave(lk, fl)
+#endif /* RWSEM_SPINLOCK_IS_RAW */
+
+#define        spl_rwsem_is_locked(rwsem)              rwsem_is_locked(rwsem)
+
+typedef enum {
+       RW_DRIVER       = 2,
+       RW_DEFAULT      = 4,
+       RW_NOLOCKDEP    = 5
+} krw_type_t;
+
+typedef enum {
+       RW_NONE         = 0,
+       RW_WRITER       = 1,
+       RW_READER       = 2
+} krw_t;
+
+/*
+ * If CONFIG_RWSEM_SPIN_ON_OWNER is defined, rw_semaphore will have an owner
+ * field, so we don't need our own.
+ */
+typedef struct {
+       struct rw_semaphore rw_rwlock;
+#ifndef CONFIG_RWSEM_SPIN_ON_OWNER
+       kthread_t *rw_owner;
+#endif
+#ifdef CONFIG_LOCKDEP
+       krw_type_t      rw_type;
+#endif /* CONFIG_LOCKDEP */
+} krwlock_t;
+
+#define        SEM(rwp)        (&(rwp)->rw_rwlock)
+
+static inline void
+spl_rw_set_owner(krwlock_t *rwp)
+{
+/*
+ * If CONFIG_RWSEM_SPIN_ON_OWNER is defined, down_write, up_write,
+ * downgrade_write and __init_rwsem will set/clear owner for us.
+ */
+#ifndef CONFIG_RWSEM_SPIN_ON_OWNER
+       rwp->rw_owner = current;
+#endif
+}
+
+static inline void
+spl_rw_clear_owner(krwlock_t *rwp)
+{
+#ifndef CONFIG_RWSEM_SPIN_ON_OWNER
+       rwp->rw_owner = NULL;
+#endif
+}
+
+static inline kthread_t *
+rw_owner(krwlock_t *rwp)
+{
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
+       return (SEM(rwp)->owner);
+#else
+       return (rwp->rw_owner);
+#endif
+}
+
+#ifdef CONFIG_LOCKDEP
+static inline void
+spl_rw_set_type(krwlock_t *rwp, krw_type_t type)
+{
+       rwp->rw_type = type;
+}
+static inline void
+spl_rw_lockdep_off_maybe(krwlock_t *rwp)               \
+{                                                      \
+       if (rwp && rwp->rw_type == RW_NOLOCKDEP)        \
+               lockdep_off();                          \
+}
+static inline void
+spl_rw_lockdep_on_maybe(krwlock_t *rwp)                        \
+{                                                      \
+       if (rwp && rwp->rw_type == RW_NOLOCKDEP)        \
+               lockdep_on();                           \
+}
+#else  /* CONFIG_LOCKDEP */
+#define        spl_rw_set_type(rwp, type)
+#define        spl_rw_lockdep_off_maybe(rwp)
+#define        spl_rw_lockdep_on_maybe(rwp)
+#endif /* CONFIG_LOCKDEP */
+
+static inline int
+RW_READ_HELD(krwlock_t *rwp)
+{
+       /*
+        * Linux 4.8 will set owner to 1 when read held instead of leave it
+        * NULL. So we check whether owner <= 1.
+        */
+       return (spl_rwsem_is_locked(SEM(rwp)) &&
+           (unsigned long)rw_owner(rwp) <= 1);
+}
+
+static inline int
+RW_WRITE_HELD(krwlock_t *rwp)
+{
+       return (rw_owner(rwp) == current);
+}
+
+static inline int
+RW_LOCK_HELD(krwlock_t *rwp)
+{
+       return (spl_rwsem_is_locked(SEM(rwp)));
+}
+
+/*
+ * The following functions must be a #define   and not static inline.
+ * This ensures that the native linux semaphore functions (down/up)
+ * will be correctly located in the users code which is important
+ * for the built in kernel lock analysis tools
+ */
+/* BEGIN CSTYLED */
+#define        rw_init(rwp, name, type, arg)                                   \
+({                                                                     \
+       static struct lock_class_key __key;                             \
+       ASSERT(type == RW_DEFAULT || type == RW_NOLOCKDEP);             \
+                                                                       \
+       __init_rwsem(SEM(rwp), #rwp, &__key);                           \
+       spl_rw_clear_owner(rwp);                                        \
+       spl_rw_set_type(rwp, type);                                     \
+})
+
+#define        rw_destroy(rwp)                                                 \
+({                                                                     \
+       VERIFY(!RW_LOCK_HELD(rwp));                                     \
+})
+
+#define        rw_tryenter(rwp, rw)                                            \
+({                                                                     \
+       int _rc_ = 0;                                                   \
+                                                                       \
+       spl_rw_lockdep_off_maybe(rwp);                                  \
+       switch (rw) {                                                   \
+       case RW_READER:                                                 \
+               _rc_ = down_read_trylock(SEM(rwp));                     \
+               break;                                                  \
+       case RW_WRITER:                                                 \
+               if ((_rc_ = down_write_trylock(SEM(rwp))))              \
+                       spl_rw_set_owner(rwp);                          \
+               break;                                                  \
+       default:                                                        \
+               VERIFY(0);                                              \
+       }                                                               \
+       spl_rw_lockdep_on_maybe(rwp);                                   \
+       _rc_;                                                           \
+})
+
+#define        rw_enter(rwp, rw)                                               \
+({                                                                     \
+       spl_rw_lockdep_off_maybe(rwp);                                  \
+       switch (rw) {                                                   \
+       case RW_READER:                                                 \
+               down_read(SEM(rwp));                                    \
+               break;                                                  \
+       case RW_WRITER:                                                 \
+               down_write(SEM(rwp));                                   \
+               spl_rw_set_owner(rwp);                                  \
+               break;                                                  \
+       default:                                                        \
+               VERIFY(0);                                              \
+       }                                                               \
+       spl_rw_lockdep_on_maybe(rwp);                                   \
+})
+
+#define        rw_exit(rwp)                                                    \
+({                                                                     \
+       spl_rw_lockdep_off_maybe(rwp);                                  \
+       if (RW_WRITE_HELD(rwp)) {                                       \
+               spl_rw_clear_owner(rwp);                                \
+               up_write(SEM(rwp));                                     \
+       } else {                                                        \
+               ASSERT(RW_READ_HELD(rwp));                              \
+               up_read(SEM(rwp));                                      \
+       }                                                               \
+       spl_rw_lockdep_on_maybe(rwp);                                   \
+})
+
+#define        rw_downgrade(rwp)                                               \
+({                                                                     \
+       spl_rw_lockdep_off_maybe(rwp);                                  \
+       spl_rw_clear_owner(rwp);                                        \
+       downgrade_write(SEM(rwp));                                      \
+       spl_rw_lockdep_on_maybe(rwp);                                   \
+})
+
+#define        rw_tryupgrade(rwp)                                              \
+({                                                                     \
+       int _rc_ = 0;                                                   \
+                                                                       \
+       if (RW_WRITE_HELD(rwp)) {                                       \
+               _rc_ = 1;                                               \
+       } else {                                                        \
+               spl_rw_lockdep_off_maybe(rwp);                          \
+               if ((_rc_ = rwsem_tryupgrade(SEM(rwp))))                \
+                       spl_rw_set_owner(rwp);                          \
+               spl_rw_lockdep_on_maybe(rwp);                           \
+       }                                                               \
+       _rc_;                                                           \
+})
+/* END CSTYLED */
+
+int spl_rw_init(void);
+void spl_rw_fini(void);
+int rwsem_tryupgrade(struct rw_semaphore *rwsem);
+
+#endif /* _SPL_RWLOCK_H */
diff --git a/include/spl/sys/shrinker.h b/include/spl/sys/shrinker.h
new file mode 100644 (file)
index 0000000..28c1fa7
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_SHRINKER_H
+#define        _SPL_SHRINKER_H
+
+#include <linux/mm.h>
+#include <linux/fs.h>
+
+#if !defined(HAVE_SHRINK_CONTROL_STRUCT)
+struct shrink_control {
+       gfp_t gfp_mask;
+       unsigned long nr_to_scan;
+};
+#endif /* HAVE_SHRINK_CONTROL_STRUCT */
+
+/*
+ * Due to frequent changes in the shrinker API the following
+ * compatibility wrappers should be used.  They are as follows:
+ *
+ * SPL_SHRINKER_DECLARE is used to declare the shrinker which is
+ * passed to spl_register_shrinker()/spl_unregister_shrinker().  Use
+ * shrinker_name to set the shrinker variable name, shrinker_callback
+ * to set the callback function, and seek_cost to define the cost of
+ * reclaiming an object.
+ *
+ *   SPL_SHRINKER_DECLARE(shrinker_name, shrinker_callback, seek_cost);
+ *
+ * SPL_SHRINKER_CALLBACK_FWD_DECLARE is used when a forward declaration
+ * of the shrinker callback function is required.  Only the callback
+ * function needs to be passed.
+ *
+ *   SPL_SHRINKER_CALLBACK_FWD_DECLARE(shrinker_callback);
+ *
+ * SPL_SHRINKER_CALLBACK_WRAPPER is used to declare the callback function
+ * which is registered with the shrinker.  This function will call your
+ * custom shrinker which must use the following prototype.  Notice the
+ * leading __'s, these must be appended to the callback_function name.
+ *
+ *   int  __shrinker_callback(struct shrinker *, struct shrink_control *)
+ *   SPL_SHRINKER_CALLBACK_WRAPPER(shrinker_callback);a
+ *
+ *
+ * Example:
+ *
+ * SPL_SHRINKER_CALLBACK_FWD_DECLARE(my_shrinker_fn);
+ * SPL_SHRINKER_DECLARE(my_shrinker, my_shrinker_fn, 1);
+ *
+ * static int
+ * __my_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc)
+ * {
+ *     if (sc->nr_to_scan) {
+ *             ...scan objects in the cache and reclaim them...
+ *     }
+ *
+ *     ...calculate number of objects in the cache...
+ *
+ *     return (number of objects in the cache);
+ * }
+ * SPL_SHRINKER_CALLBACK_WRAPPER(my_shrinker_fn);
+ */
+
+#define        spl_register_shrinker(x)        register_shrinker(x)
+#define        spl_unregister_shrinker(x)      unregister_shrinker(x)
+
+/*
+ * Linux 2.6.23 - 2.6.34 Shrinker API Compatibility.
+ */
+#if defined(HAVE_2ARGS_OLD_SHRINKER_CALLBACK)
+#define        SPL_SHRINKER_DECLARE(s, x, y)                                   \
+static struct shrinker s = {                                           \
+       .shrink = x,                                                    \
+       .seeks = y                                                      \
+}
+
+#define        SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn)                           \
+static int fn(int nr_to_scan, unsigned int gfp_mask)
+
+#define        SPL_SHRINKER_CALLBACK_WRAPPER(fn)                               \
+static int                                                             \
+fn(int nr_to_scan, unsigned int gfp_mask)                              \
+{                                                                      \
+       struct shrink_control sc;                                       \
+                                                                       \
+       sc.nr_to_scan = nr_to_scan;                                     \
+       sc.gfp_mask = gfp_mask;                                         \
+                                                                       \
+       return (__ ## fn(NULL, &sc));                                   \
+}
+
+/*
+ * Linux 2.6.35 to 2.6.39 Shrinker API Compatibility.
+ */
+#elif defined(HAVE_3ARGS_SHRINKER_CALLBACK)
+#define        SPL_SHRINKER_DECLARE(s, x, y)                                   \
+static struct shrinker s = {                                           \
+       .shrink = x,                                                    \
+       .seeks = y                                                      \
+}
+
+#define        SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn)                           \
+static int fn(struct shrinker *, int, unsigned int)
+
+#define        SPL_SHRINKER_CALLBACK_WRAPPER(fn)                               \
+static int                                                             \
+fn(struct shrinker *shrink, int nr_to_scan, unsigned int gfp_mask)     \
+{                                                                      \
+       struct shrink_control sc;                                       \
+                                                                       \
+       sc.nr_to_scan = nr_to_scan;                                     \
+       sc.gfp_mask = gfp_mask;                                         \
+                                                                       \
+       return (__ ## fn(shrink, &sc));                                 \
+}
+
+/*
+ * Linux 3.0 to 3.11 Shrinker API Compatibility.
+ */
+#elif defined(HAVE_2ARGS_NEW_SHRINKER_CALLBACK)
+#define        SPL_SHRINKER_DECLARE(s, x, y)                                   \
+static struct shrinker s = {                                           \
+       .shrink = x,                                                    \
+       .seeks = y                                                      \
+}
+
+#define        SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn)                           \
+static int fn(struct shrinker *, struct shrink_control *)
+
+#define        SPL_SHRINKER_CALLBACK_WRAPPER(fn)                               \
+static int                                                             \
+fn(struct shrinker *shrink, struct shrink_control *sc)                 \
+{                                                                      \
+       return (__ ## fn(shrink, sc));                                  \
+}
+
+/*
+ * Linux 3.12 and later Shrinker API Compatibility.
+ */
+#elif defined(HAVE_SPLIT_SHRINKER_CALLBACK)
+#define        SPL_SHRINKER_DECLARE(s, x, y)                                   \
+static struct shrinker s = {                                           \
+       .count_objects = x ## _count_objects,                           \
+       .scan_objects = x ## _scan_objects,                             \
+       .seeks = y                                                      \
+}
+
+#define        SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn)                           \
+static unsigned long fn ## _count_objects(struct shrinker *,           \
+    struct shrink_control *);                                          \
+static unsigned long fn ## _scan_objects(struct shrinker *,            \
+    struct shrink_control *)
+
+#define        SPL_SHRINKER_CALLBACK_WRAPPER(fn)                               \
+static unsigned long                                                   \
+fn ## _count_objects(struct shrinker *shrink, struct shrink_control *sc)\
+{                                                                      \
+       int __ret__;                                                    \
+                                                                       \
+       sc->nr_to_scan = 0;                                             \
+       __ret__ = __ ## fn(NULL, sc);                                   \
+                                                                       \
+       /* Errors may not be returned and must be converted to zeros */ \
+       return ((__ret__ < 0) ? 0 : __ret__);                           \
+}                                                                      \
+                                                                       \
+static unsigned long                                                   \
+fn ## _scan_objects(struct shrinker *shrink, struct shrink_control *sc)        \
+{                                                                      \
+       int __ret__;                                                    \
+                                                                       \
+       __ret__ = __ ## fn(NULL, sc);                                   \
+       return ((__ret__ < 0) ? SHRINK_STOP : __ret__);                 \
+}
+#else
+/*
+ * Linux 2.x to 2.6.22, or a newer shrinker API has been introduced.
+ */
+#error "Unknown shrinker callback"
+#endif
+
+#if defined(HAVE_SPLIT_SHRINKER_CALLBACK)
+typedef unsigned long  spl_shrinker_t;
+#else
+typedef int            spl_shrinker_t;
+#define        SHRINK_STOP     (-1)
+#endif
+
+#endif /* SPL_SHRINKER_H */
diff --git a/include/spl/sys/sid.h b/include/spl/sys/sid.h
new file mode 100644 (file)
index 0000000..731b62c
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_SID_H
+#define        _SPL_SID_H
+
+typedef struct ksiddomain {
+       char            *kd_name;
+} ksiddomain_t;
+
+typedef enum ksid_index {
+       KSID_USER,
+       KSID_GROUP,
+       KSID_OWNER,
+       KSID_COUNT
+} ksid_index_t;
+
+typedef int ksid_t;
+
+static inline ksiddomain_t *
+ksid_lookupdomain(const char *dom)
+{
+       ksiddomain_t *kd;
+       int len = strlen(dom);
+
+       kd = kmem_zalloc(sizeof (ksiddomain_t), KM_SLEEP);
+       kd->kd_name = kmem_zalloc(len + 1, KM_SLEEP);
+       memcpy(kd->kd_name, dom, len);
+
+       return (kd);
+}
+
+static inline void
+ksiddomain_rele(ksiddomain_t *ksid)
+{
+       kmem_free(ksid->kd_name, strlen(ksid->kd_name) + 1);
+       kmem_free(ksid, sizeof (ksiddomain_t));
+}
+
+#endif /* _SPL_SID_H */
diff --git a/include/spl/sys/signal.h b/include/spl/sys/signal.h
new file mode 100644 (file)
index 0000000..36b8b5d
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_SIGNAL_H
+#define        _SPL_SIGNAL_H
+
+#include <linux/sched.h>
+
+#ifdef HAVE_SCHED_SIGNAL_HEADER
+#include <linux/sched/signal.h>
+#endif
+
+#define        FORREAL         0       /* Usual side-effects */
+#define        JUSTLOOKING     1       /* Don't stop the process */
+
+/*
+ * The "why" argument indicates the allowable side-effects of the call:
+ *
+ * FORREAL:  Extract the next pending signal from p_sig into p_cursig;
+ * stop the process if a stop has been requested or if a traced signal
+ * is pending.
+ *
+ * JUSTLOOKING:  Don't stop the process, just indicate whether or not
+ * a signal might be pending (FORREAL is needed to tell for sure).
+ */
+static __inline__ int
+issig(int why)
+{
+       ASSERT(why == FORREAL || why == JUSTLOOKING);
+
+       return (signal_pending(current));
+}
+
+#endif /* SPL_SIGNAL_H */
diff --git a/include/spl/sys/stat.h b/include/spl/sys/stat.h
new file mode 100644 (file)
index 0000000..83018e8
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_STAT_H
+#define        _SPL_STAT_H
+
+#include <linux/stat.h>
+
+#endif /* SPL_STAT_H */
diff --git a/include/spl/sys/strings.h b/include/spl/sys/strings.h
new file mode 100644 (file)
index 0000000..4fb8032
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ *  Copyright (C) 2018 Lawrence Livermore National Security, LLC.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef _SPL_SYS_STRINGS_H
+#define        _SPL_SYS_STRINGS_H
+
+#include <linux/string.h>
+
+#define        bzero(ptr, size)                memset(ptr, 0, size)
+#define        bcopy(src, dest, size)          memmove(dest, src, size)
+#define        bcmp(src, dest, size)           memcmp((src), (dest), (size_t)(size))
+
+#endif /* _SPL_SYS_STRINGS_H */
diff --git a/include/spl/sys/sunddi.h b/include/spl/sys/sunddi.h
new file mode 100644 (file)
index 0000000..29a6fe0
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_SUNDDI_H
+#define        _SPL_SUNDDI_H
+
+#include <sys/cred.h>
+#include <sys/uio.h>
+#include <sys/mutex.h>
+#include <sys/u8_textprep.h>
+#include <sys/vnode.h>
+
+typedef int ddi_devid_t;
+
+#define        DDI_DEV_T_NONE                          ((dev_t)-1)
+#define        DDI_DEV_T_ANY                           ((dev_t)-2)
+#define        DI_MAJOR_T_UNKNOWN                      ((major_t)0)
+
+#define        DDI_PROP_DONTPASS                       0x0001
+#define        DDI_PROP_CANSLEEP                       0x0002
+
+#define        DDI_SUCCESS                             0
+#define        DDI_FAILURE                             -1
+
+#define        ddi_prop_lookup_string(x1, x2, x3, x4, x5)      (*x5 = NULL)
+#define        ddi_prop_free(x)                                (void)0
+#define        ddi_root_node()                                 (void)0
+
+extern int ddi_strtoul(const char *, char **, int, unsigned long *);
+extern int ddi_strtol(const char *, char **, int, long *);
+extern int ddi_strtoull(const char *, char **, int, unsigned long long *);
+extern int ddi_strtoll(const char *, char **, int, long long *);
+
+extern int ddi_copyin(const void *from, void *to, size_t len, int flags);
+extern int ddi_copyout(const void *from, void *to, size_t len, int flags);
+
+#endif /* SPL_SUNDDI_H */
diff --git a/include/spl/sys/sysmacros.h b/include/spl/sys/sysmacros.h
new file mode 100644 (file)
index 0000000..839e7fd
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_SYSMACROS_H
+#define        _SPL_SYSMACROS_H
+
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/cpumask.h>
+#include <sys/debug.h>
+#include <sys/zone.h>
+#include <sys/signal.h>
+#include <asm/page.h>
+
+#ifdef HAVE_SCHED_RT_HEADER
+#include <linux/sched/rt.h>
+#endif
+
+#ifndef _KERNEL
+#define        _KERNEL                         __KERNEL__
+#endif
+
+#define        FALSE                           0
+#define        TRUE                            1
+
+#define        INT8_MAX                        (127)
+#define        INT8_MIN                        (-128)
+#define        UINT8_MAX                       (255)
+#define        UINT8_MIN                       (0)
+
+#define        INT16_MAX                       (32767)
+#define        INT16_MIN                       (-32768)
+#define        UINT16_MAX                      (65535)
+#define        UINT16_MIN                      (0)
+
+#define        INT32_MAX                       INT_MAX
+#define        INT32_MIN                       INT_MIN
+#define        UINT32_MAX                      UINT_MAX
+#define        UINT32_MIN                      UINT_MIN
+
+#define        INT64_MAX                       LLONG_MAX
+#define        INT64_MIN                       LLONG_MIN
+#define        UINT64_MAX                      ULLONG_MAX
+#define        UINT64_MIN                      ULLONG_MIN
+
+#define        NBBY                            8
+
+#define        MAXMSGLEN                       256
+#define        MAXNAMELEN                      256
+#define        MAXPATHLEN                      4096
+#define        MAXOFFSET_T                     LLONG_MAX
+#define        MAXBSIZE                        8192
+#define        DEV_BSIZE                       512
+#define        DEV_BSHIFT                      9 /* log2(DEV_BSIZE) */
+
+#define        proc_pageout                    NULL
+#define        curproc                         current
+#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
+#define        RLIM64_INFINITY                 (~0ULL)
+#endif
+
+/*
+ * 0..MAX_PRIO-1:              Process priority
+ * 0..MAX_RT_PRIO-1:           RT priority tasks
+ * MAX_RT_PRIO..MAX_PRIO-1:    SCHED_NORMAL tasks
+ *
+ * Treat shim tasks as SCHED_NORMAL tasks
+ */
+#define        minclsyspri                     (MAX_PRIO-1)
+#define        maxclsyspri                     (MAX_RT_PRIO)
+#define        defclsyspri                     (DEFAULT_PRIO)
+
+#ifndef NICE_TO_PRIO
+#define        NICE_TO_PRIO(nice)              (MAX_RT_PRIO + (nice) + 20)
+#endif
+#ifndef PRIO_TO_NICE
+#define        PRIO_TO_NICE(prio)              ((prio) - MAX_RT_PRIO - 20)
+#endif
+
+/*
+ * Missing macros
+ */
+#ifndef PAGESIZE
+#define        PAGESIZE                        PAGE_SIZE
+#endif
+
+#ifndef PAGESHIFT
+#define        PAGESHIFT                       PAGE_SHIFT
+#endif
+
+/* Dtrace probes do not exist in the linux kernel */
+#ifdef DTRACE_PROBE
+#undef  DTRACE_PROBE
+#endif  /* DTRACE_PROBE */
+#define        DTRACE_PROBE(a)                                 ((void)0)
+
+#ifdef DTRACE_PROBE1
+#undef  DTRACE_PROBE1
+#endif  /* DTRACE_PROBE1 */
+#define        DTRACE_PROBE1(a, b, c)                          ((void)0)
+
+#ifdef DTRACE_PROBE2
+#undef  DTRACE_PROBE2
+#endif  /* DTRACE_PROBE2 */
+#define        DTRACE_PROBE2(a, b, c, d, e)                    ((void)0)
+
+#ifdef DTRACE_PROBE3
+#undef  DTRACE_PROBE3
+#endif  /* DTRACE_PROBE3 */
+#define        DTRACE_PROBE3(a, b, c, d, e, f, g)              ((void)0)
+
+#ifdef DTRACE_PROBE4
+#undef  DTRACE_PROBE4
+#endif  /* DTRACE_PROBE4 */
+#define        DTRACE_PROBE4(a, b, c, d, e, f, g, h, i)        ((void)0)
+
+/* Missing globals */
+extern char spl_version[32];
+extern unsigned long spl_hostid;
+
+/* Missing misc functions */
+extern uint32_t zone_get_hostid(void *zone);
+extern void spl_setup(void);
+extern void spl_cleanup(void);
+
+#define        highbit(x)              __fls(x)
+#define        lowbit(x)               __ffs(x)
+
+#define        highbit64(x)            fls64(x)
+#define        makedevice(maj, min)    makedev(maj, min)
+
+/* common macros */
+#ifndef MIN
+#define        MIN(a, b)               ((a) < (b) ? (a) : (b))
+#endif
+#ifndef MAX
+#define        MAX(a, b)               ((a) < (b) ? (b) : (a))
+#endif
+#ifndef ABS
+#define        ABS(a)                  ((a) < 0 ? -(a) : (a))
+#endif
+#ifndef DIV_ROUND_UP
+#define        DIV_ROUND_UP(n, d)      (((n) + (d) - 1) / (d))
+#endif
+#ifndef roundup
+#define        roundup(x, y)           ((((x) + ((y) - 1)) / (y)) * (y))
+#endif
+#ifndef howmany
+#define        howmany(x, y)           (((x) + ((y) - 1)) / (y))
+#endif
+
+/*
+ * Compatibility macros/typedefs needed for Solaris -> Linux port
+ */
+#define        P2ALIGN(x, align)       ((x) & -(align))
+#define        P2CROSS(x, y, align)    (((x) ^ (y)) > (align) - 1)
+#define        P2ROUNDUP(x, align)     ((((x) - 1) | ((align) - 1)) + 1)
+#define        P2PHASE(x, align)       ((x) & ((align) - 1))
+#define        P2NPHASE(x, align)      (-(x) & ((align) - 1))
+#define        ISP2(x)                 (((x) & ((x) - 1)) == 0)
+#define        IS_P2ALIGNED(v, a)      ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0)
+#define        P2BOUNDARY(off, len, align) \
+                               (((off) ^ ((off) + (len) - 1)) > (align) - 1)
+
+/*
+ * Typed version of the P2* macros.  These macros should be used to ensure
+ * that the result is correctly calculated based on the data type of (x),
+ * which is passed in as the last argument, regardless of the data
+ * type of the alignment.  For example, if (x) is of type uint64_t,
+ * and we want to round it up to a page boundary using "PAGESIZE" as
+ * the alignment, we can do either
+ *
+ * P2ROUNDUP(x, (uint64_t)PAGESIZE)
+ * or
+ * P2ROUNDUP_TYPED(x, PAGESIZE, uint64_t)
+ */
+#define        P2ALIGN_TYPED(x, align, type)   \
+       ((type)(x) & -(type)(align))
+#define        P2PHASE_TYPED(x, align, type)   \
+       ((type)(x) & ((type)(align) - 1))
+#define        P2NPHASE_TYPED(x, align, type)  \
+       (-(type)(x) & ((type)(align) - 1))
+#define        P2ROUNDUP_TYPED(x, align, type) \
+       ((((type)(x) - 1) | ((type)(align) - 1)) + 1)
+#define        P2END_TYPED(x, align, type)     \
+       (-(~(type)(x) & -(type)(align)))
+#define        P2PHASEUP_TYPED(x, align, phase, type)  \
+       ((type)(phase) - (((type)(phase) - (type)(x)) & -(type)(align)))
+#define        P2CROSS_TYPED(x, y, align, type)        \
+       (((type)(x) ^ (type)(y)) > (type)(align) - 1)
+#define        P2SAMEHIGHBIT_TYPED(x, y, type) \
+       (((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y)))
+
+#if defined(_KERNEL) && !defined(_KMEMUSER) && !defined(offsetof)
+
+/* avoid any possibility of clashing with <stddef.h> version */
+
+#define        offsetof(s, m)  ((size_t)(&(((s *)0)->m)))
+#endif
+
+#endif  /* _SPL_SYSMACROS_H */
diff --git a/include/spl/sys/systeminfo.h b/include/spl/sys/systeminfo.h
new file mode 100644 (file)
index 0000000..2255691
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_SYSTEMINFO_H
+#define        _SPL_SYSTEMINFO_H
+
+#define        HW_HOSTID_LEN           11              /* minimum buffer size needed */
+                                               /* to hold a decimal or hex */
+                                               /* hostid string */
+
+/* Supplemental definitions for Linux. */
+#define        HW_HOSTID_PATH          "/etc/hostid"   /* binary configuration file */
+#define        HW_HOSTID_MASK          0xFFFFFFFF      /* significant hostid bits */
+
+#endif /* SPL_SYSTEMINFO_H */
diff --git a/include/spl/sys/taskq.h b/include/spl/sys/taskq.h
new file mode 100644 (file)
index 0000000..7353367
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_TASKQ_H
+#define        _SPL_TASKQ_H
+
+#include <linux/module.h>
+#include <linux/gfp.h>
+#include <linux/slab.h>
+#include <linux/interrupt.h>
+#include <linux/kthread.h>
+#include <sys/types.h>
+#include <sys/thread.h>
+#include <sys/rwlock.h>
+#include <sys/wait.h>
+
+#define        TASKQ_NAMELEN           31
+
+#define        TASKQ_PREPOPULATE       0x00000001
+#define        TASKQ_CPR_SAFE          0x00000002
+#define        TASKQ_DYNAMIC           0x00000004
+#define        TASKQ_THREADS_CPU_PCT   0x00000008
+#define        TASKQ_DC_BATCH          0x00000010
+#define        TASKQ_ACTIVE            0x80000000
+
+/*
+ * Flags for taskq_dispatch. TQ_SLEEP/TQ_NOSLEEP should be same as
+ * KM_SLEEP/KM_NOSLEEP.  TQ_NOQUEUE/TQ_NOALLOC are set particularly
+ * large so as not to conflict with already used GFP_* defines.
+ */
+#define        TQ_SLEEP                0x00000000
+#define        TQ_NOSLEEP              0x00000001
+#define        TQ_PUSHPAGE             0x00000002
+#define        TQ_NOQUEUE              0x01000000
+#define        TQ_NOALLOC              0x02000000
+#define        TQ_NEW                  0x04000000
+#define        TQ_FRONT                0x08000000
+
+/*
+ * Reserved taskqid values.
+ */
+#define        TASKQID_INVALID         ((taskqid_t)0)
+#define        TASKQID_INITIAL         ((taskqid_t)1)
+
+/*
+ * spin_lock(lock) and spin_lock_nested(lock,0) are equivalent,
+ * so TQ_LOCK_DYNAMIC must not evaluate to 0
+ */
+typedef enum tq_lock_role {
+       TQ_LOCK_GENERAL =       0,
+       TQ_LOCK_DYNAMIC =       1,
+} tq_lock_role_t;
+
+typedef unsigned long taskqid_t;
+typedef void (task_func_t)(void *);
+
+typedef struct taskq {
+       spinlock_t              tq_lock;        /* protects taskq_t */
+       char                    *tq_name;       /* taskq name */
+       int                     tq_instance;    /* instance of tq_name */
+       struct list_head        tq_thread_list; /* list of all threads */
+       struct list_head        tq_active_list; /* list of active threads */
+       int                     tq_nactive;     /* # of active threads */
+       int                     tq_nthreads;    /* # of existing threads */
+       int                     tq_nspawn;      /* # of threads being spawned */
+       int                     tq_maxthreads;  /* # of threads maximum */
+       int                     tq_pri;         /* priority */
+       int                     tq_minalloc;    /* min taskq_ent_t pool size */
+       int                     tq_maxalloc;    /* max taskq_ent_t pool size */
+       int                     tq_nalloc;      /* cur taskq_ent_t pool size */
+       uint_t                  tq_flags;       /* flags */
+       taskqid_t               tq_next_id;     /* next pend/work id */
+       taskqid_t               tq_lowest_id;   /* lowest pend/work id */
+       struct list_head        tq_free_list;   /* free taskq_ent_t's */
+       struct list_head        tq_pend_list;   /* pending taskq_ent_t's */
+       struct list_head        tq_prio_list;   /* priority taskq_ent_t's */
+       struct list_head        tq_delay_list;  /* delayed taskq_ent_t's */
+       struct list_head        tq_taskqs;      /* all taskq_t's */
+       spl_wait_queue_head_t   tq_work_waitq;  /* new work waitq */
+       spl_wait_queue_head_t   tq_wait_waitq;  /* wait waitq */
+       tq_lock_role_t          tq_lock_class;  /* class when taking tq_lock */
+} taskq_t;
+
+typedef struct taskq_ent {
+       spinlock_t              tqent_lock;
+       spl_wait_queue_head_t   tqent_waitq;
+       struct timer_list       tqent_timer;
+       struct list_head        tqent_list;
+       taskqid_t               tqent_id;
+       task_func_t             *tqent_func;
+       void                    *tqent_arg;
+       taskq_t                 *tqent_taskq;
+       uintptr_t               tqent_flags;
+       unsigned long           tqent_birth;
+} taskq_ent_t;
+
+#define        TQENT_FLAG_PREALLOC     0x1
+#define        TQENT_FLAG_CANCEL       0x2
+
+typedef struct taskq_thread {
+       struct list_head        tqt_thread_list;
+       struct list_head        tqt_active_list;
+       struct task_struct      *tqt_thread;
+       taskq_t                 *tqt_tq;
+       taskqid_t               tqt_id;
+       taskq_ent_t             *tqt_task;
+       uintptr_t               tqt_flags;
+} taskq_thread_t;
+
+/* Global system-wide dynamic task queue available for all consumers */
+extern taskq_t *system_taskq;
+/* Global dynamic task queue for long delay */
+extern taskq_t *system_delay_taskq;
+
+/* List of all taskqs */
+extern struct list_head tq_list;
+extern struct rw_semaphore tq_list_sem;
+
+extern taskqid_t taskq_dispatch(taskq_t *, task_func_t, void *, uint_t);
+extern taskqid_t taskq_dispatch_delay(taskq_t *, task_func_t, void *,
+    uint_t, clock_t);
+extern void taskq_dispatch_ent(taskq_t *, task_func_t, void *, uint_t,
+    taskq_ent_t *);
+extern int taskq_empty_ent(taskq_ent_t *);
+extern void taskq_init_ent(taskq_ent_t *);
+extern taskq_t *taskq_create(const char *, int, pri_t, int, int, uint_t);
+extern void taskq_destroy(taskq_t *);
+extern void taskq_wait_id(taskq_t *, taskqid_t);
+extern void taskq_wait_outstanding(taskq_t *, taskqid_t);
+extern void taskq_wait(taskq_t *);
+extern int taskq_cancel_id(taskq_t *, taskqid_t);
+extern int taskq_member(taskq_t *, kthread_t *);
+
+#define        taskq_create_proc(name, nthreads, pri, min, max, proc, flags) \
+    taskq_create(name, nthreads, pri, min, max, flags)
+#define        taskq_create_sysdc(name, nthreads, min, max, proc, dc, flags) \
+    taskq_create(name, nthreads, maxclsyspri, min, max, flags)
+
+int spl_taskq_init(void);
+void spl_taskq_fini(void);
+
+#endif  /* _SPL_TASKQ_H */
diff --git a/include/spl/sys/thread.h b/include/spl/sys/thread.h
new file mode 100644 (file)
index 0000000..3762717
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_THREAD_H
+#define        _SPL_THREAD_H
+
+#include <linux/module.h>
+#include <linux/mm.h>
+#include <linux/spinlock.h>
+#include <linux/kthread.h>
+#include <sys/types.h>
+#include <sys/sysmacros.h>
+#include <sys/tsd.h>
+
+/*
+ * Thread interfaces
+ */
+#define        TP_MAGIC                        0x53535353
+
+#define        TS_SLEEP                        TASK_INTERRUPTIBLE
+#define        TS_RUN                          TASK_RUNNING
+#define        TS_ZOMB                         EXIT_ZOMBIE
+#define        TS_STOPPED                      TASK_STOPPED
+
+typedef void (*thread_func_t)(void *);
+
+/* BEGIN CSTYLED */
+#define        thread_create(stk, stksize, func, arg, len, pp, state, pri)     \
+       __thread_create(stk, stksize, (thread_func_t)func,              \
+       #func, arg, len, pp, state, pri)
+/* END CSTYLED */
+
+#define        thread_exit()                   __thread_exit()
+#define        thread_join(t)                  VERIFY(0)
+#define        curthread                       current
+#define        getcomm()                       current->comm
+#define        getpid()                        current->pid
+
+extern kthread_t *__thread_create(caddr_t stk, size_t  stksize,
+    thread_func_t func, const char *name, void *args, size_t len, proc_t *pp,
+    int state, pri_t pri);
+extern void __thread_exit(void);
+extern struct task_struct *spl_kthread_create(int (*func)(void *),
+    void *data, const char namefmt[], ...);
+
+extern proc_t p0;
+
+#endif  /* _SPL_THREAD_H */
diff --git a/include/spl/sys/time.h b/include/spl/sys/time.h
new file mode 100644 (file)
index 0000000..d6aaca9
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_TIME_H
+#define        _SPL_TIME_H
+
+#include <linux/module.h>
+#include <linux/time.h>
+#include <sys/types.h>
+#include <sys/timer.h>
+
+#if defined(CONFIG_64BIT)
+#define        TIME_MAX                        INT64_MAX
+#define        TIME_MIN                        INT64_MIN
+#else
+#define        TIME_MAX                        INT32_MAX
+#define        TIME_MIN                        INT32_MIN
+#endif
+
+#define        SEC                             1
+#define        MILLISEC                        1000
+#define        MICROSEC                        1000000
+#define        NANOSEC                         1000000000
+
+#define        MSEC2NSEC(m)    ((hrtime_t)(m) * (NANOSEC / MILLISEC))
+#define        NSEC2MSEC(n)    ((n) / (NANOSEC / MILLISEC))
+
+#define        USEC2NSEC(m)    ((hrtime_t)(m) * (NANOSEC / MICROSEC))
+#define        NSEC2USEC(n)    ((n) / (NANOSEC / MICROSEC))
+
+#define        NSEC2SEC(n)     ((n) / (NANOSEC / SEC))
+#define        SEC2NSEC(m)     ((hrtime_t)(m) * (NANOSEC / SEC))
+
+static const int hz = HZ;
+
+#define        TIMESPEC_OVERFLOW(ts)           \
+       ((ts)->tv_sec < TIME_MIN || (ts)->tv_sec > TIME_MAX)
+
+static inline void
+gethrestime(timestruc_t *now)
+{
+       *now = current_kernel_time();
+}
+
+static inline time_t
+gethrestime_sec(void)
+{
+       struct timespec ts;
+       ts = current_kernel_time();
+       return (ts.tv_sec);
+}
+
+static inline hrtime_t
+gethrtime(void)
+{
+       struct timespec now;
+       getrawmonotonic(&now);
+       return (((hrtime_t)now.tv_sec * NSEC_PER_SEC) + now.tv_nsec);
+}
+
+#endif  /* _SPL_TIME_H */
diff --git a/include/spl/sys/timer.h b/include/spl/sys/timer.h
new file mode 100644 (file)
index 0000000..a6b1345
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_TIMER_H
+#define        _SPL_TIMER_H
+
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <linux/sched.h>
+#include <linux/time.h>
+#include <linux/timer.h>
+
+#define        lbolt                           ((clock_t)jiffies)
+#define        lbolt64                         ((int64_t)get_jiffies_64())
+
+#define        ddi_get_lbolt()                 ((clock_t)jiffies)
+#define        ddi_get_lbolt64()               ((int64_t)get_jiffies_64())
+
+#define        ddi_time_before(a, b)           (typecheck(clock_t, a) && \
+                                       typecheck(clock_t, b) && \
+                                       ((a) - (b) < 0))
+#define        ddi_time_after(a, b)            ddi_time_before(b, a)
+#define        ddi_time_before_eq(a, b)        (!ddi_time_after(a, b))
+#define        ddi_time_after_eq(a, b)         ddi_time_before_eq(b, a)
+
+#define        ddi_time_before64(a, b)         (typecheck(int64_t, a) && \
+                                       typecheck(int64_t, b) && \
+                                       ((a) - (b) < 0))
+#define        ddi_time_after64(a, b)          ddi_time_before64(b, a)
+#define        ddi_time_before_eq64(a, b)      (!ddi_time_after64(a, b))
+#define        ddi_time_after_eq64(a, b)       ddi_time_before_eq64(b, a)
+
+#define        delay(ticks)                    schedule_timeout_uninterruptible(ticks)
+
+/* usleep_range() introduced in 2.6.36 */
+#ifndef HAVE_USLEEP_RANGE
+static inline void
+usleep_range(unsigned long min, unsigned long max)
+{
+       unsigned int min_ms = min / USEC_PER_MSEC;
+
+       if (min >= MAX_UDELAY_MS)
+               msleep(min_ms);
+       else
+               udelay(min);
+}
+#endif /* HAVE_USLEEP_RANGE */
+
+#define        SEC_TO_TICK(sec)                ((sec) * HZ)
+#define        MSEC_TO_TICK(ms)                msecs_to_jiffies(ms)
+#define        USEC_TO_TICK(us)                usecs_to_jiffies(us)
+#define        NSEC_TO_TICK(ns)                usecs_to_jiffies(ns / NSEC_PER_USEC)
+
+#endif  /* _SPL_TIMER_H */
diff --git a/include/spl/sys/tsd.h b/include/spl/sys/tsd.h
new file mode 100644 (file)
index 0000000..39a291b
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ *  Copyright (C) 2010 Lawrence Livermore National Security, LLC.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_TSD_H
+#define        _SPL_TSD_H
+
+#include <sys/types.h>
+
+#define        TSD_HASH_TABLE_BITS_DEFAULT     9
+#define        TSD_KEYS_MAX                    32768
+#define        DTOR_PID                        (PID_MAX_LIMIT+1)
+#define        PID_KEY                         (TSD_KEYS_MAX+1)
+
+typedef void (*dtor_func_t)(void *);
+
+extern int tsd_set(uint_t, void *);
+extern void *tsd_get(uint_t);
+extern void *tsd_get_by_thread(uint_t, kthread_t *);
+extern void tsd_create(uint_t *, dtor_func_t);
+extern void tsd_destroy(uint_t *);
+extern void tsd_exit(void);
+
+int spl_tsd_init(void);
+void spl_tsd_fini(void);
+
+#endif /* _SPL_TSD_H */
diff --git a/include/spl/sys/types.h b/include/spl/sys/types.h
new file mode 100644 (file)
index 0000000..a5b4781
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_TYPES_H
+#define        _SPL_TYPES_H
+
+#include <linux/types.h>
+
+#ifndef ULLONG_MAX
+#define        ULLONG_MAX                      (~0ULL)
+#endif
+
+#ifndef LLONG_MAX
+#define        LLONG_MAX                       ((long long)(~0ULL>>1))
+#endif
+
+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 unsigned long          intptr_t;
+typedef unsigned long long     rlim64_t;
+
+typedef struct task_struct     kthread_t;
+typedef struct task_struct     proc_t;
+
+typedef struct timespec                timestruc_t;
+typedef struct timespec                timespec_t;
+typedef longlong_t             hrtime_t;
+
+typedef int                    id_t;
+typedef short                  pri_t;
+typedef short                  index_t;
+typedef longlong_t             offset_t;
+typedef u_longlong_t           u_offset_t;
+typedef ulong_t                        pgcnt_t;
+
+typedef int                    major_t;
+typedef int                    minor_t;
+
+#endif /* _SPL_TYPES_H */
diff --git a/include/spl/sys/types32.h b/include/spl/sys/types32.h
new file mode 100644 (file)
index 0000000..c60ba8c
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_TYPES32_H
+#define        _SPL_TYPES32_H
+
+#include <sys/types.h>
+
+typedef uint32_t       caddr32_t;
+typedef int32_t                daddr32_t;
+typedef int32_t                time32_t;
+typedef uint32_t       size32_t;
+
+#endif /* _SPL_TYPES32_H */
diff --git a/include/spl/sys/uio.h b/include/spl/sys/uio.h
new file mode 100644 (file)
index 0000000..64c452b
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Copyright (c) 2015 by Chunwei Chen. All rights reserved.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_UIO_H
+#define        _SPL_UIO_H
+
+#include <linux/uio.h>
+#include <linux/blkdev.h>
+#include <asm/uaccess.h>
+#include <sys/types.h>
+
+typedef struct iovec iovec_t;
+
+typedef enum uio_rw {
+       UIO_READ =              0,
+       UIO_WRITE =             1,
+} uio_rw_t;
+
+typedef enum uio_seg {
+       UIO_USERSPACE =         0,
+       UIO_SYSSPACE =          1,
+       UIO_USERISPACE =        2,
+       UIO_BVEC =              3,
+} uio_seg_t;
+
+typedef struct uio {
+       union {
+               const struct iovec      *uio_iov;
+               const struct bio_vec    *uio_bvec;
+       };
+       int             uio_iovcnt;
+       offset_t        uio_loffset;
+       uio_seg_t       uio_segflg;
+       uint16_t        uio_fmode;
+       uint16_t        uio_extflg;
+       offset_t        uio_limit;
+       ssize_t         uio_resid;
+       size_t          uio_skip;
+} uio_t;
+
+typedef struct aio_req {
+       uio_t           *aio_uio;
+       void            *aio_private;
+} aio_req_t;
+
+typedef enum xuio_type {
+       UIOTYPE_ASYNCIO,
+       UIOTYPE_ZEROCOPY,
+} xuio_type_t;
+
+
+#define        UIOA_IOV_MAX    16
+
+typedef struct uioa_page_s {
+       int     uioa_pfncnt;
+       void    **uioa_ppp;
+       caddr_t uioa_base;
+       size_t  uioa_len;
+} uioa_page_t;
+
+typedef struct xuio {
+       uio_t xu_uio;
+       enum xuio_type xu_type;
+       union {
+               struct {
+                       uint32_t xu_a_state;
+                       ssize_t xu_a_mbytes;
+                       uioa_page_t *xu_a_lcur;
+                       void **xu_a_lppp;
+                       void *xu_a_hwst[4];
+                       uioa_page_t xu_a_locked[UIOA_IOV_MAX];
+               } xu_aio;
+
+               struct {
+                       int xu_zc_rw;
+                       void *xu_zc_priv;
+               } xu_zc;
+       } xu_ext;
+} xuio_t;
+
+#define        XUIO_XUZC_PRIV(xuio)    xuio->xu_ext.xu_zc.xu_zc_priv
+#define        XUIO_XUZC_RW(xuio)      xuio->xu_ext.xu_zc.xu_zc_rw
+
+#endif /* SPL_UIO_H */
diff --git a/include/spl/sys/user.h b/include/spl/sys/user.h
new file mode 100644 (file)
index 0000000..b12cb24
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ *  Copyright (C) 2015 Cluster Inc.
+ *  Produced at ClusterHQ Inc (cf, DISCLAIMER).
+ *  Written by Richard Yao <richard.yao@clusterhq.com>.
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_USER_H
+#define        _SPL_USER_H
+
+/*
+ * We have uf_info_t for areleasef(). We implement areleasef() using a global
+ * linked list of all open file descriptors with the task structs referenced,
+ * so accessing the correct descriptor from areleasef() only requires knowing
+ * about the Linux task_struct. Since this is internal to our compatibility
+ * layer, we make it an opaque type.
+ *
+ * XXX: If the descriptor changes under us and we do not do a getf() between
+ * the change and using it, we would get an incorrect reference.
+ */
+
+struct uf_info;
+typedef struct uf_info uf_info_t;
+
+#define        P_FINFO(x) ((uf_info_t *)x)
+
+#endif /* SPL_USER_H */
diff --git a/include/spl/sys/vfs.h b/include/spl/sys/vfs.h
new file mode 100644 (file)
index 0000000..0d5e1d5
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_ZFS_H
+#define        _SPL_ZFS_H
+
+#include <linux/mount.h>
+#include <linux/fs.h>
+#include <linux/dcache.h>
+#include <linux/statfs.h>
+#include <linux/xattr.h>
+#include <linux/security.h>
+#include <linux/seq_file.h>
+
+#define        MAXFIDSZ        64
+
+typedef struct spl_fid {
+       union {
+               long fid_pad;
+               struct {
+                       ushort_t len;           /* length of data in bytes */
+                       char data[MAXFIDSZ];    /* data (variable len) */
+               } _fid;
+       } un;
+} fid_t;
+
+#define        fid_len         un._fid.len
+#define        fid_data        un._fid.data
+
+#endif /* SPL_ZFS_H */
diff --git a/include/spl/sys/vmem.h b/include/spl/sys/vmem.h
new file mode 100644 (file)
index 0000000..a9b12ee
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_VMEM_H
+#define        _SPL_VMEM_H
+
+#include <sys/kmem.h>
+#include <linux/sched.h>
+#include <linux/vmalloc.h>
+
+typedef struct vmem { } vmem_t;
+
+extern vmem_t *heap_arena;
+extern vmem_t *zio_alloc_arena;
+extern vmem_t *zio_arena;
+
+extern size_t vmem_size(vmem_t *vmp, int typemask);
+
+/*
+ * Memory allocation interfaces
+ */
+#define        VMEM_ALLOC      0x01
+#define        VMEM_FREE       0x02
+
+#ifndef VMALLOC_TOTAL
+#define        VMALLOC_TOTAL   (VMALLOC_END - VMALLOC_START)
+#endif
+
+/*
+ * vmem_* is an interface to a low level arena-based memory allocator on
+ * Illumos that is used to allocate virtual address space. The kmem SLAB
+ * allocator allocates slabs from it. Then the generic allocation functions
+ * kmem_{alloc,zalloc,free}() are layered on top of SLAB allocators.
+ *
+ * On Linux, the primary means of doing allocations is via kmalloc(), which
+ * is similarly layered on top of something called the buddy allocator. The
+ * buddy allocator is not available to kernel modules, it uses physical
+ * memory addresses rather than virtual memory addresses and is prone to
+ * fragmentation.
+ *
+ * Linux sets aside a relatively small address space for in-kernel virtual
+ * memory from which allocations can be done using vmalloc().  It might seem
+ * like a good idea to use vmalloc() to implement something similar to
+ * Illumos' allocator. However, this has the following problems:
+ *
+ * 1. Page directory table allocations are hard coded to use GFP_KERNEL.
+ *    Consequently, any KM_PUSHPAGE or KM_NOSLEEP allocations done using
+ *    vmalloc() will not have proper semantics.
+ *
+ * 2. Address space exhaustion is a real issue on 32-bit platforms where
+ *    only a few 100MB are available. The kernel will handle it by spinning
+ *    when it runs out of address space.
+ *
+ * 3. All vmalloc() allocations and frees are protected by a single global
+ *    lock which serializes all allocations.
+ *
+ * 4. Accessing /proc/meminfo and /proc/vmallocinfo will iterate the entire
+ *    list. The former will sum the allocations while the latter will print
+ *    them to user space in a way that user space can keep the lock held
+ *    indefinitely.  When the total number of mapped allocations is large
+ *    (several 100,000) a large amount of time will be spent waiting on locks.
+ *
+ * 5. Linux has a wait_on_bit() locking primitive that assumes physical
+ *    memory is used, it simply does not work on virtual memory.  Certain
+ *    Linux structures (e.g. the superblock) use them and might be embedded
+ *    into a structure from Illumos.  This makes using Linux virtual memory
+ *    unsafe in certain situations.
+ *
+ * It follows that we cannot obtain identical semantics to those on Illumos.
+ * Consequently, we implement the kmem_{alloc,zalloc,free}() functions in
+ * such a way that they can be used as drop-in replacements for small vmem_*
+ * allocations (8MB in size or smaller) and map vmem_{alloc,zalloc,free}()
+ * to them.
+ */
+
+#define        vmem_alloc(sz, fl)      spl_vmem_alloc((sz), (fl), __func__, __LINE__)
+#define        vmem_zalloc(sz, fl)     spl_vmem_zalloc((sz), (fl), __func__, __LINE__)
+#define        vmem_free(ptr, sz)      spl_vmem_free((ptr), (sz))
+#define        vmem_qcache_reap(ptr)   ((void)0)
+
+extern void *spl_vmem_alloc(size_t sz, int fl, const char *func, int line);
+extern void *spl_vmem_zalloc(size_t sz, int fl, const char *func, int line);
+extern void spl_vmem_free(const void *ptr, size_t sz);
+
+int spl_vmem_init(void);
+void spl_vmem_fini(void);
+
+#endif /* _SPL_VMEM_H */
diff --git a/include/spl/sys/vmsystm.h b/include/spl/sys/vmsystm.h
new file mode 100644 (file)
index 0000000..2b48fe0
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_VMSYSTM_H
+#define        _SPL_VMSYSTM_H
+
+#include <linux/mmzone.h>
+#include <linux/mm.h>
+#include <linux/swap.h>
+#include <linux/highmem.h>
+#include <linux/vmalloc.h>
+#include <sys/types.h>
+#include <asm/uaccess.h>
+
+#define        membar_producer()               smp_wmb()
+#define        physmem                         totalram_pages
+#define        freemem                 (nr_free_pages() + \
+                               global_page_state(NR_INACTIVE_FILE) + \
+                               global_page_state(NR_INACTIVE_ANON) + \
+                               global_page_state(NR_SLAB_RECLAIMABLE))
+
+#define        xcopyin(from, to, size)         copy_from_user(to, from, size)
+#define        xcopyout(from, to, size)        copy_to_user(to, from, size)
+
+static __inline__ int
+copyin(const void *from, void *to, size_t len)
+{
+       /* On error copyin routine returns -1 */
+       if (xcopyin(from, to, len))
+               return (-1);
+
+       return (0);
+}
+
+static __inline__ int
+copyout(const void *from, void *to, size_t len)
+{
+       /* On error copyout routine returns -1 */
+       if (xcopyout(from, to, len))
+               return (-1);
+
+       return (0);
+}
+
+static __inline__ int
+copyinstr(const void *from, void *to, size_t len, size_t *done)
+{
+       size_t rc;
+
+       if (len == 0)
+               return (-ENAMETOOLONG);
+
+       /* XXX: Should return ENAMETOOLONG if 'strlen(from) > len' */
+
+       memset(to, 0, len);
+       rc = copyin(from, to, len - 1);
+       if (done != NULL)
+               *done = rc;
+
+       return (0);
+}
+
+#endif /* SPL_VMSYSTM_H */
diff --git a/include/spl/sys/vnode.h b/include/spl/sys/vnode.h
new file mode 100644 (file)
index 0000000..a3f7828
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_VNODE_H
+#define        _SPL_VNODE_H
+
+#include <linux/module.h>
+#include <linux/syscalls.h>
+#include <linux/fcntl.h>
+#include <linux/buffer_head.h>
+#include <linux/dcache.h>
+#include <linux/namei.h>
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/fs_struct.h>
+#include <linux/mount.h>
+#include <sys/kmem.h>
+#include <sys/mutex.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/uio.h>
+#include <sys/user.h>
+
+/*
+ * Prior to linux-2.6.33 only O_DSYNC semantics were implemented and
+ * they used the O_SYNC flag.  As of linux-2.6.33 the this behavior
+ * was properly split in to O_SYNC and O_DSYNC respectively.
+ */
+#ifndef O_DSYNC
+#define        O_DSYNC         O_SYNC
+#endif
+
+#define        FREAD           1
+#define        FWRITE          2
+#define        FCREAT          O_CREAT
+#define        FTRUNC          O_TRUNC
+#define        FOFFMAX         O_LARGEFILE
+#define        FSYNC           O_SYNC
+#define        FDSYNC          O_DSYNC
+#define        FRSYNC          O_SYNC
+#define        FEXCL           O_EXCL
+#define        FDIRECT         O_DIRECT
+#define        FAPPEND         O_APPEND
+
+#define        FNODSYNC        0x10000 /* fsync pseudo flag */
+#define        FNOFOLLOW       0x20000 /* don't follow symlinks */
+
+#define        F_FREESP        11      /* Free file space */
+
+
+/*
+ * The vnode AT_ flags are mapped to the Linux ATTR_* flags.
+ * This allows them to be used safely with an iattr structure.
+ * The AT_XVATTR flag has been added and mapped to the upper
+ * bit range to avoid conflicting with the standard Linux set.
+ */
+#undef AT_UID
+#undef AT_GID
+
+#define        AT_MODE         ATTR_MODE
+#define        AT_UID          ATTR_UID
+#define        AT_GID          ATTR_GID
+#define        AT_SIZE         ATTR_SIZE
+#define        AT_ATIME        ATTR_ATIME
+#define        AT_MTIME        ATTR_MTIME
+#define        AT_CTIME        ATTR_CTIME
+
+#define        ATTR_XVATTR     (1 << 31)
+#define        AT_XVATTR       ATTR_XVATTR
+
+#define        ATTR_IATTR_MASK (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE | \
+                       ATTR_ATIME | ATTR_MTIME | ATTR_CTIME | ATTR_FILE)
+
+#define        CRCREAT         0x01
+#define        RMFILE          0x02
+
+#define        B_INVAL         0x01
+#define        B_TRUNC         0x02
+
+#define        LOOKUP_DIR              0x01
+#define        LOOKUP_XATTR            0x02
+#define        CREATE_XATTR_DIR        0x04
+#define        ATTR_NOACLCHECK         0x20
+
+typedef enum vtype {
+       VNON            = 0,
+       VREG            = 1,
+       VDIR            = 2,
+       VBLK            = 3,
+       VCHR            = 4,
+       VLNK            = 5,
+       VFIFO           = 6,
+       VDOOR           = 7,
+       VPROC           = 8,
+       VSOCK           = 9,
+       VPORT           = 10,
+       VBAD            = 11
+} vtype_t;
+
+typedef struct vattr {
+       enum vtype      va_type;        /* vnode type */
+       uint_t          va_mask;        /* attribute bit-mask */
+       ushort_t        va_mode;        /* acc mode */
+       uid_t           va_uid;         /* owner uid */
+       gid_t           va_gid;         /* owner gid */
+       long            va_fsid;        /* fs id */
+       long            va_nodeid;      /* node # */
+       uint32_t        va_nlink;       /* # links */
+       uint64_t        va_size;        /* file size */
+       struct timespec va_atime;       /* last acc */
+       struct timespec va_mtime;       /* last mod */
+       struct timespec va_ctime;       /* last chg */
+       dev_t           va_rdev;        /* dev */
+       uint64_t        va_nblocks;     /* space used */
+       uint32_t        va_blksize;     /* block size */
+       uint32_t        va_seq;         /* sequence */
+       struct dentry   *va_dentry;     /* dentry to wire */
+} vattr_t;
+
+typedef struct vnode {
+       struct file     *v_file;
+       kmutex_t        v_lock;         /* protects vnode fields */
+       uint_t          v_flag;         /* vnode flags (see below) */
+       uint_t          v_count;        /* reference count */
+       void            *v_data;        /* private data for fs */
+       struct vfs      *v_vfsp;        /* ptr to containing VFS */
+       struct stdata   *v_stream;      /* associated stream */
+       enum vtype      v_type;         /* vnode type */
+       dev_t           v_rdev;         /* device (VCHR, VBLK) */
+       gfp_t           v_gfp_mask;     /* original mapping gfp mask */
+} vnode_t;
+
+typedef struct vn_file {
+       int             f_fd;           /* linux fd for lookup */
+       struct task_struct *f_task;     /* linux task this fd belongs to */
+       struct file     *f_file;        /* linux file struct */
+       atomic_t        f_ref;          /* ref count */
+       kmutex_t        f_lock;         /* struct lock */
+       loff_t          f_offset;       /* offset */
+       vnode_t         *f_vnode;       /* vnode */
+       struct list_head f_list;        /* list referenced file_t's */
+} file_t;
+
+extern vnode_t *vn_alloc(int flag);
+void vn_free(vnode_t *vp);
+extern vtype_t vn_mode_to_vtype(mode_t);
+extern mode_t vn_vtype_to_mode(vtype_t);
+extern int vn_open(const char *path, uio_seg_t seg, int flags, int mode,
+    vnode_t **vpp, int x1, void *x2);
+extern int vn_openat(const char *path, uio_seg_t seg, int flags, int mode,
+    vnode_t **vpp, int x1, void *x2, vnode_t *vp, int fd);
+extern int vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len,
+    offset_t off, uio_seg_t seg, int x1, rlim64_t x2,
+    void *x3, ssize_t *residp);
+extern int vn_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4);
+extern int vn_seek(vnode_t *vp, offset_t o, offset_t *op, void *ct);
+
+extern int vn_getattr(vnode_t *vp, vattr_t *vap, int flags, void *x3, void *x4);
+extern int vn_fsync(vnode_t *vp, int flags, void *x3, void *x4);
+extern int vn_space(vnode_t *vp, int cmd, struct flock *bfp, int flag,
+    offset_t offset, void *x6, void *x7);
+extern file_t *vn_getf(int fd);
+extern void vn_releasef(int fd);
+extern void vn_areleasef(int fd, uf_info_t *fip);
+extern int vn_set_pwd(const char *filename);
+
+int spl_vn_init(void);
+void spl_vn_fini(void);
+
+#define        VOP_CLOSE                               vn_close
+#define        VOP_SEEK                                vn_seek
+#define        VOP_GETATTR                             vn_getattr
+#define        VOP_FSYNC                               vn_fsync
+#define        VOP_SPACE                               vn_space
+#define        VOP_PUTPAGE(vp, o, s, f, x1, x2)        ((void)0)
+#define        vn_is_readonly(vp)                      0
+#define        getf                                    vn_getf
+#define        releasef                                vn_releasef
+#define        areleasef                               vn_areleasef
+
+extern vnode_t *rootdir;
+
+#endif /* SPL_VNODE_H */
diff --git a/include/spl/sys/wait.h b/include/spl/sys/wait.h
new file mode 100644 (file)
index 0000000..5311ff8
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ *  Copyright (C) 2007-2014 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_WAIT_H
+#define        _SPL_WAIT_H
+
+#include <linux/sched.h>
+#include <linux/wait.h>
+
+#ifndef HAVE_WAIT_ON_BIT_ACTION
+#define        spl_wait_on_bit(word, bit, mode)        wait_on_bit(word, bit, mode)
+#else
+
+static inline int
+spl_bit_wait(void *word)
+{
+       schedule();
+       return (0);
+}
+
+#define        spl_wait_on_bit(word, bit, mode)                \
+       wait_on_bit(word, bit, spl_bit_wait, mode)
+
+#endif /* HAVE_WAIT_ON_BIT_ACTION */
+
+#ifdef HAVE_WAIT_QUEUE_ENTRY_T
+typedef wait_queue_head_t      spl_wait_queue_head_t;
+typedef wait_queue_entry_t     spl_wait_queue_entry_t;
+#else
+typedef wait_queue_head_t      spl_wait_queue_head_t;
+typedef wait_queue_t           spl_wait_queue_entry_t;
+#endif
+
+#endif /* SPL_WAIT_H */
diff --git a/include/spl/sys/zmod.h b/include/spl/sys/zmod.h
new file mode 100644 (file)
index 0000000..95c1a3e
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ *  z_compress_level/z_uncompress are nearly identical copies of the
+ *  compress2/uncompress functions provided by the official zlib package
+ *  available at http://zlib.net/.  The only changes made we to slightly
+ *  adapt the functions called to match the linux kernel implementation
+ *  of zlib.  The full zlib license follows:
+ *
+ *  zlib.h -- interface of the 'zlib' general purpose compression library
+ *  version 1.2.5, April 19th, 2010
+ *
+ *  Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
+ *
+ *  This software is provided 'as-is', without any express or implied
+ *  warranty.  In no event will the authors be held liable for any damages
+ *  arising from the use of this software.
+ *
+ *  Permission is granted to anyone to use this software for any purpose,
+ *  including commercial applications, and to alter it and redistribute it
+ *  freely, subject to the following restrictions:
+ *
+ *  1. The origin of this software must not be misrepresented; you must not
+ *     claim that you wrote the original software. If you use this software
+ *     in a product, an acknowledgment in the product documentation would be
+ *     appreciated but is not required.
+ *  2. Altered source versions must be plainly marked as such, and must not be
+ *     misrepresented as being the original software.
+ *  3. This notice may not be removed or altered from any source distribution.
+ *
+ *  Jean-loup Gailly
+ *  Mark Adler
+ */
+
+#ifndef _SPL_ZMOD_H
+#define        _SPL_ZMOD_H
+
+#include <sys/types.h>
+#include <linux/zlib.h>
+
+#ifdef HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE
+#define        spl_zlib_deflate_workspacesize(wb, ml) \
+       zlib_deflate_workspacesize(wb, ml)
+#else
+#define        spl_zlib_deflate_workspacesize(wb, ml) \
+       zlib_deflate_workspacesize()
+#endif /* HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE */
+
+extern int z_compress_level(void *dest, size_t *destLen, const void *source,
+    size_t sourceLen, int level);
+extern int z_uncompress(void *dest, size_t *destLen, const void *source,
+    size_t sourceLen);
+
+int spl_zlib_init(void);
+void spl_zlib_fini(void);
+
+#endif /* SPL_ZMOD_H */
diff --git a/include/spl/sys/zone.h b/include/spl/sys/zone.h
new file mode 100644 (file)
index 0000000..b2efd13
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
+ *  Copyright (C) 2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
+ *  UCRL-CODE-235197
+ *
+ *  This file is part of the SPL, Solaris Porting Layer.
+ *  For details, see <http://zfsonlinux.org/>.
+ *
+ *  The SPL is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *  The SPL is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SPL_ZONE_H
+#define        _SPL_ZONE_H
+
+#include <sys/byteorder.h>
+
+#define        GLOBAL_ZONEID                   0
+
+#define        zone_dataset_visible(x, y)      (1)
+#define        crgetzoneid(x)                  (GLOBAL_ZONEID)
+#define        INGLOBALZONE(z)                 (1)
+
+#endif /* SPL_ZONE_H */
diff --git a/include/splat-ctl.h b/include/splat-ctl.h
deleted file mode 100644 (file)
index 0f020dc..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPLAT_CTL_H
-#define        _SPLAT_CTL_H
-
-#include <linux/types.h>
-
-/*
- * Contains shared definitions for both user space and kernel space.  To
- * ensure 32-bit/64-bit interoperability over ioctl()'s only types with
- * fixed sizes can be used.
- */
-#define        SPLAT_NAME                      "splatctl"
-#define        SPLAT_DEV                       "/dev/splatctl"
-
-#define        SPLAT_NAME_SIZE                 20
-#define        SPLAT_DESC_SIZE                 60
-
-typedef struct splat_user {
-       char name[SPLAT_NAME_SIZE];     /* Short name */
-       char desc[SPLAT_DESC_SIZE];     /* Short description */
-       __u32 id;                       /* Unique numeric id */
-} splat_user_t;
-
-#define        SPLAT_CFG_MAGIC                 0x15263748U
-typedef struct splat_cfg {
-       __u32 cfg_magic;                /* Unique magic */
-       __u32 cfg_cmd;                  /* Configure command */
-       __s32 cfg_arg1;                 /* Configure command arg 1 */
-       __s32 cfg_rc1;                  /* Configure response 1 */
-       union {
-               struct {
-                       __u32 size;
-                       splat_user_t descs[0];
-               } splat_subsystems;
-               struct {
-                       __u32 size;
-                       splat_user_t descs[0];
-               } splat_tests;
-       } cfg_data;
-} splat_cfg_t;
-
-#define        SPLAT_CMD_MAGIC                 0x9daebfc0U
-typedef struct splat_cmd {
-       __u32 cmd_magic;                /* Unique magic */
-       __u32 cmd_subsystem;            /* Target subsystem */
-       __u32 cmd_test;                 /* Subsystem test */
-       __u32 cmd_data_size;            /* Opaque data size */
-       char cmd_data_str[0];           /* Opaque data region */
-} splat_cmd_t;
-
-/* Valid ioctls */
-#define        SPLAT_CFG                       _IOWR('f', 101, splat_cfg_t)
-#define        SPLAT_CMD                       _IOWR('f', 102, splat_cmd_t)
-
-/* Valid configuration commands */
-#define        SPLAT_CFG_BUFFER_CLEAR          0x001   /* Clear text buffer */
-#define        SPLAT_CFG_BUFFER_SIZE           0x002   /* Resize text buffer */
-#define        SPLAT_CFG_SUBSYSTEM_COUNT       0x101   /* Number of subsystem */
-#define        SPLAT_CFG_SUBSYSTEM_LIST        0x102   /* List of N subsystems */
-#define        SPLAT_CFG_TEST_COUNT            0x201   /* Number of tests */
-#define        SPLAT_CFG_TEST_LIST             0x202   /* List of N tests */
-
-/*
- * Valid subsystem and test commands are defined in each subsystem as
- * SPLAT_SUBSYSTEM_*.  We do need to be careful to avoid collisions, the
- * currently defined subsystems are as follows:
- */
-#define        SPLAT_SUBSYSTEM_KMEM            0x0100
-#define        SPLAT_SUBSYSTEM_TASKQ           0x0200
-#define        SPLAT_SUBSYSTEM_KRNG            0x0300
-#define        SPLAT_SUBSYSTEM_MUTEX           0x0400
-#define        SPLAT_SUBSYSTEM_CONDVAR         0x0500
-#define        SPLAT_SUBSYSTEM_THREAD          0x0600
-#define        SPLAT_SUBSYSTEM_RWLOCK          0x0700
-#define        SPLAT_SUBSYSTEM_TIME            0x0800
-#define        SPLAT_SUBSYSTEM_VNODE           0x0900
-#define        SPLAT_SUBSYSTEM_KOBJ            0x0a00
-#define        SPLAT_SUBSYSTEM_ATOMIC          0x0b00
-#define        SPLAT_SUBSYSTEM_LIST            0x0c00
-#define        SPLAT_SUBSYSTEM_GENERIC         0x0d00
-#define        SPLAT_SUBSYSTEM_CRED            0x0e00
-#define        SPLAT_SUBSYSTEM_ZLIB            0x0f00
-#define        SPLAT_SUBSYSTEM_LINUX           0x1000
-#define        SPLAT_SUBSYSTEM_UNKNOWN         0xff00
-
-#endif /* _SPLAT_CTL_H */
diff --git a/include/strings.h b/include/strings.h
deleted file mode 100644 (file)
index 18179c7..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_STRINGS_H
-#define        _SPL_STRINGS_H
-
-#endif /* SPL_STRINGS_H */
diff --git a/include/sys/Makefile.am b/include/sys/Makefile.am
deleted file mode 100644 (file)
index 45b6589..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-SUBDIRS = fm fs
-
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/sys/acl.h \
-       $(top_srcdir)/include/sys/acl_impl.h \
-       $(top_srcdir)/include/sys/atomic.h \
-       $(top_srcdir)/include/sys/attr.h \
-       $(top_srcdir)/include/sys/bitmap.h \
-       $(top_srcdir)/include/sys/bootconf.h \
-       $(top_srcdir)/include/sys/bootprops.h \
-       $(top_srcdir)/include/sys/buf.h \
-       $(top_srcdir)/include/sys/byteorder.h \
-       $(top_srcdir)/include/sys/callb.h \
-       $(top_srcdir)/include/sys/callo.h \
-       $(top_srcdir)/include/sys/cmn_err.h \
-       $(top_srcdir)/include/sys/compress.h \
-       $(top_srcdir)/include/sys/condvar.h \
-       $(top_srcdir)/include/sys/conf.h \
-       $(top_srcdir)/include/sys/console.h \
-       $(top_srcdir)/include/sys/cpupart.h \
-       $(top_srcdir)/include/sys/cpuvar.h \
-       $(top_srcdir)/include/sys/crc32.h \
-       $(top_srcdir)/include/sys/cred.h \
-       $(top_srcdir)/include/sys/ctype.h \
-       $(top_srcdir)/include/sys/ddi.h \
-       $(top_srcdir)/include/sys/debug.h \
-       $(top_srcdir)/include/sys/dirent.h \
-       $(top_srcdir)/include/sys/disp.h \
-       $(top_srcdir)/include/sys/dkio.h \
-       $(top_srcdir)/include/sys/dkioc_free_util.h \
-       $(top_srcdir)/include/sys/dklabel.h \
-       $(top_srcdir)/include/sys/dnlc.h \
-       $(top_srcdir)/include/sys/dumphdr.h \
-       $(top_srcdir)/include/sys/efi_partition.h \
-       $(top_srcdir)/include/sys/errno.h \
-       $(top_srcdir)/include/sys/extdirent.h \
-       $(top_srcdir)/include/sys/fcntl.h \
-       $(top_srcdir)/include/sys/file.h \
-       $(top_srcdir)/include/sys/idmap.h \
-       $(top_srcdir)/include/sys/int_limits.h \
-       $(top_srcdir)/include/sys/int_types.h \
-       $(top_srcdir)/include/sys/inttypes.h \
-       $(top_srcdir)/include/sys/isa_defs.h \
-       $(top_srcdir)/include/sys/kidmap.h \
-       $(top_srcdir)/include/sys/kmem.h \
-       $(top_srcdir)/include/sys/kmem_cache.h \
-       $(top_srcdir)/include/sys/kobj.h \
-       $(top_srcdir)/include/sys/kstat.h \
-       $(top_srcdir)/include/sys/list.h \
-       $(top_srcdir)/include/sys/mkdev.h \
-       $(top_srcdir)/include/sys/mntent.h \
-       $(top_srcdir)/include/sys/modctl.h \
-       $(top_srcdir)/include/sys/mode.h \
-       $(top_srcdir)/include/sys/mount.h \
-       $(top_srcdir)/include/sys/mutex.h \
-       $(top_srcdir)/include/sys/note.h \
-       $(top_srcdir)/include/sys/open.h \
-       $(top_srcdir)/include/sys/param.h \
-       $(top_srcdir)/include/sys/pathname.h \
-       $(top_srcdir)/include/sys/policy.h \
-       $(top_srcdir)/include/sys/pool.h \
-       $(top_srcdir)/include/sys/priv_impl.h \
-       $(top_srcdir)/include/sys/processor.h \
-       $(top_srcdir)/include/sys/proc.h \
-       $(top_srcdir)/include/sys/pset.h \
-       $(top_srcdir)/include/sys/random.h \
-       $(top_srcdir)/include/sys/refstr.h \
-       $(top_srcdir)/include/sys/resource.h \
-       $(top_srcdir)/include/sys/rwlock.h \
-       $(top_srcdir)/include/sys/sdt.h \
-       $(top_srcdir)/include/sys/sid.h \
-       $(top_srcdir)/include/sys/signal.h \
-       $(top_srcdir)/include/sys/stat.h \
-       $(top_srcdir)/include/sys/stropts.h \
-       $(top_srcdir)/include/sys/sunddi.h \
-       $(top_srcdir)/include/sys/sunldi.h \
-       $(top_srcdir)/include/sys/sysdc.h \
-       $(top_srcdir)/include/sys/sysmacros.h \
-       $(top_srcdir)/include/sys/systeminfo.h \
-       $(top_srcdir)/include/sys/systm.h \
-       $(top_srcdir)/include/sys/taskq.h \
-       $(top_srcdir)/include/sys/thread.h \
-       $(top_srcdir)/include/sys/time.h \
-       $(top_srcdir)/include/sys/timer.h \
-       $(top_srcdir)/include/sys/t_lock.h \
-       $(top_srcdir)/include/sys/tsd.h \
-       $(top_srcdir)/include/sys/types32.h \
-       $(top_srcdir)/include/sys/types.h \
-       $(top_srcdir)/include/sys/u8_textprep.h \
-       $(top_srcdir)/include/sys/uio.h \
-       $(top_srcdir)/include/sys/unistd.h \
-       $(top_srcdir)/include/sys/user.h \
-       $(top_srcdir)/include/sys/va_list.h \
-       $(top_srcdir)/include/sys/varargs.h \
-       $(top_srcdir)/include/sys/vfs.h \
-       $(top_srcdir)/include/sys/vfs_opreg.h \
-       $(top_srcdir)/include/sys/vmem.h \
-       $(top_srcdir)/include/sys/vmsystm.h \
-       $(top_srcdir)/include/sys/vnode.h \
-       $(top_srcdir)/include/sys/zmod.h \
-       $(top_srcdir)/include/sys/zone.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include/sys
-kernel_HEADERS = $(KERNEL_H)
-endif
-
diff --git a/include/sys/acl.h b/include/sys/acl.h
deleted file mode 100644 (file)
index 9fc79c0..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_ACL_H
-#define        _SPL_ACL_H
-
-#include <sys/types.h>
-
-typedef struct ace {
-       uid_t a_who;
-       uint32_t a_access_mask;
-       uint16_t a_flags;
-       uint16_t a_type;
-} ace_t;
-
-typedef struct ace_object {
-       uid_t           a_who;          /* uid or gid */
-       uint32_t        a_access_mask;  /* read,write,... */
-       uint16_t        a_flags;        /* see below */
-       uint16_t        a_type;         /* allow or deny */
-       uint8_t         a_obj_type[16]; /* obj type */
-       uint8_t         a_inherit_obj_type[16]; /* inherit obj */
-} ace_object_t;
-
-#define        MAX_ACL_ENTRIES                                 1024
-
-#define        ACE_READ_DATA                                   0x00000001
-#define        ACE_LIST_DIRECTORY                              0x00000001
-#define        ACE_WRITE_DATA                                  0x00000002
-#define        ACE_ADD_FILE                                    0x00000002
-#define        ACE_APPEND_DATA                                 0x00000004
-#define        ACE_ADD_SUBDIRECTORY                            0x00000004
-#define        ACE_READ_NAMED_ATTRS                            0x00000008
-#define        ACE_WRITE_NAMED_ATTRS                           0x00000010
-#define        ACE_EXECUTE                                     0x00000020
-#define        ACE_DELETE_CHILD                                0x00000040
-#define        ACE_READ_ATTRIBUTES                             0x00000080
-#define        ACE_WRITE_ATTRIBUTES                            0x00000100
-#define        ACE_DELETE                                      0x00010000
-#define        ACE_READ_ACL                                    0x00020000
-#define        ACE_WRITE_ACL                                   0x00040000
-#define        ACE_WRITE_OWNER                                 0x00080000
-#define        ACE_SYNCHRONIZE                                 0x00100000
-
-#define        ACE_FILE_INHERIT_ACE                            0x0001
-#define        ACE_DIRECTORY_INHERIT_ACE                       0x0002
-#define        ACE_NO_PROPAGATE_INHERIT_ACE                    0x0004
-#define        ACE_INHERIT_ONLY_ACE                            0x0008
-#define        ACE_SUCCESSFUL_ACCESS_ACE_FLAG                  0x0010
-#define        ACE_FAILED_ACCESS_ACE_FLAG                      0x0020
-#define        ACE_IDENTIFIER_GROUP                            0x0040
-#define        ACE_INHERITED_ACE                               0x0080
-#define        ACE_OWNER                                       0x1000
-#define        ACE_GROUP                                       0x2000
-#define        ACE_EVERYONE                                    0x4000
-
-#define        ACE_ACCESS_ALLOWED_ACE_TYPE                     0x0000
-#define        ACE_ACCESS_DENIED_ACE_TYPE                      0x0001
-#define        ACE_SYSTEM_AUDIT_ACE_TYPE                       0x0002
-#define        ACE_SYSTEM_ALARM_ACE_TYPE                       0x0003
-
-#define        ACL_AUTO_INHERIT                                0x0001
-#define        ACL_PROTECTED                                   0x0002
-#define        ACL_DEFAULTED                                   0x0004
-#define        ACL_FLAGS_ALL   (ACL_AUTO_INHERIT|ACL_PROTECTED|ACL_DEFAULTED)
-
-#define        ACE_ACCESS_ALLOWED_COMPOUND_ACE_TYPE            0x04
-#define        ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE              0x05
-#define        ACE_ACCESS_DENIED_OBJECT_ACE_TYPE               0x06
-#define        ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE                0x07
-#define        ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE                0x08
-#define        ACE_ACCESS_ALLOWED_CALLBACK_ACE_TYPE            0x09
-#define        ACE_ACCESS_DENIED_CALLBACK_ACE_TYPE             0x0A
-#define        ACE_ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE     0x0B
-#define        ACE_ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE      0x0C
-#define        ACE_SYSTEM_AUDIT_CALLBACK_ACE_TYPE              0x0D
-#define        ACE_SYSTEM_ALARM_CALLBACK_ACE_TYPE              0x0E
-#define        ACE_SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE       0x0F
-#define        ACE_SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE       0x10
-
-#define        ACE_ALL_TYPES   0x001F
-
-#define        ACE_TYPE_FLAGS  (ACE_OWNER|ACE_GROUP|ACE_EVERYONE|ACE_IDENTIFIER_GROUP)
-
-/* BEGIN CSTYLED */
-#define        ACE_ALL_PERMS   (ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \
-     ACE_ADD_FILE|ACE_APPEND_DATA|ACE_ADD_SUBDIRECTORY|ACE_READ_NAMED_ATTRS| \
-     ACE_WRITE_NAMED_ATTRS|ACE_EXECUTE|ACE_DELETE_CHILD|ACE_READ_ATTRIBUTES| \
-     ACE_WRITE_ATTRIBUTES|ACE_DELETE|ACE_READ_ACL|ACE_WRITE_ACL| \
-     ACE_WRITE_OWNER|ACE_SYNCHRONIZE)
-/* END CSTYLED */
-
-#define        VSA_ACE                                         0x0010
-#define        VSA_ACECNT                                      0x0020
-#define        VSA_ACE_ALLTYPES                                0x0040
-#define        VSA_ACE_ACLFLAGS                                0x0080
-
-#endif /* _SPL_ACL_H */
diff --git a/include/sys/acl_impl.h b/include/sys/acl_impl.h
deleted file mode 100644 (file)
index 9cb2112..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_ACL_IMPL_H
-#define        _SPL_ACL_IMPL_H
-
-#endif /* _SPL_ACL_IMPL_H */
diff --git a/include/sys/atomic.h b/include/sys/atomic.h
deleted file mode 100644 (file)
index e992fdc..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_ATOMIC_H
-#define        _SPL_ATOMIC_H
-
-#include <linux/module.h>
-#include <linux/spinlock.h>
-#include <sys/types.h>
-
-/*
- * Two approaches to atomic operations are implemented each with its
- * own benefits are drawbacks imposed by the Solaris API.  Neither
- * approach handles the issue of word breaking when using a 64-bit
- * atomic variable on a 32-bit arch.  The Solaris API would need to
- * add an atomic read call to correctly support this.
- *
- * When ATOMIC_SPINLOCK is defined all atomic operations will be
- * serialized through global spin locks.  This is bad for performance
- * but it does allow a simple generic implementation.
- *
- * When ATOMIC_SPINLOCK is not defined the Linux atomic operations
- * are used.  This is safe as long as the core Linux implementation
- * doesn't change because we are relying on the fact that an atomic
- * type is really just a uint32 or uint64.  If this changes at some
- * point in the future we need to fall-back to the spin approach.
- */
-#ifdef ATOMIC_SPINLOCK
-extern spinlock_t atomic32_lock;
-extern spinlock_t atomic64_lock;
-
-static __inline__ void
-atomic_inc_32(volatile uint32_t *target)
-{
-       spin_lock(&atomic32_lock);
-       (*target)++;
-       spin_unlock(&atomic32_lock);
-}
-
-static __inline__ void
-atomic_dec_32(volatile uint32_t *target)
-{
-       spin_lock(&atomic32_lock);
-       (*target)--;
-       spin_unlock(&atomic32_lock);
-}
-
-static __inline__ void
-atomic_add_32(volatile uint32_t *target, int32_t delta)
-{
-       spin_lock(&atomic32_lock);
-       *target += delta;
-       spin_unlock(&atomic32_lock);
-}
-
-static __inline__ void
-atomic_sub_32(volatile uint32_t *target, int32_t delta)
-{
-       spin_lock(&atomic32_lock);
-       *target -= delta;
-       spin_unlock(&atomic32_lock);
-}
-
-static __inline__ uint32_t
-atomic_inc_32_nv(volatile uint32_t *target)
-{
-       uint32_t nv;
-
-       spin_lock(&atomic32_lock);
-       nv = ++(*target);
-       spin_unlock(&atomic32_lock);
-
-       return (nv);
-}
-
-static __inline__ uint32_t
-atomic_dec_32_nv(volatile uint32_t *target)
-{
-       uint32_t nv;
-
-       spin_lock(&atomic32_lock);
-       nv = --(*target);
-       spin_unlock(&atomic32_lock);
-
-       return (nv);
-}
-
-static __inline__ uint32_t
-atomic_add_32_nv(volatile uint32_t *target, uint32_t delta)
-{
-       uint32_t nv;
-
-       spin_lock(&atomic32_lock);
-       *target += delta;
-       nv = *target;
-       spin_unlock(&atomic32_lock);
-
-       return (nv);
-}
-
-static __inline__ uint32_t
-atomic_sub_32_nv(volatile uint32_t *target, uint32_t delta)
-{
-       uint32_t nv;
-
-       spin_lock(&atomic32_lock);
-       *target -= delta;
-       nv = *target;
-       spin_unlock(&atomic32_lock);
-
-       return (nv);
-}
-
-static __inline__ uint32_t
-atomic_cas_32(volatile uint32_t *target,  uint32_t cmp, uint32_t newval)
-{
-       uint32_t rc;
-
-       spin_lock(&atomic32_lock);
-       rc = *target;
-       if (*target == cmp)
-               *target = newval;
-
-       spin_unlock(&atomic32_lock);
-
-       return (rc);
-}
-
-static __inline__ uint32_t
-atomic_swap_32(volatile uint32_t *target,  uint32_t newval)
-{
-       uint32_t rc;
-
-       spin_lock(&atomic32_lock);
-       rc = *target;
-       *target = newval;
-       spin_unlock(&atomic32_lock);
-
-       return (rc);
-}
-
-static __inline__ void
-atomic_inc_64(volatile uint64_t *target)
-{
-       spin_lock(&atomic64_lock);
-       (*target)++;
-       spin_unlock(&atomic64_lock);
-}
-
-static __inline__ void
-atomic_dec_64(volatile uint64_t *target)
-{
-       spin_lock(&atomic64_lock);
-       (*target)--;
-       spin_unlock(&atomic64_lock);
-}
-
-static __inline__ void
-atomic_add_64(volatile uint64_t *target, uint64_t delta)
-{
-       spin_lock(&atomic64_lock);
-       *target += delta;
-       spin_unlock(&atomic64_lock);
-}
-
-static __inline__ void
-atomic_sub_64(volatile uint64_t *target, uint64_t delta)
-{
-       spin_lock(&atomic64_lock);
-       *target -= delta;
-       spin_unlock(&atomic64_lock);
-}
-
-static __inline__ uint64_t
-atomic_inc_64_nv(volatile uint64_t *target)
-{
-       uint64_t nv;
-
-       spin_lock(&atomic64_lock);
-       nv = ++(*target);
-       spin_unlock(&atomic64_lock);
-
-       return (nv);
-}
-
-static __inline__ uint64_t
-atomic_dec_64_nv(volatile uint64_t *target)
-{
-       uint64_t nv;
-
-       spin_lock(&atomic64_lock);
-       nv = --(*target);
-       spin_unlock(&atomic64_lock);
-
-       return (nv);
-}
-
-static __inline__ uint64_t
-atomic_add_64_nv(volatile uint64_t *target, uint64_t delta)
-{
-       uint64_t nv;
-
-       spin_lock(&atomic64_lock);
-       *target += delta;
-       nv = *target;
-       spin_unlock(&atomic64_lock);
-
-       return (nv);
-}
-
-static __inline__ uint64_t
-atomic_sub_64_nv(volatile uint64_t *target, uint64_t delta)
-{
-       uint64_t nv;
-
-       spin_lock(&atomic64_lock);
-       *target -= delta;
-       nv = *target;
-       spin_unlock(&atomic64_lock);
-
-       return (nv);
-}
-
-static __inline__ uint64_t
-atomic_cas_64(volatile uint64_t *target,  uint64_t cmp, uint64_t newval)
-{
-       uint64_t rc;
-
-       spin_lock(&atomic64_lock);
-       rc = *target;
-       if (*target == cmp)
-               *target = newval;
-       spin_unlock(&atomic64_lock);
-
-       return (rc);
-}
-
-static __inline__ uint64_t
-atomic_swap_64(volatile uint64_t *target,  uint64_t newval)
-{
-       uint64_t rc;
-
-       spin_lock(&atomic64_lock);
-       rc = *target;
-       *target = newval;
-       spin_unlock(&atomic64_lock);
-
-       return (rc);
-}
-
-#else /* ATOMIC_SPINLOCK */
-
-#define        atomic_inc_32(v)        atomic_inc((atomic_t *)(v))
-#define        atomic_dec_32(v)        atomic_dec((atomic_t *)(v))
-#define        atomic_add_32(v, i)     atomic_add((i), (atomic_t *)(v))
-#define        atomic_sub_32(v, i)     atomic_sub((i), (atomic_t *)(v))
-#define        atomic_inc_32_nv(v)     atomic_inc_return((atomic_t *)(v))
-#define        atomic_dec_32_nv(v)     atomic_dec_return((atomic_t *)(v))
-#define        atomic_add_32_nv(v, i)  atomic_add_return((i), (atomic_t *)(v))
-#define        atomic_sub_32_nv(v, i)  atomic_sub_return((i), (atomic_t *)(v))
-#define        atomic_cas_32(v, x, y)  atomic_cmpxchg((atomic_t *)(v), x, y)
-#define        atomic_swap_32(v, x)    atomic_xchg((atomic_t *)(v), x)
-#define        atomic_inc_64(v)        atomic64_inc((atomic64_t *)(v))
-#define        atomic_dec_64(v)        atomic64_dec((atomic64_t *)(v))
-#define        atomic_add_64(v, i)     atomic64_add((i), (atomic64_t *)(v))
-#define        atomic_sub_64(v, i)     atomic64_sub((i), (atomic64_t *)(v))
-#define        atomic_inc_64_nv(v)     atomic64_inc_return((atomic64_t *)(v))
-#define        atomic_dec_64_nv(v)     atomic64_dec_return((atomic64_t *)(v))
-#define        atomic_add_64_nv(v, i)  atomic64_add_return((i), (atomic64_t *)(v))
-#define        atomic_sub_64_nv(v, i)  atomic64_sub_return((i), (atomic64_t *)(v))
-#define        atomic_cas_64(v, x, y)  atomic64_cmpxchg((atomic64_t *)(v), x, y)
-#define        atomic_swap_64(v, x)    atomic64_xchg((atomic64_t *)(v), x)
-
-#endif /* ATOMIC_SPINLOCK */
-
-#ifdef _LP64
-static __inline__ void *
-atomic_cas_ptr(volatile void *target,  void *cmp, void *newval)
-{
-       return ((void *)atomic_cas_64((volatile uint64_t *)target,
-           (uint64_t)cmp, (uint64_t)newval));
-}
-#else /* _LP64 */
-static __inline__ void *
-atomic_cas_ptr(volatile void *target,  void *cmp, void *newval)
-{
-       return ((void *)atomic_cas_32((volatile uint32_t *)target,
-           (uint32_t)cmp, (uint32_t)newval));
-}
-#endif /* _LP64 */
-
-#endif  /* _SPL_ATOMIC_H */
diff --git a/include/sys/attr.h b/include/sys/attr.h
deleted file mode 100644 (file)
index 7941acb..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_ATTR_H
-#define        _SPL_ATTR_H
-
-#endif /* SPL_ATTR_H */
diff --git a/include/sys/bitmap.h b/include/sys/bitmap.h
deleted file mode 100644 (file)
index 3e7d910..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_BITMAP_H
-#define        _SPL_BITMAP_H
-
-#endif /* SPL_BITMAP_H */
diff --git a/include/sys/bootconf.h b/include/sys/bootconf.h
deleted file mode 100644 (file)
index 62730ba..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_BOOTCONF_H
-#define        _SPL_BOOTCONF_H
-
-#endif /* SPL_BOOTCONF_H */
diff --git a/include/sys/bootprops.h b/include/sys/bootprops.h
deleted file mode 100644 (file)
index 50150ed..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_BOOTPROPS_H
-#define        _SPL_BOOTPROPS_H
-
-#endif /* SPL_BOOTPROPS_H */
diff --git a/include/sys/buf.h b/include/sys/buf.h
deleted file mode 100644 (file)
index fa453e4..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_BUF_H
-#define        _SPL_BUF_H
-
-#endif /* SPL_BUF_H */
diff --git a/include/sys/byteorder.h b/include/sys/byteorder.h
deleted file mode 100644 (file)
index a0ff424..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_BYTEORDER_H
-#define        _SPL_BYTEORDER_H
-
-#include <asm/byteorder.h>
-#include <sys/isa_defs.h>
-
-#define        LE_16(x)        cpu_to_le16(x)
-#define        LE_32(x)        cpu_to_le32(x)
-#define        LE_64(x)        cpu_to_le64(x)
-#define        BE_16(x)        cpu_to_be16(x)
-#define        BE_32(x)        cpu_to_be32(x)
-#define        BE_64(x)        cpu_to_be64(x)
-
-#define        BE_IN8(xa) \
-       *((uint8_t *)(xa))
-
-#define        BE_IN16(xa) \
-       (((uint16_t)BE_IN8(xa) << 8) | BE_IN8((uint8_t *)(xa)+1))
-
-#define        BE_IN32(xa) \
-       (((uint32_t)BE_IN16(xa) << 16) | BE_IN16((uint8_t *)(xa)+2))
-
-#ifdef _BIG_ENDIAN
-static __inline__ uint64_t
-htonll(uint64_t n)
-{
-       return (n);
-}
-
-static __inline__ uint64_t
-ntohll(uint64_t n)
-{
-       return (n);
-}
-#else
-static __inline__ uint64_t
-htonll(uint64_t n)
-{
-       return ((((uint64_t)htonl(n)) << 32) + htonl(n >> 32));
-}
-
-static __inline__ uint64_t
-ntohll(uint64_t n)
-{
-       return ((((uint64_t)ntohl(n)) << 32) + ntohl(n >> 32));
-}
-#endif
-
-#endif /* SPL_BYTEORDER_H */
diff --git a/include/sys/callb.h b/include/sys/callb.h
deleted file mode 100644 (file)
index f1826bf..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CALLB_H
-#define        _SPL_CALLB_H
-
-#include <linux/module.h>
-#include <sys/mutex.h>
-
-#define        CALLB_CPR_ASSERT(cp)            ASSERT(MUTEX_HELD((cp)->cc_lockp));
-
-typedef struct callb_cpr {
-       kmutex_t        *cc_lockp;
-} callb_cpr_t;
-
-#define        CALLB_CPR_INIT(cp, lockp, func, name)   {               \
-       (cp)->cc_lockp = lockp;                                 \
-}
-
-#define        CALLB_CPR_SAFE_BEGIN(cp) {                              \
-       CALLB_CPR_ASSERT(cp);                                   \
-}
-
-#define        CALLB_CPR_SAFE_END(cp, lockp) {                         \
-       CALLB_CPR_ASSERT(cp);                                   \
-}
-
-#define        CALLB_CPR_EXIT(cp) {                                    \
-       ASSERT(MUTEX_HELD((cp)->cc_lockp));                     \
-       mutex_exit((cp)->cc_lockp);                             \
-}
-
-#endif  /* _SPL_CALLB_H */
diff --git a/include/sys/callo.h b/include/sys/callo.h
deleted file mode 100644 (file)
index c43ac92..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CALLO_H
-#define        _SPL_CALLO_H
-
-/*
- * Callout flags:
- *
- * CALLOUT_FLAG_ROUNDUP
- *      Roundup the expiration time to the next resolution boundary.
- *      If this flag is not specified, the expiration time is rounded down.
- * CALLOUT_FLAG_ABSOLUTE
- *      Normally, the expiration passed to the timeout API functions is an
- *      expiration interval. If this flag is specified, then it is
- *      interpreted as the expiration time itself.
- * CALLOUT_FLAG_HRESTIME
- *      Normally, callouts are not affected by changes to system time
- *      (hrestime). This flag is used to create a callout that is affected
- *      by system time. If system time changes, these timers must be
- *      handled in a special way (see callout.c). These are used by condition
- *      variables and LWP timers that need this behavior.
- * CALLOUT_FLAG_32BIT
- *      Legacy interfaces timeout() and realtime_timeout() pass this flag
- *      to timeout_generic() to indicate that a 32-bit ID should be allocated.
- */
-#define        CALLOUT_FLAG_ROUNDUP            0x1
-#define        CALLOUT_FLAG_ABSOLUTE           0x2
-#define        CALLOUT_FLAG_HRESTIME           0x4
-#define        CALLOUT_FLAG_32BIT              0x8
-
-#endif  /* _SPL_CALLB_H */
diff --git a/include/sys/cmn_err.h b/include/sys/cmn_err.h
deleted file mode 100644 (file)
index 594a763..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CMN_ERR_H
-#define        _SPL_CMN_ERR_H
-
-#include <sys/varargs.h>
-
-#define        CE_CONT         0 /* continuation */
-#define        CE_NOTE         1 /* notice */
-#define        CE_WARN         2 /* warning */
-#define        CE_PANIC        3 /* panic */
-#define        CE_IGNORE       4 /* print nothing */
-
-extern void cmn_err(int, const char *, ...);
-extern void vcmn_err(int, const char *, __va_list);
-extern void vpanic(const char *, __va_list);
-
-#define        fm_panic        panic
-
-#endif /* SPL_CMN_ERR_H */
diff --git a/include/sys/compress.h b/include/sys/compress.h
deleted file mode 100644 (file)
index e46ab0d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_COMPRESS_H
-#define        _SPL_COMPRESS_H
-
-#endif /* SPL_COMPRESS_H */
diff --git a/include/sys/condvar.h b/include/sys/condvar.h
deleted file mode 100644 (file)
index 5fcc906..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CONDVAR_H
-#define        _SPL_CONDVAR_H
-
-#include <linux/module.h>
-#include <linux/wait_compat.h>
-#include <linux/delay_compat.h>
-#include <sys/kmem.h>
-#include <sys/mutex.h>
-#include <sys/callo.h>
-
-/*
- * The kcondvar_t struct is protected by mutex taken externally before
- * calling any of the wait/signal funs, and passed into the wait funs.
- */
-#define        CV_MAGIC                        0x346545f4
-#define        CV_DESTROY                      0x346545f5
-
-typedef struct {
-       int cv_magic;
-       spl_wait_queue_head_t cv_event;
-       spl_wait_queue_head_t cv_destroy;
-       atomic_t cv_refs;
-       atomic_t cv_waiters;
-       kmutex_t *cv_mutex;
-} kcondvar_t;
-
-typedef enum { CV_DEFAULT = 0, CV_DRIVER } kcv_type_t;
-
-extern void __cv_init(kcondvar_t *, char *, kcv_type_t, void *);
-extern void __cv_destroy(kcondvar_t *);
-extern void __cv_wait(kcondvar_t *, kmutex_t *);
-extern void __cv_wait_io(kcondvar_t *, kmutex_t *);
-extern void __cv_wait_sig(kcondvar_t *, kmutex_t *);
-extern clock_t __cv_timedwait(kcondvar_t *, kmutex_t *, clock_t);
-extern clock_t __cv_timedwait_io(kcondvar_t *, kmutex_t *, clock_t);
-extern clock_t __cv_timedwait_sig(kcondvar_t *, kmutex_t *, clock_t);
-extern clock_t cv_timedwait_hires(kcondvar_t *, kmutex_t *, hrtime_t,
-    hrtime_t res, int flag);
-extern clock_t cv_timedwait_sig_hires(kcondvar_t *, kmutex_t *, hrtime_t,
-    hrtime_t res, int flag);
-extern void __cv_signal(kcondvar_t *);
-extern void __cv_broadcast(kcondvar_t *c);
-
-#define        cv_init(cvp, name, type, arg)           __cv_init(cvp, name, type, arg)
-#define        cv_destroy(cvp)                         __cv_destroy(cvp)
-#define        cv_wait(cvp, mp)                        __cv_wait(cvp, mp)
-#define        cv_wait_io(cvp, mp)                     __cv_wait_io(cvp, mp)
-#define        cv_wait_sig(cvp, mp)                    __cv_wait_sig(cvp, mp)
-#define        cv_wait_interruptible(cvp, mp)          cv_wait_sig(cvp, mp)
-#define        cv_timedwait(cvp, mp, t)                __cv_timedwait(cvp, mp, t)
-#define        cv_timedwait_io(cvp, mp, t)             __cv_timedwait_io(cvp, mp, t)
-#define        cv_timedwait_sig(cvp, mp, t)            __cv_timedwait_sig(cvp, mp, t)
-#define        cv_timedwait_interruptible(cvp, mp, t)  cv_timedwait_sig(cvp, mp, t)
-#define        cv_signal(cvp)                          __cv_signal(cvp)
-#define        cv_broadcast(cvp)                       __cv_broadcast(cvp)
-
-#endif /* _SPL_CONDVAR_H */
diff --git a/include/sys/conf.h b/include/sys/conf.h
deleted file mode 100644 (file)
index 68f4095..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CONF_H
-#define        _SPL_CONF_H
-
-#endif /* SPL_CONF_H */
diff --git a/include/sys/console.h b/include/sys/console.h
deleted file mode 100644 (file)
index 3469cb7..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef        _SPL_CONSOLE_H
-#define        _SPL_CONSOLE_H
-
-void
-console_vprintf(const char *fmt, va_list args)
-{
-       vprintk(fmt, args);
-}
-
-void
-console_printf(const char *fmt, ...)
-{
-       va_list args;
-
-       va_start(args, fmt);
-       console_vprintf(fmt, args);
-       va_end(args);
-}
-
-#endif /* _SPL_CONSOLE_H */
diff --git a/include/sys/cpupart.h b/include/sys/cpupart.h
deleted file mode 100644 (file)
index ba57c19..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CPUPART_H
-#define        _SPL_CPUPART_H
-
-#endif /* SPL_CPUPART_H */
diff --git a/include/sys/cpuvar.h b/include/sys/cpuvar.h
deleted file mode 100644 (file)
index 075c060..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CPUVAR_H
-#define        _SPL_CPUVAR_H
-
-#endif /* SPL_CPUVAR_H */
diff --git a/include/sys/crc32.h b/include/sys/crc32.h
deleted file mode 100644 (file)
index eb021b1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CRC32_H
-#define        _SPL_CRC32_H
-
-#endif /* SPL_CRC32_H */
diff --git a/include/sys/cred.h b/include/sys/cred.h
deleted file mode 100644 (file)
index e4b18b6..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CRED_H
-#define        _SPL_CRED_H
-
-#include <linux/module.h>
-#include <sys/types.h>
-#include <sys/vfs.h>
-
-typedef struct cred cred_t;
-
-#define        kcred           ((cred_t *)(init_task.cred))
-#define        CRED()          ((cred_t *)current_cred())
-
-/* Linux 4.9 API change, GROUP_AT was removed */
-#ifndef GROUP_AT
-#define        GROUP_AT(gi, i) ((gi)->gid[i])
-#endif
-
-#ifdef HAVE_KUIDGID_T
-
-#define        KUID_TO_SUID(x)         (__kuid_val(x))
-#define        KGID_TO_SGID(x)         (__kgid_val(x))
-#define        SUID_TO_KUID(x)         (KUIDT_INIT(x))
-#define        SGID_TO_KGID(x)         (KGIDT_INIT(x))
-#define        KGIDP_TO_SGIDP(x)       (&(x)->val)
-
-#else /* HAVE_KUIDGID_T */
-
-#define        KUID_TO_SUID(x)         (x)
-#define        KGID_TO_SGID(x)         (x)
-#define        SUID_TO_KUID(x)         (x)
-#define        SGID_TO_KGID(x)         (x)
-#define        KGIDP_TO_SGIDP(x)       (x)
-
-#endif /* HAVE_KUIDGID_T */
-
-extern void crhold(cred_t *cr);
-extern void crfree(cred_t *cr);
-extern uid_t crgetuid(const cred_t *cr);
-extern uid_t crgetruid(const cred_t *cr);
-extern uid_t crgetsuid(const cred_t *cr);
-extern uid_t crgetfsuid(const cred_t *cr);
-extern gid_t crgetgid(const cred_t *cr);
-extern gid_t crgetrgid(const cred_t *cr);
-extern gid_t crgetsgid(const cred_t *cr);
-extern gid_t crgetfsgid(const cred_t *cr);
-extern int crgetngroups(const cred_t *cr);
-extern gid_t *crgetgroups(const cred_t *cr);
-extern int groupmember(gid_t gid, const cred_t *cr);
-
-#endif  /* _SPL_CRED_H */
diff --git a/include/sys/ctype.h b/include/sys/ctype.h
deleted file mode 100644 (file)
index 18beb1d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_CTYPE_H
-#define        _SPL_CTYPE_H
-
-#include <linux/ctype.h>
-
-#endif /* SPL_CTYPE_H */
diff --git a/include/sys/ddi.h b/include/sys/ddi.h
deleted file mode 100644 (file)
index af2806e..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_DDI_H
-#define        _SPL_DDI_H
-
-#endif /* SPL_DDI_H */
diff --git a/include/sys/debug.h b/include/sys/debug.h
deleted file mode 100644 (file)
index a4a4580..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Available Solaris debug functions.  All of the ASSERT() macros will be
- * compiled out when NDEBUG is defined, this is the default behavior for
- * the SPL.  To enable assertions use the --enable-debug with configure.
- * The VERIFY() functions are never compiled out and cannot be disabled.
- *
- * PANIC()     - Panic the node and print message.
- * ASSERT()    - Assert X is true, if not panic.
- * ASSERTV()   - Wraps a variable declaration which is only used by ASSERT().
- * ASSERT3B()  - Assert boolean X OP Y is true, if not panic.
- * ASSERT3S()  - Assert signed X OP Y is true, if not panic.
- * ASSERT3U()  - Assert unsigned X OP Y is true, if not panic.
- * ASSERT3P()  - Assert pointer X OP Y is true, if not panic.
- * ASSERT0()   - Assert value is zero, if not panic.
- * VERIFY()    - Verify X is true, if not panic.
- * VERIFY3B()  - Verify boolean X OP Y is true, if not panic.
- * VERIFY3S()  - Verify signed X OP Y is true, if not panic.
- * VERIFY3U()  - Verify unsigned X OP Y is true, if not panic.
- * VERIFY3P()  - Verify pointer X OP Y is true, if not panic.
- * VERIFY0()   - Verify value is zero, if not panic.
- */
-
-#ifndef _SPL_DEBUG_H
-#define        _SPL_DEBUG_H
-
-/*
- * Common DEBUG functionality.
- */
-int spl_panic(const char *file, const char *func, int line,
-    const char *fmt, ...);
-void spl_dumpstack(void);
-
-/* BEGIN CSTYLED */
-#define        PANIC(fmt, a...)                                                \
-       spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)
-
-#define        VERIFY(cond)                                                    \
-       (void) (unlikely(!(cond)) &&                                    \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__,                 \
-           "%s", "VERIFY(" #cond ") failed\n"))
-
-#define        VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST)  do {            \
-               TYPE _verify3_left = (TYPE)(LEFT);                              \
-               TYPE _verify3_right = (TYPE)(RIGHT);                            \
-               if (!(_verify3_left OP _verify3_right))                 \
-                   spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
-                   "VERIFY3(" #LEFT " " #OP " " #RIGHT ") "            \
-                   "failed (" FMT " " #OP " " FMT ")\n",               \
-                   CAST (_verify3_left), CAST (_verify3_right));       \
-       } while (0)
-
-#define        VERIFY3B(x,y,z) VERIFY3_IMPL(x, y, z, boolean_t, "%d", (boolean_t))
-#define        VERIFY3S(x,y,z) VERIFY3_IMPL(x, y, z, int64_t, "%lld", (long long))
-#define        VERIFY3U(x,y,z) VERIFY3_IMPL(x, y, z, uint64_t, "%llu",         \
-                                   (unsigned long long))
-#define        VERIFY3P(x,y,z) VERIFY3_IMPL(x, y, z, uintptr_t, "%p", (void *))
-#define        VERIFY0(x)      VERIFY3_IMPL(0, ==, x, int64_t, "%lld", (long long))
-
-#define        CTASSERT_GLOBAL(x)              _CTASSERT(x, __LINE__)
-#define        CTASSERT(x)                     { _CTASSERT(x, __LINE__); }
-#define        _CTASSERT(x, y)                 __CTASSERT(x, y)
-#define        __CTASSERT(x, y)                                                \
-       typedef char __attribute__ ((unused))                           \
-       __compile_time_assertion__ ## y[(x) ? 1 : -1]
-
-/*
- * Debugging disabled (--disable-debug)
- */
-#ifdef NDEBUG
-
-#define        SPL_DEBUG_STR           ""
-#define        ASSERT(x)               ((void)0)
-#define        ASSERTV(x)
-#define        ASSERT3B(x,y,z)         ((void)0)
-#define        ASSERT3S(x,y,z)         ((void)0)
-#define        ASSERT3U(x,y,z)         ((void)0)
-#define        ASSERT3P(x,y,z)         ((void)0)
-#define        ASSERT0(x)              ((void)0)
-#define        IMPLY(A, B)             ((void)0)
-#define        EQUIV(A, B)             ((void)0)
-
-/*
- * Debugging enabled (--enable-debug)
- */
-#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)
-#define        ASSERT3S(x,y,z)         VERIFY3S(x, y, z)
-#define        ASSERT3U(x,y,z)         VERIFY3U(x, y, z)
-#define        ASSERT3P(x,y,z)         VERIFY3P(x, y, z)
-#define        ASSERT0(x)              VERIFY0(x)
-#define        IMPLY(A, B) \
-       ((void)(((!(A)) || (B)) || \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__, \
-           "(" #A ") implies (" #B ")")))
-#define        EQUIV(A, B) \
-       ((void)((!!(A) == !!(B)) || \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__, \
-           "(" #A ") is equivalent to (" #B ")")))
-/* END CSTYLED */
-
-#endif /* NDEBUG */
-
-#endif /* SPL_DEBUG_H */
diff --git a/include/sys/dirent.h b/include/sys/dirent.h
deleted file mode 100644 (file)
index 8237d0d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_DIRENT_H
-#define        _SPL_DIRENT_H
-
-#endif /* SPL_DIRENT_H */
diff --git a/include/sys/disp.h b/include/sys/disp.h
deleted file mode 100644 (file)
index 413b623..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_DISP_H
-#define        _SPL_DISP_H
-
-#include <linux/preempt.h>
-
-#define        kpreempt(unused)        schedule()
-#define        kpreempt_disable()      preempt_disable()
-#define        kpreempt_enable()       preempt_enable()
-
-#endif /* SPL_DISP_H */
diff --git a/include/sys/dkio.h b/include/sys/dkio.h
deleted file mode 100644 (file)
index 49f166a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_DKIO_H
-#define        _SPL_DKIO_H
-
-#define        DFL_SZ(num_exts) \
-       (sizeof (dkioc_free_list_t) + (num_exts - 1) * 16)
-
-#define        DKIOC           (0x04 << 8)
-#define        DKIOCFLUSHWRITECACHE    (DKIOC|34)      /* flush cache to phys medium */
-
-/*
- * ioctl to free space (e.g. SCSI UNMAP) off a disk.
- * Pass a dkioc_free_list_t containing a list of extents to be freed.
- */
-#define        DKIOCFREE       (DKIOC|50)
-
-#endif /* _SPL_DKIO_H */
diff --git a/include/sys/dkioc_free_util.h b/include/sys/dkioc_free_util.h
deleted file mode 100644 (file)
index d519b2f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_DKIOC_UTIL_H
-#define        _SPL_DKIOC_UTIL_H
-
-#include <sys/dkio.h>
-
-typedef struct dkioc_free_list_ext_s {
-       uint64_t                dfle_start;
-       uint64_t                dfle_length;
-} dkioc_free_list_ext_t;
-
-typedef struct dkioc_free_list_s {
-       uint64_t                dfl_flags;
-       uint64_t                dfl_num_exts;
-       int64_t                 dfl_offset;
-
-       /*
-        * N.B. this is only an internal debugging API! This is only called
-        * from debug builds of sd for pre-release checking. Remove before GA!
-        */
-       void                    (*dfl_ck_func)(uint64_t, uint64_t, void *);
-       void                    *dfl_ck_arg;
-
-       dkioc_free_list_ext_t   dfl_exts[1];
-} dkioc_free_list_t;
-
-static inline void dfl_free(dkioc_free_list_t *dfl) {
-       vmem_free(dfl, DFL_SZ(dfl->dfl_num_exts));
-}
-
-static inline dkioc_free_list_t *dfl_alloc(uint64_t dfl_num_exts, int flags) {
-       return (vmem_zalloc(DFL_SZ(dfl_num_exts), flags));
-}
-
-#endif /* _SPL_DKIOC_UTIL_H */
diff --git a/include/sys/dklabel.h b/include/sys/dklabel.h
deleted file mode 100644 (file)
index ff58059..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_DKLABEL_H
-#define        _SPL_DKLABEL_H
-
-#endif /* _SPL_DKLABEL_H */
diff --git a/include/sys/dnlc.h b/include/sys/dnlc.h
deleted file mode 100644 (file)
index cda112c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_DNLC_H
-#define        _SPL_DNLC_H
-
-#endif /* SPL_DNLC_H */
diff --git a/include/sys/dumphdr.h b/include/sys/dumphdr.h
deleted file mode 100644 (file)
index a452fe3..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_DUMPHDR_H
-#define        _SPL_DUMPHDR_H
-
-#endif /* SPL_DUMPHDR_H */
diff --git a/include/sys/efi_partition.h b/include/sys/efi_partition.h
deleted file mode 100644 (file)
index d0c9c20..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_EFI_PARTITION_H
-#define        _SPL_EFI_PARTITION_H
-
-#endif /* SPL_EFI_PARTITION_H */
diff --git a/include/sys/errno.h b/include/sys/errno.h
deleted file mode 100644 (file)
index 2dd378b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_ERRNO_H
-#define        _SPL_ERRNO_H
-
-#endif /* SPL_ERRNO_H */
diff --git a/include/sys/extdirent.h b/include/sys/extdirent.h
deleted file mode 100644 (file)
index e0567fa..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *  Copyright (C) 2010 Lawrence Livermore National Security, LLC.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef        _SPL_EXTDIRENT_H
-#define        _SPL_EXTDIRENT_H
-
-#define        ED_CASE_CONFLICT        0x10
-
-#endif /* _SPL_EXTDIRENT_H */
diff --git a/include/sys/fcntl.h b/include/sys/fcntl.h
deleted file mode 100644 (file)
index 3faa5da..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Copyright (C) 2010 Lawrence Livermore National Security, LLC.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_FCNTL_H
-#define        _SPL_FCNTL_H
-
-#include <asm/fcntl.h>
-
-#define        F_FREESP 11
-
-#ifdef CONFIG_64BIT
-typedef struct flock flock64_t;
-#else
-typedef struct flock64 flock64_t;
-#endif /* CONFIG_64BIT */
-
-#endif /* _SPL_FCNTL_H */
diff --git a/include/sys/file.h b/include/sys/file.h
deleted file mode 100644 (file)
index b6c40af..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_FILE_H
-#define        _SPL_FILE_H
-
-#define        FIGNORECASE     0x00080000
-#define        FKIOCTL         0x80000000
-
-#endif /* SPL_FILE_H */
diff --git a/include/sys/fm/Makefile.am b/include/sys/fm/Makefile.am
deleted file mode 100644 (file)
index 2821cbe..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/sys/fm/protocol.h \
-       $(top_srcdir)/include/sys/fm/util.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include/sys/fm
-kernel_HEADERS = $(KERNEL_H)
-endif
diff --git a/include/sys/fm/protocol.h b/include/sys/fm/protocol.h
deleted file mode 100644 (file)
index 39f6cb1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef        _SPL_FM_PROTOCOL_H
-#define        _SPL_FM_PROTOCOL_H
-
-#endif /* _SPL_FM_PROTOCOL_H */
diff --git a/include/sys/fm/util.h b/include/sys/fm/util.h
deleted file mode 100644 (file)
index d8f6843..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef        _SPL_FM_UTIL_H
-#define        _SPL_FM_UTIL_H
-
-#endif /* _SPL_FM_UTIL_H */
diff --git a/include/sys/fs/Makefile.am b/include/sys/fs/Makefile.am
deleted file mode 100644 (file)
index 581083e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/sys/fs/swapnode.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include/sys/fs
-kernel_HEADERS = $(KERNEL_H)
-endif
diff --git a/include/sys/fs/swapnode.h b/include/sys/fs/swapnode.h
deleted file mode 100644 (file)
index 1fa5fdc..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SWAPNODE_H
-#define        _SPL_SWAPNODE_H
-
-#endif /* SPL_SWAPNODE_H */
diff --git a/include/sys/idmap.h b/include/sys/idmap.h
deleted file mode 100644 (file)
index abbfcbe..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *  Copyright (C) 2010 Lawrence Livermore National Security, LLC.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_IDMAP_H
-#define        _SPL_IDMAP_H
-
-#define        IDMAP_WK_CREATOR_OWNER_UID      2147483648U
-
-#endif /* SPL_IDMAP_H */
diff --git a/include/sys/int_limits.h b/include/sys/int_limits.h
deleted file mode 100644 (file)
index 5d7e9be..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_INT_LIMITS_H
-#define        _SPL_INT_LIMITS_H
-
-#endif /* SPL_INT_LIMITS_H */
diff --git a/include/sys/int_types.h b/include/sys/int_types.h
deleted file mode 100644 (file)
index 7e3b732..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_INT_TYPES_H
-#define        _SPL_INT_TYPES_H
-
-#include <sys/inttypes.h>
-
-#endif /* SPL_INT_TYPES_H */
diff --git a/include/sys/inttypes.h b/include/sys/inttypes.h
deleted file mode 100644 (file)
index 92e7620..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_INTTYPES_H
-#define        _SPL_INTTYPES_H
-
-#endif /* SPL_INTTYPES_H */
diff --git a/include/sys/isa_defs.h b/include/sys/isa_defs.h
deleted file mode 100644 (file)
index 089ae0f..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef        _SPL_ISA_DEFS_H
-#define        _SPL_ISA_DEFS_H
-
-/* x86_64 arch specific defines */
-#if defined(__x86_64) || defined(__x86_64__)
-
-#if !defined(__x86_64)
-#define        __x86_64
-#endif
-
-#if !defined(__amd64)
-#define        __amd64
-#endif
-
-#if !defined(__x86)
-#define        __x86
-#endif
-
-#if !defined(_LP64)
-#define        _LP64
-#endif
-
-#define        _ALIGNMENT_REQUIRED     1
-
-
-/* i386 arch specific defines */
-#elif defined(__i386) || defined(__i386__)
-
-#if !defined(__i386)
-#define        __i386
-#endif
-
-#if !defined(__x86)
-#define        __x86
-#endif
-
-#if !defined(_ILP32)
-#define        _ILP32
-#endif
-
-#define        _ALIGNMENT_REQUIRED     0
-
-/* powerpc (ppc64) arch specific defines */
-#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__)
-
-#if !defined(__powerpc)
-#define        __powerpc
-#endif
-
-#if !defined(__powerpc__)
-#define        __powerpc__
-#endif
-
-#if defined(__powerpc64__)
-#if !defined(_LP64)
-#define        _LP64
-#endif
-#else
-#if !defined(_ILP32)
-#define        _ILP32
-#endif
-#endif
-
-/*
- * Illumos doesn't define _ALIGNMENT_REQUIRED for PPC, so default to 1
- * out of paranoia.
- */
-#define        _ALIGNMENT_REQUIRED     1
-
-/* arm arch specific defines */
-#elif defined(__arm) || defined(__arm__) || defined(__aarch64__)
-
-#if !defined(__arm)
-#define        __arm
-#endif
-
-#if !defined(__arm__)
-#define        __arm__
-#endif
-
-#if defined(__aarch64__)
-#if !defined(_LP64)
-#define        _LP64
-#endif
-#else
-#if !defined(_ILP32)
-#define        _ILP32
-#endif
-#endif
-
-#if defined(__ARMEL__) || defined(__AARCH64EL__)
-#define        _LITTLE_ENDIAN
-#else
-#define        _BIG_ENDIAN
-#endif
-
-/*
- * Illumos doesn't define _ALIGNMENT_REQUIRED for ARM, so default to 1
- * out of paranoia.
- */
-#define        _ALIGNMENT_REQUIRED     1
-
-/* sparc arch specific defines */
-#elif defined(__sparc) || defined(__sparc__)
-
-#if !defined(__sparc)
-#define        __sparc
-#endif
-
-#if !defined(__sparc__)
-#define        __sparc__
-#endif
-
-#if defined(__arch64__)
-#if !defined(_LP64)
-#define        _LP64
-#endif
-#else
-#if !defined(_ILP32)
-#define        _ILP32
-#endif
-#endif
-
-#define        _BIG_ENDIAN
-#define        _SUNOS_VTOC_16
-#define        _ALIGNMENT_REQUIRED     1
-
-/* s390 arch specific defines */
-#elif defined(__s390__)
-#if defined(__s390x__)
-#if !defined(_LP64)
-#define        _LP64
-#endif
-#else
-#if !defined(_ILP32)
-#define        _ILP32
-#endif
-#endif
-
-#define        _BIG_ENDIAN
-
-/*
- * Illumos doesn't define _ALIGNMENT_REQUIRED for s390, so default to 1
- * out of paranoia.
- */
-#define        _ALIGNMENT_REQUIRED     1
-
-/* MIPS arch specific defines */
-#elif defined(__mips__)
-
-#if defined(__MIPSEB__)
-#define        _BIG_ENDIAN
-#elif defined(__MIPSEL__)
-#define        _LITTLE_ENDIAN
-#else
-#error MIPS no endian specified
-#endif
-
-#ifndef _LP64
-#define        _ILP32
-#endif
-
-#define        _SUNOS_VTOC_16
-
-/*
- * Illumos doesn't define _ALIGNMENT_REQUIRED for MIPS, so default to 1
- * out of paranoia.
- */
-#define        _ALIGNMENT_REQUIRED     1
-
-#else
-/*
- * Currently supported:
- * x86_64, i386, arm, powerpc, s390, sparc, and mips
- */
-#error "Unsupported ISA type"
-#endif
-
-#if defined(_ILP32) && defined(_LP64)
-#error "Both _ILP32 and _LP64 are defined"
-#endif
-
-#if !defined(_ILP32) && !defined(_LP64)
-#error "Neither _ILP32 or _LP64 are defined"
-#endif
-
-#include <sys/byteorder.h>
-
-#if defined(__LITTLE_ENDIAN) && !defined(_LITTLE_ENDIAN)
-#define        _LITTLE_ENDIAN __LITTLE_ENDIAN
-#endif
-
-#if defined(__BIG_ENDIAN) && !defined(_BIG_ENDIAN)
-#define        _BIG_ENDIAN __BIG_ENDIAN
-#endif
-
-#if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
-#error "Both _LITTLE_ENDIAN and _BIG_ENDIAN are defined"
-#endif
-
-#if !defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
-#error "Neither _LITTLE_ENDIAN or _BIG_ENDIAN are defined"
-#endif
-
-#endif /* _SPL_ISA_DEFS_H */
diff --git a/include/sys/kidmap.h b/include/sys/kidmap.h
deleted file mode 100644 (file)
index a5e6375..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_KIDMAP_H
-#define        _SPL_KIDMAP_H
-
-#include <sys/idmap.h>
-
-#endif /* SPL_KIDMAP_H */
diff --git a/include/sys/kmem.h b/include/sys/kmem.h
deleted file mode 100644 (file)
index d6b4285..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_KMEM_H
-#define        _SPL_KMEM_H
-
-#include <sys/debug.h>
-#include <linux/slab.h>
-#include <linux/sched.h>
-
-extern int kmem_debugging(void);
-extern char *kmem_vasprintf(const char *fmt, va_list ap);
-extern char *kmem_asprintf(const char *fmt, ...);
-extern char *strdup(const char *str);
-extern void strfree(char *str);
-
-/*
- * Memory allocation interfaces
- */
-#define        KM_SLEEP        0x0000  /* can block for memory; success guaranteed */
-#define        KM_NOSLEEP      0x0001  /* cannot block for memory; may fail */
-#define        KM_PUSHPAGE     0x0004  /* can block for memory; may use reserve */
-#define        KM_ZERO         0x1000  /* zero the allocation */
-#define        KM_VMEM         0x2000  /* caller is vmem_* wrapper */
-
-#define        KM_PUBLIC_MASK  (KM_SLEEP | KM_NOSLEEP | KM_PUSHPAGE)
-
-static int spl_fstrans_check(void);
-
-/*
- * Convert a KM_* flags mask to its Linux GFP_* counterpart.  The conversion
- * function is context aware which means that KM_SLEEP allocations can be
- * safely used in syncing contexts which have set PF_FSTRANS.
- */
-static inline gfp_t
-kmem_flags_convert(int flags)
-{
-       gfp_t lflags = __GFP_NOWARN | __GFP_COMP;
-
-       if (flags & KM_NOSLEEP) {
-               lflags |= GFP_ATOMIC | __GFP_NORETRY;
-       } else {
-               lflags |= GFP_KERNEL;
-               if (spl_fstrans_check())
-                       lflags &= ~(__GFP_IO|__GFP_FS);
-       }
-
-       if (flags & KM_PUSHPAGE)
-               lflags |= __GFP_HIGH;
-
-       if (flags & KM_ZERO)
-               lflags |= __GFP_ZERO;
-
-       return (lflags);
-}
-
-typedef struct {
-       struct task_struct *fstrans_thread;
-       unsigned int saved_flags;
-} fstrans_cookie_t;
-
-/*
- * Introduced in Linux 3.9, however this cannot be solely relied on before
- * Linux 3.18 as it doesn't turn off __GFP_FS as it should.
- */
-#ifdef PF_MEMALLOC_NOIO
-#define        __SPL_PF_MEMALLOC_NOIO (PF_MEMALLOC_NOIO)
-#else
-#define        __SPL_PF_MEMALLOC_NOIO (0)
-#endif
-
-/*
- * PF_FSTRANS is removed from Linux 4.12
- */
-#ifdef PF_FSTRANS
-#define        __SPL_PF_FSTRANS (PF_FSTRANS)
-#else
-#define        __SPL_PF_FSTRANS (0)
-#endif
-
-#define        SPL_FSTRANS (__SPL_PF_FSTRANS|__SPL_PF_MEMALLOC_NOIO)
-
-static inline fstrans_cookie_t
-spl_fstrans_mark(void)
-{
-       fstrans_cookie_t cookie;
-
-       BUILD_BUG_ON(SPL_FSTRANS == 0);
-
-       cookie.fstrans_thread = current;
-       cookie.saved_flags = current->flags & SPL_FSTRANS;
-       current->flags |= SPL_FSTRANS;
-
-       return (cookie);
-}
-
-static inline void
-spl_fstrans_unmark(fstrans_cookie_t cookie)
-{
-       ASSERT3P(cookie.fstrans_thread, ==, current);
-       ASSERT((current->flags & SPL_FSTRANS) == SPL_FSTRANS);
-
-       current->flags &= ~SPL_FSTRANS;
-       current->flags |= cookie.saved_flags;
-}
-
-static inline int
-spl_fstrans_check(void)
-{
-       return (current->flags & SPL_FSTRANS);
-}
-
-/*
- * specifically used to check PF_FSTRANS flag, cannot be relied on for
- * checking spl_fstrans_mark().
- */
-static inline int
-__spl_pf_fstrans_check(void)
-{
-       return (current->flags & __SPL_PF_FSTRANS);
-}
-
-#ifdef HAVE_ATOMIC64_T
-#define        kmem_alloc_used_add(size)       atomic64_add(size, &kmem_alloc_used)
-#define        kmem_alloc_used_sub(size)       atomic64_sub(size, &kmem_alloc_used)
-#define        kmem_alloc_used_read()          atomic64_read(&kmem_alloc_used)
-#define        kmem_alloc_used_set(size)       atomic64_set(&kmem_alloc_used, size)
-extern atomic64_t kmem_alloc_used;
-extern unsigned long long kmem_alloc_max;
-#else  /* HAVE_ATOMIC64_T */
-#define        kmem_alloc_used_add(size)       atomic_add(size, &kmem_alloc_used)
-#define        kmem_alloc_used_sub(size)       atomic_sub(size, &kmem_alloc_used)
-#define        kmem_alloc_used_read()          atomic_read(&kmem_alloc_used)
-#define        kmem_alloc_used_set(size)       atomic_set(&kmem_alloc_used, size)
-extern atomic_t kmem_alloc_used;
-extern unsigned long long kmem_alloc_max;
-#endif /* HAVE_ATOMIC64_T */
-
-extern unsigned int spl_kmem_alloc_warn;
-extern unsigned int spl_kmem_alloc_max;
-
-#define        kmem_alloc(sz, fl)      spl_kmem_alloc((sz), (fl), __func__, __LINE__)
-#define        kmem_zalloc(sz, fl)     spl_kmem_zalloc((sz), (fl), __func__, __LINE__)
-#define        kmem_free(ptr, sz)      spl_kmem_free((ptr), (sz))
-
-extern void *spl_kmem_alloc(size_t sz, int fl, const char *func, int line);
-extern void *spl_kmem_zalloc(size_t sz, int fl, const char *func, int line);
-extern void spl_kmem_free(const void *ptr, size_t sz);
-
-/*
- * The following functions are only available for internal use.
- */
-extern void *spl_kmem_alloc_impl(size_t size, int flags, int node);
-extern void *spl_kmem_alloc_debug(size_t size, int flags, int node);
-extern void *spl_kmem_alloc_track(size_t size, int flags,
-    const char *func, int line, int node);
-extern void spl_kmem_free_impl(const void *buf, size_t size);
-extern void spl_kmem_free_debug(const void *buf, size_t size);
-extern void spl_kmem_free_track(const void *buf, size_t size);
-
-extern int spl_kmem_init(void);
-extern void spl_kmem_fini(void);
-
-#endif /* _SPL_KMEM_H */
diff --git a/include/sys/kmem_cache.h b/include/sys/kmem_cache.h
deleted file mode 100644 (file)
index 8fa14f6..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_KMEM_CACHE_H
-#define        _SPL_KMEM_CACHE_H
-
-#include <sys/taskq.h>
-
-/*
- * Slab allocation interfaces.  The SPL slab differs from the standard
- * Linux SLAB or SLUB primarily in that each cache may be backed by slabs
- * allocated from the physical or virtal memory address space.  The virtual
- * slabs allow for good behavior when allocation large objects of identical
- * size.  This slab implementation also supports both constructors and
- * destructors which the Linux slab does not.
- */
-enum {
-       KMC_BIT_NOTOUCH         = 0,    /* Don't update ages */
-       KMC_BIT_NODEBUG         = 1,    /* Default behavior */
-       KMC_BIT_NOMAGAZINE      = 2,    /* XXX: Unsupported */
-       KMC_BIT_NOHASH          = 3,    /* XXX: Unsupported */
-       KMC_BIT_QCACHE          = 4,    /* XXX: Unsupported */
-       KMC_BIT_KMEM            = 5,    /* Use kmem cache */
-       KMC_BIT_VMEM            = 6,    /* Use vmem cache */
-       KMC_BIT_SLAB            = 7,    /* Use Linux slab cache */
-       KMC_BIT_OFFSLAB         = 8,    /* Objects not on slab */
-       KMC_BIT_NOEMERGENCY     = 9,    /* Disable emergency objects */
-       KMC_BIT_DEADLOCKED      = 14,   /* Deadlock detected */
-       KMC_BIT_GROWING         = 15,   /* Growing in progress */
-       KMC_BIT_REAPING         = 16,   /* Reaping in progress */
-       KMC_BIT_DESTROY         = 17,   /* Destroy in progress */
-       KMC_BIT_TOTAL           = 18,   /* Proc handler helper bit */
-       KMC_BIT_ALLOC           = 19,   /* Proc handler helper bit */
-       KMC_BIT_MAX             = 20,   /* Proc handler helper bit */
-};
-
-/* kmem move callback return values */
-typedef enum kmem_cbrc {
-       KMEM_CBRC_YES           = 0,    /* Object moved */
-       KMEM_CBRC_NO            = 1,    /* Object not moved */
-       KMEM_CBRC_LATER         = 2,    /* Object not moved, try again later */
-       KMEM_CBRC_DONT_NEED     = 3,    /* Neither object is needed */
-       KMEM_CBRC_DONT_KNOW     = 4,    /* Object unknown */
-} kmem_cbrc_t;
-
-#define        KMC_NOTOUCH             (1 << KMC_BIT_NOTOUCH)
-#define        KMC_NODEBUG             (1 << KMC_BIT_NODEBUG)
-#define        KMC_NOMAGAZINE          (1 << KMC_BIT_NOMAGAZINE)
-#define        KMC_NOHASH              (1 << KMC_BIT_NOHASH)
-#define        KMC_QCACHE              (1 << KMC_BIT_QCACHE)
-#define        KMC_KMEM                (1 << KMC_BIT_KMEM)
-#define        KMC_VMEM                (1 << KMC_BIT_VMEM)
-#define        KMC_SLAB                (1 << KMC_BIT_SLAB)
-#define        KMC_OFFSLAB             (1 << KMC_BIT_OFFSLAB)
-#define        KMC_NOEMERGENCY         (1 << KMC_BIT_NOEMERGENCY)
-#define        KMC_DEADLOCKED          (1 << KMC_BIT_DEADLOCKED)
-#define        KMC_GROWING             (1 << KMC_BIT_GROWING)
-#define        KMC_REAPING             (1 << KMC_BIT_REAPING)
-#define        KMC_DESTROY             (1 << KMC_BIT_DESTROY)
-#define        KMC_TOTAL               (1 << KMC_BIT_TOTAL)
-#define        KMC_ALLOC               (1 << KMC_BIT_ALLOC)
-#define        KMC_MAX                 (1 << KMC_BIT_MAX)
-
-#define        KMC_REAP_CHUNK          INT_MAX
-#define        KMC_DEFAULT_SEEKS       1
-
-#define        KMC_EXPIRE_AGE          0x1     /* Due to age */
-#define        KMC_EXPIRE_MEM          0x2     /* Due to low memory */
-
-#define        KMC_RECLAIM_ONCE        0x1     /* Force a single shrinker pass */
-
-extern unsigned int spl_kmem_cache_expire;
-extern struct list_head spl_kmem_cache_list;
-extern struct rw_semaphore spl_kmem_cache_sem;
-
-#define        SKM_MAGIC                       0x2e2e2e2e
-#define        SKO_MAGIC                       0x20202020
-#define        SKS_MAGIC                       0x22222222
-#define        SKC_MAGIC                       0x2c2c2c2c
-
-#define        SPL_KMEM_CACHE_DELAY            15      /* Minimum slab release age */
-#define        SPL_KMEM_CACHE_REAP             0       /* Default reap everything */
-#define        SPL_KMEM_CACHE_OBJ_PER_SLAB     8       /* Target objects per slab */
-#define        SPL_KMEM_CACHE_OBJ_PER_SLAB_MIN 1       /* Minimum objects per slab */
-#define        SPL_KMEM_CACHE_ALIGN            8       /* Default object alignment */
-#ifdef _LP64
-#define        SPL_KMEM_CACHE_MAX_SIZE         32      /* Max slab size in MB */
-#else
-#define        SPL_KMEM_CACHE_MAX_SIZE         4       /* Max slab size in MB */
-#endif
-
-#define        SPL_MAX_ORDER                   (MAX_ORDER - 3)
-#define        SPL_MAX_ORDER_NR_PAGES          (1 << (SPL_MAX_ORDER - 1))
-
-#ifdef CONFIG_SLUB
-#define        SPL_MAX_KMEM_CACHE_ORDER        PAGE_ALLOC_COSTLY_ORDER
-#define        SPL_MAX_KMEM_ORDER_NR_PAGES     (1 << (SPL_MAX_KMEM_CACHE_ORDER - 1))
-#else
-#define        SPL_MAX_KMEM_ORDER_NR_PAGES     (KMALLOC_MAX_SIZE >> PAGE_SHIFT)
-#endif
-
-#define        POINTER_IS_VALID(p)             0       /* Unimplemented */
-#define        POINTER_INVALIDATE(pp)                  /* Unimplemented */
-
-typedef int (*spl_kmem_ctor_t)(void *, void *, int);
-typedef void (*spl_kmem_dtor_t)(void *, void *);
-typedef void (*spl_kmem_reclaim_t)(void *);
-
-typedef struct spl_kmem_magazine {
-       uint32_t                skm_magic;      /* Sanity magic */
-       uint32_t                skm_avail;      /* Available objects */
-       uint32_t                skm_size;       /* Magazine size */
-       uint32_t                skm_refill;     /* Batch refill size */
-       struct spl_kmem_cache   *skm_cache;     /* Owned by cache */
-       unsigned long           skm_age;        /* Last cache access */
-       unsigned int            skm_cpu;        /* Owned by cpu */
-       void                    *skm_objs[0];   /* Object pointers */
-} spl_kmem_magazine_t;
-
-typedef struct spl_kmem_obj {
-       uint32_t                sko_magic;      /* Sanity magic */
-       void                    *sko_addr;      /* Buffer address */
-       struct spl_kmem_slab    *sko_slab;      /* Owned by slab */
-       struct list_head        sko_list;       /* Free object list linkage */
-} spl_kmem_obj_t;
-
-typedef struct spl_kmem_slab {
-       uint32_t                sks_magic;      /* Sanity magic */
-       uint32_t                sks_objs;       /* Objects per slab */
-       struct spl_kmem_cache   *sks_cache;     /* Owned by cache */
-       struct list_head        sks_list;       /* Slab list linkage */
-       struct list_head        sks_free_list;  /* Free object list */
-       unsigned long           sks_age;        /* Last modify jiffie */
-       uint32_t                sks_ref;        /* Ref count used objects */
-} spl_kmem_slab_t;
-
-typedef struct spl_kmem_alloc {
-       struct spl_kmem_cache   *ska_cache;     /* Owned by cache */
-       int                     ska_flags;      /* Allocation flags */
-       taskq_ent_t             ska_tqe;        /* Task queue entry */
-} spl_kmem_alloc_t;
-
-typedef struct spl_kmem_emergency {
-       struct rb_node          ske_node;       /* Emergency tree linkage */
-       unsigned long           ske_obj;        /* Buffer address */
-} spl_kmem_emergency_t;
-
-typedef struct spl_kmem_cache {
-       uint32_t                skc_magic;      /* Sanity magic */
-       uint32_t                skc_name_size;  /* Name length */
-       char                    *skc_name;      /* Name string */
-       spl_kmem_magazine_t     **skc_mag;      /* Per-CPU warm cache */
-       uint32_t                skc_mag_size;   /* Magazine size */
-       uint32_t                skc_mag_refill; /* Magazine refill count */
-       spl_kmem_ctor_t         skc_ctor;       /* Constructor */
-       spl_kmem_dtor_t         skc_dtor;       /* Destructor */
-       spl_kmem_reclaim_t      skc_reclaim;    /* Reclaimator */
-       void                    *skc_private;   /* Private data */
-       void                    *skc_vmp;       /* Unused */
-       struct kmem_cache       *skc_linux_cache; /* Linux slab cache if used */
-       unsigned long           skc_flags;      /* Flags */
-       uint32_t                skc_obj_size;   /* Object size */
-       uint32_t                skc_obj_align;  /* Object alignment */
-       uint32_t                skc_slab_objs;  /* Objects per slab */
-       uint32_t                skc_slab_size;  /* Slab size */
-       uint32_t                skc_delay;      /* Slab reclaim interval */
-       uint32_t                skc_reap;       /* Slab reclaim count */
-       atomic_t                skc_ref;        /* Ref count callers */
-       taskqid_t               skc_taskqid;    /* Slab reclaim task */
-       struct list_head        skc_list;       /* List of caches linkage */
-       struct list_head        skc_complete_list; /* Completely alloc'ed */
-       struct list_head        skc_partial_list;  /* Partially alloc'ed */
-       struct rb_root          skc_emergency_tree; /* Min sized objects */
-       spinlock_t              skc_lock;       /* Cache lock */
-       spl_wait_queue_head_t   skc_waitq;      /* Allocation waiters */
-       uint64_t                skc_slab_fail;  /* Slab alloc failures */
-       uint64_t                skc_slab_create;  /* Slab creates */
-       uint64_t                skc_slab_destroy; /* Slab destroys */
-       uint64_t                skc_slab_total; /* Slab total current */
-       uint64_t                skc_slab_alloc; /* Slab alloc current */
-       uint64_t                skc_slab_max;   /* Slab max historic  */
-       uint64_t                skc_obj_total;  /* Obj total current */
-       uint64_t                skc_obj_alloc;  /* Obj alloc current */
-       uint64_t                skc_obj_max;    /* Obj max historic */
-       uint64_t                skc_obj_deadlock;  /* Obj emergency deadlocks */
-       uint64_t                skc_obj_emergency; /* Obj emergency current */
-       uint64_t                skc_obj_emergency_max; /* Obj emergency max */
-} spl_kmem_cache_t;
-#define        kmem_cache_t            spl_kmem_cache_t
-
-extern spl_kmem_cache_t *spl_kmem_cache_create(char *name, size_t size,
-    size_t align, spl_kmem_ctor_t ctor, spl_kmem_dtor_t dtor,
-    spl_kmem_reclaim_t reclaim, void *priv, void *vmp, int flags);
-extern void spl_kmem_cache_set_move(spl_kmem_cache_t *,
-    kmem_cbrc_t (*)(void *, void *, size_t, void *));
-extern void spl_kmem_cache_destroy(spl_kmem_cache_t *skc);
-extern void *spl_kmem_cache_alloc(spl_kmem_cache_t *skc, int flags);
-extern void spl_kmem_cache_free(spl_kmem_cache_t *skc, void *obj);
-extern void spl_kmem_cache_set_allocflags(spl_kmem_cache_t *skc, gfp_t flags);
-extern void spl_kmem_cache_reap_now(spl_kmem_cache_t *skc, int count);
-extern void spl_kmem_reap(void);
-
-#define        kmem_cache_create(name, size, align, ctor, dtor, rclm, priv, vmp, fl) \
-    spl_kmem_cache_create(name, size, align, ctor, dtor, rclm, priv, vmp, fl)
-#define        kmem_cache_set_move(skc, move)  spl_kmem_cache_set_move(skc, move)
-#define        kmem_cache_destroy(skc)         spl_kmem_cache_destroy(skc)
-#define        kmem_cache_alloc(skc, flags)    spl_kmem_cache_alloc(skc, flags)
-#define        kmem_cache_free(skc, obj)       spl_kmem_cache_free(skc, obj)
-#define        kmem_cache_reap_now(skc)        \
-    spl_kmem_cache_reap_now(skc, skc->skc_reap)
-#define        kmem_reap()                     spl_kmem_reap()
-
-/*
- * The following functions are only available for internal use.
- */
-extern int spl_kmem_cache_init(void);
-extern void spl_kmem_cache_fini(void);
-
-#endif /* _SPL_KMEM_CACHE_H */
diff --git a/include/sys/kobj.h b/include/sys/kobj.h
deleted file mode 100644 (file)
index 558ec39..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_KOBJ_H
-#define        _SPL_KOBJ_H
-
-#include <sys/vnode.h>
-
-typedef struct _buf {
-       vnode_t *vp;
-} _buf_t;
-
-typedef struct _buf buf_t;
-
-extern struct _buf *kobj_open_file(const char *name);
-extern void kobj_close_file(struct _buf *file);
-extern int kobj_read_file(struct _buf *file, char *buf, unsigned size,
-    unsigned off);
-extern int kobj_get_filesize(struct _buf *file, uint64_t *size);
-
-#endif /* SPL_KOBJ_H */
diff --git a/include/sys/kstat.h b/include/sys/kstat.h
deleted file mode 100644 (file)
index e9aff73..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_KSTAT_H
-#define        _SPL_KSTAT_H
-
-#include <linux/module.h>
-#include <linux/proc_compat.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/kmem.h>
-#include <sys/mutex.h>
-
-#define        KSTAT_STRLEN            255
-#define        KSTAT_RAW_MAX           (128*1024)
-
-/*
- * For reference valid classes are:
- * disk, tape, net, controller, vm, kvm, hat, streams, kstat, misc
- */
-
-#define        KSTAT_TYPE_RAW          0 /* can be anything; ks_ndata >= 1 */
-#define        KSTAT_TYPE_NAMED        1 /* name/value pair; ks_ndata >= 1 */
-#define        KSTAT_TYPE_INTR         2 /* interrupt stats; ks_ndata == 1 */
-#define        KSTAT_TYPE_IO           3 /* I/O stats; ks_ndata == 1 */
-#define        KSTAT_TYPE_TIMER        4 /* event timer; ks_ndata >= 1 */
-#define        KSTAT_NUM_TYPES         5
-
-#define        KSTAT_DATA_CHAR         0
-#define        KSTAT_DATA_INT32        1
-#define        KSTAT_DATA_UINT32       2
-#define        KSTAT_DATA_INT64        3
-#define        KSTAT_DATA_UINT64       4
-#define        KSTAT_DATA_LONG         5
-#define        KSTAT_DATA_ULONG        6
-#define        KSTAT_DATA_STRING       7
-#define        KSTAT_NUM_DATAS         8
-
-#define        KSTAT_INTR_HARD         0
-#define        KSTAT_INTR_SOFT         1
-#define        KSTAT_INTR_WATCHDOG     2
-#define        KSTAT_INTR_SPURIOUS     3
-#define        KSTAT_INTR_MULTSVC      4
-#define        KSTAT_NUM_INTRS         5
-
-#define        KSTAT_FLAG_VIRTUAL      0x01
-#define        KSTAT_FLAG_VAR_SIZE     0x02
-#define        KSTAT_FLAG_WRITABLE     0x04
-#define        KSTAT_FLAG_PERSISTENT   0x08
-#define        KSTAT_FLAG_DORMANT      0x10
-#define        KSTAT_FLAG_UNSUPPORTED  \
-       (KSTAT_FLAG_VAR_SIZE | KSTAT_FLAG_WRITABLE | \
-       KSTAT_FLAG_PERSISTENT | KSTAT_FLAG_DORMANT)
-
-
-#define        KS_MAGIC                0x9d9d9d9d
-
-/* Dynamic updates */
-#define        KSTAT_READ              0
-#define        KSTAT_WRITE             1
-
-struct kstat_s;
-typedef struct kstat_s kstat_t;
-
-typedef int kid_t;                             /* unique kstat id */
-typedef int kstat_update_t(struct kstat_s *, int); /* dynamic update cb */
-
-typedef struct kstat_module {
-       char ksm_name[KSTAT_STRLEN+1];          /* module name */
-       struct list_head ksm_module_list;       /* module linkage */
-       struct list_head ksm_kstat_list;        /* list of kstat entries */
-       struct proc_dir_entry *ksm_proc;        /* proc entry */
-} kstat_module_t;
-
-typedef struct kstat_raw_ops {
-       int (*headers)(char *buf, size_t size);
-       int (*data)(char *buf, size_t size, void *data);
-       void *(*addr)(kstat_t *ksp, loff_t index);
-} kstat_raw_ops_t;
-
-struct kstat_s {
-       int             ks_magic;               /* magic value */
-       kid_t           ks_kid;                 /* unique kstat ID */
-       hrtime_t        ks_crtime;              /* creation time */
-       hrtime_t        ks_snaptime;            /* last access time */
-       char            ks_module[KSTAT_STRLEN+1]; /* provider module name */
-       int             ks_instance;            /* provider module instance */
-       char            ks_name[KSTAT_STRLEN+1]; /* kstat name */
-       char            ks_class[KSTAT_STRLEN+1]; /* kstat class */
-       uchar_t         ks_type;                /* kstat data type */
-       uchar_t         ks_flags;               /* kstat flags */
-       void            *ks_data;               /* kstat type-specific data */
-       uint_t          ks_ndata;               /* # of data records */
-       size_t          ks_data_size;           /* size of kstat data section */
-       struct proc_dir_entry *ks_proc;         /* proc linkage */
-       kstat_update_t  *ks_update;             /* dynamic updates */
-       void            *ks_private;            /* private data */
-       kmutex_t        ks_private_lock;        /* kstat private data lock */
-       kmutex_t        *ks_lock;               /* kstat data lock */
-       struct list_head ks_list;               /* kstat linkage */
-       kstat_module_t  *ks_owner;              /* kstat module linkage */
-       kstat_raw_ops_t ks_raw_ops;             /* ops table for raw type */
-       char            *ks_raw_buf;            /* buf used for raw ops */
-       size_t          ks_raw_bufsize;         /* size of raw ops buffer */
-};
-
-typedef struct kstat_named_s {
-       char    name[KSTAT_STRLEN];     /* name of counter */
-       uchar_t data_type;              /* data type */
-       union {
-               char c[16];     /* 128-bit int */
-               int32_t i32;    /* 32-bit signed int */
-               uint32_t ui32;  /* 32-bit unsigned int */
-               int64_t i64;    /* 64-bit signed int */
-               uint64_t ui64;  /* 64-bit unsigned int */
-               long l;         /* native signed long */
-               ulong_t ul;     /* native unsigned long */
-               struct {
-                       union {
-                               char *ptr;      /* NULL-term string */
-                               char __pad[8];  /* 64-bit padding */
-                       } addr;
-                       uint32_t len;           /* # bytes for strlen + '\0' */
-               } string;
-       } value;
-} kstat_named_t;
-
-#define        KSTAT_NAMED_STR_PTR(knptr) ((knptr)->value.string.addr.ptr)
-#define        KSTAT_NAMED_STR_BUFLEN(knptr) ((knptr)->value.string.len)
-
-typedef struct kstat_intr {
-       uint_t intrs[KSTAT_NUM_INTRS];
-} kstat_intr_t;
-
-typedef struct kstat_io {
-       u_longlong_t    nread;          /* number of bytes read */
-       u_longlong_t    nwritten;       /* number of bytes written */
-       uint_t          reads;          /* number of read operations */
-       uint_t          writes;         /* number of write operations */
-       hrtime_t        wtime;          /* cumulative wait (pre-service) time */
-       hrtime_t        wlentime;       /* cumulative wait len*time product */
-       hrtime_t        wlastupdate;    /* last time wait queue changed */
-       hrtime_t        rtime;          /* cumulative run (service) time */
-       hrtime_t        rlentime;       /* cumulative run length*time product */
-       hrtime_t        rlastupdate;    /* last time run queue changed */
-       uint_t          wcnt;           /* count of elements in wait state */
-       uint_t          rcnt;           /* count of elements in run state */
-} kstat_io_t;
-
-typedef struct kstat_timer {
-       char            name[KSTAT_STRLEN+1]; /* event name */
-       u_longlong_t    num_events;      /* number of events */
-       hrtime_t        elapsed_time;    /* cumulative elapsed time */
-       hrtime_t        min_time;        /* shortest event duration */
-       hrtime_t        max_time;        /* longest event duration */
-       hrtime_t        start_time;      /* previous event start time */
-       hrtime_t        stop_time;       /* previous event stop time */
-} kstat_timer_t;
-
-int spl_kstat_init(void);
-void spl_kstat_fini(void);
-
-extern void __kstat_set_raw_ops(kstat_t *ksp,
-    int (*headers)(char *buf, size_t size),
-    int (*data)(char *buf, size_t size, void *data),
-    void* (*addr)(kstat_t *ksp, loff_t index));
-
-extern kstat_t *__kstat_create(const char *ks_module, int ks_instance,
-    const char *ks_name, const char *ks_class, uchar_t ks_type,
-    uint_t ks_ndata, uchar_t ks_flags);
-
-extern void __kstat_install(kstat_t *ksp);
-extern void __kstat_delete(kstat_t *ksp);
-extern void kstat_waitq_enter(kstat_io_t *);
-extern void kstat_waitq_exit(kstat_io_t *);
-extern void kstat_runq_enter(kstat_io_t *);
-extern void kstat_runq_exit(kstat_io_t *);
-
-#define        kstat_set_raw_ops(k, h, d, a) \
-    __kstat_set_raw_ops(k, h, d, a)
-#define        kstat_create(m, i, n, c, t, s, f) \
-    __kstat_create(m, i, n, c, t, s, f)
-
-#define        kstat_install(k)                __kstat_install(k)
-#define        kstat_delete(k)                 __kstat_delete(k)
-
-#endif  /* _SPL_KSTAT_H */
diff --git a/include/sys/list.h b/include/sys/list.h
deleted file mode 100644 (file)
index d80c847..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_LIST_H
-#define        _SPL_LIST_H
-
-#include <sys/types.h>
-#include <linux/list.h>
-
-/*
- * NOTE: I have implemented the Solaris list API in terms of the native
- * linux API.  This has certain advantages in terms of leveraging the linux
- * list debugging infrastructure, but it also means that the internals of a
- * list differ slightly than on Solaris.  This is not a problem as long as
- * all callers stick to the published API.  The two major differences are:
- *
- * 1) A list_node_t is mapped to a linux list_head struct which changes
- *    the name of the list_next/list_prev pointers to next/prev respectively.
- *
- * 2) A list_node_t which is not attached to a list on Solaris is denoted
- *    by having its list_next/list_prev pointers set to NULL.  Under linux
- *    the next/prev pointers are set to LIST_POISON1 and LIST_POISON2
- *    respectively.  At this moment this only impacts the implementation
- *    of the list_link_init() and list_link_active() functions.
- */
-
-typedef struct list_head list_node_t;
-
-typedef struct list {
-       size_t list_size;
-       size_t list_offset;
-       list_node_t list_head;
-} list_t;
-
-#define        list_d2l(a, obj) ((list_node_t *)(((char *)obj) + (a)->list_offset))
-#define        list_object(a, node) ((void *)(((char *)node) - (a)->list_offset))
-
-static inline int
-list_is_empty(list_t *list)
-{
-       return (list_empty(&list->list_head));
-}
-
-static inline void
-list_link_init(list_node_t *node)
-{
-       node->next = LIST_POISON1;
-       node->prev = LIST_POISON2;
-}
-
-static inline void
-list_create(list_t *list, size_t size, size_t offset)
-{
-       ASSERT(list);
-       ASSERT(size > 0);
-       ASSERT(size >= offset + sizeof (list_node_t));
-
-       list->list_size = size;
-       list->list_offset = offset;
-       INIT_LIST_HEAD(&list->list_head);
-}
-
-static inline void
-list_destroy(list_t *list)
-{
-       ASSERT(list);
-       ASSERT(list_is_empty(list));
-
-       list_del(&list->list_head);
-}
-
-static inline void
-list_insert_head(list_t *list, void *object)
-{
-       list_add(list_d2l(list, object), &list->list_head);
-}
-
-static inline void
-list_insert_tail(list_t *list, void *object)
-{
-       list_add_tail(list_d2l(list, object), &list->list_head);
-}
-
-static inline void
-list_insert_after(list_t *list, void *object, void *nobject)
-{
-       if (object == NULL)
-               list_insert_head(list, nobject);
-       else
-               list_add(list_d2l(list, nobject), list_d2l(list, object));
-}
-
-static inline void
-list_insert_before(list_t *list, void *object, void *nobject)
-{
-       if (object == NULL)
-               list_insert_tail(list, nobject);
-       else
-               list_add_tail(list_d2l(list, nobject), list_d2l(list, object));
-}
-
-static inline void
-list_remove(list_t *list, void *object)
-{
-       ASSERT(!list_is_empty(list));
-       list_del(list_d2l(list, object));
-}
-
-static inline void *
-list_remove_head(list_t *list)
-{
-       list_node_t *head = list->list_head.next;
-       if (head == &list->list_head)
-               return (NULL);
-
-       list_del(head);
-       return (list_object(list, head));
-}
-
-static inline void *
-list_remove_tail(list_t *list)
-{
-       list_node_t *tail = list->list_head.prev;
-       if (tail == &list->list_head)
-               return (NULL);
-
-       list_del(tail);
-       return (list_object(list, tail));
-}
-
-static inline void *
-list_head(list_t *list)
-{
-       if (list_is_empty(list))
-               return (NULL);
-
-       return (list_object(list, list->list_head.next));
-}
-
-static inline void *
-list_tail(list_t *list)
-{
-       if (list_is_empty(list))
-               return (NULL);
-
-       return (list_object(list, list->list_head.prev));
-}
-
-static inline void *
-list_next(list_t *list, void *object)
-{
-       list_node_t *node = list_d2l(list, object);
-
-       if (node->next != &list->list_head)
-               return (list_object(list, node->next));
-
-       return (NULL);
-}
-
-static inline void *
-list_prev(list_t *list, void *object)
-{
-       list_node_t *node = list_d2l(list, object);
-
-       if (node->prev != &list->list_head)
-               return (list_object(list, node->prev));
-
-       return (NULL);
-}
-
-static inline int
-list_link_active(list_node_t *node)
-{
-       return (node->next != LIST_POISON1) && (node->prev != LIST_POISON2);
-}
-
-static inline void
-spl_list_move_tail(list_t *dst, list_t *src)
-{
-       list_splice_init(&src->list_head, dst->list_head.prev);
-}
-
-#define        list_move_tail(dst, src)        spl_list_move_tail(dst, src)
-
-static inline void
-list_link_replace(list_node_t *old_node, list_node_t *new_node)
-{
-       ASSERT(list_link_active(old_node));
-       ASSERT(!list_link_active(new_node));
-
-       new_node->next = old_node->next;
-       new_node->prev = old_node->prev;
-       old_node->prev->next = new_node;
-       old_node->next->prev = new_node;
-       list_link_init(old_node);
-}
-
-#endif /* SPL_LIST_H */
diff --git a/include/sys/mkdev.h b/include/sys/mkdev.h
deleted file mode 100644 (file)
index 7dff2d2..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_MKDEV_H
-#define        _SPL_MKDEV_H
-
-#endif /* SPL_MKDEV_H */
diff --git a/include/sys/mntent.h b/include/sys/mntent.h
deleted file mode 100644 (file)
index cac28c5..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_MNTENT_H
-#define        _SPL_MNTENT_H
-
-#endif /* SPL_MNTENT_H */
diff --git a/include/sys/modctl.h b/include/sys/modctl.h
deleted file mode 100644 (file)
index 8f9ae49..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_MODCTL_H
-#define        _SPL_MODCTL_H
-
-#endif /* SPL_MODCTL_H */
diff --git a/include/sys/mode.h b/include/sys/mode.h
deleted file mode 100644 (file)
index 02802d0..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_MODE_H
-#define        _SPL_MODE_H
-
-#define        IFTOVT(mode)    vn_mode_to_vtype(mode)
-#define        VTTOIF(vtype)   vn_vtype_to_mode(vtype)
-#define        MAKEIMODE(T, M) (VTTOIF(T) | ((M) & ~S_IFMT))
-
-#endif /* SPL_MODE_H */
diff --git a/include/sys/mount.h b/include/sys/mount.h
deleted file mode 100644 (file)
index fdd1c66..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_MOUNT_H
-#define        _SPL_MOUNT_H
-
-#endif /* SPL_MOUNT_H */
diff --git a/include/sys/mutex.h b/include/sys/mutex.h
deleted file mode 100644 (file)
index c7084b3..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_MUTEX_H
-#define        _SPL_MUTEX_H
-
-#include <sys/types.h>
-#include <linux/mutex.h>
-#include <linux/compiler_compat.h>
-#include <linux/lockdep.h>
-
-typedef enum {
-       MUTEX_DEFAULT   = 0,
-       MUTEX_SPIN      = 1,
-       MUTEX_ADAPTIVE  = 2,
-       MUTEX_NOLOCKDEP = 3
-} kmutex_type_t;
-
-typedef struct {
-       struct mutex            m_mutex;
-       spinlock_t              m_lock; /* used for serializing mutex_exit */
-       kthread_t               *m_owner;
-#ifdef CONFIG_LOCKDEP
-       kmutex_type_t           m_type;
-#endif /* CONFIG_LOCKDEP */
-} kmutex_t;
-
-#define        MUTEX(mp)               (&((mp)->m_mutex))
-
-static inline void
-spl_mutex_set_owner(kmutex_t *mp)
-{
-       mp->m_owner = current;
-}
-
-static inline void
-spl_mutex_clear_owner(kmutex_t *mp)
-{
-       mp->m_owner = NULL;
-}
-
-#define        mutex_owner(mp)         (ACCESS_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))
-
-#ifdef CONFIG_LOCKDEP
-static inline void
-spl_mutex_set_type(kmutex_t *mp, kmutex_type_t type)
-{
-       mp->m_type = type;
-}
-static inline void
-spl_mutex_lockdep_off_maybe(kmutex_t *mp)                      \
-{                                                              \
-       if (mp && mp->m_type == MUTEX_NOLOCKDEP)                \
-               lockdep_off();                                  \
-}
-static inline void
-spl_mutex_lockdep_on_maybe(kmutex_t *mp)                       \
-{                                                              \
-       if (mp && mp->m_type == MUTEX_NOLOCKDEP)                \
-               lockdep_on();                                   \
-}
-#else  /* CONFIG_LOCKDEP */
-#define        spl_mutex_set_type(mp, type)
-#define        spl_mutex_lockdep_off_maybe(mp)
-#define        spl_mutex_lockdep_on_maybe(mp)
-#endif /* CONFIG_LOCKDEP */
-
-/*
- * The following functions must be a #define   and not static inline.
- * This ensures that the native linux mutex functions (lock/unlock)
- * will be correctly located in the users code which is important
- * for the built in kernel lock analysis tools
- */
-#undef mutex_init
-#define        mutex_init(mp, name, type, ibc)                         \
-{                                                              \
-       static struct lock_class_key __key;                     \
-       ASSERT(type == MUTEX_DEFAULT || type == MUTEX_NOLOCKDEP); \
-                                                               \
-       __mutex_init(MUTEX(mp), (name) ? (#name) : (#mp), &__key); \
-       spin_lock_init(&(mp)->m_lock);                          \
-       spl_mutex_clear_owner(mp);                              \
-       spl_mutex_set_type(mp, type);                           \
-}
-
-#undef mutex_destroy
-#define        mutex_destroy(mp)                                       \
-{                                                              \
-       VERIFY3P(mutex_owner(mp), ==, NULL);                    \
-}
-
-/* BEGIN CSTYLED */
-#define        mutex_tryenter(mp)                                      \
-({                                                             \
-       int _rc_;                                               \
-                                                               \
-       spl_mutex_lockdep_off_maybe(mp);                        \
-       if ((_rc_ = mutex_trylock(MUTEX(mp))) == 1)             \
-               spl_mutex_set_owner(mp);                        \
-       spl_mutex_lockdep_on_maybe(mp);                         \
-                                                               \
-       _rc_;                                                   \
-})
-/* END CSTYLED */
-
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
-#define        mutex_enter_nested(mp, subclass)                        \
-{                                                              \
-       ASSERT3P(mutex_owner(mp), !=, current);                 \
-       spl_mutex_lockdep_off_maybe(mp);                        \
-       mutex_lock_nested(MUTEX(mp), (subclass));               \
-       spl_mutex_lockdep_on_maybe(mp);                         \
-       spl_mutex_set_owner(mp);                                \
-}
-#else /* CONFIG_DEBUG_LOCK_ALLOC */
-#define        mutex_enter_nested(mp, subclass)                        \
-{                                                              \
-       ASSERT3P(mutex_owner(mp), !=, current);                 \
-       spl_mutex_lockdep_off_maybe(mp);                        \
-       mutex_lock(MUTEX(mp));                                  \
-       spl_mutex_lockdep_on_maybe(mp);                         \
-       spl_mutex_set_owner(mp);                                \
-}
-#endif /*  CONFIG_DEBUG_LOCK_ALLOC */
-
-#define        mutex_enter(mp) mutex_enter_nested((mp), 0)
-
-/*
- * The reason for the spinlock:
- *
- * The Linux mutex is designed with a fast-path/slow-path design such that it
- * does not guarantee serialization upon itself, allowing a race where latter
- * acquirers finish mutex_unlock before former ones.
- *
- * The race renders it unsafe to be used for serializing the freeing of an
- * object in which the mutex is embedded, where the latter acquirer could go
- * on to free the object while the former one is still doing mutex_unlock and
- * causing memory corruption.
- *
- * However, there are many places in ZFS where the mutex is used for
- * serializing object freeing, and the code is shared among other OSes without
- * this issue. Thus, we need the spinlock to force the serialization on
- * mutex_exit().
- *
- * See http://lwn.net/Articles/575477/ for the information about the race.
- */
-#define        mutex_exit(mp)                                          \
-{                                                              \
-       spl_mutex_clear_owner(mp);                              \
-       spin_lock(&(mp)->m_lock);                               \
-       spl_mutex_lockdep_off_maybe(mp);                        \
-       mutex_unlock(MUTEX(mp));                                \
-       spl_mutex_lockdep_on_maybe(mp);                         \
-       spin_unlock(&(mp)->m_lock);                             \
-       /* NOTE: do not dereference mp after this point */      \
-}
-
-int spl_mutex_init(void);
-void spl_mutex_fini(void);
-
-#endif /* _SPL_MUTEX_H */
diff --git a/include/sys/note.h b/include/sys/note.h
deleted file mode 100644 (file)
index f7f9b70..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_NOTE_H
-#define        _SPL_NOTE_H
-
-#endif /* SPL_NOTE_H */
diff --git a/include/sys/open.h b/include/sys/open.h
deleted file mode 100644 (file)
index 7c9e0cb..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_OPEN_H
-#define        _SPL_OPEN_H
-
-#endif /* SPL_OPEN_H */
diff --git a/include/sys/param.h b/include/sys/param.h
deleted file mode 100644 (file)
index 4ef9291..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_PARAM_H
-#define        _SPL_PARAM_H
-
-#include <asm/page.h>
-
-/* Pages to bytes and back */
-#define        ptob(pages)                     ((pages) << PAGE_SHIFT)
-#define        btop(bytes)                     ((bytes) >> PAGE_SHIFT)
-
-#define        MAXUID                          UINT32_MAX
-
-#endif /* SPL_PARAM_H */
diff --git a/include/sys/pathname.h b/include/sys/pathname.h
deleted file mode 100644 (file)
index fde1b3c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_PATHNAME_H
-#define        _SPL_PATHNAME_H
-
-typedef struct pathname {
-       char    *pn_buf;                /* underlying storage */
-       char    *pn_path;               /* remaining pathname */
-       size_t  pn_pathlen;             /* remaining length */
-       size_t  pn_bufsize;             /* total size of pn_buf */
-} pathname_t;
-
-#endif /* SPL_PATHNAME_H */
diff --git a/include/sys/policy.h b/include/sys/policy.h
deleted file mode 100644 (file)
index e4333cf..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_POLICY_H
-#define        _SPL_POLICY_H
-
-#define        secpolicy_fs_unmount(c, vfs)                    (0)
-#define        secpolicy_nfs(c)                                (0)
-#define        secpolicy_sys_config(c, co)                     (0)
-#define        secpolicy_zfs(c)                                (0)
-#define        secpolicy_zinject(c)                            (0)
-#define        secpolicy_vnode_setids_setgids(c, id)           (0)
-#define        secpolicy_vnode_setid_retain(c, sr)             (0)
-#define        secpolicy_setid_clear(v, c)                     (0)
-#define        secpolicy_vnode_any_access(c, vp, o)            (0)
-#define        secpolicy_vnode_access2(c, cp, o, m1, m2)       (0)
-#define        secpolicy_vnode_chown(c, o)                     (0)
-#define        secpolicy_vnode_setdac(c, o)                    (0)
-#define        secpolicy_vnode_remove(c)                       (0)
-#define        secpolicy_vnode_setattr(c, v, a, o, f, func, n) (0)
-#define        secpolicy_xvattr(x, o, c, t)                    (0)
-#define        secpolicy_vnode_stky_modify(c)                  (0)
-#define        secpolicy_setid_setsticky_clear(v, a, o, c)     (0)
-#define        secpolicy_basic_link(c)                         (0)
-
-#endif /* SPL_POLICY_H */
diff --git a/include/sys/pool.h b/include/sys/pool.h
deleted file mode 100644 (file)
index 392c14b..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_POOL_H
-#define        _SPL_POOL_H
-
-#include <sys/pset.h>
-
-#endif /* SPL_POOL_H */
diff --git a/include/sys/priv_impl.h b/include/sys/priv_impl.h
deleted file mode 100644 (file)
index 822c2de..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_PRIV_IMPL_H
-#define        _SPL_PRIV_IMPL_H
-
-#endif /* _SPL_PRIV_IMPL_H */
diff --git a/include/sys/proc.h b/include/sys/proc.h
deleted file mode 100644 (file)
index 95fc8cc..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_PROC_H
-#define        _SPL_PROC_H
-
-#endif /* SPL_PROC_H */
diff --git a/include/sys/processor.h b/include/sys/processor.h
deleted file mode 100644 (file)
index a70101f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef        _SPL_PROCESSOR_H
-#define        _SPL_PROCESSOR_H
-
-#define        getcpuid() smp_processor_id()
-
-typedef int    processorid_t;
-
-#endif /* _SPL_PROCESSOR_H */
diff --git a/include/sys/pset.h b/include/sys/pset.h
deleted file mode 100644 (file)
index a6a9d34..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_PSET_H
-#define        _SPL_PSET_H
-
-typedef int psetid_t;
-
-/* special processor set id's */
-#define        PS_NONE         -1
-#define        PS_QUERY        -2
-#define        PS_MYID         -3
-#define        PS_SOFT         -4
-#define        PS_HARD         -5
-#define        PS_QUERY_TYPE   -6
-
-#endif /* SPL_PSET_H */
diff --git a/include/sys/random.h b/include/sys/random.h
deleted file mode 100644 (file)
index 93e244f..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_RANDOM_H
-#define        _SPL_RANDOM_H
-
-#include <linux/module.h>
-#include <linux/random.h>
-
-static __inline__ int
-random_get_bytes(uint8_t *ptr, size_t len)
-{
-       get_random_bytes((void *)ptr, (int)len);
-       return (0);
-}
-
-extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len);
-
-#endif /* _SPL_RANDOM_H */
diff --git a/include/sys/refstr.h b/include/sys/refstr.h
deleted file mode 100644 (file)
index 1b54dab..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_REFSTR_H
-#define        _SPL_REFSTR_H
-
-#endif /* SPL_REFSTR_H */
diff --git a/include/sys/resource.h b/include/sys/resource.h
deleted file mode 100644 (file)
index d1ffb6c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_RESOURCE_H
-#define        _SPL_RESOURCE_H
-
-#include <linux/resource.h>
-
-#endif /* SPL_RESOURCE_H */
diff --git a/include/sys/rwlock.h b/include/sys/rwlock.h
deleted file mode 100644 (file)
index bb8b785..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_RWLOCK_H
-#define        _SPL_RWLOCK_H
-
-#include <sys/types.h>
-#include <linux/rwsem.h>
-#include <linux/rwsem_compat.h>
-
-typedef enum {
-       RW_DRIVER       = 2,
-       RW_DEFAULT      = 4,
-       RW_NOLOCKDEP    = 5
-} krw_type_t;
-
-typedef enum {
-       RW_NONE         = 0,
-       RW_WRITER       = 1,
-       RW_READER       = 2
-} krw_t;
-
-/*
- * If CONFIG_RWSEM_SPIN_ON_OWNER is defined, rw_semaphore will have an owner
- * field, so we don't need our own.
- */
-typedef struct {
-       struct rw_semaphore rw_rwlock;
-#ifndef CONFIG_RWSEM_SPIN_ON_OWNER
-       kthread_t *rw_owner;
-#endif
-#ifdef CONFIG_LOCKDEP
-       krw_type_t      rw_type;
-#endif /* CONFIG_LOCKDEP */
-} krwlock_t;
-
-#define        SEM(rwp)        (&(rwp)->rw_rwlock)
-
-static inline void
-spl_rw_set_owner(krwlock_t *rwp)
-{
-/*
- * If CONFIG_RWSEM_SPIN_ON_OWNER is defined, down_write, up_write,
- * downgrade_write and __init_rwsem will set/clear owner for us.
- */
-#ifndef CONFIG_RWSEM_SPIN_ON_OWNER
-       rwp->rw_owner = current;
-#endif
-}
-
-static inline void
-spl_rw_clear_owner(krwlock_t *rwp)
-{
-#ifndef CONFIG_RWSEM_SPIN_ON_OWNER
-       rwp->rw_owner = NULL;
-#endif
-}
-
-static inline kthread_t *
-rw_owner(krwlock_t *rwp)
-{
-#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
-       return (SEM(rwp)->owner);
-#else
-       return (rwp->rw_owner);
-#endif
-}
-
-#ifdef CONFIG_LOCKDEP
-static inline void
-spl_rw_set_type(krwlock_t *rwp, krw_type_t type)
-{
-       rwp->rw_type = type;
-}
-static inline void
-spl_rw_lockdep_off_maybe(krwlock_t *rwp)               \
-{                                                      \
-       if (rwp && rwp->rw_type == RW_NOLOCKDEP)        \
-               lockdep_off();                          \
-}
-static inline void
-spl_rw_lockdep_on_maybe(krwlock_t *rwp)                        \
-{                                                      \
-       if (rwp && rwp->rw_type == RW_NOLOCKDEP)        \
-               lockdep_on();                           \
-}
-#else  /* CONFIG_LOCKDEP */
-#define        spl_rw_set_type(rwp, type)
-#define        spl_rw_lockdep_off_maybe(rwp)
-#define        spl_rw_lockdep_on_maybe(rwp)
-#endif /* CONFIG_LOCKDEP */
-
-static inline int
-RW_READ_HELD(krwlock_t *rwp)
-{
-       /*
-        * Linux 4.8 will set owner to 1 when read held instead of leave it
-        * NULL. So we check whether owner <= 1.
-        */
-       return (spl_rwsem_is_locked(SEM(rwp)) &&
-           (unsigned long)rw_owner(rwp) <= 1);
-}
-
-static inline int
-RW_WRITE_HELD(krwlock_t *rwp)
-{
-       return (rw_owner(rwp) == current);
-}
-
-static inline int
-RW_LOCK_HELD(krwlock_t *rwp)
-{
-       return (spl_rwsem_is_locked(SEM(rwp)));
-}
-
-/*
- * The following functions must be a #define   and not static inline.
- * This ensures that the native linux semaphore functions (down/up)
- * will be correctly located in the users code which is important
- * for the built in kernel lock analysis tools
- */
-/* BEGIN CSTYLED */
-#define        rw_init(rwp, name, type, arg)                                   \
-({                                                                     \
-       static struct lock_class_key __key;                             \
-       ASSERT(type == RW_DEFAULT || type == RW_NOLOCKDEP);             \
-                                                                       \
-       __init_rwsem(SEM(rwp), #rwp, &__key);                           \
-       spl_rw_clear_owner(rwp);                                        \
-       spl_rw_set_type(rwp, type);                                     \
-})
-
-#define        rw_destroy(rwp)                                                 \
-({                                                                     \
-       VERIFY(!RW_LOCK_HELD(rwp));                                     \
-})
-
-#define        rw_tryenter(rwp, rw)                                            \
-({                                                                     \
-       int _rc_ = 0;                                                   \
-                                                                       \
-       spl_rw_lockdep_off_maybe(rwp);                                  \
-       switch (rw) {                                                   \
-       case RW_READER:                                                 \
-               _rc_ = down_read_trylock(SEM(rwp));                     \
-               break;                                                  \
-       case RW_WRITER:                                                 \
-               if ((_rc_ = down_write_trylock(SEM(rwp))))              \
-                       spl_rw_set_owner(rwp);                          \
-               break;                                                  \
-       default:                                                        \
-               VERIFY(0);                                              \
-       }                                                               \
-       spl_rw_lockdep_on_maybe(rwp);                                   \
-       _rc_;                                                           \
-})
-
-#define        rw_enter(rwp, rw)                                               \
-({                                                                     \
-       spl_rw_lockdep_off_maybe(rwp);                                  \
-       switch (rw) {                                                   \
-       case RW_READER:                                                 \
-               down_read(SEM(rwp));                                    \
-               break;                                                  \
-       case RW_WRITER:                                                 \
-               down_write(SEM(rwp));                                   \
-               spl_rw_set_owner(rwp);                                  \
-               break;                                                  \
-       default:                                                        \
-               VERIFY(0);                                              \
-       }                                                               \
-       spl_rw_lockdep_on_maybe(rwp);                                   \
-})
-
-#define        rw_exit(rwp)                                                    \
-({                                                                     \
-       spl_rw_lockdep_off_maybe(rwp);                                  \
-       if (RW_WRITE_HELD(rwp)) {                                       \
-               spl_rw_clear_owner(rwp);                                \
-               up_write(SEM(rwp));                                     \
-       } else {                                                        \
-               ASSERT(RW_READ_HELD(rwp));                              \
-               up_read(SEM(rwp));                                      \
-       }                                                               \
-       spl_rw_lockdep_on_maybe(rwp);                                   \
-})
-
-#define        rw_downgrade(rwp)                                               \
-({                                                                     \
-       spl_rw_lockdep_off_maybe(rwp);                                  \
-       spl_rw_clear_owner(rwp);                                        \
-       downgrade_write(SEM(rwp));                                      \
-       spl_rw_lockdep_on_maybe(rwp);                                   \
-})
-
-#define        rw_tryupgrade(rwp)                                              \
-({                                                                     \
-       int _rc_ = 0;                                                   \
-                                                                       \
-       if (RW_WRITE_HELD(rwp)) {                                       \
-               _rc_ = 1;                                               \
-       } else {                                                        \
-               spl_rw_lockdep_off_maybe(rwp);                          \
-               if ((_rc_ = rwsem_tryupgrade(SEM(rwp))))                \
-                       spl_rw_set_owner(rwp);                          \
-               spl_rw_lockdep_on_maybe(rwp);                           \
-       }                                                               \
-       _rc_;                                                           \
-})
-/* END CSTYLED */
-
-int spl_rw_init(void);
-void spl_rw_fini(void);
-
-#endif /* _SPL_RWLOCK_H */
diff --git a/include/sys/sdt.h b/include/sys/sdt.h
deleted file mode 100644 (file)
index 2d4679d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SDT_H
-#define        _SPL_SDT_H
-
-#define        SET_ERROR(x) (x)
-
-#endif /* SPL_SDT_H */
diff --git a/include/sys/sid.h b/include/sys/sid.h
deleted file mode 100644 (file)
index 731b62c..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SID_H
-#define        _SPL_SID_H
-
-typedef struct ksiddomain {
-       char            *kd_name;
-} ksiddomain_t;
-
-typedef enum ksid_index {
-       KSID_USER,
-       KSID_GROUP,
-       KSID_OWNER,
-       KSID_COUNT
-} ksid_index_t;
-
-typedef int ksid_t;
-
-static inline ksiddomain_t *
-ksid_lookupdomain(const char *dom)
-{
-       ksiddomain_t *kd;
-       int len = strlen(dom);
-
-       kd = kmem_zalloc(sizeof (ksiddomain_t), KM_SLEEP);
-       kd->kd_name = kmem_zalloc(len + 1, KM_SLEEP);
-       memcpy(kd->kd_name, dom, len);
-
-       return (kd);
-}
-
-static inline void
-ksiddomain_rele(ksiddomain_t *ksid)
-{
-       kmem_free(ksid->kd_name, strlen(ksid->kd_name) + 1);
-       kmem_free(ksid, sizeof (ksiddomain_t));
-}
-
-#endif /* _SPL_SID_H */
diff --git a/include/sys/signal.h b/include/sys/signal.h
deleted file mode 100644 (file)
index 36b8b5d..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SIGNAL_H
-#define        _SPL_SIGNAL_H
-
-#include <linux/sched.h>
-
-#ifdef HAVE_SCHED_SIGNAL_HEADER
-#include <linux/sched/signal.h>
-#endif
-
-#define        FORREAL         0       /* Usual side-effects */
-#define        JUSTLOOKING     1       /* Don't stop the process */
-
-/*
- * The "why" argument indicates the allowable side-effects of the call:
- *
- * FORREAL:  Extract the next pending signal from p_sig into p_cursig;
- * stop the process if a stop has been requested or if a traced signal
- * is pending.
- *
- * JUSTLOOKING:  Don't stop the process, just indicate whether or not
- * a signal might be pending (FORREAL is needed to tell for sure).
- */
-static __inline__ int
-issig(int why)
-{
-       ASSERT(why == FORREAL || why == JUSTLOOKING);
-
-       return (signal_pending(current));
-}
-
-#endif /* SPL_SIGNAL_H */
diff --git a/include/sys/stat.h b/include/sys/stat.h
deleted file mode 100644 (file)
index 83018e8..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_STAT_H
-#define        _SPL_STAT_H
-
-#include <linux/stat.h>
-
-#endif /* SPL_STAT_H */
diff --git a/include/sys/stropts.h b/include/sys/stropts.h
deleted file mode 100644 (file)
index 746141f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_STROPTS_H
-#define        _SPL_STROPTS_H
-
-#endif /* SPL_STROPTS_H */
diff --git a/include/sys/sunddi.h b/include/sys/sunddi.h
deleted file mode 100644 (file)
index 1bae594..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SUNDDI_H
-#define        _SPL_SUNDDI_H
-
-#include <sys/cred.h>
-#include <sys/uio.h>
-#include <sys/sunldi.h>
-#include <sys/mutex.h>
-#include <sys/u8_textprep.h>
-#include <sys/vnode.h>
-
-typedef int ddi_devid_t;
-
-#define        DDI_DEV_T_NONE                          ((dev_t)-1)
-#define        DDI_DEV_T_ANY                           ((dev_t)-2)
-#define        DI_MAJOR_T_UNKNOWN                      ((major_t)0)
-
-#define        DDI_PROP_DONTPASS                       0x0001
-#define        DDI_PROP_CANSLEEP                       0x0002
-
-#define        DDI_SUCCESS                             0
-#define        DDI_FAILURE                             -1
-
-#define        ddi_prop_lookup_string(x1, x2, x3, x4, x5)      (*x5 = NULL)
-#define        ddi_prop_free(x)                                (void)0
-#define        ddi_root_node()                                 (void)0
-
-extern int ddi_strtoul(const char *, char **, int, unsigned long *);
-extern int ddi_strtol(const char *, char **, int, long *);
-extern int ddi_strtoull(const char *, char **, int, unsigned long long *);
-extern int ddi_strtoll(const char *, char **, int, long long *);
-
-extern int ddi_copyin(const void *from, void *to, size_t len, int flags);
-extern int ddi_copyout(const void *from, void *to, size_t len, int flags);
-
-#endif /* SPL_SUNDDI_H */
diff --git a/include/sys/sunldi.h b/include/sys/sunldi.h
deleted file mode 100644 (file)
index a5045f8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SUNLDI_H
-#define        _SPL_SUNLDI_H
-
-#include <sys/types.h>
-#include <linux/fs.h>
-#include <linux/genhd.h>
-#include <linux/hdreg.h>
-#include <linux/bio.h>
-#include <linux/blkdev.h>
-
-/*
- * SECTOR_SIZE can be defined in blkdev.h. See
- * https://github.com/torvalds/linux/commit/233bde21.
- */
-#ifndef SECTOR_SIZE
-#define        SECTOR_SIZE 512
-#endif
-
-#endif /* SPL_SUNLDI_H */
diff --git a/include/sys/sysdc.h b/include/sys/sysdc.h
deleted file mode 100644 (file)
index d963774..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SYSDC_H
-#define        _SPL_SYSDC_H
-
-#endif /* SPL_SYSDC_H */
diff --git a/include/sys/sysmacros.h b/include/sys/sysmacros.h
deleted file mode 100644 (file)
index d083ceb..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SYSMACROS_H
-#define        _SPL_SYSMACROS_H
-
-#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/cpumask.h>
-#include <sys/debug.h>
-#include <sys/varargs.h>
-#include <sys/zone.h>
-#include <sys/signal.h>
-#include <asm/page.h>
-
-#ifdef HAVE_SCHED_RT_HEADER
-#include <linux/sched/rt.h>
-#endif
-
-#ifndef _KERNEL
-#define        _KERNEL                         __KERNEL__
-#endif
-
-#define        FALSE                           0
-#define        TRUE                            1
-
-#define        INT8_MAX                        (127)
-#define        INT8_MIN                        (-128)
-#define        UINT8_MAX                       (255)
-#define        UINT8_MIN                       (0)
-
-#define        INT16_MAX                       (32767)
-#define        INT16_MIN                       (-32768)
-#define        UINT16_MAX                      (65535)
-#define        UINT16_MIN                      (0)
-
-#define        INT32_MAX                       INT_MAX
-#define        INT32_MIN                       INT_MIN
-#define        UINT32_MAX                      UINT_MAX
-#define        UINT32_MIN                      UINT_MIN
-
-#define        INT64_MAX                       LLONG_MAX
-#define        INT64_MIN                       LLONG_MIN
-#define        UINT64_MAX                      ULLONG_MAX
-#define        UINT64_MIN                      ULLONG_MIN
-
-#define        NBBY                            8
-#define        ENOTSUP                         EOPNOTSUPP
-
-#define        MAXMSGLEN                       256
-#define        MAXNAMELEN                      256
-#define        MAXPATHLEN                      PATH_MAX
-#define        MAXOFFSET_T                     LLONG_MAX
-#define        MAXBSIZE                        8192
-#define        DEV_BSIZE                       512
-#define        DEV_BSHIFT                      9 /* log2(DEV_BSIZE) */
-
-#define        proc_pageout                    NULL
-#define        curproc                         current
-#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
-#define        RLIM64_INFINITY                 (~0ULL)
-#endif
-
-/*
- * 0..MAX_PRIO-1:              Process priority
- * 0..MAX_RT_PRIO-1:           RT priority tasks
- * MAX_RT_PRIO..MAX_PRIO-1:    SCHED_NORMAL tasks
- *
- * Treat shim tasks as SCHED_NORMAL tasks
- */
-#define        minclsyspri                     (MAX_PRIO-1)
-#define        maxclsyspri                     (MAX_RT_PRIO)
-#define        defclsyspri                     (DEFAULT_PRIO)
-
-#ifndef NICE_TO_PRIO
-#define        NICE_TO_PRIO(nice)              (MAX_RT_PRIO + (nice) + 20)
-#endif
-#ifndef PRIO_TO_NICE
-#define        PRIO_TO_NICE(prio)              ((prio) - MAX_RT_PRIO - 20)
-#endif
-
-/*
- * Missing macros
- */
-#ifndef PAGESIZE
-#define        PAGESIZE                        PAGE_SIZE
-#endif
-
-#ifndef PAGESHIFT
-#define        PAGESHIFT                       PAGE_SHIFT
-#endif
-
-/* from Solaris sys/byteorder.h */
-#define        BSWAP_8(x)      ((x) & 0xff)
-#define        BSWAP_16(x)     ((BSWAP_8(x) << 8) | BSWAP_8((x) >> 8))
-#define        BSWAP_32(x)     ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16))
-#define        BSWAP_64(x)     ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32))
-
-/*
- * Map some simple functions.
- */
-#define        bzero(ptr, size)                memset(ptr, 0, size)
-#define        bcopy(src, dest, size)          memmove(dest, src, size)
-#define        bcmp(src, dest, size)           memcmp((src), (dest), (size_t)(size))
-
-/* Dtrace probes do not exist in the linux kernel */
-#ifdef DTRACE_PROBE
-#undef  DTRACE_PROBE
-#endif  /* DTRACE_PROBE */
-#define        DTRACE_PROBE(a)                                 ((void)0)
-
-#ifdef DTRACE_PROBE1
-#undef  DTRACE_PROBE1
-#endif  /* DTRACE_PROBE1 */
-#define        DTRACE_PROBE1(a, b, c)                          ((void)0)
-
-#ifdef DTRACE_PROBE2
-#undef  DTRACE_PROBE2
-#endif  /* DTRACE_PROBE2 */
-#define        DTRACE_PROBE2(a, b, c, d, e)                    ((void)0)
-
-#ifdef DTRACE_PROBE3
-#undef  DTRACE_PROBE3
-#endif  /* DTRACE_PROBE3 */
-#define        DTRACE_PROBE3(a, b, c, d, e, f, g)              ((void)0)
-
-#ifdef DTRACE_PROBE4
-#undef  DTRACE_PROBE4
-#endif  /* DTRACE_PROBE4 */
-#define        DTRACE_PROBE4(a, b, c, d, e, f, g, h, i)        ((void)0)
-
-/* Missing globals */
-extern char spl_version[32];
-extern unsigned long spl_hostid;
-
-/* Missing misc functions */
-extern uint32_t zone_get_hostid(void *zone);
-extern void spl_setup(void);
-extern void spl_cleanup(void);
-
-#define        highbit(x)              __fls(x)
-#define        lowbit(x)               __ffs(x)
-
-#define        highbit64(x)            fls64(x)
-#define        makedevice(maj, min)    makedev(maj, min)
-
-/* common macros */
-#ifndef MIN
-#define        MIN(a, b)               ((a) < (b) ? (a) : (b))
-#endif
-#ifndef MAX
-#define        MAX(a, b)               ((a) < (b) ? (b) : (a))
-#endif
-#ifndef ABS
-#define        ABS(a)                  ((a) < 0 ? -(a) : (a))
-#endif
-#ifndef DIV_ROUND_UP
-#define        DIV_ROUND_UP(n, d)      (((n) + (d) - 1) / (d))
-#endif
-#ifndef roundup
-#define        roundup(x, y)           ((((x) + ((y) - 1)) / (y)) * (y))
-#endif
-#ifndef howmany
-#define        howmany(x, y)           (((x) + ((y) - 1)) / (y))
-#endif
-
-/*
- * Compatibility macros/typedefs needed for Solaris -> Linux port
- */
-#define        P2ALIGN(x, align)       ((x) & -(align))
-#define        P2CROSS(x, y, align)    (((x) ^ (y)) > (align) - 1)
-#define        P2ROUNDUP(x, align)     ((((x) - 1) | ((align) - 1)) + 1)
-#define        P2PHASE(x, align)       ((x) & ((align) - 1))
-#define        P2NPHASE(x, align)      (-(x) & ((align) - 1))
-#define        ISP2(x)                 (((x) & ((x) - 1)) == 0)
-#define        IS_P2ALIGNED(v, a)      ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0)
-#define        P2BOUNDARY(off, len, align) \
-                               (((off) ^ ((off) + (len) - 1)) > (align) - 1)
-
-/*
- * Typed version of the P2* macros.  These macros should be used to ensure
- * that the result is correctly calculated based on the data type of (x),
- * which is passed in as the last argument, regardless of the data
- * type of the alignment.  For example, if (x) is of type uint64_t,
- * and we want to round it up to a page boundary using "PAGESIZE" as
- * the alignment, we can do either
- *
- * P2ROUNDUP(x, (uint64_t)PAGESIZE)
- * or
- * P2ROUNDUP_TYPED(x, PAGESIZE, uint64_t)
- */
-#define        P2ALIGN_TYPED(x, align, type)   \
-       ((type)(x) & -(type)(align))
-#define        P2PHASE_TYPED(x, align, type)   \
-       ((type)(x) & ((type)(align) - 1))
-#define        P2NPHASE_TYPED(x, align, type)  \
-       (-(type)(x) & ((type)(align) - 1))
-#define        P2ROUNDUP_TYPED(x, align, type) \
-       ((((type)(x) - 1) | ((type)(align) - 1)) + 1)
-#define        P2END_TYPED(x, align, type)     \
-       (-(~(type)(x) & -(type)(align)))
-#define        P2PHASEUP_TYPED(x, align, phase, type)  \
-       ((type)(phase) - (((type)(phase) - (type)(x)) & -(type)(align)))
-#define        P2CROSS_TYPED(x, y, align, type)        \
-       (((type)(x) ^ (type)(y)) > (type)(align) - 1)
-#define        P2SAMEHIGHBIT_TYPED(x, y, type) \
-       (((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y)))
-
-#if defined(_KERNEL) && !defined(_KMEMUSER) && !defined(offsetof)
-
-/* avoid any possibility of clashing with <stddef.h> version */
-
-#define        offsetof(s, m)  ((size_t)(&(((s *)0)->m)))
-#endif
-
-#endif  /* _SPL_SYSMACROS_H */
diff --git a/include/sys/systeminfo.h b/include/sys/systeminfo.h
deleted file mode 100644 (file)
index 2255691..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SYSTEMINFO_H
-#define        _SPL_SYSTEMINFO_H
-
-#define        HW_HOSTID_LEN           11              /* minimum buffer size needed */
-                                               /* to hold a decimal or hex */
-                                               /* hostid string */
-
-/* Supplemental definitions for Linux. */
-#define        HW_HOSTID_PATH          "/etc/hostid"   /* binary configuration file */
-#define        HW_HOSTID_MASK          0xFFFFFFFF      /* significant hostid bits */
-
-#endif /* SPL_SYSTEMINFO_H */
diff --git a/include/sys/systm.h b/include/sys/systm.h
deleted file mode 100644 (file)
index 2420e7e..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SYSTM_H
-#define        _SPL_SYSTM_H
-
-#include <sys/sunddi.h>
-
-typedef uintptr_t pc_t;
-
-#endif /* SPL_SYSTM_H */
diff --git a/include/sys/t_lock.h b/include/sys/t_lock.h
deleted file mode 100644 (file)
index dcdfaee..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_T_LOCK_H
-#define        _SPL_T_LOCK_H
-
-#include <sys/param.h>
-#include <sys/mutex.h>
-#include <sys/rwlock.h>
-#include <sys/condvar.h>
-
-#endif /* SPL_T_LOCK_H */
diff --git a/include/sys/taskq.h b/include/sys/taskq.h
deleted file mode 100644 (file)
index 4d90a35..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_TASKQ_H
-#define        _SPL_TASKQ_H
-
-#include <linux/module.h>
-#include <linux/gfp.h>
-#include <linux/slab.h>
-#include <linux/interrupt.h>
-#include <linux/kthread.h>
-#include <linux/wait_compat.h>
-#include <sys/types.h>
-#include <sys/thread.h>
-#include <sys/rwlock.h>
-
-#define        TASKQ_NAMELEN           31
-
-#define        TASKQ_PREPOPULATE       0x00000001
-#define        TASKQ_CPR_SAFE          0x00000002
-#define        TASKQ_DYNAMIC           0x00000004
-#define        TASKQ_THREADS_CPU_PCT   0x00000008
-#define        TASKQ_DC_BATCH          0x00000010
-#define        TASKQ_ACTIVE            0x80000000
-
-/*
- * Flags for taskq_dispatch. TQ_SLEEP/TQ_NOSLEEP should be same as
- * KM_SLEEP/KM_NOSLEEP.  TQ_NOQUEUE/TQ_NOALLOC are set particularly
- * large so as not to conflict with already used GFP_* defines.
- */
-#define        TQ_SLEEP                0x00000000
-#define        TQ_NOSLEEP              0x00000001
-#define        TQ_PUSHPAGE             0x00000002
-#define        TQ_NOQUEUE              0x01000000
-#define        TQ_NOALLOC              0x02000000
-#define        TQ_NEW                  0x04000000
-#define        TQ_FRONT                0x08000000
-
-/*
- * Reserved taskqid values.
- */
-#define        TASKQID_INVALID         ((taskqid_t)0)
-#define        TASKQID_INITIAL         ((taskqid_t)1)
-
-/*
- * spin_lock(lock) and spin_lock_nested(lock,0) are equivalent,
- * so TQ_LOCK_DYNAMIC must not evaluate to 0
- */
-typedef enum tq_lock_role {
-       TQ_LOCK_GENERAL =       0,
-       TQ_LOCK_DYNAMIC =       1,
-} tq_lock_role_t;
-
-typedef unsigned long taskqid_t;
-typedef void (task_func_t)(void *);
-
-typedef struct taskq {
-       spinlock_t              tq_lock;        /* protects taskq_t */
-       char                    *tq_name;       /* taskq name */
-       int                     tq_instance;    /* instance of tq_name */
-       struct list_head        tq_thread_list; /* list of all threads */
-       struct list_head        tq_active_list; /* list of active threads */
-       int                     tq_nactive;     /* # of active threads */
-       int                     tq_nthreads;    /* # of existing threads */
-       int                     tq_nspawn;      /* # of threads being spawned */
-       int                     tq_maxthreads;  /* # of threads maximum */
-       int                     tq_pri;         /* priority */
-       int                     tq_minalloc;    /* min taskq_ent_t pool size */
-       int                     tq_maxalloc;    /* max taskq_ent_t pool size */
-       int                     tq_nalloc;      /* cur taskq_ent_t pool size */
-       uint_t                  tq_flags;       /* flags */
-       taskqid_t               tq_next_id;     /* next pend/work id */
-       taskqid_t               tq_lowest_id;   /* lowest pend/work id */
-       struct list_head        tq_free_list;   /* free taskq_ent_t's */
-       struct list_head        tq_pend_list;   /* pending taskq_ent_t's */
-       struct list_head        tq_prio_list;   /* priority taskq_ent_t's */
-       struct list_head        tq_delay_list;  /* delayed taskq_ent_t's */
-       struct list_head        tq_taskqs;      /* all taskq_t's */
-       spl_wait_queue_head_t   tq_work_waitq;  /* new work waitq */
-       spl_wait_queue_head_t   tq_wait_waitq;  /* wait waitq */
-       tq_lock_role_t          tq_lock_class;  /* class when taking tq_lock */
-} taskq_t;
-
-typedef struct taskq_ent {
-       spinlock_t              tqent_lock;
-       spl_wait_queue_head_t   tqent_waitq;
-       struct timer_list       tqent_timer;
-       struct list_head        tqent_list;
-       taskqid_t               tqent_id;
-       task_func_t             *tqent_func;
-       void                    *tqent_arg;
-       taskq_t                 *tqent_taskq;
-       uintptr_t               tqent_flags;
-       unsigned long           tqent_birth;
-} taskq_ent_t;
-
-#define        TQENT_FLAG_PREALLOC     0x1
-#define        TQENT_FLAG_CANCEL       0x2
-
-typedef struct taskq_thread {
-       struct list_head        tqt_thread_list;
-       struct list_head        tqt_active_list;
-       struct task_struct      *tqt_thread;
-       taskq_t                 *tqt_tq;
-       taskqid_t               tqt_id;
-       taskq_ent_t             *tqt_task;
-       uintptr_t               tqt_flags;
-} taskq_thread_t;
-
-/* Global system-wide dynamic task queue available for all consumers */
-extern taskq_t *system_taskq;
-/* Global dynamic task queue for long delay */
-extern taskq_t *system_delay_taskq;
-
-/* List of all taskqs */
-extern struct list_head tq_list;
-extern struct rw_semaphore tq_list_sem;
-
-extern taskqid_t taskq_dispatch(taskq_t *, task_func_t, void *, uint_t);
-extern taskqid_t taskq_dispatch_delay(taskq_t *, task_func_t, void *,
-    uint_t, clock_t);
-extern void taskq_dispatch_ent(taskq_t *, task_func_t, void *, uint_t,
-    taskq_ent_t *);
-extern int taskq_empty_ent(taskq_ent_t *);
-extern void taskq_init_ent(taskq_ent_t *);
-extern taskq_t *taskq_create(const char *, int, pri_t, int, int, uint_t);
-extern void taskq_destroy(taskq_t *);
-extern void taskq_wait_id(taskq_t *, taskqid_t);
-extern void taskq_wait_outstanding(taskq_t *, taskqid_t);
-extern void taskq_wait(taskq_t *);
-extern int taskq_cancel_id(taskq_t *, taskqid_t);
-extern int taskq_member(taskq_t *, kthread_t *);
-
-#define        taskq_create_proc(name, nthreads, pri, min, max, proc, flags) \
-    taskq_create(name, nthreads, pri, min, max, flags)
-#define        taskq_create_sysdc(name, nthreads, min, max, proc, dc, flags) \
-    taskq_create(name, nthreads, maxclsyspri, min, max, flags)
-
-int spl_taskq_init(void);
-void spl_taskq_fini(void);
-
-#endif  /* _SPL_TASKQ_H */
diff --git a/include/sys/thread.h b/include/sys/thread.h
deleted file mode 100644 (file)
index 80cf499..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_THREAD_H
-#define        _SPL_THREAD_H
-
-#include <linux/module.h>
-#include <linux/mm.h>
-#include <linux/spinlock.h>
-#include <linux/kthread.h>
-#include <sys/types.h>
-#include <sys/sysmacros.h>
-#include <sys/tsd.h>
-
-/*
- * Thread interfaces
- */
-#define        TP_MAGIC                        0x53535353
-
-#define        TS_SLEEP                        TASK_INTERRUPTIBLE
-#define        TS_RUN                          TASK_RUNNING
-#define        TS_ZOMB                         EXIT_ZOMBIE
-#define        TS_STOPPED                      TASK_STOPPED
-
-typedef void (*thread_func_t)(void *);
-
-/* BEGIN CSTYLED */
-#define        thread_create(stk, stksize, func, arg, len, pp, state, pri)     \
-       __thread_create(stk, stksize, (thread_func_t)func,              \
-       #func, arg, len, pp, state, pri)
-/* END CSTYLED */
-
-#define        thread_exit()                   __thread_exit()
-#define        thread_join(t)                  VERIFY(0)
-#define        curthread                       current
-#define        getcomm()                       current->comm
-#define        getpid()                        current->pid
-
-extern kthread_t *__thread_create(caddr_t stk, size_t  stksize,
-    thread_func_t func, const char *name, void *args, size_t len, proc_t *pp,
-    int state, pri_t pri);
-extern void __thread_exit(void);
-extern struct task_struct *spl_kthread_create(int (*func)(void *),
-                       void *data, const char namefmt[], ...);
-
-#endif  /* _SPL_THREAD_H */
diff --git a/include/sys/time.h b/include/sys/time.h
deleted file mode 100644 (file)
index d6aaca9..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_TIME_H
-#define        _SPL_TIME_H
-
-#include <linux/module.h>
-#include <linux/time.h>
-#include <sys/types.h>
-#include <sys/timer.h>
-
-#if defined(CONFIG_64BIT)
-#define        TIME_MAX                        INT64_MAX
-#define        TIME_MIN                        INT64_MIN
-#else
-#define        TIME_MAX                        INT32_MAX
-#define        TIME_MIN                        INT32_MIN
-#endif
-
-#define        SEC                             1
-#define        MILLISEC                        1000
-#define        MICROSEC                        1000000
-#define        NANOSEC                         1000000000
-
-#define        MSEC2NSEC(m)    ((hrtime_t)(m) * (NANOSEC / MILLISEC))
-#define        NSEC2MSEC(n)    ((n) / (NANOSEC / MILLISEC))
-
-#define        USEC2NSEC(m)    ((hrtime_t)(m) * (NANOSEC / MICROSEC))
-#define        NSEC2USEC(n)    ((n) / (NANOSEC / MICROSEC))
-
-#define        NSEC2SEC(n)     ((n) / (NANOSEC / SEC))
-#define        SEC2NSEC(m)     ((hrtime_t)(m) * (NANOSEC / SEC))
-
-static const int hz = HZ;
-
-#define        TIMESPEC_OVERFLOW(ts)           \
-       ((ts)->tv_sec < TIME_MIN || (ts)->tv_sec > TIME_MAX)
-
-static inline void
-gethrestime(timestruc_t *now)
-{
-       *now = current_kernel_time();
-}
-
-static inline time_t
-gethrestime_sec(void)
-{
-       struct timespec ts;
-       ts = current_kernel_time();
-       return (ts.tv_sec);
-}
-
-static inline hrtime_t
-gethrtime(void)
-{
-       struct timespec now;
-       getrawmonotonic(&now);
-       return (((hrtime_t)now.tv_sec * NSEC_PER_SEC) + now.tv_nsec);
-}
-
-#endif  /* _SPL_TIME_H */
diff --git a/include/sys/timer.h b/include/sys/timer.h
deleted file mode 100644 (file)
index 821590e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_TIMER_H
-#define        _SPL_TIMER_H
-
-#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/timer.h>
-
-#define        lbolt                           ((clock_t)jiffies)
-#define        lbolt64                         ((int64_t)get_jiffies_64())
-
-#define        ddi_get_lbolt()                 ((clock_t)jiffies)
-#define        ddi_get_lbolt64()               ((int64_t)get_jiffies_64())
-
-#define        ddi_time_before(a, b)           (typecheck(clock_t, a) && \
-                                       typecheck(clock_t, b) && \
-                                       ((a) - (b) < 0))
-#define        ddi_time_after(a, b)            ddi_time_before(b, a)
-#define        ddi_time_before_eq(a, b)        (!ddi_time_after(a, b))
-#define        ddi_time_after_eq(a, b)         ddi_time_before_eq(b, a)
-
-#define        ddi_time_before64(a, b)         (typecheck(int64_t, a) && \
-                                       typecheck(int64_t, b) && \
-                                       ((a) - (b) < 0))
-#define        ddi_time_after64(a, b)          ddi_time_before64(b, a)
-#define        ddi_time_before_eq64(a, b)      (!ddi_time_after64(a, b))
-#define        ddi_time_after_eq64(a, b)       ddi_time_before_eq64(b, a)
-
-#define        delay(ticks)                    schedule_timeout_uninterruptible(ticks)
-
-#define        SEC_TO_TICK(sec)                ((sec) * HZ)
-#define        MSEC_TO_TICK(ms)                msecs_to_jiffies(ms)
-#define        USEC_TO_TICK(us)                usecs_to_jiffies(us)
-#define        NSEC_TO_TICK(ns)                usecs_to_jiffies(ns / NSEC_PER_USEC)
-
-#endif  /* _SPL_TIMER_H */
diff --git a/include/sys/tsd.h b/include/sys/tsd.h
deleted file mode 100644 (file)
index 39a291b..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *  Copyright (C) 2010 Lawrence Livermore National Security, LLC.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_TSD_H
-#define        _SPL_TSD_H
-
-#include <sys/types.h>
-
-#define        TSD_HASH_TABLE_BITS_DEFAULT     9
-#define        TSD_KEYS_MAX                    32768
-#define        DTOR_PID                        (PID_MAX_LIMIT+1)
-#define        PID_KEY                         (TSD_KEYS_MAX+1)
-
-typedef void (*dtor_func_t)(void *);
-
-extern int tsd_set(uint_t, void *);
-extern void *tsd_get(uint_t);
-extern void *tsd_get_by_thread(uint_t, kthread_t *);
-extern void tsd_create(uint_t *, dtor_func_t);
-extern void tsd_destroy(uint_t *);
-extern void tsd_exit(void);
-
-int spl_tsd_init(void);
-void spl_tsd_fini(void);
-
-#endif /* _SPL_TSD_H */
diff --git a/include/sys/types.h b/include/sys/types.h
deleted file mode 100644 (file)
index e159dda..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_TYPES_H
-#define        _SPL_TYPES_H
-
-#include <linux/types.h>
-#include <sys/sysmacros.h>
-
-#ifndef ULLONG_MAX
-#define        ULLONG_MAX                      (~0ULL)
-#endif
-
-#ifndef LLONG_MAX
-#define        LLONG_MAX                       ((long long)(~0ULL>>1))
-#endif
-
-typedef enum { B_FALSE = 0, B_TRUE = 1 }       boolean_t;
-typedef unsigned long                  intptr_t;
-typedef unsigned long                  ulong_t;
-typedef unsigned int                   uint_t;
-typedef unsigned char                  uchar_t;
-typedef unsigned long long             u_longlong_t;
-typedef unsigned long long             u_offset_t;
-typedef unsigned long long             rlim64_t;
-typedef long long                      longlong_t;
-typedef long long                      offset_t;
-typedef struct task_struct             kthread_t;
-typedef struct task_struct             proc_t;
-typedef short                          pri_t;
-typedef struct timespec                        timestruc_t; /* definition per SVr4 */
-typedef struct timespec                        timespec_t;
-typedef longlong_t                     hrtime_t;
-typedef unsigned short                 ushort_t;
-typedef u_longlong_t                   len_t;
-typedef longlong_t                     diskaddr_t;
-typedef ushort_t                       o_mode_t;
-typedef uint_t                         major_t;
-typedef uint_t                         minor_t;
-typedef ulong_t                                pgcnt_t;
-typedef long                           spgcnt_t;
-typedef short                          index_t;
-typedef int                            id_t;
-
-extern proc_t p0;
-
-#endif /* _SPL_TYPES_H */
diff --git a/include/sys/types32.h b/include/sys/types32.h
deleted file mode 100644 (file)
index 1b05b2a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_TYPES32_H
-#define        _SPL_TYPES32_H
-
-#include <sys/int_types.h>
-#include <sys/types.h>
-
-typedef uint32_t       caddr32_t;
-typedef int32_t                daddr32_t;
-typedef int32_t                time32_t;
-typedef uint32_t       size32_t;
-
-#endif /* _SPL_TYPES32_H */
diff --git a/include/sys/u8_textprep.h b/include/sys/u8_textprep.h
deleted file mode 100644 (file)
index 6e76651..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_U8_TEXTPREP_H
-#define        _SPL_U8_TEXTPREP_H
-
-#endif /* SPL_U8_TEXTPREP_H */
diff --git a/include/sys/uio.h b/include/sys/uio.h
deleted file mode 100644 (file)
index 64c452b..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Copyright (c) 2015 by Chunwei Chen. All rights reserved.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_UIO_H
-#define        _SPL_UIO_H
-
-#include <linux/uio.h>
-#include <linux/blkdev.h>
-#include <asm/uaccess.h>
-#include <sys/types.h>
-
-typedef struct iovec iovec_t;
-
-typedef enum uio_rw {
-       UIO_READ =              0,
-       UIO_WRITE =             1,
-} uio_rw_t;
-
-typedef enum uio_seg {
-       UIO_USERSPACE =         0,
-       UIO_SYSSPACE =          1,
-       UIO_USERISPACE =        2,
-       UIO_BVEC =              3,
-} uio_seg_t;
-
-typedef struct uio {
-       union {
-               const struct iovec      *uio_iov;
-               const struct bio_vec    *uio_bvec;
-       };
-       int             uio_iovcnt;
-       offset_t        uio_loffset;
-       uio_seg_t       uio_segflg;
-       uint16_t        uio_fmode;
-       uint16_t        uio_extflg;
-       offset_t        uio_limit;
-       ssize_t         uio_resid;
-       size_t          uio_skip;
-} uio_t;
-
-typedef struct aio_req {
-       uio_t           *aio_uio;
-       void            *aio_private;
-} aio_req_t;
-
-typedef enum xuio_type {
-       UIOTYPE_ASYNCIO,
-       UIOTYPE_ZEROCOPY,
-} xuio_type_t;
-
-
-#define        UIOA_IOV_MAX    16
-
-typedef struct uioa_page_s {
-       int     uioa_pfncnt;
-       void    **uioa_ppp;
-       caddr_t uioa_base;
-       size_t  uioa_len;
-} uioa_page_t;
-
-typedef struct xuio {
-       uio_t xu_uio;
-       enum xuio_type xu_type;
-       union {
-               struct {
-                       uint32_t xu_a_state;
-                       ssize_t xu_a_mbytes;
-                       uioa_page_t *xu_a_lcur;
-                       void **xu_a_lppp;
-                       void *xu_a_hwst[4];
-                       uioa_page_t xu_a_locked[UIOA_IOV_MAX];
-               } xu_aio;
-
-               struct {
-                       int xu_zc_rw;
-                       void *xu_zc_priv;
-               } xu_zc;
-       } xu_ext;
-} xuio_t;
-
-#define        XUIO_XUZC_PRIV(xuio)    xuio->xu_ext.xu_zc.xu_zc_priv
-#define        XUIO_XUZC_RW(xuio)      xuio->xu_ext.xu_zc.xu_zc_rw
-
-#endif /* SPL_UIO_H */
diff --git a/include/sys/unistd.h b/include/sys/unistd.h
deleted file mode 100644 (file)
index d86de89..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_UNISTD_H
-#define        _SPL_UNISTD_H
-
-#endif /* SPL_UNISTD_H */
diff --git a/include/sys/user.h b/include/sys/user.h
deleted file mode 100644 (file)
index b12cb24..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  Copyright (C) 2015 Cluster Inc.
- *  Produced at ClusterHQ Inc (cf, DISCLAIMER).
- *  Written by Richard Yao <richard.yao@clusterhq.com>.
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_USER_H
-#define        _SPL_USER_H
-
-/*
- * We have uf_info_t for areleasef(). We implement areleasef() using a global
- * linked list of all open file descriptors with the task structs referenced,
- * so accessing the correct descriptor from areleasef() only requires knowing
- * about the Linux task_struct. Since this is internal to our compatibility
- * layer, we make it an opaque type.
- *
- * XXX: If the descriptor changes under us and we do not do a getf() between
- * the change and using it, we would get an incorrect reference.
- */
-
-struct uf_info;
-typedef struct uf_info uf_info_t;
-
-#define        P_FINFO(x) ((uf_info_t *)x)
-
-#endif /* SPL_USER_H */
diff --git a/include/sys/va_list.h b/include/sys/va_list.h
deleted file mode 100644 (file)
index 62d18b9..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_VA_LIST_H
-#define        _SPL_VA_LIST_H
-
-#endif /* SPL_VA_LIST_H */
diff --git a/include/sys/varargs.h b/include/sys/varargs.h
deleted file mode 100644 (file)
index cdb73fb..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_VARARGS_H
-#define        _SPL_VARARGS_H
-
-#define        __va_list       va_list
-
-#endif /* SPL_VARARGS_H */
diff --git a/include/sys/vfs.h b/include/sys/vfs.h
deleted file mode 100644 (file)
index 0d5e1d5..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_ZFS_H
-#define        _SPL_ZFS_H
-
-#include <linux/mount.h>
-#include <linux/fs.h>
-#include <linux/dcache.h>
-#include <linux/statfs.h>
-#include <linux/xattr.h>
-#include <linux/security.h>
-#include <linux/seq_file.h>
-
-#define        MAXFIDSZ        64
-
-typedef struct spl_fid {
-       union {
-               long fid_pad;
-               struct {
-                       ushort_t len;           /* length of data in bytes */
-                       char data[MAXFIDSZ];    /* data (variable len) */
-               } _fid;
-       } un;
-} fid_t;
-
-#define        fid_len         un._fid.len
-#define        fid_data        un._fid.data
-
-#endif /* SPL_ZFS_H */
diff --git a/include/sys/vfs_opreg.h b/include/sys/vfs_opreg.h
deleted file mode 100644 (file)
index 1d48f2d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_OPREG_H
-#define        _SPL_OPREG_H
-
-#endif /* SPL_OPREG_H */
diff --git a/include/sys/vmem.h b/include/sys/vmem.h
deleted file mode 100644 (file)
index a9b12ee..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_VMEM_H
-#define        _SPL_VMEM_H
-
-#include <sys/kmem.h>
-#include <linux/sched.h>
-#include <linux/vmalloc.h>
-
-typedef struct vmem { } vmem_t;
-
-extern vmem_t *heap_arena;
-extern vmem_t *zio_alloc_arena;
-extern vmem_t *zio_arena;
-
-extern size_t vmem_size(vmem_t *vmp, int typemask);
-
-/*
- * Memory allocation interfaces
- */
-#define        VMEM_ALLOC      0x01
-#define        VMEM_FREE       0x02
-
-#ifndef VMALLOC_TOTAL
-#define        VMALLOC_TOTAL   (VMALLOC_END - VMALLOC_START)
-#endif
-
-/*
- * vmem_* is an interface to a low level arena-based memory allocator on
- * Illumos that is used to allocate virtual address space. The kmem SLAB
- * allocator allocates slabs from it. Then the generic allocation functions
- * kmem_{alloc,zalloc,free}() are layered on top of SLAB allocators.
- *
- * On Linux, the primary means of doing allocations is via kmalloc(), which
- * is similarly layered on top of something called the buddy allocator. The
- * buddy allocator is not available to kernel modules, it uses physical
- * memory addresses rather than virtual memory addresses and is prone to
- * fragmentation.
- *
- * Linux sets aside a relatively small address space for in-kernel virtual
- * memory from which allocations can be done using vmalloc().  It might seem
- * like a good idea to use vmalloc() to implement something similar to
- * Illumos' allocator. However, this has the following problems:
- *
- * 1. Page directory table allocations are hard coded to use GFP_KERNEL.
- *    Consequently, any KM_PUSHPAGE or KM_NOSLEEP allocations done using
- *    vmalloc() will not have proper semantics.
- *
- * 2. Address space exhaustion is a real issue on 32-bit platforms where
- *    only a few 100MB are available. The kernel will handle it by spinning
- *    when it runs out of address space.
- *
- * 3. All vmalloc() allocations and frees are protected by a single global
- *    lock which serializes all allocations.
- *
- * 4. Accessing /proc/meminfo and /proc/vmallocinfo will iterate the entire
- *    list. The former will sum the allocations while the latter will print
- *    them to user space in a way that user space can keep the lock held
- *    indefinitely.  When the total number of mapped allocations is large
- *    (several 100,000) a large amount of time will be spent waiting on locks.
- *
- * 5. Linux has a wait_on_bit() locking primitive that assumes physical
- *    memory is used, it simply does not work on virtual memory.  Certain
- *    Linux structures (e.g. the superblock) use them and might be embedded
- *    into a structure from Illumos.  This makes using Linux virtual memory
- *    unsafe in certain situations.
- *
- * It follows that we cannot obtain identical semantics to those on Illumos.
- * Consequently, we implement the kmem_{alloc,zalloc,free}() functions in
- * such a way that they can be used as drop-in replacements for small vmem_*
- * allocations (8MB in size or smaller) and map vmem_{alloc,zalloc,free}()
- * to them.
- */
-
-#define        vmem_alloc(sz, fl)      spl_vmem_alloc((sz), (fl), __func__, __LINE__)
-#define        vmem_zalloc(sz, fl)     spl_vmem_zalloc((sz), (fl), __func__, __LINE__)
-#define        vmem_free(ptr, sz)      spl_vmem_free((ptr), (sz))
-#define        vmem_qcache_reap(ptr)   ((void)0)
-
-extern void *spl_vmem_alloc(size_t sz, int fl, const char *func, int line);
-extern void *spl_vmem_zalloc(size_t sz, int fl, const char *func, int line);
-extern void spl_vmem_free(const void *ptr, size_t sz);
-
-int spl_vmem_init(void);
-void spl_vmem_fini(void);
-
-#endif /* _SPL_VMEM_H */
diff --git a/include/sys/vmsystm.h b/include/sys/vmsystm.h
deleted file mode 100644 (file)
index 2b48fe0..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_VMSYSTM_H
-#define        _SPL_VMSYSTM_H
-
-#include <linux/mmzone.h>
-#include <linux/mm.h>
-#include <linux/swap.h>
-#include <linux/highmem.h>
-#include <linux/vmalloc.h>
-#include <sys/types.h>
-#include <asm/uaccess.h>
-
-#define        membar_producer()               smp_wmb()
-#define        physmem                         totalram_pages
-#define        freemem                 (nr_free_pages() + \
-                               global_page_state(NR_INACTIVE_FILE) + \
-                               global_page_state(NR_INACTIVE_ANON) + \
-                               global_page_state(NR_SLAB_RECLAIMABLE))
-
-#define        xcopyin(from, to, size)         copy_from_user(to, from, size)
-#define        xcopyout(from, to, size)        copy_to_user(to, from, size)
-
-static __inline__ int
-copyin(const void *from, void *to, size_t len)
-{
-       /* On error copyin routine returns -1 */
-       if (xcopyin(from, to, len))
-               return (-1);
-
-       return (0);
-}
-
-static __inline__ int
-copyout(const void *from, void *to, size_t len)
-{
-       /* On error copyout routine returns -1 */
-       if (xcopyout(from, to, len))
-               return (-1);
-
-       return (0);
-}
-
-static __inline__ int
-copyinstr(const void *from, void *to, size_t len, size_t *done)
-{
-       size_t rc;
-
-       if (len == 0)
-               return (-ENAMETOOLONG);
-
-       /* XXX: Should return ENAMETOOLONG if 'strlen(from) > len' */
-
-       memset(to, 0, len);
-       rc = copyin(from, to, len - 1);
-       if (done != NULL)
-               *done = rc;
-
-       return (0);
-}
-
-#endif /* SPL_VMSYSTM_H */
diff --git a/include/sys/vnode.h b/include/sys/vnode.h
deleted file mode 100644 (file)
index 946654b..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_VNODE_H
-#define        _SPL_VNODE_H
-
-#include <linux/module.h>
-#include <linux/syscalls.h>
-#include <linux/fcntl.h>
-#include <linux/buffer_head.h>
-#include <linux/dcache.h>
-#include <linux/namei.h>
-#include <linux/file.h>
-#include <linux/fs.h>
-#include <linux/fs_struct.h>
-#include <linux/mount.h>
-#include <sys/kmem.h>
-#include <sys/mutex.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/uio.h>
-#include <sys/user.h>
-#include <sys/sunldi.h>
-
-/*
- * Prior to linux-2.6.33 only O_DSYNC semantics were implemented and
- * they used the O_SYNC flag.  As of linux-2.6.33 the this behavior
- * was properly split in to O_SYNC and O_DSYNC respectively.
- */
-#ifndef O_DSYNC
-#define        O_DSYNC         O_SYNC
-#endif
-
-#define        FREAD           1
-#define        FWRITE          2
-#define        FCREAT          O_CREAT
-#define        FTRUNC          O_TRUNC
-#define        FOFFMAX         O_LARGEFILE
-#define        FSYNC           O_SYNC
-#define        FDSYNC          O_DSYNC
-#define        FRSYNC          O_SYNC
-#define        FEXCL           O_EXCL
-#define        FDIRECT         O_DIRECT
-#define        FAPPEND         O_APPEND
-
-#define        FNODSYNC        0x10000 /* fsync pseudo flag */
-#define        FNOFOLLOW       0x20000 /* don't follow symlinks */
-
-#define        F_FREESP        11      /* Free file space */
-
-
-/*
- * The vnode AT_ flags are mapped to the Linux ATTR_* flags.
- * This allows them to be used safely with an iattr structure.
- * The AT_XVATTR flag has been added and mapped to the upper
- * bit range to avoid conflicting with the standard Linux set.
- */
-#undef AT_UID
-#undef AT_GID
-
-#define        AT_MODE         ATTR_MODE
-#define        AT_UID          ATTR_UID
-#define        AT_GID          ATTR_GID
-#define        AT_SIZE         ATTR_SIZE
-#define        AT_ATIME        ATTR_ATIME
-#define        AT_MTIME        ATTR_MTIME
-#define        AT_CTIME        ATTR_CTIME
-
-#define        ATTR_XVATTR     (1 << 31)
-#define        AT_XVATTR       ATTR_XVATTR
-
-#define        ATTR_IATTR_MASK (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE | \
-                       ATTR_ATIME | ATTR_MTIME | ATTR_CTIME | ATTR_FILE)
-
-#define        CRCREAT         0x01
-#define        RMFILE          0x02
-
-#define        B_INVAL         0x01
-#define        B_TRUNC         0x02
-
-#define        LOOKUP_DIR              0x01
-#define        LOOKUP_XATTR            0x02
-#define        CREATE_XATTR_DIR        0x04
-#define        ATTR_NOACLCHECK         0x20
-
-typedef enum vtype {
-       VNON            = 0,
-       VREG            = 1,
-       VDIR            = 2,
-       VBLK            = 3,
-       VCHR            = 4,
-       VLNK            = 5,
-       VFIFO           = 6,
-       VDOOR           = 7,
-       VPROC           = 8,
-       VSOCK           = 9,
-       VPORT           = 10,
-       VBAD            = 11
-} vtype_t;
-
-typedef struct vattr {
-       enum vtype      va_type;        /* vnode type */
-       uint_t          va_mask;        /* attribute bit-mask */
-       ushort_t        va_mode;        /* acc mode */
-       uid_t           va_uid;         /* owner uid */
-       gid_t           va_gid;         /* owner gid */
-       long            va_fsid;        /* fs id */
-       long            va_nodeid;      /* node # */
-       uint32_t        va_nlink;       /* # links */
-       uint64_t        va_size;        /* file size */
-       struct timespec va_atime;       /* last acc */
-       struct timespec va_mtime;       /* last mod */
-       struct timespec va_ctime;       /* last chg */
-       dev_t           va_rdev;        /* dev */
-       uint64_t        va_nblocks;     /* space used */
-       uint32_t        va_blksize;     /* block size */
-       uint32_t        va_seq;         /* sequence */
-       struct dentry   *va_dentry;     /* dentry to wire */
-} vattr_t;
-
-typedef struct vnode {
-       struct file     *v_file;
-       kmutex_t        v_lock;         /* protects vnode fields */
-       uint_t          v_flag;         /* vnode flags (see below) */
-       uint_t          v_count;        /* reference count */
-       void            *v_data;        /* private data for fs */
-       struct vfs      *v_vfsp;        /* ptr to containing VFS */
-       struct stdata   *v_stream;      /* associated stream */
-       enum vtype      v_type;         /* vnode type */
-       dev_t           v_rdev;         /* device (VCHR, VBLK) */
-       gfp_t           v_gfp_mask;     /* original mapping gfp mask */
-} vnode_t;
-
-typedef struct vn_file {
-       int             f_fd;           /* linux fd for lookup */
-       struct task_struct *f_task;     /* linux task this fd belongs to */
-       struct file     *f_file;        /* linux file struct */
-       atomic_t        f_ref;          /* ref count */
-       kmutex_t        f_lock;         /* struct lock */
-       loff_t          f_offset;       /* offset */
-       vnode_t         *f_vnode;       /* vnode */
-       struct list_head f_list;        /* list referenced file_t's */
-} file_t;
-
-extern vnode_t *vn_alloc(int flag);
-void vn_free(vnode_t *vp);
-extern vtype_t vn_mode_to_vtype(mode_t);
-extern mode_t vn_vtype_to_mode(vtype_t);
-extern int vn_open(const char *path, uio_seg_t seg, int flags, int mode,
-    vnode_t **vpp, int x1, void *x2);
-extern int vn_openat(const char *path, uio_seg_t seg, int flags, int mode,
-    vnode_t **vpp, int x1, void *x2, vnode_t *vp, int fd);
-extern int vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len,
-    offset_t off, uio_seg_t seg, int x1, rlim64_t x2,
-    void *x3, ssize_t *residp);
-extern int vn_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4);
-extern int vn_seek(vnode_t *vp, offset_t o, offset_t *op, void *ct);
-
-extern int vn_getattr(vnode_t *vp, vattr_t *vap, int flags, void *x3, void *x4);
-extern int vn_fsync(vnode_t *vp, int flags, void *x3, void *x4);
-extern int vn_space(vnode_t *vp, int cmd, struct flock *bfp, int flag,
-    offset_t offset, void *x6, void *x7);
-extern file_t *vn_getf(int fd);
-extern void vn_releasef(int fd);
-extern void vn_areleasef(int fd, uf_info_t *fip);
-extern int vn_set_pwd(const char *filename);
-
-int spl_vn_init(void);
-void spl_vn_fini(void);
-
-#define        VOP_CLOSE                               vn_close
-#define        VOP_SEEK                                vn_seek
-#define        VOP_GETATTR                             vn_getattr
-#define        VOP_FSYNC                               vn_fsync
-#define        VOP_SPACE                               vn_space
-#define        VOP_PUTPAGE(vp, o, s, f, x1, x2)        ((void)0)
-#define        vn_is_readonly(vp)                      0
-#define        getf                                    vn_getf
-#define        releasef                                vn_releasef
-#define        areleasef                               vn_areleasef
-
-extern vnode_t *rootdir;
-
-#endif /* SPL_VNODE_H */
diff --git a/include/sys/zmod.h b/include/sys/zmod.h
deleted file mode 100644 (file)
index 5380bd6..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *
- *
- *  z_compress_level/z_uncompress are nearly identical copies of the
- *  compress2/uncompress functions provided by the official zlib package
- *  available at http://zlib.net/.  The only changes made we to slightly
- *  adapt the functions called to match the linux kernel implementation
- *  of zlib.  The full zlib license follows:
- *
- *  zlib.h -- interface of the 'zlib' general purpose compression library
- *  version 1.2.5, April 19th, 2010
- *
- *  Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
- *
- *  This software is provided 'as-is', without any express or implied
- *  warranty.  In no event will the authors be held liable for any damages
- *  arising from the use of this software.
- *
- *  Permission is granted to anyone to use this software for any purpose,
- *  including commercial applications, and to alter it and redistribute it
- *  freely, subject to the following restrictions:
- *
- *  1. The origin of this software must not be misrepresented; you must not
- *     claim that you wrote the original software. If you use this software
- *     in a product, an acknowledgment in the product documentation would be
- *     appreciated but is not required.
- *  2. Altered source versions must be plainly marked as such, and must not be
- *     misrepresented as being the original software.
- *  3. This notice may not be removed or altered from any source distribution.
- *
- *  Jean-loup Gailly
- *  Mark Adler
- */
-
-#ifndef _SPL_ZMOD_H
-#define        _SPL_ZMOD_H
-
-#include <sys/types.h>
-#include <linux/zlib.h>
-
-extern int z_compress_level(void *dest, size_t *destLen, const void *source,
-    size_t sourceLen, int level);
-extern int z_uncompress(void *dest, size_t *destLen, const void *source,
-    size_t sourceLen);
-
-int spl_zlib_init(void);
-void spl_zlib_fini(void);
-
-#endif /* SPL_ZMOD_H */
diff --git a/include/sys/zone.h b/include/sys/zone.h
deleted file mode 100644 (file)
index b2efd13..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_ZONE_H
-#define        _SPL_ZONE_H
-
-#include <sys/byteorder.h>
-
-#define        GLOBAL_ZONEID                   0
-
-#define        zone_dataset_visible(x, y)      (1)
-#define        crgetzoneid(x)                  (GLOBAL_ZONEID)
-#define        INGLOBALZONE(z)                 (1)
-
-#endif /* SPL_ZONE_H */
diff --git a/include/unistd.h b/include/unistd.h
deleted file mode 100644 (file)
index d86de89..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_UNISTD_H
-#define        _SPL_UNISTD_H
-
-#endif /* SPL_UNISTD_H */
diff --git a/include/util/Makefile.am b/include/util/Makefile.am
deleted file mode 100644 (file)
index e2bf09f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/util/qsort.h \
-       $(top_srcdir)/include/util/sscanf.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include/util
-kernel_HEADERS = $(KERNEL_H)
-endif
diff --git a/include/util/qsort.h b/include/util/qsort.h
deleted file mode 100644 (file)
index 90ae6e4..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_QSORT_H
-#define        _SPL_QSORT_H
-
-#include <linux/sort.h>
-
-#define        qsort(base, num, size, cmp)     sort(base, num, size, cmp, NULL)
-
-#endif /* SPL_QSORT_H */
diff --git a/include/util/sscanf.h b/include/util/sscanf.h
deleted file mode 100644 (file)
index 9788234..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_UTIL_SSCANF_H
-#define        _SPL_UTIL_SSCANF_H
-
-#endif /* SPL_UTIL_SSCAN_H */
diff --git a/include/vm/Makefile.am b/include/vm/Makefile.am
deleted file mode 100644 (file)
index 7faab0a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-COMMON_H =
-
-KERNEL_H = \
-       $(top_srcdir)/include/vm/anon.h \
-       $(top_srcdir)/include/vm/pvn.h \
-       $(top_srcdir)/include/vm/seg_kmem.h
-
-USER_H =
-
-EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
-
-if CONFIG_KERNEL
-kerneldir = @prefix@/src/spl-$(VERSION)/include/vm
-kernel_HEADERS = $(KERNEL_H)
-endif
diff --git a/include/vm/anon.h b/include/vm/anon.h
deleted file mode 100644 (file)
index 706734f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_VM_ANON_H
-#define        _SPL_VM_ANON_H
-
-#endif /* SPL_VM_ANON_H */
diff --git a/include/vm/pvn.h b/include/vm/pvn.h
deleted file mode 100644 (file)
index 1011e6c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_VM_PVN_H
-#define        _SPL_VM_PVN_H
-
-#endif /* SPL_VM_PVN_H */
diff --git a/include/vm/seg_kmem.h b/include/vm/seg_kmem.h
deleted file mode 100644 (file)
index a0ab7fc..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPL_SEG_KMEM_H
-#define        _SPL_SEG_KMEM_H
-
-#include <sys/vmsystm.h>
-
-#endif /* SPL_SEG_KMEM_H */
diff --git a/lib/Makefile.am b/lib/Makefile.am
deleted file mode 100644 (file)
index 0f2826b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-include $(top_srcdir)/config/Rules.am
-
-noinst_LTLIBRARIES = libcommon.la
-libcommon_la_SOURCES = list.c
-
-EXTRA_DIST = list.h
diff --git a/lib/list.c b/lib/list.c
deleted file mode 100644 (file)
index 140a1bb..0000000
+++ /dev/null
@@ -1,837 +0,0 @@
-/*****************************************************************************
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2001-2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Chris Dunlap <cdunlap@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is from LSD-Tools, the LLNL Software Development Toolbox.
- *
- *  LSD-Tools is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  LSD-Tools is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with LSD-Tools.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Refer to "list.h" for documentation on public functions.
- *****************************************************************************/
-
-#ifdef WITH_PTHREADS
-#  include <pthread.h>
-#endif /* WITH_PTHREADS */
-
-#include <assert.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include "list.h"
-
-
-/*********************
- *  lsd_fatal_error  *
- *********************/
-
-#ifdef WITH_LSD_FATAL_ERROR_FUNC
-#  undef lsd_fatal_error
-   extern void lsd_fatal_error(char *file, int line, char *mesg);
-#else /* !WITH_LSD_FATAL_ERROR_FUNC */
-#  ifndef lsd_fatal_error
-#    include <errno.h>
-#    include <stdio.h>
-#    include <string.h>
-#    define lsd_fatal_error(file, line, mesg)                                 \
-       do {                                                                   \
-           fprintf(stderr, "ERROR: [%s:%d] %s: %s\n",                         \
-                   file, line, mesg, strerror(errno));                        \
-       } while (0)
-#  endif /* !lsd_fatal_error */
-#endif /* !WITH_LSD_FATAL_ERROR_FUNC */
-
-
-/*********************
- *  lsd_nomem_error  *
- *********************/
-
-#ifdef WITH_LSD_NOMEM_ERROR_FUNC
-#  undef lsd_nomem_error
-   extern void * lsd_nomem_error(char *file, int line, char *mesg);
-#else /* !WITH_LSD_NOMEM_ERROR_FUNC */
-#  ifndef lsd_nomem_error
-#    define lsd_nomem_error(file, line, mesg) (NULL)
-#  endif /* !lsd_nomem_error */
-#endif /* !WITH_LSD_NOMEM_ERROR_FUNC */
-
-
-/***************
- *  Constants  *
- ***************/
-
-#define LIST_ALLOC 32
-#define LIST_MAGIC 0xDEADBEEF
-
-
-/****************
- *  Data Types  *
- ****************/
-
-struct listNode {
-    void                 *data;         /* node's data                       */
-    struct listNode      *next;         /* next node in list                 */
-};
-
-struct listIterator {
-    struct list          *list;         /* the list being iterated           */
-    struct listNode      *pos;          /* the next node to be iterated      */
-    struct listNode     **prev;         /* addr of 'next' ptr to prv It node */
-    struct listIterator  *iNext;        /* iterator chain for list_destroy() */
-#ifndef NDEBUG
-    unsigned int          magic;        /* sentinel for asserting validity   */
-#endif /* !NDEBUG */
-};
-
-struct list {
-    struct listNode      *head;         /* head of the list                  */
-    struct listNode     **tail;         /* addr of last node's 'next' ptr    */
-    struct listIterator  *iNext;        /* iterator chain for list_destroy() */
-    ListDelF              fDel;         /* function to delete node data      */
-    int                   count;        /* number of nodes in list           */
-#ifdef WITH_PTHREADS
-    pthread_mutex_t       mutex;        /* mutex to protect access to list   */
-#endif /* WITH_PTHREADS */
-#ifndef NDEBUG
-    unsigned int          magic;        /* sentinel for asserting validity   */
-#endif /* !NDEBUG */
-};
-
-typedef struct listNode * ListNode;
-
-
-/****************
- *  Prototypes  *
- ****************/
-
-static void * list_node_create (List l, ListNode *pp, void *x);
-static void * list_node_destroy (List l, ListNode *pp);
-static List list_alloc (void);
-static void list_free (List l);
-static ListNode list_node_alloc (void);
-static void list_node_free (ListNode p);
-static ListIterator list_iterator_alloc (void);
-static void list_iterator_free (ListIterator i);
-static void * list_alloc_aux (int size, void *pfreelist);
-static void list_free_aux (void *x, void *pfreelist);
-
-
-/***************
- *  Variables  *
- ***************/
-
-static List list_free_lists = NULL;
-static ListNode list_free_nodes = NULL;
-static ListIterator list_free_iterators = NULL;
-
-#ifdef WITH_PTHREADS
-static pthread_mutex_t list_free_lock = PTHREAD_MUTEX_INITIALIZER;
-#endif /* WITH_PTHREADS */
-
-
-/************
- *  Macros  *
- ************/
-
-#ifdef WITH_PTHREADS
-
-#  define list_mutex_init(mutex)                                              \
-     do {                                                                     \
-         int e = pthread_mutex_init(mutex, NULL);                             \
-         if (e != 0) {                                                        \
-             errno = e;                                                       \
-             lsd_fatal_error(__FILE__, __LINE__, "list mutex init");          \
-             abort();                                                         \
-         }                                                                    \
-     } while (0)
-
-#  define list_mutex_lock(mutex)                                              \
-     do {                                                                     \
-         int e = pthread_mutex_lock(mutex);                                   \
-         if (e != 0) {                                                        \
-             errno = e;                                                       \
-             lsd_fatal_error(__FILE__, __LINE__, "list mutex lock");          \
-             abort();                                                         \
-         }                                                                    \
-     } while (0)
-
-#  define list_mutex_unlock(mutex)                                            \
-     do {                                                                     \
-         int e = pthread_mutex_unlock(mutex);                                 \
-         if (e != 0) {                                                        \
-             errno = e;                                                       \
-             lsd_fatal_error(__FILE__, __LINE__, "list mutex unlock");        \
-             abort();                                                         \
-         }                                                                    \
-     } while (0)
-
-#  define list_mutex_destroy(mutex)                                           \
-     do {                                                                     \
-         int e = pthread_mutex_destroy(mutex);                                \
-         if (e != 0) {                                                        \
-             errno = e;                                                       \
-             lsd_fatal_error(__FILE__, __LINE__, "list mutex destroy");       \
-             abort();                                                         \
-         }                                                                    \
-     } while (0)
-
-#  ifndef NDEBUG
-     static int list_mutex_is_locked (pthread_mutex_t *mutex);
-#  endif /* !NDEBUG */
-
-#else /* !WITH_PTHREADS */
-
-#  define list_mutex_init(mutex)
-#  define list_mutex_lock(mutex)
-#  define list_mutex_unlock(mutex)
-#  define list_mutex_destroy(mutex)
-#  define list_mutex_is_locked(mutex) (1)
-
-#endif /* !WITH_PTHREADS */
-
-
-/***************
- *  Functions  *
- ***************/
-
-List
-list_create (ListDelF f)
-{
-    List l;
-
-    if (!(l = list_alloc()))
-        return(lsd_nomem_error(__FILE__, __LINE__, "list create"));
-    l->head = NULL;
-    l->tail = &l->head;
-    l->iNext = NULL;
-    l->fDel = f;
-    l->count = 0;
-    list_mutex_init(&l->mutex);
-#ifndef NDEBUG
-    l->magic = LIST_MAGIC;
-#endif
-    return(l);
-}
-
-
-void
-list_destroy (List l)
-{
-    ListIterator i, iTmp;
-    ListNode p, pTmp;
-
-    assert(l != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    i = l->iNext;
-    while (i) {
-        assert(i->magic == LIST_MAGIC);
-        iTmp = i->iNext;
-#ifndef NDEBUG
-        i->magic = ~LIST_MAGIC;
-#endif /* !NDEBUG */
-        list_iterator_free(i);
-        i = iTmp;
-    }
-    p = l->head;
-    while (p) {
-        pTmp = p->next;
-        if (p->data && l->fDel)
-            l->fDel(p->data);
-        list_node_free(p);
-        p = pTmp;
-    }
-#ifndef NDEBUG
-    l->magic = ~LIST_MAGIC;
-#endif /* !NDEBUG */
-    list_mutex_unlock(&l->mutex);
-    list_mutex_destroy(&l->mutex);
-    list_free(l);
-    return;
-}
-
-
-int
-list_is_empty (List l)
-{
-    int n;
-
-    assert(l != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    n = l->count;
-    list_mutex_unlock(&l->mutex);
-    return(n == 0);
-}
-
-
-int
-list_count (List l)
-{
-    int n;
-
-    assert(l != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    n = l->count;
-    list_mutex_unlock(&l->mutex);
-    return(n);
-}
-
-
-void *
-list_append (List l, void *x)
-{
-    void *v;
-
-    assert(l != NULL);
-    assert(x != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    v = list_node_create(l, l->tail, x);
-    list_mutex_unlock(&l->mutex);
-    return(v);
-}
-
-
-void *
-list_prepend (List l, void *x)
-{
-    void *v;
-
-    assert(l != NULL);
-    assert(x != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    v = list_node_create(l, &l->head, x);
-    list_mutex_unlock(&l->mutex);
-    return(v);
-}
-
-
-void *
-list_find_first (List l, ListFindF f, void *key)
-{
-    ListNode p;
-    void *v = NULL;
-
-    assert(l != NULL);
-    assert(f != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    for (p=l->head; p; p=p->next) {
-        if (f(p->data, key)) {
-            v = p->data;
-            break;
-        }
-    }
-    list_mutex_unlock(&l->mutex);
-    return(v);
-}
-
-
-int
-list_delete_all (List l, ListFindF f, void *key)
-{
-    ListNode *pp;
-    void *v;
-    int n = 0;
-
-    assert(l != NULL);
-    assert(f != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    pp = &l->head;
-    while (*pp) {
-        if (f((*pp)->data, key)) {
-            if ((v = list_node_destroy(l, pp))) {
-                if (l->fDel)
-                    l->fDel(v);
-                n++;
-            }
-        }
-        else {
-            pp = &(*pp)->next;
-        }
-    }
-    list_mutex_unlock(&l->mutex);
-    return(n);
-}
-
-
-int
-list_for_each (List l, ListForF f, void *arg)
-{
-    ListNode p;
-    int n = 0;
-
-    assert(l != NULL);
-    assert(f != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    for (p=l->head; p; p=p->next) {
-        n++;
-        if (f(p->data, arg) < 0) {
-            n = -n;
-            break;
-        }
-    }
-    list_mutex_unlock(&l->mutex);
-    return(n);
-}
-
-
-void
-list_sort (List l, ListCmpF f)
-{
-/*  Note: Time complexity O(n^2).
- */
-    ListNode *pp, *ppPrev, *ppPos, pTmp;
-    ListIterator i;
-
-    assert(l != NULL);
-    assert(f != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    if (l->count > 1) {
-        ppPrev = &l->head;
-        pp = &(*ppPrev)->next;
-        while (*pp) {
-            if (f((*pp)->data, (*ppPrev)->data) < 0) {
-                ppPos = &l->head;
-                while (f((*pp)->data, (*ppPos)->data) >= 0)
-                    ppPos = &(*ppPos)->next;
-                pTmp = (*pp)->next;
-                (*pp)->next = *ppPos;
-                *ppPos = *pp;
-                *pp = pTmp;
-                if (ppPrev == ppPos)
-                    ppPrev = &(*ppPrev)->next;
-            }
-            else {
-                ppPrev = pp;
-                pp = &(*pp)->next;
-            }
-        }
-        l->tail = pp;
-
-        for (i=l->iNext; i; i=i->iNext) {
-            assert(i->magic == LIST_MAGIC);
-            i->pos = i->list->head;
-            i->prev = &i->list->head;
-        }
-    }
-    list_mutex_unlock(&l->mutex);
-    return;
-}
-
-
-void *
-list_push (List l, void *x)
-{
-    void *v;
-
-    assert(l != NULL);
-    assert(x != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    v = list_node_create(l, &l->head, x);
-    list_mutex_unlock(&l->mutex);
-    return(v);
-}
-
-
-void *
-list_pop (List l)
-{
-    void *v;
-
-    assert(l != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    v = list_node_destroy(l, &l->head);
-    list_mutex_unlock(&l->mutex);
-    return(v);
-}
-
-
-void *
-list_peek (List l)
-{
-    void *v;
-
-    assert(l != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    v = (l->head) ? l->head->data : NULL;
-    list_mutex_unlock(&l->mutex);
-    return(v);
-}
-
-
-void *
-list_enqueue (List l, void *x)
-{
-    void *v;
-
-    assert(l != NULL);
-    assert(x != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    v = list_node_create(l, l->tail, x);
-    list_mutex_unlock(&l->mutex);
-    return(v);
-}
-
-
-void *
-list_dequeue (List l)
-{
-    void *v;
-
-    assert(l != NULL);
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    v = list_node_destroy(l, &l->head);
-    list_mutex_unlock(&l->mutex);
-    return(v);
-}
-
-
-ListIterator
-list_iterator_create (List l)
-{
-    ListIterator i;
-
-    assert(l != NULL);
-    if (!(i = list_iterator_alloc()))
-        return(lsd_nomem_error(__FILE__, __LINE__, "list iterator create"));
-    i->list = l;
-    list_mutex_lock(&l->mutex);
-    assert(l->magic == LIST_MAGIC);
-    i->pos = l->head;
-    i->prev = &l->head;
-    i->iNext = l->iNext;
-    l->iNext = i;
-#ifndef NDEBUG
-    i->magic = LIST_MAGIC;
-#endif /* !NDEBUG */
-    list_mutex_unlock(&l->mutex);
-    return(i);
-}
-
-
-void
-list_iterator_reset (ListIterator i)
-{
-    assert(i != NULL);
-    assert(i->magic == LIST_MAGIC);
-    list_mutex_lock(&i->list->mutex);
-    assert(i->list->magic == LIST_MAGIC);
-    i->pos = i->list->head;
-    i->prev = &i->list->head;
-    list_mutex_unlock(&i->list->mutex);
-    return;
-}
-
-
-void
-list_iterator_destroy (ListIterator i)
-{
-    ListIterator *pi;
-
-    assert(i != NULL);
-    assert(i->magic == LIST_MAGIC);
-    list_mutex_lock(&i->list->mutex);
-    assert(i->list->magic == LIST_MAGIC);
-    for (pi=&i->list->iNext; *pi; pi=&(*pi)->iNext) {
-        assert((*pi)->magic == LIST_MAGIC);
-        if (*pi == i) {
-            *pi = (*pi)->iNext;
-            break;
-        }
-    }
-    list_mutex_unlock(&i->list->mutex);
-#ifndef NDEBUG
-    i->magic = ~LIST_MAGIC;
-#endif /* !NDEBUG */
-    list_iterator_free(i);
-    return;
-}
-
-
-void *
-list_next (ListIterator i)
-{
-    ListNode p;
-
-    assert(i != NULL);
-    assert(i->magic == LIST_MAGIC);
-    list_mutex_lock(&i->list->mutex);
-    assert(i->list->magic == LIST_MAGIC);
-    if ((p = i->pos))
-        i->pos = p->next;
-    if (*i->prev != p)
-        i->prev = &(*i->prev)->next;
-    list_mutex_unlock(&i->list->mutex);
-    return(p ? p->data : NULL);
-}
-
-
-void *
-list_insert (ListIterator i, void *x)
-{
-    void *v;
-
-    assert(i != NULL);
-    assert(x != NULL);
-    assert(i->magic == LIST_MAGIC);
-    list_mutex_lock(&i->list->mutex);
-    assert(i->list->magic == LIST_MAGIC);
-    v = list_node_create(i->list, i->prev, x);
-    list_mutex_unlock(&i->list->mutex);
-    return(v);
-}
-
-
-void *
-list_find (ListIterator i, ListFindF f, void *key)
-{
-    void *v;
-
-    assert(i != NULL);
-    assert(f != NULL);
-    assert(i->magic == LIST_MAGIC);
-    while ((v=list_next(i)) && !f(v,key)) {;}
-    return(v);
-}
-
-
-void *
-list_remove (ListIterator i)
-{
-    void *v = NULL;
-
-    assert(i != NULL);
-    assert(i->magic == LIST_MAGIC);
-    list_mutex_lock(&i->list->mutex);
-    assert(i->list->magic == LIST_MAGIC);
-    if (*i->prev != i->pos)
-        v = list_node_destroy(i->list, i->prev);
-    list_mutex_unlock(&i->list->mutex);
-    return(v);
-}
-
-
-int
-list_delete (ListIterator i)
-{
-    void *v;
-
-    assert(i != NULL);
-    assert(i->magic == LIST_MAGIC);
-    if ((v = list_remove(i))) {
-        if (i->list->fDel)
-            i->list->fDel(v);
-        return(1);
-    }
-    return(0);
-}
-
-
-static void *
-list_node_create (List l, ListNode *pp, void *x)
-{
-/*  Inserts data pointed to by [x] into list [l] after [pp],
- *    the address of the previous node's "next" ptr.
- *  Returns a ptr to data [x], or NULL if insertion fails.
- *  This routine assumes the list is already locked upon entry.
- */
-    ListNode p;
-    ListIterator i;
-
-    assert(l != NULL);
-    assert(l->magic == LIST_MAGIC);
-    assert(list_mutex_is_locked(&l->mutex));
-    assert(pp != NULL);
-    assert(x != NULL);
-    if (!(p = list_node_alloc()))
-        return(lsd_nomem_error(__FILE__, __LINE__, "list node create"));
-    p->data = x;
-    if (!(p->next = *pp))
-        l->tail = &p->next;
-    *pp = p;
-    l->count++;
-    for (i=l->iNext; i; i=i->iNext) {
-        assert(i->magic == LIST_MAGIC);
-        if (i->prev == pp)
-            i->prev = &p->next;
-        else if (i->pos == p->next)
-            i->pos = p;
-        assert((i->pos == *i->prev) || (i->pos == (*i->prev)->next));
-    }
-    return(x);
-}
-
-
-static void *
-list_node_destroy (List l, ListNode *pp)
-{
-/*  Removes the node pointed to by [*pp] from from list [l],
- *    where [pp] is the address of the previous node's "next" ptr.
- *  Returns the data ptr associated with list item being removed,
- *    or NULL if [*pp] points to the NULL element.
- *  This routine assumes the list is already locked upon entry.
- */
-    void *v;
-    ListNode p;
-    ListIterator i;
-
-    assert(l != NULL);
-    assert(l->magic == LIST_MAGIC);
-    assert(list_mutex_is_locked(&l->mutex));
-    assert(pp != NULL);
-    if (!(p = *pp))
-        return(NULL);
-    v = p->data;
-    if (!(*pp = p->next))
-        l->tail = pp;
-    l->count--;
-    for (i=l->iNext; i; i=i->iNext) {
-        assert(i->magic == LIST_MAGIC);
-        if (i->pos == p)
-            i->pos = p->next, i->prev = pp;
-        else if (i->prev == &p->next)
-            i->prev = pp;
-        assert((i->pos == *i->prev) || (i->pos == (*i->prev)->next));
-    }
-    list_node_free(p);
-    return(v);
-}
-
-
-static List
-list_alloc (void)
-{
-    return(list_alloc_aux(sizeof(struct list), &list_free_lists));
-}
-
-
-static void
-list_free (List l)
-{
-    list_free_aux(l, &list_free_lists);
-    return;
-}
-
-
-static ListNode
-list_node_alloc (void)
-{
-    return(list_alloc_aux(sizeof(struct listNode), &list_free_nodes));
-}
-
-
-static void
-list_node_free (ListNode p)
-{
-    list_free_aux(p, &list_free_nodes);
-    return;
-}
-
-
-static ListIterator
-list_iterator_alloc (void)
-{
-    return(list_alloc_aux(sizeof(struct listIterator), &list_free_iterators));
-}
-
-
-static void
-list_iterator_free (ListIterator i)
-{
-    list_free_aux(i, &list_free_iterators);
-    return;
-}
-
-
-static void *
-list_alloc_aux (int size, void *pfreelist)
-{
-/*  Allocates an object of [size] bytes from the freelist [*pfreelist].
- *  Memory is added to the freelist in chunks of size LIST_ALLOC.
- *  Returns a ptr to the object, or NULL if the memory request fails.
- */
-    void **px;
-    void **pfree = pfreelist;
-    void **plast;
-
-    assert(sizeof(char) == 1);
-    assert(size >= (int)sizeof(void *));
-    assert(pfreelist != NULL);
-    assert(LIST_ALLOC > 0);
-    list_mutex_lock(&list_free_lock);
-    if (!*pfree) {
-        if ((*pfree = malloc(LIST_ALLOC * size))) {
-            px = *pfree;
-            plast = (void **) ((char *) *pfree + ((LIST_ALLOC - 1) * size));
-            while (px < plast)
-                *px = (char *) px + size, px = *px;
-            *plast = NULL;
-        }
-    }
-    if ((px = *pfree))
-        *pfree = *px;
-    else
-        errno = ENOMEM;
-    list_mutex_unlock(&list_free_lock);
-    return(px);
-}
-
-
-static void
-list_free_aux (void *x, void *pfreelist)
-{
-/*  Frees the object [x], returning it to the freelist [*pfreelist].
- */
-    void **px = x;
-    void **pfree = pfreelist;
-
-    assert(x != NULL);
-    assert(pfreelist != NULL);
-    list_mutex_lock(&list_free_lock);
-    *px = *pfree;
-    *pfree = px;
-    list_mutex_unlock(&list_free_lock);
-    return;
-}
-
-
-#ifndef NDEBUG
-#ifdef WITH_PTHREADS
-static int
-list_mutex_is_locked (pthread_mutex_t *mutex)
-{
-/*  Returns true if the mutex is locked; o/w, returns false.
- */
-    int rc;
-
-    assert(mutex != NULL);
-    rc = pthread_mutex_trylock(mutex);
-    return(rc == EBUSY ? 1 : 0);
-}
-#endif /* WITH_PTHREADS */
-#endif /* !NDEBUG */
diff --git a/lib/list.h b/lib/list.h
deleted file mode 100644 (file)
index 01adedd..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-/*****************************************************************************
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2001-2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Chris Dunlap <cdunlap@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is from LSD-Tools, the LLNL Software Development Toolbox.
- *
- *  LSD-Tools is free software; you can redistribute it and/or modify it under
- *  the terms of the GNU General Public License as published by the Free
- *  Software Foundation; either version 2 of the License, or (at your option)
- *  any later version.
- *
- *  LSD-Tools is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- *  more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with LSD-Tools.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************/
-
-#ifndef LSD_LIST_H
-#define LSD_LIST_H
-
-
-/***********
- *  Notes  *
- ***********/
-/*
- *  If NDEBUG is not defined, internal debug code will be enabled.  This is
- *  intended for development use only and production code should define NDEBUG.
- *
- *  If WITH_LSD_FATAL_ERROR_FUNC is defined, the linker will expect to
- *  find an external lsd_fatal_error(file,line,mesg) function.  By default,
- *  lsd_fatal_error(file,line,mesg) is a macro definition that outputs an
- *  error message to stderr.  This macro may be redefined to invoke another
- *  routine instead.
- *
- *  If WITH_LSD_NOMEM_ERROR_FUNC is defined, the linker will expect to
- *  find an external lsd_nomem_error(file,line,mesg) function.  By default,
- *  lsd_nomem_error(file,line,mesg) is a macro definition that returns NULL.
- *  This macro may be redefined to invoke another routine instead.
- *
- *  If WITH_PTHREADS is defined, these routines will be thread-safe.
- */
-
-
-/****************
- *  Data Types  *
- ****************/
-
-typedef struct list * List;
-/*
- *  List opaque data type.
- */
-
-typedef struct listIterator * ListIterator;
-/*
- *  List Iterator opaque data type.
- */
-
-typedef void (*ListDelF) (void *x);
-/*
- *  Function prototype to deallocate data stored in a list.
- *    This function is responsible for freeing all memory associated
- *    with an item, including all subordinate items (if applicable).
- */
-
-typedef int (*ListCmpF) (void *x, void *y);
-/*
- *  Function prototype for comparing two items in a list.
- *  Returns less-than-zero if (x<y), zero if (x==y), and
- *    greather-than-zero if (x>y).
- */
-
-typedef int (*ListFindF) (void *x, void *key);
-/*
- *  Function prototype for matching items in a list.
- *  Returns non-zero if (x==key); o/w returns zero.
- */
-
-typedef int (*ListForF) (void *x, void *arg);
-/*
- *  Function prototype for operating on each item in a list.
- *  Returns less-than-zero on error.
- */
-
-
-/*******************************
- *  General-Purpose Functions  *
- *******************************/
-
-List list_create (ListDelF f);
-/*
- *  Creates and returns a new empty list, or lsd_nomem_error() on failure.
- *  The deletion function [f] is used to deallocate memory used by items
- *    in the list; if this is NULL, memory associated with these items
- *    will not be freed when the list is destroyed.
- *  Note: Abandoning a list without calling list_destroy() will result
- *    in a memory leak.
- */
-
-void list_destroy (List l);
-/*
- *  Destroys list [l], freeing memory used for list iterators and the
- *    list itself; if a deletion function was specified when the list
- *    was created, it will be called for each item in the list.
- */
-
-int list_is_empty (List l);
-/*
- *  Returns non-zero if list [l] is empty; o/w returns zero.
- */
-
-int list_count (List l);
-/*
- *  Returns the number of items in list [l].
- */
-
-
-/***************************
- *  List Access Functions  *
- ***************************/
-
-void * list_append (List l, void *x);
-/*
- *  Inserts data [x] at the end of list [l].
- *  Returns the data's ptr, or lsd_nomem_error() if insertion failed.
- */
-
-void * list_prepend (List l, void *x);
-/*
- *  Inserts data [x] at the beginning of list [l].
- *  Returns the data's ptr, or lsd_nomem_error() if insertion failed.
- */
-
-void * list_find_first (List l, ListFindF f, void *key);
-/*
- *  Traverses list [l] using [f] to match each item with [key].
- *  Returns a ptr to the first item for which the function [f]
- *    returns non-zero, or NULL if no such item is found.
- *  Note: This function differs from list_find() in that it does not require
- *    a list iterator; it should only be used when all list items are known
- *    to be unique (according to the function [f]).
- */
-
-int list_delete_all (List l, ListFindF f, void *key);
-/*
- *  Traverses list [l] using [f] to match each item with [key].
- *  Removes all items from the list for which the function [f] returns
- *    non-zero; if a deletion function was specified when the list was
- *    created, it will be called to deallocate each item being removed.
- *  Returns a count of the number of items removed from the list.
- */
-
-int list_for_each (List l, ListForF f, void *arg);
-/*
- *  For each item in list [l], invokes the function [f] with [arg].
- *  Returns a count of the number of items on which [f] was invoked.
- *  If [f] returns <0 for a given item, the iteration is aborted and the
- *    function returns the negative of that item's position in the list.
- */
-
-void list_sort (List l, ListCmpF f);
-/*
- *  Sorts list [l] into ascending order according to the function [f].
- *  Note: Sorting a list resets all iterators associated with the list.
- *  Note: The sort algorithm is stable.
- */
-
-
-/****************************
- *  Stack Access Functions  *
- ****************************/
-
-void * list_push (List l, void *x);
-/*
- *  Pushes data [x] onto the top of stack [l].
- *  Returns the data's ptr, or lsd_nomem_error() if insertion failed.
- */
-
-void * list_pop (List l);
-/*
- *  Pops the data item at the top of the stack [l].
- *  Returns the data's ptr, or NULL if the stack is empty.
- */
-
-void * list_peek (List l);
-/*
- *  Peeks at the data item at the top of the stack (or head of the queue) [l].
- *  Returns the data's ptr, or NULL if the stack (or queue) is empty.
- *  Note: The item is not removed from the list.
- */
-
-
-/****************************
- *  Queue Access Functions  *
- ****************************/
-
-void * list_enqueue (List l, void *x);
-/*
- *  Enqueues data [x] at the tail of queue [l].
- *  Returns the data's ptr, or lsd_nomem_error() if insertion failed.
- */
-
-void * list_dequeue (List l);
-/*
- *  Dequeues the data item at the head of the queue [l].
- *  Returns the data's ptr, or NULL if the queue is empty.
- */
-
-
-/*****************************
- *  List Iterator Functions  *
- *****************************/
-
-ListIterator list_iterator_create (List l);
-/*
- *  Creates and returns a list iterator for non-destructively traversing
- *    list [l], or lsd_nomem_error() on failure.
- */
-
-void list_iterator_reset (ListIterator i);
-/*
- *  Resets the list iterator [i] to start traversal at the beginning
- *    of the list.
- */
-
-void list_iterator_destroy (ListIterator i);
-/*
- *  Destroys the list iterator [i]; list iterators not explicitly destroyed
- *    in this manner will be destroyed when the list is deallocated via
- *    list_destroy().
- */
-
-void * list_next (ListIterator i);
-/*
- *  Returns a ptr to the next item's data,
- *    or NULL once the end of the list is reached.
- *  Example: i=list_iterator_create(i); while ((x=list_next(i))) {...}
- */
-
-void * list_insert (ListIterator i, void *x);
-/*
- *  Inserts data [x] immediately before the last item returned via list
- *    iterator [i]; once the list iterator reaches the end of the list,
- *    insertion is made at the list's end.
- *  Returns the data's ptr, or lsd_nomem_error() if insertion failed.
- */
-
-void * list_find (ListIterator i, ListFindF f, void *key);
-/*
- *  Traverses the list from the point of the list iterator [i]
- *    using [f] to match each item with [key].
- *  Returns a ptr to the next item for which the function [f]
- *    returns non-zero, or NULL once the end of the list is reached.
- *  Example: i=list_iterator_reset(i); while ((x=list_find(i,f,k))) {...}
- */
-
-void * list_remove (ListIterator i);
-/*
- *  Removes from the list the last item returned via list iterator [i]
- *    and returns the data's ptr.
- *  Note: The client is responsible for freeing the returned data.
- */
-
-int list_delete (ListIterator i);
-/*
- *  Removes from the list the last item returned via list iterator [i];
- *    if a deletion function was specified when the list was created,
- *    it will be called to deallocate the item being removed.
- *  Returns a count of the number of items removed from the list
- *    (ie, '1' if the item was removed, and '0' otherwise).
- */
-
-
-#endif /* !LSD_LIST_H */
diff --git a/man/Makefile.am b/man/Makefile.am
deleted file mode 100644 (file)
index 7791945..0000000
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = man1 man5
diff --git a/man/man1/Makefile.am b/man/man1/Makefile.am
deleted file mode 100644 (file)
index d6becca..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-dist_man_MANS = splat.1
-
-install-data-local:
-       $(INSTALL) -d -m 0755 "$(DESTDIR)$(mandir)/man1"
diff --git a/man/man1/splat.1 b/man/man1/splat.1
deleted file mode 100644 (file)
index 407680b..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-'\" t
-.\"
-.\" Copyright 2013 Darik Horn <dajhorn@vanadac.com>. All rights reserved.
-.\"
-.TH splat 1 "2013 MAR 16" "ZFS on Linux" "User Commands"
-
-.SH NAME
-splat \- Solaris Porting LAyer Tests
-.SH SYNOPSIS
-.LP
-.BI "splat [\-chvx] < \-\-all | \-\-list | \-\-test " "subsystem" ":" "test" " [...] >"
-
-.SH DESCRIPTION
-This utility uses the splat.ko kernel module to test the spl.ko kernel
-module. Run "modprobe splat" before invoking \fBsplat\fR.
-
-.SH OPTIONS
-.HP
-.BI "\-a" "" ", \-\-all" ""
-.IP
-Run all available tests on all subsystems.
-.HP
-.BI "\-c" "" ", \-\-nocolor" ""
-.IP
-Disable output highlighting. By default, "Fail" is printed in red text
-and "Pass" is printed in green text.
-.HP
-.BI "\-h" "" ", \-\-help" ""
-.IP
-Print the usage message.
-.HP
-.BI "\-l" "" ", \-\-list" ""
-.IP
-For each spl.ko subsystem, print all available test names and
-hexadecimal identifiers with a short description.
-.HP
-.BI "\-t" " subsystem" ":" "test" ", \-\-test" " subsystem" ":" "test"
-.HP
-.BI "\-t" " subsystem" ":all" "" ", \-\-test" " subsystem" ":all" ""
-.IP
-Run the \fItest\fR diagnostic routine for the spl.ko \fIsubsystem\fR.
-Specify this option more than once to run multiple tests.
-
-The \fItest\fR and \fIsubsystem\fR parameters are the names or
-hexadecimal identifiers returned by the \fBsplat --list\fR command.
-
-If \fIsubsystem\fR is a name and not a hexadecimal identifier, then the
-\fBall\fR keyword can be used to run all available \fIsubsystem\fR
-tests.
-
-.HP
-.BI "\-v" "" ", \-\-verbose" ""
-.HP
-.IP
-Increase verbosity.
-.HP
-.BI "\-x" "" ", \-\-exit" ""
-.IP
-Stop running tests after the first failure.
-
-.SH "EXAMPLES"
-.LP
-Test everything in the spl.ko kernel module:
-.IP
-# splat --all --verbose
-.LP
-Test the entire kernel memory subsystem:
-.IP
-# splat --test kmem:all
-.LP
-Test the kernel compression and queue waiting facilities:
-.IP
-# splat --test zlib:compress/uncompress --test taskq:wait
-.LP
-This is the same as the previous command, except that the subsystems
-and tests are referenced by hexadecimal identifier instead of by name:
-.IP
-# splat -t 0x0f00:0x0f01 -t 0x0200:0x0204
-
-.SH "NOTES"
-All tests always return a green "Pass" result on a healthy system. Any
-red "Fail" result should be investigated or reported.
-
-.SH "BUGS"
-Some tests can deadlock the kernel if an X11 desktop is running,
-especially if a proprietary blob driver is loaded for the video
-hardware.
-
-.SH "AUTHORS"
-This man page was written by Darik Horn <dajhorn@vanadac.com>.
-
-.SH "SEE ALSO"
-.BR zpios (1),
-.BR ztest (1)
diff --git a/man/man5/Makefile.am b/man/man5/Makefile.am
deleted file mode 100644 (file)
index fb22beb..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-dist_man_MANS = spl-module-parameters.5
-
-install-data-local:
-       $(INSTALL) -d -m 0755 "$(DESTDIR)$(mandir)/man5"
diff --git a/module/.gitignore b/module/.gitignore
deleted file mode 100644 (file)
index 9070992..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-*.ko
-*.ko.unsigned
-*.ko.out
-*.ko.out.sig
-*.mod.c
-.*.cmd
-modules.order
-
-/.tmp_versions
-/Module.markers
-/Module.symvers
-
-!Makefile.in
diff --git a/module/Makefile.in b/module/Makefile.in
deleted file mode 100644 (file)
index d4e62e1..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-subdir-m += spl
-subdir-m += splat
-
-INSTALL_MOD_DIR ?= extra
-
-SPL_MODULE_CFLAGS  = -I@abs_top_srcdir@/include
-SPL_MODULE_CFLAGS += -include @abs_top_builddir@/spl_config.h
-export SPL_MODULE_CFLAGS
-
-modules:
-       $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ CONFIG_SPL=m $@
-
-clean:
-       @# Only cleanup the kernel build directories when CONFIG_KERNEL
-       @# is defined.  This indicates that kernel modules should be built.
-@CONFIG_KERNEL_TRUE@   $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ $@
-
-       if [ -f @LINUX_SYMBOLS@ ]; then $(RM) @LINUX_SYMBOLS@; fi
-       if [ -f Module.markers ]; then $(RM) Module.markers; fi
-
-modules_install:
-       @# Install the kernel modules
-       $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` $@ \
-               INSTALL_MOD_PATH=$(DESTDIR)$(INSTALL_MOD_PATH) \
-               INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) \
-               KERNELRELEASE=@LINUX_VERSION@
-       @# Remove extraneous build products when packaging
-       kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
-       if [ -n "$(DESTDIR)" ]; then \
-               find $$kmoddir -name 'modules.*' | xargs $(RM); \
-       fi
-       sysmap=$(DESTDIR)$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \
-       if [ -f $$sysmap ]; then \
-               depmod -ae -F $$sysmap @LINUX_VERSION@; \
-       fi
-
-modules_uninstall:
-       @# Uninstall the kernel modules
-       kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@
-       list='$(subdir-m)'; for subdir in $$list; do \
-               $(RM) -R $$kmoddir/$(INSTALL_MOD_DIR)/$$subdir; \
-       done
-
-distdir:
-       list='$(subdir-m)'; for subdir in $$list; do \
-               (find @top_srcdir@/module/$$subdir -name '*.c' -o -name '*.h' |\
-                xargs /bin/cp -t $$distdir/$$subdir); \
-       done
-
-distclean maintainer-clean: clean
-install: modules_install
-uninstall: modules_uninstall
-all: modules
-check:
diff --git a/module/spl/Makefile.in b/module/spl/Makefile.in
deleted file mode 100644 (file)
index a1f1ab8..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Makefile.in for spl kernel module
-
-src = @abs_top_srcdir@/module/spl
-obj = @abs_builddir@
-
-MODULE := spl
-EXTRA_CFLAGS = $(SPL_MODULE_CFLAGS) @KERNELCPPFLAGS@
-
-# Solaris porting layer module
-obj-$(CONFIG_SPL) := $(MODULE).o
-
-$(MODULE)-objs += spl-proc.o
-$(MODULE)-objs += spl-kmem.o
-$(MODULE)-objs += spl-kmem-cache.o
-$(MODULE)-objs += spl-vmem.o
-$(MODULE)-objs += spl-thread.o
-$(MODULE)-objs += spl-taskq.o
-$(MODULE)-objs += spl-rwlock.o
-$(MODULE)-objs += spl-vnode.o
-$(MODULE)-objs += spl-err.o
-$(MODULE)-objs += spl-kobj.o
-$(MODULE)-objs += spl-generic.o
-$(MODULE)-objs += spl-atomic.o
-$(MODULE)-objs += spl-mutex.o
-$(MODULE)-objs += spl-kstat.o
-$(MODULE)-objs += spl-condvar.o
-$(MODULE)-objs += spl-xdr.o
-$(MODULE)-objs += spl-cred.o
-$(MODULE)-objs += spl-tsd.o
-$(MODULE)-objs += spl-zlib.o
diff --git a/module/spl/THIRDPARTYLICENSE.gplv2 b/module/spl/THIRDPARTYLICENSE.gplv2
new file mode 100644 (file)
index 0000000..d159169
--- /dev/null
@@ -0,0 +1,339 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/module/spl/THIRDPARTYLICENSE.gplv2.descrip b/module/spl/THIRDPARTYLICENSE.gplv2.descrip
new file mode 100644 (file)
index 0000000..78535a8
--- /dev/null
@@ -0,0 +1 @@
+COMPATIBILITY LAYER FOR OPENZFS ON LINUX
index 2a89726911cd6d6c12b44f7146414525dcd150ac..b38fe254cf0340ef070fd5f0363017bc8d1ae63c 100644 (file)
@@ -43,9 +43,8 @@
 #include <linux/ctype.h>
 #include <sys/disp.h>
 #include <sys/random.h>
+#include <sys/strings.h>
 #include <linux/kmod.h>
-#include <linux/math64_compat.h>
-#include <linux/proc_compat.h>
 
 char spl_version[32] = "SPL v" SPL_META_VERSION "-" SPL_META_RELEASE;
 EXPORT_SYMBOL(spl_version);
@@ -260,6 +259,12 @@ __udivdi3(uint64_t u, uint64_t v)
 }
 EXPORT_SYMBOL(__udivdi3);
 
+/* BEGIN CSTYLED */
+#ifndef abs64
+#define        abs64(x)        ({ uint64_t t = (x) >> 63; ((x) ^ t) - t; })
+#endif
+/* END CSTYLED */
+
 /*
  * Implementation of 64-bit signed division for 32-bit machines.
  */
index c73a2fdc24784593221fd5855512b4ac0b807d90..5492c6a4600ca1ac2e63619f2e5ef51f143d390d 100644 (file)
 
 #include <sys/kmem.h>
 #include <sys/kmem_cache.h>
+#include <sys/shrinker.h>
 #include <sys/taskq.h>
 #include <sys/timer.h>
 #include <sys/vmem.h>
+#include <sys/wait.h>
 #include <linux/slab.h>
 #include <linux/swap.h>
-#include <linux/mm_compat.h>
-#include <linux/wait_compat.h>
 #include <linux/prefetch.h>
 
 /*
index 10e93f31812b15bec6454576fb33618063b2642d..bcbff94a6d56c6f12fb39ac68935c910735e20c3 100644 (file)
@@ -28,6 +28,7 @@
 #include <sys/kstat.h>
 #include <sys/vmem.h>
 #include <sys/cmn_err.h>
+#include <sys/sysmacros.h>
 
 #ifndef HAVE_PDE_DATA
 #define        PDE_DATA(x) (PDE(x)->data)
index 796f69e48dd899a7db0c558d1f09858ec33fa498..9c52924a48227165c5a2fa78979de59f23d03790 100644 (file)
 #include <sys/kmem_cache.h>
 #include <sys/vmem.h>
 #include <sys/taskq.h>
+#include <sys/proc.h>
 #include <linux/ctype.h>
 #include <linux/kmod.h>
 #include <linux/seq_file.h>
-#include <linux/proc_compat.h>
 #include <linux/uaccess.h>
 #include <linux/version.h>
 
index dd10607dcdfb181331b3f62c41a308fae25affed..e1a84a9117bf60616c6ac838e148a2671bad94e5 100644 (file)
@@ -25,7 +25,7 @@
 #include <sys/debug.h>
 #include <sys/vmem.h>
 #include <sys/kmem_cache.h>
-#include <linux/mm_compat.h>
+#include <sys/shrinker.h>
 #include <linux/module.h>
 
 vmem_t *heap_arena = NULL;
index a371fb9662325437ccb7ac7610951247c15a23dd..28ce21276e402b9a3ebabc9275293436a00ea88d 100644 (file)
 #include <sys/vnode.h>
 #include <sys/kmem_cache.h>
 #include <linux/falloc.h>
-#include <linux/file_compat.h>
+#include <linux/fs.h>
+#include <linux/uaccess.h>
+#ifdef HAVE_FDTABLE_HEADER
+#include <linux/fdtable.h>
+#endif
 
 vnode_t *rootdir = (vnode_t *)0xabcd1234;
 EXPORT_SYMBOL(rootdir);
@@ -39,6 +43,76 @@ static spl_kmem_cache_t *vn_file_cache;
 static DEFINE_SPINLOCK(vn_file_lock);
 static LIST_HEAD(vn_file_list);
 
+static int
+spl_filp_fallocate(struct file *fp, int mode, loff_t offset, loff_t len)
+{
+       int error = -EOPNOTSUPP;
+
+#ifdef HAVE_FILE_FALLOCATE
+       if (fp->f_op->fallocate)
+               error = fp->f_op->fallocate(fp, mode, offset, len);
+#else
+#ifdef HAVE_INODE_FALLOCATE
+       if (fp->f_dentry && fp->f_dentry->d_inode &&
+           fp->f_dentry->d_inode->i_op->fallocate)
+               error = fp->f_dentry->d_inode->i_op->fallocate(
+                   fp->f_dentry->d_inode, mode, offset, len);
+#endif /* HAVE_INODE_FALLOCATE */
+#endif /* HAVE_FILE_FALLOCATE */
+
+       return (error);
+}
+
+static int
+spl_filp_fsync(struct file *fp, int sync)
+{
+#ifdef HAVE_2ARGS_VFS_FSYNC
+       return (vfs_fsync(fp, sync));
+#else
+       return (vfs_fsync(fp, (fp)->f_dentry, sync));
+#endif /* HAVE_2ARGS_VFS_FSYNC */
+}
+
+static ssize_t
+spl_kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos)
+{
+#if defined(HAVE_KERNEL_WRITE_PPOS)
+       return (kernel_write(file, buf, count, pos));
+#else
+       mm_segment_t saved_fs;
+       ssize_t ret;
+
+       saved_fs = get_fs();
+       set_fs(get_ds());
+
+       ret = vfs_write(file, (__force const char __user *)buf, count, pos);
+
+       set_fs(saved_fs);
+
+       return (ret);
+#endif
+}
+
+static ssize_t
+spl_kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
+{
+#if defined(HAVE_KERNEL_READ_PPOS)
+       return (kernel_read(file, buf, count, pos));
+#else
+       mm_segment_t saved_fs;
+       ssize_t ret;
+
+       saved_fs = get_fs();
+       set_fs(get_ds());
+
+       ret = vfs_read(file, (void __user *)buf, count, pos);
+
+       set_fs(saved_fs);
+
+       return (ret);
+#endif
+}
+
 vtype_t
 vn_mode_to_vtype(mode_t mode)
 {
index 4055921b4973ad1cc216ff2529d9847fbaaffd94..2cc3e2a0360e93ddf2e9d78d78e2449bfa88d55c 100644 (file)
@@ -25,7 +25,7 @@
 #include <sys/kmem.h>
 #include <sys/debug.h>
 #include <sys/types.h>
-#include <rpc/types.h>
+#include <sys/sysmacros.h>
 #include <rpc/xdr.h>
 
 /*
 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)
index 177a626dfd002699d032432a6b487818c7c8f66a..229e6a44b0bc243bb194750e6a95092a6955eee0 100644 (file)
@@ -57,7 +57,6 @@
 #include <sys/kmem.h>
 #include <sys/kmem_cache.h>
 #include <sys/zmod.h>
-#include <linux/zlib_compat.h>
 
 static spl_kmem_cache_t *zlib_workspace_cache;
 
diff --git a/module/splat/Makefile.in b/module/splat/Makefile.in
deleted file mode 100644 (file)
index 680f284..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Makefile.in for splat kernel module
-
-src = @abs_top_srcdir@/module/splat
-obj = @abs_builddir@
-
-MODULE := splat
-EXTRA_CFLAGS = $(SPL_MODULE_CFLAGS) @KERNELCPPFLAGS@
-
-# Solaris Porting LAyer Tests
-obj-$(CONFIG_SPL) := $(MODULE).o
-
-$(MODULE)-objs += splat-ctl.o
-$(MODULE)-objs += splat-kmem.o
-$(MODULE)-objs += splat-taskq.o
-$(MODULE)-objs += splat-random.o
-$(MODULE)-objs += splat-mutex.o
-$(MODULE)-objs += splat-condvar.o
-$(MODULE)-objs += splat-thread.o
-$(MODULE)-objs += splat-rwlock.o
-$(MODULE)-objs += splat-time.o
-$(MODULE)-objs += splat-vnode.o
-$(MODULE)-objs += splat-kobj.o
-$(MODULE)-objs += splat-atomic.o
-$(MODULE)-objs += splat-list.o
-$(MODULE)-objs += splat-generic.o
-$(MODULE)-objs += splat-cred.o
-$(MODULE)-objs += splat-zlib.o
-$(MODULE)-objs += splat-linux.o
diff --git a/module/splat/splat-atomic.c b/module/splat/splat-atomic.c
deleted file mode 100644 (file)
index 8aaa083..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Atomic Tests.
- */
-
-#include <sys/atomic.h>
-#include <sys/thread.h>
-#include <sys/mutex.h>
-#include <linux/mm_compat.h>
-#include <linux/wait_compat.h>
-#include <linux/slab.h>
-#include "splat-internal.h"
-
-#define SPLAT_ATOMIC_NAME              "atomic"
-#define SPLAT_ATOMIC_DESC              "Kernel Atomic Tests"
-
-#define SPLAT_ATOMIC_TEST1_ID          0x0b01
-#define SPLAT_ATOMIC_TEST1_NAME                "64-bit"
-#define SPLAT_ATOMIC_TEST1_DESC                "Validate 64-bit atomic ops"
-
-#define SPLAT_ATOMIC_TEST_MAGIC                0x43435454UL
-#define SPLAT_ATOMIC_INIT_VALUE                10000000UL
-
-typedef enum {
-       SPLAT_ATOMIC_INC_64    = 0,
-       SPLAT_ATOMIC_DEC_64    = 1,
-       SPLAT_ATOMIC_ADD_64    = 2,
-       SPLAT_ATOMIC_SUB_64    = 3,
-       SPLAT_ATOMIC_ADD_64_NV = 4,
-       SPLAT_ATOMIC_SUB_64_NV = 5,
-       SPLAT_ATOMIC_COUNT_64  = 6
-} atomic_op_t;
-
-typedef struct atomic_priv {
-        unsigned long ap_magic;
-        struct file *ap_file;
-       kmutex_t ap_lock;
-        spl_wait_queue_head_t ap_waitq;
-       volatile uint64_t ap_atomic;
-       volatile uint64_t ap_atomic_exited;
-       atomic_op_t ap_op;
-
-} atomic_priv_t;
-
-static void
-splat_atomic_work(void *priv)
-{
-       atomic_priv_t *ap;
-       atomic_op_t op;
-       int i;
-
-       ap = (atomic_priv_t *)priv;
-       ASSERT(ap->ap_magic == SPLAT_ATOMIC_TEST_MAGIC);
-
-       mutex_enter(&ap->ap_lock);
-       op = ap->ap_op;
-       wake_up(&ap->ap_waitq);
-       mutex_exit(&ap->ap_lock);
-
-        splat_vprint(ap->ap_file, SPLAT_ATOMIC_TEST1_NAME,
-                    "Thread %d successfully started: %lu/%lu\n", op,
-                    (long unsigned)ap->ap_atomic,
-                    (long unsigned)ap->ap_atomic_exited);
-
-       for (i = 0; i < SPLAT_ATOMIC_INIT_VALUE / 10; i++) {
-
-               /* Periodically sleep to mix up the ordering */
-               if ((i % (SPLAT_ATOMIC_INIT_VALUE / 100)) == 0) {
-                       splat_vprint(ap->ap_file, SPLAT_ATOMIC_TEST1_NAME,
-                            "Thread %d sleeping: %lu/%lu\n", op,
-                            (long unsigned)ap->ap_atomic,
-                            (long unsigned)ap->ap_atomic_exited);
-                       set_current_state(TASK_INTERRUPTIBLE);
-                       schedule_timeout(HZ / 100);
-               }
-
-               switch (op) {
-                       case SPLAT_ATOMIC_INC_64:
-                               atomic_inc_64(&ap->ap_atomic);
-                               break;
-                       case SPLAT_ATOMIC_DEC_64:
-                               atomic_dec_64(&ap->ap_atomic);
-                               break;
-                       case SPLAT_ATOMIC_ADD_64:
-                               atomic_add_64(&ap->ap_atomic, 3);
-                               break;
-                       case SPLAT_ATOMIC_SUB_64:
-                               atomic_sub_64(&ap->ap_atomic, 3);
-                               break;
-                       case SPLAT_ATOMIC_ADD_64_NV:
-                               atomic_add_64_nv(&ap->ap_atomic, 5);
-                               break;
-                       case SPLAT_ATOMIC_SUB_64_NV:
-                               atomic_sub_64_nv(&ap->ap_atomic, 5);
-                               break;
-                       default:
-                               PANIC("Undefined op %d\n", op);
-               }
-       }
-
-       atomic_inc_64(&ap->ap_atomic_exited);
-
-        splat_vprint(ap->ap_file, SPLAT_ATOMIC_TEST1_NAME,
-                    "Thread %d successfully exited: %lu/%lu\n", op,
-                    (long unsigned)ap->ap_atomic,
-                    (long unsigned)ap->ap_atomic_exited);
-
-       wake_up(&ap->ap_waitq);
-       thread_exit();
-}
-
-static int
-splat_atomic_test1_cond(atomic_priv_t *ap, int started)
-{
-       return (ap->ap_atomic_exited == started);
-}
-
-static int
-splat_atomic_test1(struct file *file, void *arg)
-{
-       atomic_priv_t ap;
-        DEFINE_WAIT(wait);
-       kthread_t *thr;
-       int i, rc = 0;
-
-       ap.ap_magic = SPLAT_ATOMIC_TEST_MAGIC;
-       ap.ap_file = file;
-       mutex_init(&ap.ap_lock, SPLAT_ATOMIC_TEST1_NAME, MUTEX_DEFAULT, NULL);
-       init_waitqueue_head(&ap.ap_waitq);
-       ap.ap_atomic = SPLAT_ATOMIC_INIT_VALUE;
-       ap.ap_atomic_exited = 0;
-
-       for (i = 0; i < SPLAT_ATOMIC_COUNT_64; i++) {
-               mutex_enter(&ap.ap_lock);
-               ap.ap_op = i;
-
-               thr = (kthread_t *)thread_create(NULL, 0, splat_atomic_work,
-                                                &ap, 0, &p0, TS_RUN,
-                                                defclsyspri);
-               if (thr == NULL) {
-                       rc = -ESRCH;
-                       mutex_exit(&ap.ap_lock);
-                       break;
-               }
-
-               /* Prepare to wait, the new thread will wake us once it
-                * has made a copy of the unique private passed data */
-                prepare_to_wait(&ap.ap_waitq, &wait, TASK_UNINTERRUPTIBLE);
-               mutex_exit(&ap.ap_lock);
-               schedule();
-       }
-
-       wait_event(ap.ap_waitq, splat_atomic_test1_cond(&ap, i));
-
-       if (rc) {
-               splat_vprint(file, SPLAT_ATOMIC_TEST1_NAME, "Only started "
-                            "%d/%d test threads\n", i, SPLAT_ATOMIC_COUNT_64);
-               return rc;
-       }
-
-       if (ap.ap_atomic != SPLAT_ATOMIC_INIT_VALUE) {
-               splat_vprint(file, SPLAT_ATOMIC_TEST1_NAME,
-                            "Final value %lu does not match initial value %lu\n",
-                            (long unsigned)ap.ap_atomic, SPLAT_ATOMIC_INIT_VALUE);
-               return -EINVAL;
-       }
-
-        splat_vprint(file, SPLAT_ATOMIC_TEST1_NAME,
-                  "Success initial and final values match, %lu == %lu\n",
-                  (long unsigned)ap.ap_atomic, SPLAT_ATOMIC_INIT_VALUE);
-
-       mutex_destroy(&ap.ap_lock);
-
-       return 0;
-}
-
-splat_subsystem_t *
-splat_atomic_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_ATOMIC_NAME, SPLAT_NAME_SIZE);
-        strncpy(sub->desc.desc, SPLAT_ATOMIC_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-        INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_ATOMIC;
-
-        splat_test_init(sub, SPLAT_ATOMIC_TEST1_NAME, SPLAT_ATOMIC_TEST1_DESC,
-                      SPLAT_ATOMIC_TEST1_ID, splat_atomic_test1);
-
-        return sub;
-}
-
-void
-splat_atomic_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-        splat_test_fini(sub, SPLAT_ATOMIC_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_atomic_id(void) {
-        return SPLAT_SUBSYSTEM_ATOMIC;
-}
diff --git a/module/splat/splat-condvar.c b/module/splat/splat-condvar.c
deleted file mode 100644 (file)
index 0804baf..0000000
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Condition Variable Tests.
- */
-
-#include <sys/condvar.h>
-#include <sys/timer.h>
-#include <sys/thread.h>
-#include "splat-internal.h"
-
-#define SPLAT_CONDVAR_NAME             "condvar"
-#define SPLAT_CONDVAR_DESC             "Kernel Condition Variable Tests"
-
-#define SPLAT_CONDVAR_TEST1_ID         0x0501
-#define SPLAT_CONDVAR_TEST1_NAME       "signal1"
-#define SPLAT_CONDVAR_TEST1_DESC       "Wake a single thread, cv_wait()/cv_signal()"
-
-#define SPLAT_CONDVAR_TEST2_ID         0x0502
-#define SPLAT_CONDVAR_TEST2_NAME       "broadcast1"
-#define SPLAT_CONDVAR_TEST2_DESC       "Wake all threads, cv_wait()/cv_broadcast()"
-
-#define SPLAT_CONDVAR_TEST3_ID         0x0503
-#define SPLAT_CONDVAR_TEST3_NAME       "signal2"
-#define SPLAT_CONDVAR_TEST3_DESC       "Wake a single thread, cv_wait_timeout()/cv_signal()"
-
-#define SPLAT_CONDVAR_TEST4_ID         0x0504
-#define SPLAT_CONDVAR_TEST4_NAME       "broadcast2"
-#define SPLAT_CONDVAR_TEST4_DESC       "Wake all threads, cv_wait_timeout()/cv_broadcast()"
-
-#define SPLAT_CONDVAR_TEST5_ID         0x0505
-#define SPLAT_CONDVAR_TEST5_NAME       "timeout"
-#define SPLAT_CONDVAR_TEST5_DESC       "Timeout thread, cv_wait_timeout()"
-
-#define SPLAT_CONDVAR_TEST_MAGIC       0x115599DDUL
-#define SPLAT_CONDVAR_TEST_NAME                "condvar"
-#define SPLAT_CONDVAR_TEST_COUNT       8
-
-typedef struct condvar_priv {
-       unsigned long cv_magic;
-       struct file *cv_file;
-       kcondvar_t cv_condvar;
-       kmutex_t cv_mtx;
-} condvar_priv_t;
-
-typedef struct condvar_thr {
-       const char *ct_name;
-       condvar_priv_t *ct_cvp;
-       struct task_struct *ct_thread;
-       int ct_rc;
-} condvar_thr_t;
-
-int
-splat_condvar_test12_thread(void *arg)
-{
-       condvar_thr_t *ct = (condvar_thr_t *)arg;
-       condvar_priv_t *cv = ct->ct_cvp;
-
-       ASSERT(cv->cv_magic == SPLAT_CONDVAR_TEST_MAGIC);
-
-       mutex_enter(&cv->cv_mtx);
-       splat_vprint(cv->cv_file, ct->ct_name,
-           "%s thread sleeping with %d waiters\n",
-           ct->ct_thread->comm, atomic_read(&cv->cv_condvar.cv_waiters));
-       cv_wait(&cv->cv_condvar, &cv->cv_mtx);
-       splat_vprint(cv->cv_file, ct->ct_name,
-           "%s thread woken %d waiters remain\n",
-           ct->ct_thread->comm, atomic_read(&cv->cv_condvar.cv_waiters));
-       mutex_exit(&cv->cv_mtx);
-
-       /* wait for main thread reap us */
-       while (!kthread_should_stop())
-               schedule();
-       return 0;
-}
-
-static int
-splat_condvar_test1(struct file *file, void *arg)
-{
-       int i, count = 0, rc = 0;
-       condvar_thr_t ct[SPLAT_CONDVAR_TEST_COUNT];
-       condvar_priv_t cv;
-
-       cv.cv_magic = SPLAT_CONDVAR_TEST_MAGIC;
-       cv.cv_file = file;
-       mutex_init(&cv.cv_mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL);
-       cv_init(&cv.cv_condvar, NULL, CV_DEFAULT, NULL);
-
-       /* Create some threads, the exact number isn't important just as
-        * long as we know how many we managed to create and should expect. */
-       for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
-               ct[i].ct_cvp = &cv;
-               ct[i].ct_name = SPLAT_CONDVAR_TEST1_NAME;
-               ct[i].ct_rc = 0;
-               ct[i].ct_thread = spl_kthread_create(splat_condvar_test12_thread,
-                   &ct[i], "%s/%d", SPLAT_CONDVAR_TEST_NAME, i);
-
-               if (!IS_ERR(ct[i].ct_thread)) {
-                       wake_up_process(ct[i].ct_thread);
-                       count++;
-               }
-       }
-
-       /* Wait until all threads are waiting on the condition variable */
-       while (atomic_read(&cv.cv_condvar.cv_waiters) != count)
-               schedule();
-
-       /* Wake a single thread at a time, wait until it exits */
-       for (i = 1; i <= count; i++) {
-               cv_signal(&cv.cv_condvar);
-
-               while (atomic_read(&cv.cv_condvar.cv_waiters) > (count - i))
-                       schedule();
-
-               /* Correct behavior 1 thread woken */
-               if (atomic_read(&cv.cv_condvar.cv_waiters) == (count - i))
-                       continue;
-
-                splat_vprint(file, SPLAT_CONDVAR_TEST1_NAME, "Attempted to "
-                          "wake %d thread but work %d threads woke\n",
-                          1, count - atomic_read(&cv.cv_condvar.cv_waiters));
-               rc = -EINVAL;
-               break;
-       }
-
-       if (!rc)
-                splat_vprint(file, SPLAT_CONDVAR_TEST1_NAME, "Correctly woke "
-                          "%d sleeping threads %d at a time\n", count, 1);
-
-       /* Wait until that last nutex is dropped */
-       while (mutex_owner(&cv.cv_mtx))
-               schedule();
-
-       /* Wake everything for the failure case */
-       cv_broadcast(&cv.cv_condvar);
-       cv_destroy(&cv.cv_condvar);
-
-       /* wait for threads to exit */
-       for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
-               if (!IS_ERR(ct[i].ct_thread))
-                       kthread_stop(ct[i].ct_thread);
-       }
-       mutex_destroy(&cv.cv_mtx);
-
-       return rc;
-}
-
-static int
-splat_condvar_test2(struct file *file, void *arg)
-{
-       int i, count = 0, rc = 0;
-       condvar_thr_t ct[SPLAT_CONDVAR_TEST_COUNT];
-       condvar_priv_t cv;
-
-       cv.cv_magic = SPLAT_CONDVAR_TEST_MAGIC;
-       cv.cv_file = file;
-       mutex_init(&cv.cv_mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL);
-       cv_init(&cv.cv_condvar, NULL, CV_DEFAULT, NULL);
-
-       /* Create some threads, the exact number isn't important just as
-        * long as we know how many we managed to create and should expect. */
-       for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
-               ct[i].ct_cvp = &cv;
-               ct[i].ct_name = SPLAT_CONDVAR_TEST2_NAME;
-               ct[i].ct_rc = 0;
-               ct[i].ct_thread = spl_kthread_create(splat_condvar_test12_thread,
-                   &ct[i], "%s/%d", SPLAT_CONDVAR_TEST_NAME, i);
-
-               if (!IS_ERR(ct[i].ct_thread)) {
-                       wake_up_process(ct[i].ct_thread);
-                       count++;
-               }
-       }
-
-       /* Wait until all threads are waiting on the condition variable */
-       while (atomic_read(&cv.cv_condvar.cv_waiters) != count)
-               schedule();
-
-       /* Wake all threads waiting on the condition variable */
-       cv_broadcast(&cv.cv_condvar);
-
-       /* Wait until all threads have exited */
-       while ((atomic_read(&cv.cv_condvar.cv_waiters) > 0) || mutex_owner(&cv.cv_mtx))
-               schedule();
-
-        splat_vprint(file, SPLAT_CONDVAR_TEST2_NAME, "Correctly woke all "
-                          "%d sleeping threads at once\n", count);
-
-       /* Wake everything for the failure case */
-       cv_destroy(&cv.cv_condvar);
-
-       /* wait for threads to exit */
-       for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
-               if (!IS_ERR(ct[i].ct_thread))
-                       kthread_stop(ct[i].ct_thread);
-       }
-       mutex_destroy(&cv.cv_mtx);
-
-       return rc;
-}
-
-int
-splat_condvar_test34_thread(void *arg)
-{
-       condvar_thr_t *ct = (condvar_thr_t *)arg;
-       condvar_priv_t *cv = ct->ct_cvp;
-       clock_t rc;
-
-       ASSERT(cv->cv_magic == SPLAT_CONDVAR_TEST_MAGIC);
-
-       mutex_enter(&cv->cv_mtx);
-       splat_vprint(cv->cv_file, ct->ct_name,
-           "%s thread sleeping with %d waiters\n",
-           ct->ct_thread->comm, atomic_read(&cv->cv_condvar.cv_waiters));
-
-       /* Sleep no longer than 3 seconds, for this test we should
-        * actually never sleep that long without being woken up. */
-       rc = cv_timedwait(&cv->cv_condvar, &cv->cv_mtx, lbolt + HZ * 3);
-       if (rc == -1) {
-               ct->ct_rc = -ETIMEDOUT;
-               splat_vprint(cv->cv_file, ct->ct_name, "%s thread timed out, "
-                   "should have been woken\n", ct->ct_thread->comm);
-       } else {
-               splat_vprint(cv->cv_file, ct->ct_name,
-                   "%s thread woken %d waiters remain\n",
-                   ct->ct_thread->comm,
-                   atomic_read(&cv->cv_condvar.cv_waiters));
-       }
-
-       mutex_exit(&cv->cv_mtx);
-
-       /* wait for main thread reap us */
-       while (!kthread_should_stop())
-               schedule();
-       return 0;
-}
-
-static int
-splat_condvar_test3(struct file *file, void *arg)
-{
-       int i, count = 0, rc = 0;
-       condvar_thr_t ct[SPLAT_CONDVAR_TEST_COUNT];
-       condvar_priv_t cv;
-
-       cv.cv_magic = SPLAT_CONDVAR_TEST_MAGIC;
-       cv.cv_file = file;
-       mutex_init(&cv.cv_mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL);
-       cv_init(&cv.cv_condvar, NULL, CV_DEFAULT, NULL);
-
-       /* Create some threads, the exact number isn't important just as
-        * long as we know how many we managed to create and should expect. */
-       for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
-               ct[i].ct_cvp = &cv;
-               ct[i].ct_name = SPLAT_CONDVAR_TEST3_NAME;
-               ct[i].ct_rc = 0;
-               ct[i].ct_thread = spl_kthread_create(splat_condvar_test34_thread,
-                   &ct[i], "%s/%d", SPLAT_CONDVAR_TEST_NAME, i);
-
-               if (!IS_ERR(ct[i].ct_thread)) {
-                       wake_up_process(ct[i].ct_thread);
-                       count++;
-               }
-       }
-
-       /* Wait until all threads are waiting on the condition variable */
-       while (atomic_read(&cv.cv_condvar.cv_waiters) != count)
-               schedule();
-
-       /* Wake a single thread at a time, wait until it exits */
-       for (i = 1; i <= count; i++) {
-               cv_signal(&cv.cv_condvar);
-
-               while (atomic_read(&cv.cv_condvar.cv_waiters) > (count - i))
-                       schedule();
-
-               /* Correct behavior 1 thread woken */
-               if (atomic_read(&cv.cv_condvar.cv_waiters) == (count - i))
-                       continue;
-
-                splat_vprint(file, SPLAT_CONDVAR_TEST3_NAME, "Attempted to "
-                          "wake %d thread but work %d threads woke\n",
-                          1, count - atomic_read(&cv.cv_condvar.cv_waiters));
-               rc = -EINVAL;
-               break;
-       }
-
-       /* Validate no waiting thread timed out early */
-       for (i = 0; i < count; i++)
-               if (ct[i].ct_rc)
-                       rc = ct[i].ct_rc;
-
-       if (!rc)
-                splat_vprint(file, SPLAT_CONDVAR_TEST3_NAME, "Correctly woke "
-                          "%d sleeping threads %d at a time\n", count, 1);
-
-       /* Wait until that last nutex is dropped */
-       while (mutex_owner(&cv.cv_mtx))
-               schedule();
-
-       /* Wake everything for the failure case */
-       cv_broadcast(&cv.cv_condvar);
-       cv_destroy(&cv.cv_condvar);
-
-       /* wait for threads to exit */
-       for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
-               if (!IS_ERR(ct[i].ct_thread))
-                       kthread_stop(ct[i].ct_thread);
-       }
-       mutex_destroy(&cv.cv_mtx);
-
-       return rc;
-}
-
-static int
-splat_condvar_test4(struct file *file, void *arg)
-{
-       int i, count = 0, rc = 0;
-       condvar_thr_t ct[SPLAT_CONDVAR_TEST_COUNT];
-       condvar_priv_t cv;
-
-       cv.cv_magic = SPLAT_CONDVAR_TEST_MAGIC;
-       cv.cv_file = file;
-       mutex_init(&cv.cv_mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL);
-       cv_init(&cv.cv_condvar, NULL, CV_DEFAULT, NULL);
-
-       /* Create some threads, the exact number isn't important just as
-        * long as we know how many we managed to create and should expect. */
-       for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
-               ct[i].ct_cvp = &cv;
-               ct[i].ct_name = SPLAT_CONDVAR_TEST3_NAME;
-               ct[i].ct_rc = 0;
-               ct[i].ct_thread = spl_kthread_create(splat_condvar_test34_thread,
-                   &ct[i], "%s/%d", SPLAT_CONDVAR_TEST_NAME, i);
-
-               if (!IS_ERR(ct[i].ct_thread)) {
-                       wake_up_process(ct[i].ct_thread);
-                       count++;
-               }
-       }
-
-       /* Wait until all threads are waiting on the condition variable */
-       while (atomic_read(&cv.cv_condvar.cv_waiters) != count)
-               schedule();
-
-       /* Wake a single thread at a time, wait until it exits */
-       for (i = 1; i <= count; i++) {
-               cv_signal(&cv.cv_condvar);
-
-               while (atomic_read(&cv.cv_condvar.cv_waiters) > (count - i))
-                       schedule();
-
-               /* Correct behavior 1 thread woken */
-               if (atomic_read(&cv.cv_condvar.cv_waiters) == (count - i))
-                       continue;
-
-                splat_vprint(file, SPLAT_CONDVAR_TEST3_NAME, "Attempted to "
-                          "wake %d thread but work %d threads woke\n",
-                          1, count - atomic_read(&cv.cv_condvar.cv_waiters));
-               rc = -EINVAL;
-               break;
-       }
-
-       /* Validate no waiting thread timed out early */
-       for (i = 0; i < count; i++)
-               if (ct[i].ct_rc)
-                       rc = ct[i].ct_rc;
-
-       if (!rc)
-                splat_vprint(file, SPLAT_CONDVAR_TEST3_NAME, "Correctly woke "
-                          "%d sleeping threads %d at a time\n", count, 1);
-
-       /* Wait until that last nutex is dropped */
-       while (mutex_owner(&cv.cv_mtx))
-               schedule();
-
-       /* Wake everything for the failure case */
-       cv_broadcast(&cv.cv_condvar);
-       cv_destroy(&cv.cv_condvar);
-
-       /* wait for threads to exit */
-       for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
-               if (!IS_ERR(ct[i].ct_thread))
-                       kthread_stop(ct[i].ct_thread);
-       }
-       mutex_destroy(&cv.cv_mtx);
-
-       return rc;
-}
-
-static int
-splat_condvar_test5(struct file *file, void *arg)
-{
-        kcondvar_t condvar;
-        kmutex_t mtx;
-       clock_t time_left, time_before, time_after, time_delta;
-       uint64_t whole_delta;
-       uint32_t remain_delta;
-       int rc = 0;
-
-       mutex_init(&mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL);
-       cv_init(&condvar, NULL, CV_DEFAULT, NULL);
-
-        splat_vprint(file, SPLAT_CONDVAR_TEST5_NAME, "Thread going to sleep for "
-                  "%d second and expecting to be woken by timeout\n", 1);
-
-       /* Allow a 1 second timeout, plenty long to validate correctness. */
-       time_before = lbolt;
-       mutex_enter(&mtx);
-       time_left = cv_timedwait(&condvar, &mtx, lbolt + HZ);
-       mutex_exit(&mtx);
-       time_after = lbolt;
-       time_delta = time_after - time_before; /* XXX - Handle jiffie wrap */
-       whole_delta  = time_delta;
-       remain_delta = do_div(whole_delta, HZ);
-
-       if (time_left == -1) {
-               if (time_delta >= HZ) {
-                       splat_vprint(file, SPLAT_CONDVAR_TEST5_NAME,
-                                  "Thread correctly timed out and was asleep "
-                                  "for %d.%d seconds (%d second min)\n",
-                                  (int)whole_delta, (int)remain_delta, 1);
-               } else {
-                       splat_vprint(file, SPLAT_CONDVAR_TEST5_NAME,
-                                  "Thread correctly timed out but was only "
-                                  "asleep for %d.%d seconds (%d second "
-                                  "min)\n", (int)whole_delta,
-                                  (int)remain_delta, 1);
-                       rc = -ETIMEDOUT;
-               }
-       } else {
-               splat_vprint(file, SPLAT_CONDVAR_TEST5_NAME,
-                          "Thread exited after only %d.%d seconds, it "
-                          "did not hit the %d second timeout\n",
-                          (int)whole_delta, (int)remain_delta, 1);
-               rc = -ETIMEDOUT;
-       }
-
-       cv_destroy(&condvar);
-       mutex_destroy(&mtx);
-
-       return rc;
-}
-
-splat_subsystem_t *
-splat_condvar_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_CONDVAR_NAME, SPLAT_NAME_SIZE);
-        strncpy(sub->desc.desc, SPLAT_CONDVAR_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-        INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_CONDVAR;
-
-        splat_test_init(sub, SPLAT_CONDVAR_TEST1_NAME, SPLAT_CONDVAR_TEST1_DESC,
-                      SPLAT_CONDVAR_TEST1_ID, splat_condvar_test1);
-        splat_test_init(sub, SPLAT_CONDVAR_TEST2_NAME, SPLAT_CONDVAR_TEST2_DESC,
-                      SPLAT_CONDVAR_TEST2_ID, splat_condvar_test2);
-        splat_test_init(sub, SPLAT_CONDVAR_TEST3_NAME, SPLAT_CONDVAR_TEST3_DESC,
-                      SPLAT_CONDVAR_TEST3_ID, splat_condvar_test3);
-        splat_test_init(sub, SPLAT_CONDVAR_TEST4_NAME, SPLAT_CONDVAR_TEST4_DESC,
-                      SPLAT_CONDVAR_TEST4_ID, splat_condvar_test4);
-        splat_test_init(sub, SPLAT_CONDVAR_TEST5_NAME, SPLAT_CONDVAR_TEST5_DESC,
-                      SPLAT_CONDVAR_TEST5_ID, splat_condvar_test5);
-
-        return sub;
-}
-
-void
-splat_condvar_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-        splat_test_fini(sub, SPLAT_CONDVAR_TEST5_ID);
-        splat_test_fini(sub, SPLAT_CONDVAR_TEST4_ID);
-        splat_test_fini(sub, SPLAT_CONDVAR_TEST3_ID);
-        splat_test_fini(sub, SPLAT_CONDVAR_TEST2_ID);
-        splat_test_fini(sub, SPLAT_CONDVAR_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_condvar_id(void) {
-        return SPLAT_SUBSYSTEM_CONDVAR;
-}
diff --git a/module/splat/splat-cred.c b/module/splat/splat-cred.c
deleted file mode 100644 (file)
index f13c0f7..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Credential Tests.
- */
-
-#include <sys/cred.h>
-#include <sys/random.h>
-#include "splat-internal.h"
-
-#define SPLAT_CRED_NAME                        "cred"
-#define SPLAT_CRED_DESC                        "Kernel Cred Tests"
-
-#define SPLAT_CRED_TEST1_ID            0x0e01
-#define SPLAT_CRED_TEST1_NAME          "cred"
-#define SPLAT_CRED_TEST1_DESC          "Task Credential Test"
-
-#define SPLAT_CRED_TEST2_ID            0x0e02
-#define SPLAT_CRED_TEST2_NAME          "kcred"
-#define SPLAT_CRED_TEST2_DESC          "Kernel Credential Test"
-
-#define SPLAT_CRED_TEST3_ID            0x0e03
-#define SPLAT_CRED_TEST3_NAME          "groupmember"
-#define SPLAT_CRED_TEST3_DESC          "Group Member Test"
-
-#define GROUP_STR_SIZE                 128
-#define GROUP_STR_REDZONE              16
-
-static int
-splat_cred_test1(struct file *file, void *arg)
-{
-       char str[GROUP_STR_SIZE];
-       uid_t uid, ruid, suid;
-       gid_t gid, rgid, sgid, *groups;
-       int ngroups, i, count = 0;
-       cred_t *cr = CRED();
-
-       uid  = crgetuid(cr);
-       ruid = crgetruid(cr);
-       suid = crgetsuid(cr);
-
-       gid  = crgetgid(cr);
-       rgid = crgetrgid(cr);
-       sgid = crgetsgid(cr);
-
-       ngroups = crgetngroups(cr);
-       groups = crgetgroups(cr);
-
-       memset(str, 0, GROUP_STR_SIZE);
-       for (i = 0; i < ngroups; i++) {
-               count += sprintf(str + count, "%d ", groups[i]);
-
-               if (count > (GROUP_STR_SIZE - GROUP_STR_REDZONE)) {
-                       splat_vprint(file, SPLAT_CRED_TEST1_NAME,
-                                    "Failed too many group entries for temp "
-                                    "buffer: %d, %s\n", ngroups, str);
-                       return -ENOSPC;
-               }
-       }
-
-       splat_vprint(file, SPLAT_CRED_TEST1_NAME,
-                    "uid: %d ruid: %d suid: %d "
-                    "gid: %d rgid: %d sgid: %d\n",
-                    uid, ruid, suid, gid, rgid, sgid);
-       splat_vprint(file, SPLAT_CRED_TEST1_NAME,
-                    "ngroups: %d groups: %s\n", ngroups, str);
-
-       if (uid || ruid || suid || gid || rgid || sgid) {
-               splat_vprint(file, SPLAT_CRED_TEST1_NAME,
-                            "Failed expected all uids+gids to be %d\n", 0);
-               return -EIDRM;
-       }
-
-       if (ngroups > NGROUPS_MAX) {
-               splat_vprint(file, SPLAT_CRED_TEST1_NAME,
-                            "Failed ngroups must not exceed NGROUPS_MAX: "
-                            "%d > %d\n", ngroups, NGROUPS_MAX);
-               return -EIDRM;
-       }
-
-       splat_vprint(file, SPLAT_CRED_TEST1_NAME,
-                    "Success sane CRED(): %d\n", 0);
-
-        return 0;
-} /* splat_cred_test1() */
-
-static int
-splat_cred_test2(struct file *file, void *arg)
-{
-       char str[GROUP_STR_SIZE];
-       uid_t uid, ruid, suid;
-       gid_t gid, rgid, sgid, *groups;
-       int ngroups, i, count = 0;
-
-       crhold(kcred);
-
-       uid  = crgetuid(kcred);
-       ruid = crgetruid(kcred);
-       suid = crgetsuid(kcred);
-
-       gid  = crgetgid(kcred);
-       rgid = crgetrgid(kcred);
-       sgid = crgetsgid(kcred);
-
-       ngroups = crgetngroups(kcred);
-       groups  = crgetgroups(kcred);
-
-       memset(str, 0, GROUP_STR_SIZE);
-       for (i = 0; i < ngroups; i++) {
-               count += sprintf(str + count, "%d ", groups[i]);
-
-               if (count > (GROUP_STR_SIZE - GROUP_STR_REDZONE)) {
-                       splat_vprint(file, SPLAT_CRED_TEST2_NAME,
-                                    "Failed too many group entries for temp "
-                                    "buffer: %d, %s\n", ngroups, str);
-                       crfree(kcred);
-                       return -ENOSPC;
-               }
-       }
-
-       crfree(kcred);
-
-       splat_vprint(file, SPLAT_CRED_TEST2_NAME,
-                    "uid: %d ruid: %d suid: %d "
-                    "gid: %d rgid: %d sgid: %d\n",
-                    uid, ruid, suid, gid, rgid, sgid);
-       splat_vprint(file, SPLAT_CRED_TEST2_NAME,
-                    "ngroups: %d groups: %s\n", ngroups, str);
-
-       if (uid || ruid || suid || gid || rgid || sgid) {
-               splat_vprint(file, SPLAT_CRED_TEST2_NAME,
-                            "Failed expected all uids+gids to be %d\n", 0);
-               return -EIDRM;
-       }
-
-       if (ngroups > NGROUPS_MAX) {
-               splat_vprint(file, SPLAT_CRED_TEST2_NAME,
-                            "Failed ngroups must not exceed NGROUPS_MAX: "
-                            "%d > %d\n", ngroups, NGROUPS_MAX);
-               return -EIDRM;
-       }
-
-       splat_vprint(file, SPLAT_CRED_TEST2_NAME,
-                    "Success sane kcred: %d\n", 0);
-
-        return 0;
-} /* splat_cred_test2() */
-
-#define        SPLAT_NGROUPS   32
-/*
- * Verify the groupmember() works correctly by constructing an interesting
- * CRED() and checking that the expected gids are part of it.
- */
-static int
-splat_cred_test3(struct file *file, void *arg)
-{
-       gid_t known_gid, missing_gid, tmp_gid;
-       unsigned char rnd;
-       struct group_info *gi;
-       int i, rc;
-
-       get_random_bytes((void *)&rnd, 1);
-       known_gid = (rnd > 0) ? rnd : 1;
-       missing_gid = 0;
-
-       /*
-        * Create an interesting known set of gids for test purposes. The
-        * gids are pseudo randomly selected are will be in the range of
-        * 1:(NGROUPS_MAX-1).  Gid 0 is explicitly avoided so we can reliably
-        * test for its absence in the test cases.
-        */
-       gi = groups_alloc(SPLAT_NGROUPS);
-       if (gi == NULL) {
-               splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Failed create "
-                   "group_info for known gids: %d\n", -ENOMEM);
-               rc = -ENOMEM;
-               goto show_groups;
-       }
-
-       for (i = 0, tmp_gid = known_gid; i < SPLAT_NGROUPS; i++) {
-               splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Adding gid %d "
-                   "to current CRED() (%d/%d)\n", tmp_gid, i, gi->ngroups);
-#ifdef HAVE_KUIDGID_T
-               GROUP_AT(gi, i) = make_kgid(current_user_ns(), tmp_gid);
-#else
-               GROUP_AT(gi, i) = tmp_gid;
-#endif /* HAVE_KUIDGID_T */
-               tmp_gid = ((tmp_gid * 17) % (NGROUPS_MAX - 1)) + 1;
-       }
-
-       /* Set the new groups in the CRED() and release our reference. */
-       rc = set_current_groups(gi);
-       put_group_info(gi);
-
-       if (rc) {
-               splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Failed to add "
-                   "gid %d to current group: %d\n", known_gid, rc);
-               goto show_groups;
-       }
-
-       /* Verify groupmember() finds the known_gid in the CRED() */
-       rc = groupmember(known_gid, CRED());
-       if (!rc) {
-               splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Failed to find "
-                   "known gid %d in CRED()'s groups.\n", known_gid);
-               rc = -EIDRM;
-               goto show_groups;
-       }
-
-       /* Verify groupmember() does NOT finds the missing gid in the CRED() */
-       rc = groupmember(missing_gid, CRED());
-       if (rc) {
-               splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Failed missing "
-                   "gid %d was found in CRED()'s groups.\n", missing_gid);
-               rc = -EIDRM;
-               goto show_groups;
-       }
-
-       splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Success groupmember() "
-           "correctly detects expected gids in CRED(): %d\n", rc);
-
-show_groups:
-       if (rc) {
-               int i, grps = crgetngroups(CRED());
-
-               splat_vprint(file, SPLAT_CRED_TEST3_NAME, "%d groups: ", grps);
-               for (i = 0; i < grps; i++)
-                       splat_print(file, "%d ", crgetgroups(CRED())[i]);
-               splat_print(file, "%s", "\n");
-       }
-
-
-       return (rc);
-} /* splat_cred_test3() */
-
-splat_subsystem_t *
-splat_cred_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_CRED_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_CRED_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_CRED;
-
-        splat_test_init(sub, SPLAT_CRED_TEST1_NAME, SPLAT_CRED_TEST1_DESC,
-                     SPLAT_CRED_TEST1_ID, splat_cred_test1);
-        splat_test_init(sub, SPLAT_CRED_TEST2_NAME, SPLAT_CRED_TEST2_DESC,
-                     SPLAT_CRED_TEST2_ID, splat_cred_test2);
-        splat_test_init(sub, SPLAT_CRED_TEST3_NAME, SPLAT_CRED_TEST3_DESC,
-                     SPLAT_CRED_TEST3_ID, splat_cred_test3);
-
-        return sub;
-} /* splat_cred_init() */
-
-void
-splat_cred_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-
-        splat_test_fini(sub, SPLAT_CRED_TEST3_ID);
-        splat_test_fini(sub, SPLAT_CRED_TEST2_ID);
-        splat_test_fini(sub, SPLAT_CRED_TEST1_ID);
-
-        kfree(sub);
-} /* splat_cred_fini() */
-
-int
-splat_cred_id(void)
-{
-        return SPLAT_SUBSYSTEM_CRED;
-} /* splat_cred_id() */
diff --git a/module/splat/splat-ctl.c b/module/splat/splat-ctl.c
deleted file mode 100644 (file)
index cf68501..0000000
+++ /dev/null
@@ -1,753 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Test Control Interface.
- *
- *  The 'splat' (Solaris Porting LAyer Tests) module is designed as a
- *  framework which runs various in kernel regression tests to validate
- *  the SPL primitives honor the Solaris ABI.
- *
- *  The splat module is constructed of various splat_* source files each
- *  of which contain regression tests for a particular subsystem.  For
- *  example, the splat_kmem.c file contains all the tests for validating
- *  the kmem interfaces have been implemented correctly.  When the splat
- *  module is loaded splat_*_init() will be called for each subsystems
- *  tests.  It is the responsibility of splat_*_init() to register all
- *  the tests for this subsystem using the splat_test_init().
- *  Similarly splat_*_fini() is called when the splat module is removed
- *  and is responsible for unregistering its tests via the splat_test_fini.
- *  Once a test is registered it can then be run with an ioctl()
- *  call which specifies the subsystem and test to be run.  The provided
- *  splat command line tool can be used to display all available
- *  subsystems and tests.  It can also be used to run the full suite
- *  of regression tests or particular tests.
- */
-
-#include <sys/debug.h>
-#include <sys/mutex.h>
-#include <sys/types.h>
-#include <linux/cdev.h>
-#include <linux/fs.h>
-#include <linux/miscdevice.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/uaccess.h>
-#include <linux/vmalloc.h>
-#include "splat-internal.h"
-
-static struct list_head splat_module_list;
-static spinlock_t splat_module_lock;
-
-static int
-splat_open(struct inode *inode, struct file *file)
-{
-       splat_info_t *info;
-
-       info = (splat_info_t *)kmalloc(sizeof(*info), GFP_KERNEL);
-       if (info == NULL)
-               return -ENOMEM;
-
-       mutex_init(&info->info_lock, SPLAT_NAME, MUTEX_DEFAULT, NULL);
-       info->info_size = SPLAT_INFO_BUFFER_SIZE;
-       info->info_buffer = (char *)vmalloc(SPLAT_INFO_BUFFER_SIZE);
-       if (info->info_buffer == NULL) {
-               kfree(info);
-               return -ENOMEM;
-       }
-       memset(info->info_buffer, 0, info->info_size);
-
-       info->info_head = info->info_buffer;
-       file->private_data = (void *)info;
-
-       splat_print(file, "%s\n", spl_version);
-
-       return 0;
-}
-
-static int
-splat_release(struct inode *inode, struct file *file)
-{
-       splat_info_t *info = (splat_info_t *)file->private_data;
-
-       ASSERT(info);
-       ASSERT(info->info_buffer);
-
-       mutex_destroy(&info->info_lock);
-       vfree(info->info_buffer);
-       kfree(info);
-
-       return 0;
-}
-
-static int
-splat_buffer_clear(struct file *file, splat_cfg_t *kcfg, unsigned long arg)
-{
-       splat_info_t *info = (splat_info_t *)file->private_data;
-
-       ASSERT(info);
-       ASSERT(info->info_buffer);
-
-       mutex_enter(&info->info_lock);
-       memset(info->info_buffer, 0, info->info_size);
-       info->info_head = info->info_buffer;
-       mutex_exit(&info->info_lock);
-
-       return 0;
-}
-
-static int
-splat_buffer_size(struct file *file, splat_cfg_t *kcfg, unsigned long arg)
-{
-       splat_info_t *info = (splat_info_t *)file->private_data;
-       char *buf;
-       int min, size, rc = 0;
-
-       ASSERT(info);
-       ASSERT(info->info_buffer);
-
-       mutex_enter(&info->info_lock);
-       if (kcfg->cfg_arg1 > 0) {
-
-               size = kcfg->cfg_arg1;
-               buf = (char *)vmalloc(size);
-               if (buf == NULL) {
-                       rc = -ENOMEM;
-                       goto out;
-               }
-
-               /* Zero fill and truncate contents when coping buffer */
-               min = ((size < info->info_size) ? size : info->info_size);
-               memset(buf, 0, size);
-               memcpy(buf, info->info_buffer, min);
-               vfree(info->info_buffer);
-               info->info_size = size;
-               info->info_buffer = buf;
-               info->info_head = info->info_buffer;
-       }
-
-       kcfg->cfg_rc1 = info->info_size;
-
-       if (copy_to_user((struct splat_cfg_t __user *)arg, kcfg, sizeof(*kcfg)))
-               rc = -EFAULT;
-out:
-       mutex_exit(&info->info_lock);
-
-       return rc;
-}
-
-
-static splat_subsystem_t *
-splat_subsystem_find(int id) {
-       splat_subsystem_t *sub;
-
-        spin_lock(&splat_module_lock);
-        list_for_each_entry(sub, &splat_module_list, subsystem_list) {
-               if (id == sub->desc.id) {
-                       spin_unlock(&splat_module_lock);
-                       return sub;
-               }
-        }
-        spin_unlock(&splat_module_lock);
-
-       return NULL;
-}
-
-static int
-splat_subsystem_count(splat_cfg_t *kcfg, unsigned long arg)
-{
-       splat_subsystem_t *sub;
-       int i = 0;
-
-        spin_lock(&splat_module_lock);
-        list_for_each_entry(sub, &splat_module_list, subsystem_list)
-               i++;
-
-        spin_unlock(&splat_module_lock);
-       kcfg->cfg_rc1 = i;
-
-       if (copy_to_user((struct splat_cfg_t __user *)arg, kcfg, sizeof(*kcfg)))
-               return -EFAULT;
-
-       return 0;
-}
-
-static int
-splat_subsystem_list(splat_cfg_t *kcfg, unsigned long arg)
-{
-       splat_subsystem_t *sub;
-       splat_cfg_t *tmp;
-       int size, i = 0;
-
-       /* Structure will be sized large enough for N subsystem entries
-        * which is passed in by the caller.  On exit the number of
-        * entries filled in with valid subsystems will be stored in
-        * cfg_rc1.  If the caller does not provide enough entries
-        * for all subsystems we will truncate the list to avoid overrun.
-        */
-       size = sizeof(*tmp) + kcfg->cfg_data.splat_subsystems.size *
-              sizeof(splat_user_t);
-       tmp = kmalloc(size, GFP_KERNEL);
-       if (tmp == NULL)
-               return -ENOMEM;
-
-       /* Local 'tmp' is used as the structure copied back to user space */
-       memset(tmp, 0, size);
-       memcpy(tmp, kcfg, sizeof(*kcfg));
-
-        spin_lock(&splat_module_lock);
-        list_for_each_entry(sub, &splat_module_list, subsystem_list) {
-               strncpy(tmp->cfg_data.splat_subsystems.descs[i].name,
-                       sub->desc.name, SPLAT_NAME_SIZE);
-               strncpy(tmp->cfg_data.splat_subsystems.descs[i].desc,
-                       sub->desc.desc, SPLAT_DESC_SIZE);
-               tmp->cfg_data.splat_subsystems.descs[i].id = sub->desc.id;
-
-               /* Truncate list if we are about to overrun alloc'ed memory */
-               if ((i++) == kcfg->cfg_data.splat_subsystems.size)
-                       break;
-        }
-        spin_unlock(&splat_module_lock);
-       tmp->cfg_rc1 = i;
-
-       if (copy_to_user((struct splat_cfg_t __user *)arg, tmp, size)) {
-               kfree(tmp);
-               return -EFAULT;
-       }
-
-       kfree(tmp);
-       return 0;
-}
-
-static int
-splat_test_count(splat_cfg_t *kcfg, unsigned long arg)
-{
-       splat_subsystem_t *sub;
-       splat_test_t *test;
-       int i = 0;
-
-       /* Subsystem ID passed as arg1 */
-       sub = splat_subsystem_find(kcfg->cfg_arg1);
-       if (sub == NULL)
-               return -EINVAL;
-
-        spin_lock(&(sub->test_lock));
-        list_for_each_entry(test, &(sub->test_list), test_list)
-               i++;
-
-        spin_unlock(&(sub->test_lock));
-       kcfg->cfg_rc1 = i;
-
-       if (copy_to_user((struct splat_cfg_t __user *)arg, kcfg, sizeof(*kcfg)))
-               return -EFAULT;
-
-       return 0;
-}
-
-static int
-splat_test_list(splat_cfg_t *kcfg, unsigned long arg)
-{
-       splat_subsystem_t *sub;
-       splat_test_t *test;
-       splat_cfg_t *tmp;
-       int size, i = 0;
-
-       /* Subsystem ID passed as arg1 */
-       sub = splat_subsystem_find(kcfg->cfg_arg1);
-       if (sub == NULL)
-               return -EINVAL;
-
-       /* Structure will be sized large enough for N test entries
-        * which is passed in by the caller.  On exit the number of
-        * entries filled in with valid tests will be stored in
-        * cfg_rc1.  If the caller does not provide enough entries
-        * for all tests we will truncate the list to avoid overrun.
-        */
-       size = sizeof(*tmp)+kcfg->cfg_data.splat_tests.size*sizeof(splat_user_t);
-       tmp = kmalloc(size, GFP_KERNEL);
-       if (tmp == NULL)
-               return -ENOMEM;
-
-       /* Local 'tmp' is used as the structure copied back to user space */
-       memset(tmp, 0, size);
-       memcpy(tmp, kcfg, sizeof(*kcfg));
-
-        spin_lock(&(sub->test_lock));
-        list_for_each_entry(test, &(sub->test_list), test_list) {
-               strncpy(tmp->cfg_data.splat_tests.descs[i].name,
-                       test->desc.name, SPLAT_NAME_SIZE);
-               strncpy(tmp->cfg_data.splat_tests.descs[i].desc,
-                       test->desc.desc, SPLAT_DESC_SIZE);
-               tmp->cfg_data.splat_tests.descs[i].id = test->desc.id;
-
-               /* Truncate list if we are about to overrun alloc'ed memory */
-               if ((i++) == kcfg->cfg_data.splat_tests.size)
-                       break;
-        }
-        spin_unlock(&(sub->test_lock));
-       tmp->cfg_rc1 = i;
-
-       if (copy_to_user((struct splat_cfg_t __user *)arg, tmp, size)) {
-               kfree(tmp);
-               return -EFAULT;
-       }
-
-       kfree(tmp);
-       return 0;
-}
-
-static int
-splat_validate(struct file *file, splat_subsystem_t *sub, int cmd, void *arg)
-{
-        splat_test_t *test;
-
-        spin_lock(&(sub->test_lock));
-        list_for_each_entry(test, &(sub->test_list), test_list) {
-                if (test->desc.id == cmd) {
-                       spin_unlock(&(sub->test_lock));
-                        return test->test(file, arg);
-                }
-        }
-        spin_unlock(&(sub->test_lock));
-
-        return -EINVAL;
-}
-
-static int
-splat_ioctl_cfg(struct file *file, unsigned int cmd, unsigned long arg)
-{
-       splat_cfg_t kcfg;
-       int rc = 0;
-
-       /* User and kernel space agree about arg size */
-       if (_IOC_SIZE(cmd) != sizeof(kcfg))
-               return -EBADMSG;
-
-       if (copy_from_user(&kcfg, (splat_cfg_t *)arg, sizeof(kcfg)))
-               return -EFAULT;
-
-       if (kcfg.cfg_magic != SPLAT_CFG_MAGIC) {
-               splat_print(file, "Bad config magic 0x%x != 0x%x\n",
-                         kcfg.cfg_magic, SPLAT_CFG_MAGIC);
-               return -EINVAL;
-       }
-
-       switch (kcfg.cfg_cmd) {
-               case SPLAT_CFG_BUFFER_CLEAR:
-                       /* cfg_arg1 - Unused
-                        * cfg_rc1  - Unused
-                        */
-                       rc = splat_buffer_clear(file, &kcfg, arg);
-                       break;
-               case SPLAT_CFG_BUFFER_SIZE:
-                       /* cfg_arg1 - 0 - query size; >0 resize
-                        * cfg_rc1  - Set to current buffer size
-                        */
-                       rc = splat_buffer_size(file, &kcfg, arg);
-                       break;
-               case SPLAT_CFG_SUBSYSTEM_COUNT:
-                       /* cfg_arg1 - Unused
-                        * cfg_rc1  - Set to number of subsystems
-                        */
-                       rc = splat_subsystem_count(&kcfg, arg);
-                       break;
-               case SPLAT_CFG_SUBSYSTEM_LIST:
-                       /* cfg_arg1 - Unused
-                        * cfg_rc1  - Set to number of subsystems
-                        * cfg_data.splat_subsystems - Set with subsystems
-                        */
-                       rc = splat_subsystem_list(&kcfg, arg);
-                       break;
-               case SPLAT_CFG_TEST_COUNT:
-                       /* cfg_arg1 - Set to a target subsystem
-                        * cfg_rc1  - Set to number of tests
-                        */
-                       rc = splat_test_count(&kcfg, arg);
-                       break;
-               case SPLAT_CFG_TEST_LIST:
-                       /* cfg_arg1 - Set to a target subsystem
-                        * cfg_rc1  - Set to number of tests
-                        * cfg_data.splat_subsystems - Populated with tests
-                        */
-                       rc = splat_test_list(&kcfg, arg);
-                       break;
-               default:
-                       splat_print(file, "Bad config command %d\n",
-                                   kcfg.cfg_cmd);
-                       rc = -EINVAL;
-                       break;
-       }
-
-       return rc;
-}
-
-static int
-splat_ioctl_cmd(struct file *file, unsigned int cmd, unsigned long arg)
-{
-       splat_subsystem_t *sub;
-       splat_cmd_t kcmd;
-       int rc = -EINVAL;
-       void *data = NULL;
-
-       /* User and kernel space agree about arg size */
-       if (_IOC_SIZE(cmd) != sizeof(kcmd))
-               return -EBADMSG;
-
-       if (copy_from_user(&kcmd, (splat_cfg_t *)arg, sizeof(kcmd)))
-               return -EFAULT;
-
-       if (kcmd.cmd_magic != SPLAT_CMD_MAGIC) {
-               splat_print(file, "Bad command magic 0x%x != 0x%x\n",
-                         kcmd.cmd_magic, SPLAT_CFG_MAGIC);
-               return -EINVAL;
-       }
-
-       /* Allocate memory for any opaque data the caller needed to pass on */
-       if (kcmd.cmd_data_size > 0) {
-               data = (void *)kmalloc(kcmd.cmd_data_size, GFP_KERNEL);
-               if (data == NULL)
-                       return -ENOMEM;
-
-               if (copy_from_user(data, (void *)(arg + offsetof(splat_cmd_t,
-                                  cmd_data_str)), kcmd.cmd_data_size)) {
-                       kfree(data);
-                       return -EFAULT;
-               }
-       }
-
-       sub = splat_subsystem_find(kcmd.cmd_subsystem);
-       if (sub != NULL)
-               rc = splat_validate(file, sub, kcmd.cmd_test, data);
-       else
-               rc = -EINVAL;
-
-       if (data != NULL)
-               kfree(data);
-
-       return rc;
-}
-
-static long
-splat_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
-{
-       int rc = 0;
-
-       /* Ignore tty ioctls */
-       if ((cmd & 0xffffff00) == ((int)'T') << 8)
-               return -ENOTTY;
-
-       switch (cmd) {
-               case SPLAT_CFG:
-                       rc = splat_ioctl_cfg(file, cmd, arg);
-                       break;
-               case SPLAT_CMD:
-                       rc = splat_ioctl_cmd(file, cmd, arg);
-                       break;
-               default:
-                       splat_print(file, "Bad ioctl command %d\n", cmd);
-                       rc = -EINVAL;
-                       break;
-       }
-
-       return rc;
-}
-
-#ifdef CONFIG_COMPAT
-/* Compatibility handler for ioctls from 32-bit ELF binaries */
-static long
-splat_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
-{
-       return splat_unlocked_ioctl(file, cmd, arg);
-}
-#endif /* CONFIG_COMPAT */
-
-/* I'm not sure why you would want to write in to this buffer from
- * user space since its principle use is to pass test status info
- * back to the user space, but I don't see any reason to prevent it.
- */
-static ssize_t splat_write(struct file *file, const char __user *buf,
-                         size_t count, loff_t *ppos)
-{
-       splat_info_t *info = (splat_info_t *)file->private_data;
-       int rc = 0;
-
-       ASSERT(info);
-       ASSERT(info->info_buffer);
-
-       mutex_enter(&info->info_lock);
-
-       /* Write beyond EOF */
-       if (*ppos >= info->info_size) {
-               rc = -EFBIG;
-               goto out;
-       }
-
-       /* Resize count if beyond EOF */
-       if (*ppos + count > info->info_size)
-               count = info->info_size - *ppos;
-
-       if (copy_from_user(info->info_buffer, buf, count)) {
-               rc = -EFAULT;
-               goto out;
-       }
-
-       *ppos += count;
-       rc = count;
-out:
-       mutex_exit(&info->info_lock);
-       return rc;
-}
-
-static ssize_t splat_read(struct file *file, char __user *buf,
-                       size_t count, loff_t *ppos)
-{
-       splat_info_t *info = (splat_info_t *)file->private_data;
-       int rc = 0;
-
-       ASSERT(info);
-       ASSERT(info->info_buffer);
-
-       mutex_enter(&info->info_lock);
-
-       /* Read beyond EOF */
-       if (*ppos >= info->info_size)
-               goto out;
-
-       /* Resize count if beyond EOF */
-       if (*ppos + count > info->info_size)
-               count = info->info_size - *ppos;
-
-       if (copy_to_user(buf, info->info_buffer + *ppos, count)) {
-               rc = -EFAULT;
-               goto out;
-       }
-
-       *ppos += count;
-       rc = count;
-out:
-       mutex_exit(&info->info_lock);
-       return rc;
-}
-
-static loff_t splat_seek(struct file *file, loff_t offset, int origin)
-{
-       splat_info_t *info = (splat_info_t *)file->private_data;
-       int rc = -EINVAL;
-
-       ASSERT(info);
-       ASSERT(info->info_buffer);
-
-       mutex_enter(&info->info_lock);
-
-       switch (origin) {
-       case 0: /* SEEK_SET - No-op just do it */
-               break;
-       case 1: /* SEEK_CUR - Seek from current */
-               offset = file->f_pos + offset;
-               break;
-       case 2: /* SEEK_END - Seek from end */
-               offset = info->info_size + offset;
-               break;
-       }
-
-       if (offset >= 0) {
-               file->f_pos = offset;
-               file->f_version = 0;
-               rc = offset;
-       }
-
-       mutex_exit(&info->info_lock);
-
-       return rc;
-}
-
-static struct file_operations splat_fops = {
-       .owner          = THIS_MODULE,
-       .open           = splat_open,
-       .release        = splat_release,
-       .unlocked_ioctl = splat_unlocked_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl   = splat_compat_ioctl,
-#endif
-       .read           = splat_read,
-       .write          = splat_write,
-       .llseek         = splat_seek,
-};
-
-static struct miscdevice splat_misc = {
-       .minor          = MISC_DYNAMIC_MINOR,
-       .name           = SPLAT_NAME,
-       .fops           = &splat_fops,
-};
-
-static void splat_subsystem_init(const char *name,
-    splat_subsystem_t *(*init)(void))
-{
-       splat_subsystem_t *sub;
-       sub = init();
-       if (sub == NULL) {
-               printk(KERN_ERR "splat: Error initializing: %s\n", name);
-               return;
-       }
-       spin_lock(&splat_module_lock);
-       list_add_tail(&sub->subsystem_list, &splat_module_list);
-       spin_unlock(&splat_module_lock);
-}
-
-static void splat_subsystem_fini(const char *name,
-    int (*id_func)(void), void (*fini)(splat_subsystem_t *))
-{
-       splat_subsystem_t *sub, *tmp;
-       int id, flag = 0;
-
-       id = id_func();
-       spin_lock(&splat_module_lock);
-       list_for_each_entry_safe(sub, tmp, &splat_module_list, subsystem_list) {
-               if (sub->desc.id == id) {
-                       list_del_init(&sub->subsystem_list);
-                       flag = 1;
-                       break;
-               }
-       }
-       spin_unlock(&splat_module_lock);
-       if (flag == 0)
-               printk(KERN_ERR "splat: Error finalizing: %s\n", name);
-       else
-               fini(sub);
-}
-
-#define SPLAT_SUBSYSTEM_INIT(type) \
-       splat_subsystem_init(#type, splat_##type##_init)
-#define SPLAT_SUBSYSTEM_FINI(type) \
-       splat_subsystem_fini(#type, splat_##type##_id, splat_##type##_fini)
-
-void splat_test_init(splat_subsystem_t *sub, const char *name,
-    const char *desc, unsigned int tid, splat_test_func_t func)
-{
-       splat_test_t *test;
-       test = kmalloc(sizeof (splat_test_t), GFP_KERNEL);
-       if (test == NULL) {
-               printk(KERN_ERR "splat: Error initializing: %s/%u\n",
-                   name, tid);
-               return;
-       }
-       memset(test, 0, sizeof (splat_test_t));
-       strncpy(test->desc.name, name, SPLAT_NAME_SIZE-1);
-       strncpy(test->desc.desc, desc, SPLAT_DESC_SIZE-1);
-       test->desc.id = tid;
-       test->test = func;
-       INIT_LIST_HEAD(&test->test_list);
-       spin_lock(&sub->test_lock);
-       list_add_tail(&test->test_list, &sub->test_list);
-       spin_unlock(&sub->test_lock);
-}
-
-void splat_test_fini(splat_subsystem_t *sub, unsigned int tid)
-{
-       splat_test_t *test, *tmp;
-       int flag = 0;
-
-       spin_lock(&sub->test_lock);
-       list_for_each_entry_safe(test, tmp, &sub->test_list, test_list) {
-               if (test->desc.id == tid) {
-                       list_del_init(&test->test_list);
-                       kfree(test);
-                       flag = 1;
-                       break;
-               }
-       }
-       spin_unlock(&sub->test_lock);
-
-       if (flag == 0)
-               printk(KERN_ERR "splat: Error finalizing: %u\n", tid);
-}
-
-static int __init
-splat_init(void)
-{
-       int error;
-
-       spin_lock_init(&splat_module_lock);
-       INIT_LIST_HEAD(&splat_module_list);
-
-       SPLAT_SUBSYSTEM_INIT(kmem);
-       SPLAT_SUBSYSTEM_INIT(taskq);
-       SPLAT_SUBSYSTEM_INIT(krng);
-       SPLAT_SUBSYSTEM_INIT(mutex);
-       SPLAT_SUBSYSTEM_INIT(condvar);
-       SPLAT_SUBSYSTEM_INIT(thread);
-       SPLAT_SUBSYSTEM_INIT(rwlock);
-       SPLAT_SUBSYSTEM_INIT(time);
-       SPLAT_SUBSYSTEM_INIT(vnode);
-       SPLAT_SUBSYSTEM_INIT(kobj);
-       SPLAT_SUBSYSTEM_INIT(atomic);
-       SPLAT_SUBSYSTEM_INIT(list);
-       SPLAT_SUBSYSTEM_INIT(generic);
-       SPLAT_SUBSYSTEM_INIT(cred);
-       SPLAT_SUBSYSTEM_INIT(zlib);
-       SPLAT_SUBSYSTEM_INIT(linux);
-
-       error = misc_register(&splat_misc);
-       if (error) {
-               printk(KERN_INFO "SPLAT: misc_register() failed %d\n", error);
-       } else {
-               printk(KERN_INFO "SPLAT: Loaded module v%s-%s%s\n",
-                   SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR);
-       }
-
-       return (error);
-}
-
-static void __exit
-splat_fini(void)
-{
-       misc_deregister(&splat_misc);
-
-       SPLAT_SUBSYSTEM_FINI(linux);
-       SPLAT_SUBSYSTEM_FINI(zlib);
-       SPLAT_SUBSYSTEM_FINI(cred);
-       SPLAT_SUBSYSTEM_FINI(generic);
-       SPLAT_SUBSYSTEM_FINI(list);
-       SPLAT_SUBSYSTEM_FINI(atomic);
-       SPLAT_SUBSYSTEM_FINI(kobj);
-       SPLAT_SUBSYSTEM_FINI(vnode);
-       SPLAT_SUBSYSTEM_FINI(time);
-       SPLAT_SUBSYSTEM_FINI(rwlock);
-       SPLAT_SUBSYSTEM_FINI(thread);
-       SPLAT_SUBSYSTEM_FINI(condvar);
-       SPLAT_SUBSYSTEM_FINI(mutex);
-       SPLAT_SUBSYSTEM_FINI(krng);
-       SPLAT_SUBSYSTEM_FINI(taskq);
-       SPLAT_SUBSYSTEM_FINI(kmem);
-
-       ASSERT(list_empty(&splat_module_list));
-       printk(KERN_INFO "SPLAT: Unloaded module v%s-%s%s\n",
-           SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR);
-}
-
-module_init(splat_init);
-module_exit(splat_fini);
-
-MODULE_DESCRIPTION("Solaris Porting LAyer Tests");
-MODULE_AUTHOR(SPL_META_AUTHOR);
-MODULE_LICENSE(SPL_META_LICENSE);
-MODULE_VERSION(SPL_META_VERSION "-" SPL_META_RELEASE);
diff --git a/module/splat/splat-generic.c b/module/splat/splat-generic.c
deleted file mode 100644 (file)
index e256c83..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Generic Tests.
- */
-
-#include <sys/sunddi.h>
-#include <linux/math64_compat.h>
-#include "splat-internal.h"
-
-#define SPLAT_GENERIC_NAME             "generic"
-#define SPLAT_GENERIC_DESC             "Kernel Generic Tests"
-
-#define SPLAT_GENERIC_TEST1_ID         0x0d01
-#define SPLAT_GENERIC_TEST1_NAME       "ddi_strtoul"
-#define SPLAT_GENERIC_TEST1_DESC       "ddi_strtoul Test"
-
-#define SPLAT_GENERIC_TEST2_ID         0x0d02
-#define SPLAT_GENERIC_TEST2_NAME       "ddi_strtol"
-#define SPLAT_GENERIC_TEST2_DESC       "ddi_strtol Test"
-
-#define SPLAT_GENERIC_TEST3_ID         0x0d03
-#define SPLAT_GENERIC_TEST3_NAME       "ddi_strtoull"
-#define SPLAT_GENERIC_TEST3_DESC       "ddi_strtoull Test"
-
-#define SPLAT_GENERIC_TEST4_ID         0x0d04
-#define SPLAT_GENERIC_TEST4_NAME       "ddi_strtoll"
-#define SPLAT_GENERIC_TEST4_DESC       "ddi_strtoll Test"
-
-# define SPLAT_GENERIC_TEST5_ID                0x0d05
-# define SPLAT_GENERIC_TEST5_NAME      "udivdi3"
-# define SPLAT_GENERIC_TEST5_DESC      "Unsigned Div-64 Test"
-
-# define SPLAT_GENERIC_TEST6_ID                0x0d06
-# define SPLAT_GENERIC_TEST6_NAME      "divdi3"
-# define SPLAT_GENERIC_TEST6_DESC      "Signed Div-64 Test"
-
-#define STR_POS                                "123456789"
-#define STR_NEG                                "-123456789"
-#define STR_BASE                       "0xabcdef"
-#define STR_RANGE_MAX                  "10000000000000000"
-#define STR_RANGE_MIN                  "-10000000000000000"
-#define STR_INVAL1                     "12345U"
-#define STR_INVAL2                     "invald"
-
-#define VAL_POS                                123456789
-#define VAL_NEG                                -123456789
-#define VAL_BASE                       0xabcdef
-#define VAL_INVAL1                     12345U
-
-#define define_generic_msg_strtox(type, valtype)                       \
-static void                                                            \
-generic_msg_strto##type(struct file *file, char *msg, int rc, int *err, \
-                       const char *s, valtype d, char *endptr)         \
-{                                                                      \
-       splat_vprint(file, SPLAT_GENERIC_TEST1_NAME,                    \
-                    "%s (%d) %s: %s == %lld, 0x%p\n",                  \
-                    rc ? "Fail" : "Pass", *err, msg, s,                \
-                    (unsigned long long)d, endptr);                    \
-       *err = rc;                                                      \
-}
-
-define_generic_msg_strtox(ul, unsigned long);
-define_generic_msg_strtox(l, long);
-define_generic_msg_strtox(ull, unsigned long long);
-define_generic_msg_strtox(ll, long long);
-
-#define define_splat_generic_test_strtox(type, valtype)                        \
-static int                                                             \
-splat_generic_test_strto##type(struct file *file, void *arg)           \
-{                                                                      \
-       int rc, rc1, rc2, rc3, rc4, rc5, rc6, rc7;                      \
-       char str[20], *endptr;                                          \
-       valtype r;                                                      \
-                                                                       \
-       /* Positive value: expect success */                            \
-       r = 0;                                                          \
-       rc = 1;                                                         \
-       endptr = NULL;                                                  \
-       rc1 = ddi_strto##type(STR_POS, &endptr, 10, &r);                \
-       if (rc1 == 0 && r == VAL_POS && endptr && *endptr == '\0')      \
-               rc = 0;                                                 \
-                                                                       \
-       generic_msg_strto##type(file, "positive", rc , &rc1,            \
-                               STR_POS, r, endptr);                    \
-                                                                       \
-       /* Negative value: expect success */                            \
-       r = 0;                                                          \
-       rc = 1;                                                         \
-       endptr = NULL;                                                  \
-       strcpy(str, STR_NEG);                                           \
-       rc2 = ddi_strto##type(str, &endptr, 10, &r);                    \
-       if (#type[0] == 'u') {                                          \
-               if (rc2 == 0 && r == 0 && endptr == str)                \
-                       rc = 0;                                         \
-       } else {                                                        \
-               if (rc2 == 0 && r == VAL_NEG &&                         \
-                   endptr && *endptr == '\0')                          \
-                       rc = 0;                                         \
-       }                                                               \
-                                                                       \
-       generic_msg_strto##type(file, "negative", rc, &rc2,             \
-                               STR_NEG, r, endptr);                    \
-                                                                       \
-       /* Non decimal base: expect sucess */                           \
-       r = 0;                                                          \
-       rc = 1;                                                         \
-       endptr = NULL;                                                  \
-       rc3 = ddi_strto##type(STR_BASE, &endptr, 0, &r);                \
-       if (rc3 == 0 && r == VAL_BASE && endptr && *endptr == '\0')     \
-               rc = 0;                                                 \
-                                                                       \
-       generic_msg_strto##type(file, "base", rc, &rc3,                 \
-                               STR_BASE, r, endptr);                   \
-                                                                       \
-       /* Max out of range: failure expected, r unchanged */           \
-       r = 0;                                                          \
-       rc = 1;                                                         \
-       endptr = NULL;                                                  \
-       rc4 = ddi_strto##type(STR_RANGE_MAX, &endptr, 16, &r);          \
-       if (rc4 == ERANGE && r == 0 && endptr == NULL)                  \
-               rc = 0;                                                 \
-                                                                       \
-       generic_msg_strto##type(file, "max", rc, &rc4,                  \
-                               STR_RANGE_MAX, r, endptr);              \
-                                                                       \
-       /* Min out of range: failure expected, r unchanged */           \
-       r = 0;                                                          \
-       rc = 1;                                                         \
-       endptr = NULL;                                                  \
-       strcpy(str, STR_RANGE_MIN);                                     \
-       rc5 = ddi_strto##type(str, &endptr, 16, &r);                    \
-       if (#type[0] == 'u') {                                          \
-               if (rc5 == 0 && r == 0 && endptr == str)                \
-                       rc = 0;                                         \
-       } else {                                                        \
-               if (rc5 == ERANGE && r == 0 && endptr == NULL)          \
-                       rc = 0;                                         \
-       }                                                               \
-                                                                       \
-       generic_msg_strto##type(file, "min", rc, &rc5,                  \
-                               STR_RANGE_MIN, r, endptr);              \
-                                                                       \
-       /* Invalid string: success expected, endptr == 'U' */           \
-       r = 0;                                                          \
-       rc = 1;                                                         \
-       endptr = NULL;                                                  \
-       rc6 = ddi_strto##type(STR_INVAL1, &endptr, 10, &r);             \
-       if (rc6 == 0 && r == VAL_INVAL1 && endptr && *endptr == 'U')    \
-               rc = 0;                                                 \
-                                                                       \
-       generic_msg_strto##type(file, "invalid", rc, &rc6,              \
-                               STR_INVAL1, r, endptr);                 \
-                                                                       \
-       /* Invalid string: failure expected, endptr == str */           \
-       r = 0;                                                          \
-       rc = 1;                                                         \
-       endptr = NULL;                                                  \
-       strcpy(str, STR_INVAL2);                                        \
-       rc7 = ddi_strto##type(str, &endptr, 10, &r);                    \
-       if (rc7 == 0 && r == 0 && endptr == str)                        \
-               rc = 0;                                                 \
-                                                                       \
-       generic_msg_strto##type(file, "invalid", rc, &rc7,              \
-                               STR_INVAL2, r, endptr);                 \
-                                                                       \
-        return (rc1 || rc2 || rc3 || rc4 || rc5 || rc6 || rc7) ?       \
-               -EINVAL : 0;                                            \
-}
-
-define_splat_generic_test_strtox(ul, unsigned long);
-define_splat_generic_test_strtox(l, long);
-define_splat_generic_test_strtox(ull, unsigned long long);
-define_splat_generic_test_strtox(ll, long long);
-
-/*
- * The entries in the table are used in all combinations and the
- * return value is checked to ensure it is range.  On 32-bit
- * systems __udivdi3 will be invoked for the 64-bit division.
- * On 64-bit system the native 64-bit divide will be used so
- * __udivdi3 isn't used but we might as well stil run the test.
- */
-static int
-splat_generic_test_udivdi3(struct file *file, void *arg)
-{
-       const uint64_t tabu[] = {
-           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-           10, 11, 12, 13, 14, 15, 16, 1000, 2003,
-           32765, 32766, 32767, 32768, 32769, 32760,
-           65533, 65534, 65535, 65536, 65537, 65538,
-           0x7ffffffeULL, 0x7fffffffULL, 0x80000000ULL, 0x80000001ULL,
-           0x7000000000000000ULL, 0x7000000080000000ULL, 0x7000000080000001ULL,
-           0x7fffffffffffffffULL, 0x7fffffff8fffffffULL, 0x7fffffff8ffffff1ULL,
-           0x7fffffff00000000ULL, 0x7fffffff80000000ULL, 0x7fffffff00000001ULL,
-           0x8000000000000000ULL, 0x8000000080000000ULL, 0x8000000080000001ULL,
-           0xc000000000000000ULL, 0xc000000080000000ULL, 0xc000000080000001ULL,
-           0xfffffffffffffffdULL, 0xfffffffffffffffeULL, 0xffffffffffffffffULL,
-       };
-       uint64_t uu, vu, qu, ru;
-       int n, i, j, errors = 0;
-
-       splat_vprint(file, SPLAT_GENERIC_TEST5_NAME, "%s",
-           "Testing unsigned 64-bit division.\n");
-       n = sizeof(tabu) / sizeof(tabu[0]);
-       for (i = 0; i < n; i++) {
-               for (j = 1; j < n; j++) {
-                       uu = tabu[i];
-                       vu = tabu[j];
-                       qu = uu / vu; /* __udivdi3 */
-                       ru = uu - qu * vu;
-                       if (qu > uu || ru >= vu) {
-                               splat_vprint(file, SPLAT_GENERIC_TEST5_NAME,
-                                   "%016llx/%016llx != %016llx rem %016llx\n",
-                                   uu, vu, qu, ru);
-                               errors++;
-                       }
-               }
-       }
-
-       if (errors) {
-               splat_vprint(file, SPLAT_GENERIC_TEST5_NAME,
-                   "Failed %d/%d tests\n", errors, n * (n - 1));
-               return -ERANGE;
-       }
-
-       splat_vprint(file, SPLAT_GENERIC_TEST5_NAME,
-           "Passed all %d tests\n", n * (n - 1));
-
-       return 0;
-}
-
-/*
- * The entries the table are used in all combinations, with + and - signs
- * preceding them.  The return value is checked to ensure it is range.
- * On 32-bit systems __divdi3 will be invoked for the 64-bit division.
- * On 64-bit system the native 64-bit divide will be used so __divdi3
- *  isn't used but we might as well stil run the test.
- */
-static int
-splat_generic_test_divdi3(struct file *file, void *arg)
-{
-       const int64_t tabs[] = {
-           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-           10, 11, 12, 13, 14, 15, 16, 1000, 2003,
-           32765, 32766, 32767, 32768, 32769, 32760,
-           65533, 65534, 65535, 65536, 65537, 65538,
-           0x7ffffffeLL, 0x7fffffffLL, 0x80000000LL, 0x80000001LL,
-           0x7000000000000000LL, 0x7000000080000000LL, 0x7000000080000001LL,
-           0x7fffffffffffffffLL, 0x7fffffff8fffffffLL, 0x7fffffff8ffffff1LL,
-           0x7fffffff00000000LL, 0x7fffffff80000000LL, 0x7fffffff00000001LL,
-           0x0123456789abcdefLL, 0x00000000abcdef01LL, 0x0000000012345678LL,
-#if BITS_PER_LONG == 32
-           0x8000000000000000LL, 0x8000000080000000LL, 0x8000000080000001LL,
-#endif
-       };
-       int64_t u, v, q, r;
-       int n, i, j, k, errors = 0;
-
-       splat_vprint(file, SPLAT_GENERIC_TEST6_NAME, "%s",
-           "Testing signed 64-bit division.\n");
-       n = sizeof(tabs) / sizeof(tabs[0]);
-       for (i = 0; i < n; i++) {
-               for (j = 1; j < n; j++) {
-                       for (k = 0; k <= 3; k++) {
-                               u = (k & 1)  ? -tabs[i] : tabs[i];
-                               v = (k >= 2) ? -tabs[j] : tabs[j];
-
-                               q = u / v; /* __divdi3 */
-                               r = u - q * v;
-                               if (abs64(q) >  abs64(u) ||
-                                   abs64(r) >= abs64(v) ||
-                                   (r != 0 && (r ^ u) < 0)) {
-                                       splat_vprint(file,
-                                           SPLAT_GENERIC_TEST6_NAME,
-                                           "%016llx/%016llx != %016llx "
-                                           "rem %016llx\n", u, v, q, r);
-                                       errors++;
-                               }
-                       }
-               }
-       }
-
-       if (errors) {
-               splat_vprint(file, SPLAT_GENERIC_TEST6_NAME,
-                   "Failed %d/%d tests\n", errors, n * (n - 1));
-               return -ERANGE;
-       }
-
-       splat_vprint(file, SPLAT_GENERIC_TEST6_NAME,
-           "Passed all %d tests\n", n * (n - 1));
-
-       return 0;
-}
-
-splat_subsystem_t *
-splat_generic_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_GENERIC_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_GENERIC_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_GENERIC;
-
-        splat_test_init(sub, SPLAT_GENERIC_TEST1_NAME, SPLAT_GENERIC_TEST1_DESC,
-                       SPLAT_GENERIC_TEST1_ID, splat_generic_test_strtoul);
-        splat_test_init(sub, SPLAT_GENERIC_TEST2_NAME, SPLAT_GENERIC_TEST2_DESC,
-                       SPLAT_GENERIC_TEST2_ID, splat_generic_test_strtol);
-        splat_test_init(sub, SPLAT_GENERIC_TEST3_NAME, SPLAT_GENERIC_TEST3_DESC,
-                       SPLAT_GENERIC_TEST3_ID, splat_generic_test_strtoull);
-        splat_test_init(sub, SPLAT_GENERIC_TEST4_NAME, SPLAT_GENERIC_TEST4_DESC,
-                       SPLAT_GENERIC_TEST4_ID, splat_generic_test_strtoll);
-        splat_test_init(sub, SPLAT_GENERIC_TEST5_NAME, SPLAT_GENERIC_TEST5_DESC,
-                       SPLAT_GENERIC_TEST5_ID, splat_generic_test_udivdi3);
-        splat_test_init(sub, SPLAT_GENERIC_TEST6_NAME, SPLAT_GENERIC_TEST6_DESC,
-                       SPLAT_GENERIC_TEST6_ID, splat_generic_test_divdi3);
-
-        return sub;
-}
-
-void
-splat_generic_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-
-        splat_test_fini(sub, SPLAT_GENERIC_TEST6_ID);
-        splat_test_fini(sub, SPLAT_GENERIC_TEST5_ID);
-        splat_test_fini(sub, SPLAT_GENERIC_TEST4_ID);
-        splat_test_fini(sub, SPLAT_GENERIC_TEST3_ID);
-        splat_test_fini(sub, SPLAT_GENERIC_TEST2_ID);
-        splat_test_fini(sub, SPLAT_GENERIC_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_generic_id(void)
-{
-        return SPLAT_SUBSYSTEM_GENERIC;
-}
diff --git a/module/splat/splat-internal.h b/module/splat/splat-internal.h
deleted file mode 100644 (file)
index 97c10ac..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _SPLAT_INTERNAL_H
-#define _SPLAT_INTERNAL_H
-
-#include "splat-ctl.h"
-#include <sys/mutex.h>
-#include <linux/file_compat.h>
-#include <linux/version.h>
-
-typedef int (*splat_test_func_t)(struct file *, void *);
-
-typedef struct splat_test {
-       struct list_head test_list;
-       splat_user_t desc;
-       splat_test_func_t test;
-} splat_test_t;
-
-typedef struct splat_subsystem {
-       struct list_head subsystem_list;/* List had to chain entries */
-       splat_user_t desc;
-       spinlock_t test_lock;
-       struct list_head test_list;
-} splat_subsystem_t;
-
-void splat_test_init(splat_subsystem_t *sub, const char *name,
-    const char *desc, unsigned int tid, splat_test_func_t func);
-void splat_test_fini(splat_subsystem_t *sub, unsigned int tid);
-
-#define SPLAT_INFO_BUFFER_SIZE         65536
-#define SPLAT_INFO_BUFFER_REDZONE      256
-
-typedef struct splat_info {
-       kmutex_t info_lock;
-       int info_size;
-       char *info_buffer;
-       char *info_head;        /* Internal kernel use only */
-} splat_info_t;
-
-#define sym2str(sym)                   (char *)(#sym)
-
-#define splat_print(file, format, args...)                             \
-({     splat_info_t *_info_ = (splat_info_t *)file->private_data;      \
-       int _rc_;                                                       \
-                                                                       \
-       ASSERT(_info_);                                                 \
-       ASSERT(_info_->info_buffer);                                    \
-                                                                       \
-       mutex_enter(&_info_->info_lock);                                \
-                                                                       \
-       /* Don't allow the kernel to start a write in the red zone */   \
-       if ((int)(_info_->info_head - _info_->info_buffer) >            \
-           (SPLAT_INFO_BUFFER_SIZE - SPLAT_INFO_BUFFER_REDZONE)) {     \
-               _rc_ = -EOVERFLOW;                                      \
-       } else {                                                        \
-               _rc_ = sprintf(_info_->info_head, format, args);        \
-               if (_rc_ >= 0)                                          \
-                       _info_->info_head += _rc_;                      \
-       }                                                               \
-                                                                       \
-       mutex_exit(&_info_->info_lock);                                 \
-       _rc_;                                                           \
-})
-
-#define splat_vprint(file, test, format, args...)                      \
-       splat_print(file, "%*s: " format, SPLAT_NAME_SIZE, test, args)
-
-#define splat_locked_test(lock, test)                                  \
-({                                                                     \
-       int _rc_;                                                       \
-       spin_lock(lock);                                                \
-       _rc_ = (test) ? 1 : 0;                                          \
-       spin_unlock(lock);                                              \
-       _rc_;                                                           \
-})
-
-splat_subsystem_t *splat_condvar_init(void);
-splat_subsystem_t *splat_kmem_init(void);
-splat_subsystem_t *splat_mutex_init(void);
-splat_subsystem_t *splat_krng_init(void);
-splat_subsystem_t *splat_rwlock_init(void);
-splat_subsystem_t *splat_taskq_init(void);
-splat_subsystem_t *splat_thread_init(void);
-splat_subsystem_t *splat_time_init(void);
-splat_subsystem_t *splat_vnode_init(void);
-splat_subsystem_t *splat_kobj_init(void);
-splat_subsystem_t *splat_atomic_init(void);
-splat_subsystem_t *splat_list_init(void);
-splat_subsystem_t *splat_generic_init(void);
-splat_subsystem_t *splat_cred_init(void);
-splat_subsystem_t *splat_zlib_init(void);
-splat_subsystem_t *splat_linux_init(void);
-
-void splat_condvar_fini(splat_subsystem_t *);
-void splat_kmem_fini(splat_subsystem_t *);
-void splat_mutex_fini(splat_subsystem_t *);
-void splat_krng_fini(splat_subsystem_t *);
-void splat_rwlock_fini(splat_subsystem_t *);
-void splat_taskq_fini(splat_subsystem_t *);
-void splat_thread_fini(splat_subsystem_t *);
-void splat_time_fini(splat_subsystem_t *);
-void splat_vnode_fini(splat_subsystem_t *);
-void splat_kobj_fini(splat_subsystem_t *);
-void splat_atomic_fini(splat_subsystem_t *);
-void splat_list_fini(splat_subsystem_t *);
-void splat_generic_fini(splat_subsystem_t *);
-void splat_cred_fini(splat_subsystem_t *);
-void splat_zlib_fini(splat_subsystem_t *);
-void splat_linux_fini(splat_subsystem_t *);
-
-int splat_condvar_id(void);
-int splat_kmem_id(void);
-int splat_mutex_id(void);
-int splat_krng_id(void);
-int splat_rwlock_id(void);
-int splat_taskq_id(void);
-int splat_thread_id(void);
-int splat_time_id(void);
-int splat_vnode_id(void);
-int splat_kobj_id(void);
-int splat_atomic_id(void);
-int splat_list_id(void);
-int splat_generic_id(void);
-int splat_cred_id(void);
-int splat_zlib_id(void);
-int splat_linux_id(void);
-
-#endif /* _SPLAT_INTERNAL_H */
diff --git a/module/splat/splat-kmem.c b/module/splat/splat-kmem.c
deleted file mode 100644 (file)
index 282f42d..0000000
+++ /dev/null
@@ -1,1410 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Kmem Tests.
- */
-
-#include <sys/kmem.h>
-#include <sys/kmem_cache.h>
-#include <sys/vmem.h>
-#include <sys/random.h>
-#include <sys/thread.h>
-#include <sys/vmsystm.h>
-#include "splat-internal.h"
-
-#define SPLAT_KMEM_NAME                        "kmem"
-#define SPLAT_KMEM_DESC                        "Kernel Malloc/Slab Tests"
-
-#define SPLAT_KMEM_TEST1_ID            0x0101
-#define SPLAT_KMEM_TEST1_NAME          "kmem_alloc"
-#define SPLAT_KMEM_TEST1_DESC          "Memory allocation test (kmem_alloc)"
-
-#define SPLAT_KMEM_TEST2_ID            0x0102
-#define SPLAT_KMEM_TEST2_NAME          "kmem_zalloc"
-#define SPLAT_KMEM_TEST2_DESC          "Memory allocation test (kmem_zalloc)"
-
-#define SPLAT_KMEM_TEST3_ID            0x0103
-#define SPLAT_KMEM_TEST3_NAME          "vmem_alloc"
-#define SPLAT_KMEM_TEST3_DESC          "Memory allocation test (vmem_alloc)"
-
-#define SPLAT_KMEM_TEST4_ID            0x0104
-#define SPLAT_KMEM_TEST4_NAME          "vmem_zalloc"
-#define SPLAT_KMEM_TEST4_DESC          "Memory allocation test (vmem_zalloc)"
-
-#define SPLAT_KMEM_TEST5_ID            0x0105
-#define SPLAT_KMEM_TEST5_NAME          "slab_small"
-#define SPLAT_KMEM_TEST5_DESC          "Slab ctor/dtor test (small)"
-
-#define SPLAT_KMEM_TEST6_ID            0x0106
-#define SPLAT_KMEM_TEST6_NAME          "slab_large"
-#define SPLAT_KMEM_TEST6_DESC          "Slab ctor/dtor test (large)"
-
-#define SPLAT_KMEM_TEST7_ID            0x0107
-#define SPLAT_KMEM_TEST7_NAME          "slab_align"
-#define SPLAT_KMEM_TEST7_DESC          "Slab alignment test"
-
-#define SPLAT_KMEM_TEST8_ID            0x0108
-#define SPLAT_KMEM_TEST8_NAME          "slab_reap"
-#define SPLAT_KMEM_TEST8_DESC          "Slab reaping test"
-
-#define SPLAT_KMEM_TEST9_ID            0x0109
-#define SPLAT_KMEM_TEST9_NAME          "slab_age"
-#define SPLAT_KMEM_TEST9_DESC          "Slab aging test"
-
-#define SPLAT_KMEM_TEST10_ID           0x010a
-#define SPLAT_KMEM_TEST10_NAME         "slab_lock"
-#define SPLAT_KMEM_TEST10_DESC         "Slab locking test"
-
-#if 0
-#define SPLAT_KMEM_TEST11_ID           0x010b
-#define SPLAT_KMEM_TEST11_NAME         "slab_overcommit"
-#define SPLAT_KMEM_TEST11_DESC         "Slab memory overcommit test"
-#endif
-
-#define SPLAT_KMEM_TEST13_ID           0x010d
-#define SPLAT_KMEM_TEST13_NAME         "slab_reclaim"
-#define SPLAT_KMEM_TEST13_DESC         "Slab direct memory reclaim test"
-
-#define SPLAT_KMEM_ALLOC_COUNT         10
-#define SPLAT_VMEM_ALLOC_COUNT         10
-
-
-static int
-splat_kmem_test1(struct file *file, void *arg)
-{
-       void *ptr[SPLAT_KMEM_ALLOC_COUNT];
-       int size = PAGE_SIZE;
-       int i, count, rc = 0;
-
-       while ((!rc) && (size <= spl_kmem_alloc_warn)) {
-               count = 0;
-
-               for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++) {
-                       ptr[i] = kmem_alloc(size, KM_SLEEP);
-                       if (ptr[i])
-                               count++;
-               }
-
-               for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++)
-                       if (ptr[i])
-                               kmem_free(ptr[i], size);
-
-               splat_vprint(file, SPLAT_KMEM_TEST1_NAME,
-                          "%d byte allocations, %d/%d successful\n",
-                          size, count, SPLAT_KMEM_ALLOC_COUNT);
-               if (count != SPLAT_KMEM_ALLOC_COUNT)
-                       rc = -ENOMEM;
-
-               size *= 2;
-       }
-
-       return rc;
-}
-
-static int
-splat_kmem_test2(struct file *file, void *arg)
-{
-       void *ptr[SPLAT_KMEM_ALLOC_COUNT];
-       int size = PAGE_SIZE;
-       int i, j, count, rc = 0;
-
-       while ((!rc) && (size <= spl_kmem_alloc_warn)) {
-               count = 0;
-
-               for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++) {
-                       ptr[i] = kmem_zalloc(size, KM_SLEEP);
-                       if (ptr[i])
-                               count++;
-               }
-
-               /* Ensure buffer has been zero filled */
-               for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++) {
-                       for (j = 0; j < size; j++) {
-                               if (((char *)ptr[i])[j] != '\0') {
-                                       splat_vprint(file,SPLAT_KMEM_TEST2_NAME,
-                                                 "%d-byte allocation was "
-                                                 "not zeroed\n", size);
-                                       rc = -EFAULT;
-                               }
-                       }
-               }
-
-               for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++)
-                       if (ptr[i])
-                               kmem_free(ptr[i], size);
-
-               splat_vprint(file, SPLAT_KMEM_TEST2_NAME,
-                          "%d byte allocations, %d/%d successful\n",
-                          size, count, SPLAT_KMEM_ALLOC_COUNT);
-               if (count != SPLAT_KMEM_ALLOC_COUNT)
-                       rc = -ENOMEM;
-
-               size *= 2;
-       }
-
-       return rc;
-}
-
-static int
-splat_kmem_test3(struct file *file, void *arg)
-{
-       void *ptr[SPLAT_VMEM_ALLOC_COUNT];
-       int size = PAGE_SIZE;
-       int i, count, rc = 0;
-
-       /*
-        * Test up to 4x the maximum kmem_alloc() size to ensure both
-        * the kmem_alloc() and vmem_alloc() call paths are used.
-        */
-       while ((!rc) && (size <= (4 * spl_kmem_alloc_max))) {
-               count = 0;
-
-               for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++) {
-                       ptr[i] = vmem_alloc(size, KM_SLEEP);
-                       if (ptr[i])
-                               count++;
-               }
-
-               for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++)
-                       if (ptr[i])
-                               vmem_free(ptr[i], size);
-
-               splat_vprint(file, SPLAT_KMEM_TEST3_NAME,
-                          "%d byte allocations, %d/%d successful\n",
-                          size, count, SPLAT_VMEM_ALLOC_COUNT);
-               if (count != SPLAT_VMEM_ALLOC_COUNT)
-                       rc = -ENOMEM;
-
-               size *= 2;
-       }
-
-       return rc;
-}
-
-static int
-splat_kmem_test4(struct file *file, void *arg)
-{
-       void *ptr[SPLAT_VMEM_ALLOC_COUNT];
-       int size = PAGE_SIZE;
-       int i, j, count, rc = 0;
-
-       /*
-        * Test up to 4x the maximum kmem_zalloc() size to ensure both
-        * the kmem_zalloc() and vmem_zalloc() call paths are used.
-        */
-       while ((!rc) && (size <= (4 * spl_kmem_alloc_max))) {
-               count = 0;
-
-               for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++) {
-                       ptr[i] = vmem_zalloc(size, KM_SLEEP);
-                       if (ptr[i])
-                               count++;
-               }
-
-               /* Ensure buffer has been zero filled */
-               for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++) {
-                       for (j = 0; j < size; j++) {
-                               if (((char *)ptr[i])[j] != '\0') {
-                                       splat_vprint(file, SPLAT_KMEM_TEST4_NAME,
-                                                 "%d-byte allocation was "
-                                                 "not zeroed\n", size);
-                                       rc = -EFAULT;
-                               }
-                       }
-               }
-
-               for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++)
-                       if (ptr[i])
-                               vmem_free(ptr[i], size);
-
-               splat_vprint(file, SPLAT_KMEM_TEST4_NAME,
-                          "%d byte allocations, %d/%d successful\n",
-                          size, count, SPLAT_VMEM_ALLOC_COUNT);
-               if (count != SPLAT_VMEM_ALLOC_COUNT)
-                       rc = -ENOMEM;
-
-               size *= 2;
-       }
-
-       return rc;
-}
-
-#define SPLAT_KMEM_TEST_MAGIC          0x004488CCUL
-#define SPLAT_KMEM_CACHE_NAME          "kmem_test"
-#define SPLAT_KMEM_OBJ_COUNT           1024
-#define SPLAT_KMEM_OBJ_RECLAIM         32 /* objects */
-#define SPLAT_KMEM_THREADS             32
-
-#define KCP_FLAG_READY                 0x01
-
-typedef struct kmem_cache_data {
-       unsigned long kcd_magic;
-       struct list_head kcd_node;
-       int kcd_flag;
-       char kcd_buf[0];
-} kmem_cache_data_t;
-
-typedef struct kmem_cache_thread {
-       spinlock_t kct_lock;
-       int kct_id;
-       struct list_head kct_list;
-} kmem_cache_thread_t;
-
-typedef struct kmem_cache_priv {
-       unsigned long kcp_magic;
-       struct file *kcp_file;
-       kmem_cache_t *kcp_cache;
-       spinlock_t kcp_lock;
-       spl_wait_queue_head_t kcp_ctl_waitq;
-       spl_wait_queue_head_t kcp_thr_waitq;
-       int kcp_flags;
-       int kcp_kct_count;
-       kmem_cache_thread_t *kcp_kct[SPLAT_KMEM_THREADS];
-       int kcp_size;
-       int kcp_align;
-       int kcp_count;
-       int kcp_alloc;
-       int kcp_rc;
-} kmem_cache_priv_t;
-
-static kmem_cache_priv_t *
-splat_kmem_cache_test_kcp_alloc(struct file *file, char *name,
-                               int size, int align, int alloc)
-{
-       kmem_cache_priv_t *kcp;
-
-       kcp = kmem_zalloc(sizeof(kmem_cache_priv_t), KM_SLEEP);
-       if (!kcp)
-               return NULL;
-
-       kcp->kcp_magic = SPLAT_KMEM_TEST_MAGIC;
-       kcp->kcp_file = file;
-       kcp->kcp_cache = NULL;
-       spin_lock_init(&kcp->kcp_lock);
-       init_waitqueue_head(&kcp->kcp_ctl_waitq);
-       init_waitqueue_head(&kcp->kcp_thr_waitq);
-       kcp->kcp_flags = 0;
-       kcp->kcp_kct_count = -1;
-       kcp->kcp_size = size;
-       kcp->kcp_align = align;
-       kcp->kcp_count = 0;
-       kcp->kcp_alloc = alloc;
-       kcp->kcp_rc = 0;
-
-       return kcp;
-}
-
-static void
-splat_kmem_cache_test_kcp_free(kmem_cache_priv_t *kcp)
-{
-       kmem_free(kcp, sizeof(kmem_cache_priv_t));
-}
-
-static kmem_cache_thread_t *
-splat_kmem_cache_test_kct_alloc(kmem_cache_priv_t *kcp, int id)
-{
-       kmem_cache_thread_t *kct;
-
-       ASSERT3S(id, <, SPLAT_KMEM_THREADS);
-       ASSERT(kcp->kcp_kct[id] == NULL);
-
-       kct = kmem_zalloc(sizeof(kmem_cache_thread_t), KM_SLEEP);
-       if (!kct)
-               return NULL;
-
-       spin_lock_init(&kct->kct_lock);
-       kct->kct_id = id;
-       INIT_LIST_HEAD(&kct->kct_list);
-
-       spin_lock(&kcp->kcp_lock);
-       kcp->kcp_kct[id] = kct;
-       spin_unlock(&kcp->kcp_lock);
-
-       return kct;
-}
-
-static void
-splat_kmem_cache_test_kct_free(kmem_cache_priv_t *kcp,
-                              kmem_cache_thread_t *kct)
-{
-       spin_lock(&kcp->kcp_lock);
-       kcp->kcp_kct[kct->kct_id] = NULL;
-       spin_unlock(&kcp->kcp_lock);
-
-       kmem_free(kct, sizeof(kmem_cache_thread_t));
-}
-
-static void
-splat_kmem_cache_test_kcd_free(kmem_cache_priv_t *kcp,
-                              kmem_cache_thread_t *kct)
-{
-       kmem_cache_data_t *kcd;
-
-       spin_lock(&kct->kct_lock);
-       while (!list_empty(&kct->kct_list)) {
-               kcd = list_entry(kct->kct_list.next,
-                                kmem_cache_data_t, kcd_node);
-               list_del(&kcd->kcd_node);
-               spin_unlock(&kct->kct_lock);
-
-               kmem_cache_free(kcp->kcp_cache, kcd);
-
-               spin_lock(&kct->kct_lock);
-       }
-       spin_unlock(&kct->kct_lock);
-}
-
-static int
-splat_kmem_cache_test_kcd_alloc(kmem_cache_priv_t *kcp,
-                               kmem_cache_thread_t *kct, int count)
-{
-       kmem_cache_data_t *kcd;
-       int i;
-
-       for (i = 0; i < count; i++) {
-               kcd = kmem_cache_alloc(kcp->kcp_cache, KM_SLEEP);
-               if (kcd == NULL) {
-                       splat_kmem_cache_test_kcd_free(kcp, kct);
-                       return -ENOMEM;
-               }
-
-               spin_lock(&kct->kct_lock);
-               list_add_tail(&kcd->kcd_node, &kct->kct_list);
-               spin_unlock(&kct->kct_lock);
-       }
-
-       return 0;
-}
-
-static void
-splat_kmem_cache_test_debug(struct file *file, char *name,
-                           kmem_cache_priv_t *kcp)
-{
-       int j;
-
-       splat_vprint(file, name, "%s cache objects %d",
-            kcp->kcp_cache->skc_name, kcp->kcp_count);
-
-       if (kcp->kcp_cache->skc_flags & (KMC_KMEM | KMC_VMEM)) {
-               splat_vprint(file, name, ", slabs %u/%u objs %u/%u",
-                    (unsigned)kcp->kcp_cache->skc_slab_alloc,
-                    (unsigned)kcp->kcp_cache->skc_slab_total,
-                    (unsigned)kcp->kcp_cache->skc_obj_alloc,
-                    (unsigned)kcp->kcp_cache->skc_obj_total);
-
-               if (!(kcp->kcp_cache->skc_flags & KMC_NOMAGAZINE)) {
-                       splat_vprint(file, name, "%s", "mags");
-
-                       for_each_online_cpu(j)
-                               splat_print(file, "%u/%u ",
-                                    kcp->kcp_cache->skc_mag[j]->skm_avail,
-                                    kcp->kcp_cache->skc_mag[j]->skm_size);
-               }
-       }
-
-       splat_print(file, "%s\n", "");
-}
-
-static int
-splat_kmem_cache_test_constructor(void *ptr, void *priv, int flags)
-{
-       kmem_cache_priv_t *kcp = (kmem_cache_priv_t *)priv;
-       kmem_cache_data_t *kcd = (kmem_cache_data_t *)ptr;
-
-       if (kcd && kcp) {
-               kcd->kcd_magic = kcp->kcp_magic;
-               INIT_LIST_HEAD(&kcd->kcd_node);
-               kcd->kcd_flag = 1;
-               memset(kcd->kcd_buf, 0xaa, kcp->kcp_size - (sizeof *kcd));
-               kcp->kcp_count++;
-       }
-
-       return 0;
-}
-
-static void
-splat_kmem_cache_test_destructor(void *ptr, void *priv)
-{
-       kmem_cache_priv_t *kcp = (kmem_cache_priv_t *)priv;
-       kmem_cache_data_t *kcd = (kmem_cache_data_t *)ptr;
-
-       if (kcd && kcp) {
-               kcd->kcd_magic = 0;
-               kcd->kcd_flag = 0;
-               memset(kcd->kcd_buf, 0xbb, kcp->kcp_size - (sizeof *kcd));
-               kcp->kcp_count--;
-       }
-
-       return;
-}
-
-/*
- * Generic reclaim function which assumes that all objects may
- * be reclaimed at any time.  We free a small  percentage of the
- * objects linked off the kcp or kct[] every time we are called.
- */
-static void
-splat_kmem_cache_test_reclaim(void *priv)
-{
-       kmem_cache_priv_t *kcp = (kmem_cache_priv_t *)priv;
-       kmem_cache_thread_t *kct;
-       kmem_cache_data_t *kcd;
-       LIST_HEAD(reclaim);
-       int i, count;
-
-       ASSERT(kcp->kcp_magic == SPLAT_KMEM_TEST_MAGIC);
-
-       /* For each kct thread reclaim some objects */
-       spin_lock(&kcp->kcp_lock);
-       for (i = 0; i < SPLAT_KMEM_THREADS; i++) {
-               kct = kcp->kcp_kct[i];
-               if (!kct)
-                       continue;
-
-               spin_unlock(&kcp->kcp_lock);
-               spin_lock(&kct->kct_lock);
-
-               count = SPLAT_KMEM_OBJ_RECLAIM;
-               while (count > 0 && !list_empty(&kct->kct_list)) {
-                       kcd = list_entry(kct->kct_list.next,
-                                        kmem_cache_data_t, kcd_node);
-                       list_del(&kcd->kcd_node);
-                       list_add(&kcd->kcd_node, &reclaim);
-                       count--;
-               }
-
-               spin_unlock(&kct->kct_lock);
-               spin_lock(&kcp->kcp_lock);
-       }
-       spin_unlock(&kcp->kcp_lock);
-
-       /* Freed outside the spin lock */
-       while (!list_empty(&reclaim)) {
-               kcd = list_entry(reclaim.next, kmem_cache_data_t, kcd_node);
-               list_del(&kcd->kcd_node);
-               kmem_cache_free(kcp->kcp_cache, kcd);
-       }
-
-       return;
-}
-
-static int
-splat_kmem_cache_test_threads(kmem_cache_priv_t *kcp, int threads)
-{
-       int rc;
-
-       spin_lock(&kcp->kcp_lock);
-       rc = (kcp->kcp_kct_count == threads);
-       spin_unlock(&kcp->kcp_lock);
-
-       return rc;
-}
-
-static int
-splat_kmem_cache_test_flags(kmem_cache_priv_t *kcp, int flags)
-{
-       int rc;
-
-       spin_lock(&kcp->kcp_lock);
-       rc = (kcp->kcp_flags & flags);
-       spin_unlock(&kcp->kcp_lock);
-
-       return rc;
-}
-
-static void
-splat_kmem_cache_test_thread(void *arg)
-{
-       kmem_cache_priv_t *kcp = (kmem_cache_priv_t *)arg;
-       kmem_cache_thread_t *kct;
-       int rc = 0, id;
-
-       ASSERT(kcp->kcp_magic == SPLAT_KMEM_TEST_MAGIC);
-
-       /* Assign thread ids */
-       spin_lock(&kcp->kcp_lock);
-       if (kcp->kcp_kct_count == -1)
-               kcp->kcp_kct_count = 0;
-
-       id = kcp->kcp_kct_count;
-       kcp->kcp_kct_count++;
-       spin_unlock(&kcp->kcp_lock);
-
-       kct = splat_kmem_cache_test_kct_alloc(kcp, id);
-       if (!kct) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       /* Wait for all threads to have started and report they are ready */
-       if (kcp->kcp_kct_count == SPLAT_KMEM_THREADS)
-               wake_up(&kcp->kcp_ctl_waitq);
-
-       wait_event(kcp->kcp_thr_waitq,
-               splat_kmem_cache_test_flags(kcp, KCP_FLAG_READY));
-
-       /* Create and destroy objects */
-       rc = splat_kmem_cache_test_kcd_alloc(kcp, kct, kcp->kcp_alloc);
-       splat_kmem_cache_test_kcd_free(kcp, kct);
-out:
-       if (kct)
-               splat_kmem_cache_test_kct_free(kcp, kct);
-
-       spin_lock(&kcp->kcp_lock);
-       if (!kcp->kcp_rc)
-               kcp->kcp_rc = rc;
-
-       if ((--kcp->kcp_kct_count) == 0)
-               wake_up(&kcp->kcp_ctl_waitq);
-
-       spin_unlock(&kcp->kcp_lock);
-
-       thread_exit();
-}
-
-static int
-splat_kmem_cache_test(struct file *file, void *arg, char *name,
-    int size, int align, int flags)
-{
-       kmem_cache_priv_t *kcp = NULL;
-       kmem_cache_data_t **kcd = NULL;
-       int i, rc = 0, objs = 0;
-
-       /* Limit size for low memory machines (1/128 of memory) */
-       size = MIN(size, (physmem * PAGE_SIZE) >> 7);
-
-       splat_vprint(file, name,
-           "Testing size=%d, align=%d, flags=0x%04x\n",
-           size, align, flags);
-
-       kcp = splat_kmem_cache_test_kcp_alloc(file, name, size, align, 0);
-       if (!kcp) {
-               splat_vprint(file, name, "Unable to create '%s'\n", "kcp");
-               return (-ENOMEM);
-       }
-
-       kcp->kcp_cache = kmem_cache_create(SPLAT_KMEM_CACHE_NAME,
-           kcp->kcp_size, kcp->kcp_align,
-           splat_kmem_cache_test_constructor,
-           splat_kmem_cache_test_destructor,
-           NULL, kcp, NULL, flags);
-       if (kcp->kcp_cache == NULL) {
-               splat_vprint(file, name, "Unable to create "
-                   "name='%s', size=%d, align=%d, flags=0x%x\n",
-                   SPLAT_KMEM_CACHE_NAME, size, align, flags);
-               rc = -ENOMEM;
-               goto out_free;
-       }
-
-       /*
-        * Allocate several slabs worth of objects to verify functionality.
-        * However, on 32-bit systems with limited address space constrain
-        * it to a single slab for the purposes of this test.
-        */
-#ifdef _LP64
-       objs = kcp->kcp_cache->skc_slab_objs * 4;
-#else
-       objs = 1;
-#endif
-       kcd = kmem_zalloc(sizeof (kmem_cache_data_t *) * objs, KM_SLEEP);
-       if (kcd == NULL) {
-               splat_vprint(file, name, "Unable to allocate pointers "
-                   "for %d objects\n", objs);
-               rc = -ENOMEM;
-               goto out_free;
-       }
-
-       for (i = 0; i < objs; i++) {
-               kcd[i] = kmem_cache_alloc(kcp->kcp_cache, KM_SLEEP);
-               if (kcd[i] == NULL) {
-                       splat_vprint(file, name, "Unable to allocate "
-                           "from '%s'\n", SPLAT_KMEM_CACHE_NAME);
-                       rc = -EINVAL;
-                       goto out_free;
-               }
-
-               if (!kcd[i]->kcd_flag) {
-                       splat_vprint(file, name, "Failed to run constructor "
-                           "for '%s'\n", SPLAT_KMEM_CACHE_NAME);
-                       rc = -EINVAL;
-                       goto out_free;
-               }
-
-               if (kcd[i]->kcd_magic != kcp->kcp_magic) {
-                       splat_vprint(file, name,
-                           "Failed to pass private data to constructor "
-                           "for '%s'\n", SPLAT_KMEM_CACHE_NAME);
-                       rc = -EINVAL;
-                       goto out_free;
-               }
-       }
-
-       for (i = 0; i < objs; i++) {
-               kmem_cache_free(kcp->kcp_cache, kcd[i]);
-
-               /* Destructors are run for every kmem_cache_free() */
-               if (kcd[i]->kcd_flag) {
-                       splat_vprint(file, name,
-                           "Failed to run destructor for '%s'\n",
-                           SPLAT_KMEM_CACHE_NAME);
-                       rc = -EINVAL;
-                       goto out_free;
-               }
-       }
-
-       if (kcp->kcp_count) {
-               splat_vprint(file, name,
-                   "Failed to run destructor on all slab objects for '%s'\n",
-                   SPLAT_KMEM_CACHE_NAME);
-               rc = -EINVAL;
-       }
-
-       kmem_free(kcd, sizeof (kmem_cache_data_t *) * objs);
-       kmem_cache_destroy(kcp->kcp_cache);
-
-       splat_kmem_cache_test_kcp_free(kcp);
-       splat_vprint(file, name,
-           "Success ran alloc'd/free'd %d objects of size %d\n",
-           objs, size);
-
-       return (rc);
-
-out_free:
-       if (kcd) {
-               for (i = 0; i < objs; i++) {
-                       if (kcd[i] != NULL)
-                               kmem_cache_free(kcp->kcp_cache, kcd[i]);
-               }
-
-               kmem_free(kcd, sizeof (kmem_cache_data_t *) * objs);
-       }
-
-       if (kcp->kcp_cache)
-               kmem_cache_destroy(kcp->kcp_cache);
-
-       splat_kmem_cache_test_kcp_free(kcp);
-
-       return (rc);
-}
-
-static int
-splat_kmem_cache_thread_test(struct file *file, void *arg, char *name,
-                            int size, int alloc, int max_time)
-{
-       kmem_cache_priv_t *kcp;
-       kthread_t *thr;
-       struct timespec start, stop, delta;
-       char cache_name[32];
-       int i, rc = 0;
-
-       kcp = splat_kmem_cache_test_kcp_alloc(file, name, size, 0, alloc);
-       if (!kcp) {
-               splat_vprint(file, name, "Unable to create '%s'\n", "kcp");
-               return -ENOMEM;
-       }
-
-       (void)snprintf(cache_name, 32, "%s-%d-%d",
-                      SPLAT_KMEM_CACHE_NAME, size, alloc);
-       kcp->kcp_cache =
-               kmem_cache_create(cache_name, kcp->kcp_size, 0,
-                                 splat_kmem_cache_test_constructor,
-                                 splat_kmem_cache_test_destructor,
-                                 splat_kmem_cache_test_reclaim,
-                                 kcp, NULL, 0);
-       if (!kcp->kcp_cache) {
-               splat_vprint(file, name, "Unable to create '%s'\n", cache_name);
-               rc = -ENOMEM;
-               goto out_kcp;
-       }
-
-       getnstimeofday(&start);
-
-       for (i = 0; i < SPLAT_KMEM_THREADS; i++) {
-               thr = thread_create(NULL, 0,
-                                   splat_kmem_cache_test_thread,
-                                   kcp, 0, &p0, TS_RUN, defclsyspri);
-               if (thr == NULL) {
-                       rc = -ESRCH;
-                       goto out_cache;
-               }
-       }
-
-       /* Sleep until all threads have started, then set the ready
-        * flag and wake them all up for maximum concurrency. */
-       wait_event(kcp->kcp_ctl_waitq,
-                  splat_kmem_cache_test_threads(kcp, SPLAT_KMEM_THREADS));
-
-       spin_lock(&kcp->kcp_lock);
-       kcp->kcp_flags |= KCP_FLAG_READY;
-       spin_unlock(&kcp->kcp_lock);
-       wake_up_all(&kcp->kcp_thr_waitq);
-
-       /* Sleep until all thread have finished */
-       wait_event(kcp->kcp_ctl_waitq, splat_kmem_cache_test_threads(kcp, 0));
-
-       getnstimeofday(&stop);
-       delta = timespec_sub(stop, start);
-
-       splat_vprint(file, name,
-                    "%-22s %2ld.%09ld\t"
-                    "%lu/%lu/%lu\t%lu/%lu/%lu\n",
-                    kcp->kcp_cache->skc_name,
-                    delta.tv_sec, delta.tv_nsec,
-                    (unsigned long)kcp->kcp_cache->skc_slab_total,
-                    (unsigned long)kcp->kcp_cache->skc_slab_max,
-                    (unsigned long)(kcp->kcp_alloc *
-                                   SPLAT_KMEM_THREADS /
-                                   SPL_KMEM_CACHE_OBJ_PER_SLAB),
-                    (unsigned long)kcp->kcp_cache->skc_obj_total,
-                    (unsigned long)kcp->kcp_cache->skc_obj_max,
-                    (unsigned long)(kcp->kcp_alloc *
-                                    SPLAT_KMEM_THREADS));
-
-       if (delta.tv_sec >= max_time)
-               rc = -ETIME;
-
-       if (!rc && kcp->kcp_rc)
-               rc = kcp->kcp_rc;
-
-out_cache:
-       kmem_cache_destroy(kcp->kcp_cache);
-out_kcp:
-       splat_kmem_cache_test_kcp_free(kcp);
-       return rc;
-}
-
-/* Validate small object cache behavior for dynamic/kmem/vmem caches */
-static int
-splat_kmem_test5(struct file *file, void *arg)
-{
-       char *name = SPLAT_KMEM_TEST5_NAME;
-       int i, rc = 0;
-
-       /* Randomly pick small object sizes and alignments. */
-       for (i = 0; i < 100; i++) {
-               int size, align, flags = 0;
-               uint32_t rnd;
-
-               /* Evenly distribute tests over all value cache types */
-               get_random_bytes((void *)&rnd, sizeof (uint32_t));
-               switch (rnd & 0x03) {
-               default:
-               case 0x00:
-                       flags = 0;
-                       break;
-               case 0x01:
-                       flags = KMC_KMEM;
-                       break;
-               case 0x02:
-                       flags = KMC_VMEM;
-                       break;
-               case 0x03:
-                       flags = KMC_SLAB;
-                       break;
-               }
-
-               /* The following flags are set with a 1/10 chance */
-               flags |= ((((rnd >> 8) % 10) == 0) ? KMC_OFFSLAB : 0);
-               flags |= ((((rnd >> 16) % 10) == 0) ? KMC_NOEMERGENCY : 0);
-
-               /* 32b - PAGE_SIZE */
-               get_random_bytes((void *)&rnd, sizeof (uint32_t));
-               size = MAX(rnd % (PAGE_SIZE + 1), 32);
-
-               /* 2^N where (3 <= N <= PAGE_SHIFT) */
-               get_random_bytes((void *)&rnd, sizeof (uint32_t));
-               align = (1 << MAX(3, rnd % (PAGE_SHIFT + 1)));
-
-               rc = splat_kmem_cache_test(file, arg, name, size, align, flags);
-               if (rc)
-                       return (rc);
-       }
-
-       return (rc);
-}
-
-/*
- * Validate large object cache behavior for dynamic/kmem/vmem caches
- */
-static int
-splat_kmem_test6(struct file *file, void *arg)
-{
-       char *name = SPLAT_KMEM_TEST6_NAME;
-       int i, max_size, rc = 0;
-
-       /* Randomly pick large object sizes and alignments. */
-       for (i = 0; i < 100; i++) {
-               int size, align, flags = 0;
-               uint32_t rnd;
-
-               /* Evenly distribute tests over all value cache types */
-               get_random_bytes((void *)&rnd, sizeof (uint32_t));
-               switch (rnd & 0x03) {
-               default:
-               case 0x00:
-                       flags = 0;
-                       max_size = (SPL_KMEM_CACHE_MAX_SIZE * 1024 * 1024) / 2;
-                       break;
-               case 0x01:
-                       flags = KMC_KMEM;
-                       max_size = (SPL_MAX_ORDER_NR_PAGES - 2) * PAGE_SIZE;
-                       break;
-               case 0x02:
-                       flags = KMC_VMEM;
-                       max_size = (SPL_KMEM_CACHE_MAX_SIZE * 1024 * 1024) / 2;
-                       break;
-               case 0x03:
-                       flags = KMC_SLAB;
-                       max_size = SPL_MAX_KMEM_ORDER_NR_PAGES * PAGE_SIZE;
-                       break;
-               }
-
-               /* The following flags are set with a 1/10 chance */
-               flags |= ((((rnd >> 8) % 10) == 0) ? KMC_OFFSLAB : 0);
-               flags |= ((((rnd >> 16) % 10) == 0) ? KMC_NOEMERGENCY : 0);
-
-               /* PAGE_SIZE - max_size */
-               get_random_bytes((void *)&rnd, sizeof (uint32_t));
-               size = MAX(rnd % (max_size + 1), PAGE_SIZE),
-
-               /* 2^N where (3 <= N <= PAGE_SHIFT) */
-               get_random_bytes((void *)&rnd, sizeof (uint32_t));
-               align = (1 << MAX(3, rnd % (PAGE_SHIFT + 1)));
-
-               rc = splat_kmem_cache_test(file, arg, name, size, align, flags);
-               if (rc)
-                       return (rc);
-       }
-
-       return (rc);
-}
-
-/*
- * Validate object alignment cache behavior for caches
- */
-static int
-splat_kmem_test7(struct file *file, void *arg)
-{
-       char *name = SPLAT_KMEM_TEST7_NAME;
-       int max_size = (SPL_KMEM_CACHE_MAX_SIZE * 1024 * 1024) / 2;
-       int i, rc;
-
-       for (i = SPL_KMEM_CACHE_ALIGN; i <= PAGE_SIZE; i *= 2) {
-               uint32_t size;
-
-               get_random_bytes((void *)&size, sizeof (uint32_t));
-               size = MAX(size % (max_size + 1), 32);
-
-               rc = splat_kmem_cache_test(file, arg, name, size, i, 0);
-               if (rc)
-                       return rc;
-
-               rc = splat_kmem_cache_test(file, arg, name, size, i,
-                   KMC_OFFSLAB);
-               if (rc)
-                       return rc;
-       }
-
-       return rc;
-}
-
-/*
- * Validate kmem_cache_reap() by requesting the slab cache free any objects
- * it can.  For a few reasons this may not immediately result in more free
- * memory even if objects are freed.  First off, due to fragmentation we
- * may not be able to reclaim any slabs.  Secondly, even if we do we fully
- * clear some slabs we will not want to immediately reclaim all of them
- * because we may contend with cache allocations and thrash.  What we want
- * to see is the slab size decrease more gradually as it becomes clear they
- * will not be needed.  This should be achievable in less than a minute.
- * If it takes longer than this something has gone wrong.
- */
-static int
-splat_kmem_test8(struct file *file, void *arg)
-{
-       kmem_cache_priv_t *kcp;
-       kmem_cache_thread_t *kct;
-       unsigned int spl_kmem_cache_expire_old;
-       int i, rc = 0;
-
-       /* Enable cache aging just for this test if it is disabled */
-       spl_kmem_cache_expire_old = spl_kmem_cache_expire;
-       spl_kmem_cache_expire = KMC_EXPIRE_AGE;
-
-       kcp = splat_kmem_cache_test_kcp_alloc(file, SPLAT_KMEM_TEST8_NAME,
-                                             256, 0, 0);
-       if (!kcp) {
-               splat_vprint(file, SPLAT_KMEM_TEST8_NAME,
-                            "Unable to create '%s'\n", "kcp");
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       kcp->kcp_cache =
-               kmem_cache_create(SPLAT_KMEM_CACHE_NAME, kcp->kcp_size, 0,
-                                 splat_kmem_cache_test_constructor,
-                                 splat_kmem_cache_test_destructor,
-                                 splat_kmem_cache_test_reclaim,
-                                 kcp, NULL, 0);
-       if (!kcp->kcp_cache) {
-               splat_vprint(file, SPLAT_KMEM_TEST8_NAME,
-                          "Unable to create '%s'\n", SPLAT_KMEM_CACHE_NAME);
-               rc = -ENOMEM;
-               goto out_kcp;
-       }
-
-       kct = splat_kmem_cache_test_kct_alloc(kcp, 0);
-       if (!kct) {
-               splat_vprint(file, SPLAT_KMEM_TEST8_NAME,
-                            "Unable to create '%s'\n", "kct");
-               rc = -ENOMEM;
-               goto out_cache;
-       }
-
-       rc = splat_kmem_cache_test_kcd_alloc(kcp, kct, SPLAT_KMEM_OBJ_COUNT);
-       if (rc) {
-               splat_vprint(file, SPLAT_KMEM_TEST8_NAME, "Unable to "
-                            "allocate from '%s'\n", SPLAT_KMEM_CACHE_NAME);
-               goto out_kct;
-       }
-
-       /* Force reclaim every 1/10 a second for 60 seconds. */
-       for (i = 0; i < 600; i++) {
-               kmem_cache_reap_now(kcp->kcp_cache);
-               splat_kmem_cache_test_debug(file, SPLAT_KMEM_TEST8_NAME, kcp);
-
-               if (kcp->kcp_count == 0)
-                       break;
-
-               set_current_state(TASK_INTERRUPTIBLE);
-               schedule_timeout(HZ / 10);
-       }
-
-       if (kcp->kcp_count == 0) {
-               splat_vprint(file, SPLAT_KMEM_TEST8_NAME,
-                       "Successfully created %d objects "
-                       "in cache %s and reclaimed them\n",
-                       SPLAT_KMEM_OBJ_COUNT, SPLAT_KMEM_CACHE_NAME);
-       } else {
-               splat_vprint(file, SPLAT_KMEM_TEST8_NAME,
-                       "Failed to reclaim %u/%d objects from cache %s\n",
-                       (unsigned)kcp->kcp_count,
-                       SPLAT_KMEM_OBJ_COUNT, SPLAT_KMEM_CACHE_NAME);
-               rc = -ENOMEM;
-       }
-
-       /* Cleanup our mess (for failure case of time expiring) */
-       splat_kmem_cache_test_kcd_free(kcp, kct);
-out_kct:
-       splat_kmem_cache_test_kct_free(kcp, kct);
-out_cache:
-       kmem_cache_destroy(kcp->kcp_cache);
-out_kcp:
-       splat_kmem_cache_test_kcp_free(kcp);
-out:
-       spl_kmem_cache_expire = spl_kmem_cache_expire_old;
-
-       return rc;
-}
-
-/* Test cache aging, we have allocated a large number of objects thus
- * creating a large number of slabs and then free'd them all.  However,
- * since there should be little memory pressure at the moment those
- * slabs have not been freed.  What we want to see is the slab size
- * decrease gradually as it becomes clear they will not be be needed.
- * This should be achievable in less than minute.  If it takes longer
- * than this something has gone wrong.
- */
-static int
-splat_kmem_test9(struct file *file, void *arg)
-{
-       kmem_cache_priv_t *kcp;
-       kmem_cache_thread_t *kct;
-       unsigned int spl_kmem_cache_expire_old;
-       int i, rc = 0, count = SPLAT_KMEM_OBJ_COUNT * 128;
-
-       /* Enable cache aging just for this test if it is disabled */
-       spl_kmem_cache_expire_old = spl_kmem_cache_expire;
-       spl_kmem_cache_expire = KMC_EXPIRE_AGE;
-
-       kcp = splat_kmem_cache_test_kcp_alloc(file, SPLAT_KMEM_TEST9_NAME,
-                                             256, 0, 0);
-       if (!kcp) {
-               splat_vprint(file, SPLAT_KMEM_TEST9_NAME,
-                            "Unable to create '%s'\n", "kcp");
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       kcp->kcp_cache =
-               kmem_cache_create(SPLAT_KMEM_CACHE_NAME, kcp->kcp_size, 0,
-                                 splat_kmem_cache_test_constructor,
-                                 splat_kmem_cache_test_destructor,
-                                 NULL, kcp, NULL, 0);
-       if (!kcp->kcp_cache) {
-               splat_vprint(file, SPLAT_KMEM_TEST9_NAME,
-                          "Unable to create '%s'\n", SPLAT_KMEM_CACHE_NAME);
-               rc = -ENOMEM;
-               goto out_kcp;
-       }
-
-       kct = splat_kmem_cache_test_kct_alloc(kcp, 0);
-       if (!kct) {
-               splat_vprint(file, SPLAT_KMEM_TEST8_NAME,
-                            "Unable to create '%s'\n", "kct");
-               rc = -ENOMEM;
-               goto out_cache;
-       }
-
-       rc = splat_kmem_cache_test_kcd_alloc(kcp, kct, count);
-       if (rc) {
-               splat_vprint(file, SPLAT_KMEM_TEST9_NAME, "Unable to "
-                            "allocate from '%s'\n", SPLAT_KMEM_CACHE_NAME);
-               goto out_kct;
-       }
-
-       splat_kmem_cache_test_kcd_free(kcp, kct);
-
-       for (i = 0; i < 60; i++) {
-               splat_kmem_cache_test_debug(file, SPLAT_KMEM_TEST9_NAME, kcp);
-
-               if (kcp->kcp_count == 0)
-                       break;
-
-               set_current_state(TASK_INTERRUPTIBLE);
-               schedule_timeout(HZ);
-       }
-
-       if (kcp->kcp_count == 0) {
-               splat_vprint(file, SPLAT_KMEM_TEST9_NAME,
-                       "Successfully created %d objects "
-                       "in cache %s and reclaimed them\n",
-                       count, SPLAT_KMEM_CACHE_NAME);
-       } else {
-               splat_vprint(file, SPLAT_KMEM_TEST9_NAME,
-                       "Failed to reclaim %u/%d objects from cache %s\n",
-                       (unsigned)kcp->kcp_count, count,
-                       SPLAT_KMEM_CACHE_NAME);
-               rc = -ENOMEM;
-       }
-
-out_kct:
-       splat_kmem_cache_test_kct_free(kcp, kct);
-out_cache:
-       kmem_cache_destroy(kcp->kcp_cache);
-out_kcp:
-       splat_kmem_cache_test_kcp_free(kcp);
-out:
-       spl_kmem_cache_expire = spl_kmem_cache_expire_old;
-
-       return rc;
-}
-
-/*
- * This test creates N threads with a shared kmem cache.  They then all
- * concurrently allocate and free from the cache to stress the locking and
- * concurrent cache performance.  If any one test takes longer than 5
- * seconds to complete it is treated as a failure and may indicate a
- * performance regression.  On my test system no one test takes more
- * than 1 second to complete so a 5x slowdown likely a problem.
- */
-static int
-splat_kmem_test10(struct file *file, void *arg)
-{
-       uint64_t size, alloc, maxsize, limit, rc = 0;
-
-#if defined(CONFIG_64BIT)
-       maxsize = (1024 * 1024);
-#else
-       maxsize = (128 * 1024);
-#endif
-
-       for (size = 32; size <= maxsize; size *= 2) {
-
-               splat_vprint(file, SPLAT_KMEM_TEST10_NAME, "%-22s  %s", "name",
-                            "time (sec)\tslabs       \tobjs    \thash\n");
-               splat_vprint(file, SPLAT_KMEM_TEST10_NAME, "%-22s  %s", "",
-                            "    \ttot/max/calc\ttot/max/calc\n");
-
-               for (alloc = 1; alloc <= 1024; alloc *= 2) {
-
-                       /* Skip tests which exceed 1/2 of memory. */
-                       limit = MIN(physmem * PAGE_SIZE,
-                           vmem_size(NULL, VMEM_ALLOC | VMEM_FREE)) / 2;
-                       if (size * alloc * SPLAT_KMEM_THREADS > limit)
-                               continue;
-
-                       rc = splat_kmem_cache_thread_test(file, arg,
-                               SPLAT_KMEM_TEST10_NAME, size, alloc, 5);
-                       if (rc)
-                               break;
-               }
-       }
-
-       return rc;
-}
-
-#if 0
-/*
- * This test creates N threads with a shared kmem cache which overcommits
- * memory by 4x.  This makes it impossible for the slab to satify the
- * thread requirements without having its reclaim hook run which will
- * free objects back for use.  This behavior is triggered by the linum VM
- * detecting a low memory condition on the node and invoking the shrinkers.
- * This should allow all the threads to complete while avoiding deadlock
- * and for the most part out of memory events.  This is very tough on the
- * system so it is possible the test app may get oom'ed.  This particular
- * test has proven troublesome on 32-bit archs with limited virtual
- * address space so it only run on 64-bit systems.
- */
-static int
-splat_kmem_test11(struct file *file, void *arg)
-{
-       uint64_t size, alloc, rc;
-
-       size = 8 * 1024;
-       alloc = ((4 * physmem * PAGE_SIZE) / size) / SPLAT_KMEM_THREADS;
-
-       splat_vprint(file, SPLAT_KMEM_TEST11_NAME, "%-22s  %s", "name",
-                    "time (sec)\tslabs       \tobjs    \thash\n");
-       splat_vprint(file, SPLAT_KMEM_TEST11_NAME, "%-22s  %s", "",
-                    "    \ttot/max/calc\ttot/max/calc\n");
-
-       rc = splat_kmem_cache_thread_test(file, arg,
-               SPLAT_KMEM_TEST11_NAME, size, alloc, 60);
-
-       return rc;
-}
-#endif
-
-typedef struct dummy_page {
-       struct list_head dp_list;
-       char             dp_pad[PAGE_SIZE - sizeof(struct list_head)];
-} dummy_page_t;
-
-/*
- * This test is designed to verify that direct reclaim is functioning as
- * expected.  We allocate a large number of objects thus creating a large
- * number of slabs.  We then apply memory pressure and expect that the
- * direct reclaim path can easily recover those slabs.  The registered
- * reclaim function will free the objects and the slab shrinker will call
- * it repeatedly until at least a single slab can be freed.
- *
- * Note it may not be possible to reclaim every last slab via direct reclaim
- * without a failure because the shrinker_rwsem may be contended.  For this
- * reason, quickly reclaiming 3/4 of the slabs is considered a success.
- *
- * This should all be possible within 10 seconds.  For reference, on a
- * system with 2G of memory this test takes roughly 0.2 seconds to run.
- * It may take longer on larger memory systems but should still easily
- * complete in the alloted 10 seconds.
- */
-static int
-splat_kmem_test13(struct file *file, void *arg)
-{
-       kmem_cache_priv_t *kcp;
-       kmem_cache_thread_t *kct;
-       dummy_page_t *dp;
-       struct list_head list;
-       struct timespec start, stop, delta = { 0, 0 };
-       int size, count, slabs, fails = 0;
-       int i, rc = 0, max_time = 10;
-
-       size = 128 * 1024;
-       count = MIN(physmem * PAGE_SIZE, vmem_size(NULL,
-           VMEM_ALLOC | VMEM_FREE)) / 4 / size;
-
-       kcp = splat_kmem_cache_test_kcp_alloc(file, SPLAT_KMEM_TEST13_NAME,
-                                             size, 0, 0);
-       if (!kcp) {
-               splat_vprint(file, SPLAT_KMEM_TEST13_NAME,
-                            "Unable to create '%s'\n", "kcp");
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       kcp->kcp_cache =
-               kmem_cache_create(SPLAT_KMEM_CACHE_NAME, kcp->kcp_size, 0,
-                                 splat_kmem_cache_test_constructor,
-                                 splat_kmem_cache_test_destructor,
-                                 splat_kmem_cache_test_reclaim,
-                                 kcp, NULL, 0);
-       if (!kcp->kcp_cache) {
-               splat_vprint(file, SPLAT_KMEM_TEST13_NAME,
-                            "Unable to create '%s'\n", SPLAT_KMEM_CACHE_NAME);
-               rc = -ENOMEM;
-               goto out_kcp;
-       }
-
-       kct = splat_kmem_cache_test_kct_alloc(kcp, 0);
-       if (!kct) {
-               splat_vprint(file, SPLAT_KMEM_TEST13_NAME,
-                            "Unable to create '%s'\n", "kct");
-               rc = -ENOMEM;
-               goto out_cache;
-       }
-
-       rc = splat_kmem_cache_test_kcd_alloc(kcp, kct, count);
-       if (rc) {
-               splat_vprint(file, SPLAT_KMEM_TEST13_NAME, "Unable to "
-                            "allocate from '%s'\n", SPLAT_KMEM_CACHE_NAME);
-               goto out_kct;
-       }
-
-       i = 0;
-       slabs = kcp->kcp_cache->skc_slab_total;
-       INIT_LIST_HEAD(&list);
-       getnstimeofday(&start);
-
-       /* Apply memory pressure */
-       while (kcp->kcp_cache->skc_slab_total > (slabs >> 2)) {
-
-               if ((i % 10000) == 0)
-                       splat_kmem_cache_test_debug(
-                           file, SPLAT_KMEM_TEST13_NAME, kcp);
-
-               getnstimeofday(&stop);
-               delta = timespec_sub(stop, start);
-               if (delta.tv_sec >= max_time) {
-                       splat_vprint(file, SPLAT_KMEM_TEST13_NAME,
-                                    "Failed to reclaim 3/4 of cache in %ds, "
-                                    "%u/%u slabs remain\n", max_time,
-                                    (unsigned)kcp->kcp_cache->skc_slab_total,
-                                    slabs);
-                       rc = -ETIME;
-                       break;
-               }
-
-               dp = (dummy_page_t *)__get_free_page(GFP_KERNEL);
-               if (!dp) {
-                       fails++;
-                       splat_vprint(file, SPLAT_KMEM_TEST13_NAME,
-                                    "Failed (%d) to allocate page with %u "
-                                    "slabs still in the cache\n", fails,
-                                    (unsigned)kcp->kcp_cache->skc_slab_total);
-                       continue;
-               }
-
-               list_add(&dp->dp_list, &list);
-               i++;
-       }
-
-       if (rc == 0)
-               splat_vprint(file, SPLAT_KMEM_TEST13_NAME,
-                            "Successfully created %u slabs and with %d alloc "
-                            "failures reclaimed 3/4 of them in %d.%03ds\n",
-                            slabs, fails,
-                            (int)delta.tv_sec, (int)delta.tv_nsec / 1000000);
-
-       /* Release memory pressure pages */
-       while (!list_empty(&list)) {
-               dp = list_entry(list.next, dummy_page_t, dp_list);
-               list_del_init(&dp->dp_list);
-               free_page((unsigned long)dp);
-       }
-
-       /* Release remaining kmem cache objects */
-       splat_kmem_cache_test_kcd_free(kcp, kct);
-out_kct:
-       splat_kmem_cache_test_kct_free(kcp, kct);
-out_cache:
-       kmem_cache_destroy(kcp->kcp_cache);
-out_kcp:
-       splat_kmem_cache_test_kcp_free(kcp);
-out:
-       return rc;
-}
-
-splat_subsystem_t *
-splat_kmem_init(void)
-{
-       splat_subsystem_t *sub;
-
-       sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-       if (sub == NULL)
-               return NULL;
-
-       memset(sub, 0, sizeof(*sub));
-       strncpy(sub->desc.name, SPLAT_KMEM_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_KMEM_DESC, SPLAT_DESC_SIZE);
-       INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-       spin_lock_init(&sub->test_lock);
-       sub->desc.id = SPLAT_SUBSYSTEM_KMEM;
-
-       splat_test_init(sub, SPLAT_KMEM_TEST1_NAME, SPLAT_KMEM_TEST1_DESC,
-                       SPLAT_KMEM_TEST1_ID, splat_kmem_test1);
-       splat_test_init(sub, SPLAT_KMEM_TEST2_NAME, SPLAT_KMEM_TEST2_DESC,
-                       SPLAT_KMEM_TEST2_ID, splat_kmem_test2);
-       splat_test_init(sub, SPLAT_KMEM_TEST3_NAME, SPLAT_KMEM_TEST3_DESC,
-                       SPLAT_KMEM_TEST3_ID, splat_kmem_test3);
-       splat_test_init(sub, SPLAT_KMEM_TEST4_NAME, SPLAT_KMEM_TEST4_DESC,
-                       SPLAT_KMEM_TEST4_ID, splat_kmem_test4);
-       splat_test_init(sub, SPLAT_KMEM_TEST5_NAME, SPLAT_KMEM_TEST5_DESC,
-                       SPLAT_KMEM_TEST5_ID, splat_kmem_test5);
-       splat_test_init(sub, SPLAT_KMEM_TEST6_NAME, SPLAT_KMEM_TEST6_DESC,
-                       SPLAT_KMEM_TEST6_ID, splat_kmem_test6);
-       splat_test_init(sub, SPLAT_KMEM_TEST7_NAME, SPLAT_KMEM_TEST7_DESC,
-                       SPLAT_KMEM_TEST7_ID, splat_kmem_test7);
-       splat_test_init(sub, SPLAT_KMEM_TEST8_NAME, SPLAT_KMEM_TEST8_DESC,
-                       SPLAT_KMEM_TEST8_ID, splat_kmem_test8);
-       splat_test_init(sub, SPLAT_KMEM_TEST9_NAME, SPLAT_KMEM_TEST9_DESC,
-                       SPLAT_KMEM_TEST9_ID, splat_kmem_test9);
-       splat_test_init(sub, SPLAT_KMEM_TEST10_NAME, SPLAT_KMEM_TEST10_DESC,
-                       SPLAT_KMEM_TEST10_ID, splat_kmem_test10);
-#if 0
-       splat_test_init(sub, SPLAT_KMEM_TEST11_NAME, SPLAT_KMEM_TEST11_DESC,
-                       SPLAT_KMEM_TEST11_ID, splat_kmem_test11);
-#endif
-       splat_test_init(sub, SPLAT_KMEM_TEST13_NAME, SPLAT_KMEM_TEST13_DESC,
-                       SPLAT_KMEM_TEST13_ID, splat_kmem_test13);
-
-       return sub;
-}
-
-void
-splat_kmem_fini(splat_subsystem_t *sub)
-{
-       ASSERT(sub);
-       splat_test_fini(sub, SPLAT_KMEM_TEST13_ID);
-#if 0
-       splat_test_fini(sub, SPLAT_KMEM_TEST11_ID);
-#endif
-       splat_test_fini(sub, SPLAT_KMEM_TEST10_ID);
-       splat_test_fini(sub, SPLAT_KMEM_TEST9_ID);
-       splat_test_fini(sub, SPLAT_KMEM_TEST8_ID);
-       splat_test_fini(sub, SPLAT_KMEM_TEST7_ID);
-       splat_test_fini(sub, SPLAT_KMEM_TEST6_ID);
-       splat_test_fini(sub, SPLAT_KMEM_TEST5_ID);
-       splat_test_fini(sub, SPLAT_KMEM_TEST4_ID);
-       splat_test_fini(sub, SPLAT_KMEM_TEST3_ID);
-       splat_test_fini(sub, SPLAT_KMEM_TEST2_ID);
-       splat_test_fini(sub, SPLAT_KMEM_TEST1_ID);
-
-       kfree(sub);
-}
-
-int
-splat_kmem_id(void) {
-       return SPLAT_SUBSYSTEM_KMEM;
-}
diff --git a/module/splat/splat-kobj.c b/module/splat/splat-kobj.c
deleted file mode 100644 (file)
index bd44de3..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Kobj Tests.
- */
-
-#include <sys/kobj.h>
-#include "splat-internal.h"
-
-#define SPLAT_KOBJ_NAME                        "kobj"
-#define SPLAT_KOBJ_DESC                        "Kernel Kobj Tests"
-
-#define SPLAT_KOBJ_TEST1_ID            0x0a01
-#define SPLAT_KOBJ_TEST1_NAME          "open"
-#define SPLAT_KOBJ_TEST1_DESC          "Kobj Open/Close Test"
-
-#define SPLAT_KOBJ_TEST2_ID            0x0a02
-#define SPLAT_KOBJ_TEST2_NAME          "size/read"
-#define SPLAT_KOBJ_TEST2_DESC          "Kobj Size/Read Test"
-
-#define SPLAT_KOBJ_TEST_FILE           "/etc/fstab"
-
-static int
-splat_kobj_test1(struct file *file, void *arg)
-{
-       struct _buf *f;
-
-       f = kobj_open_file(SPLAT_KOBJ_TEST_FILE);
-       if (f == (struct _buf *)-1) {
-               splat_vprint(file, SPLAT_KOBJ_TEST1_NAME, "Failed to open "
-                            "test file: %s\n", SPLAT_KOBJ_TEST_FILE);
-               return -ENOENT;
-       }
-
-       kobj_close_file(f);
-       splat_vprint(file, SPLAT_KOBJ_TEST1_NAME, "Successfully opened and "
-                    "closed test file: %s\n", SPLAT_KOBJ_TEST_FILE);
-
-        return 0;
-} /* splat_kobj_test1() */
-
-static int
-splat_kobj_test2(struct file *file, void *arg)
-{
-       struct _buf *f;
-       char *buf;
-       uint64_t size;
-       int rc;
-
-       f = kobj_open_file(SPLAT_KOBJ_TEST_FILE);
-       if (f == (struct _buf *)-1) {
-               splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Failed to open "
-                            "test file: %s\n", SPLAT_KOBJ_TEST_FILE);
-               return -ENOENT;
-       }
-
-       rc = kobj_get_filesize(f, &size);
-       if (rc) {
-               splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Failed stat of "
-                            "test file: %s (%d)\n", SPLAT_KOBJ_TEST_FILE, rc);
-               goto out;
-       }
-
-       buf = kmalloc(size + 1, GFP_KERNEL);
-       if (!buf) {
-               rc = -ENOMEM;
-               splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Failed to alloc "
-                            "%lld bytes for tmp buffer (%d)\n",
-                            (long long)size, rc);
-               goto out;
-       }
-
-       memset(buf, 0, size + 1);
-       rc = kobj_read_file(f, buf, size, 0);
-       if (rc < 0) {
-               splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Failed read of "
-                            "test file: %s (%d)\n", SPLAT_KOBJ_TEST_FILE, rc);
-               goto out2;
-       }
-
-       /* Validate we read as many bytes as expected based on the stat.  This
-        * isn't a perfect test since we didn't create the file however it is
-        * pretty unlikely there are garbage characters in your /etc/fstab */
-       if (size != (uint64_t)strlen(buf)) {
-               rc = -EFBIG;
-               splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Stat'ed size "
-                            "(%lld) does not match number of bytes read "
-                            "(%lld)\n", (long long)size,
-                            (long long)strlen(buf));
-               goto out2;
-       }
-
-       rc = 0;
-       splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "\n%s\n", buf);
-       splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Successfully stat'ed "
-                    "and read expected number of bytes (%lld) from test "
-                    "file: %s\n", (long long)size, SPLAT_KOBJ_TEST_FILE);
-out2:
-       kfree(buf);
-out:
-       kobj_close_file(f);
-
-        return rc;
-} /* splat_kobj_test2() */
-
-splat_subsystem_t *
-splat_kobj_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_KOBJ_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_KOBJ_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_KOBJ;
-
-        splat_test_init(sub, SPLAT_KOBJ_TEST1_NAME, SPLAT_KOBJ_TEST1_DESC,
-                     SPLAT_KOBJ_TEST1_ID, splat_kobj_test1);
-        splat_test_init(sub, SPLAT_KOBJ_TEST2_NAME, SPLAT_KOBJ_TEST2_DESC,
-                     SPLAT_KOBJ_TEST2_ID, splat_kobj_test2);
-
-        return sub;
-} /* splat_kobj_init() */
-
-void
-splat_kobj_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-
-        splat_test_fini(sub, SPLAT_KOBJ_TEST2_ID);
-        splat_test_fini(sub, SPLAT_KOBJ_TEST1_ID);
-
-        kfree(sub);
-} /* splat_kobj_fini() */
-
-int
-splat_kobj_id(void)
-{
-        return SPLAT_SUBSYSTEM_KOBJ;
-} /* splat_kobj_id() */
diff --git a/module/splat/splat-linux.c b/module/splat/splat-linux.c
deleted file mode 100644 (file)
index 1565d74..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- *  Copyright (C) 2011 Lawrence Livermore National Security, LLC.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Kernel Compatibility Tests.
- */
-
-#include <sys/kmem.h>
-#include <linux/mm_compat.h>
-#include "splat-internal.h"
-
-#define SPLAT_LINUX_NAME               "linux"
-#define SPLAT_LINUX_DESC               "Kernel Compatibility Tests"
-
-#define SPLAT_LINUX_TEST1_ID           0x1001
-#define SPLAT_LINUX_TEST1_NAME         "shrinker"
-#define SPLAT_LINUX_TEST1_DESC         "Shrinker test"
-
-/*
- * Wait queue used to eliminate race between dropping of slab
- * and execution of the shrinker callback
- */
-DECLARE_WAIT_QUEUE_HEAD(shrinker_wait);
-
-SPL_SHRINKER_CALLBACK_FWD_DECLARE(splat_linux_shrinker_fn);
-SPL_SHRINKER_DECLARE(splat_linux_shrinker, splat_linux_shrinker_fn, 1);
-static unsigned long splat_linux_shrinker_size = 0;
-static struct file *splat_linux_shrinker_file = NULL;
-
-static spl_shrinker_t
-__splat_linux_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc)
-{
-       static int failsafe = 0;
-       static unsigned long last_splat_linux_shrinker_size = 0;
-       unsigned long size;
-       spl_shrinker_t count;
-
-       /*
-        * shrinker_size can only decrease or stay the same between callbacks
-        * in the same run, so Reset failsafe whenever shrinker increases
-        * as this indicates a new run.
-        */
-       if (last_splat_linux_shrinker_size < splat_linux_shrinker_size)
-               failsafe = 0;
-
-       last_splat_linux_shrinker_size = splat_linux_shrinker_size;
-
-       if (sc->nr_to_scan) {
-               size = MIN(sc->nr_to_scan, splat_linux_shrinker_size);
-               splat_linux_shrinker_size -= size;
-
-               splat_vprint(splat_linux_shrinker_file, SPLAT_LINUX_TEST1_NAME,
-                   "Reclaimed %lu objects, size now %lu\n",
-                   size, splat_linux_shrinker_size);
-
-#ifdef HAVE_SPLIT_SHRINKER_CALLBACK
-               count = size;
-#else
-               count = splat_linux_shrinker_size;
-#endif /* HAVE_SPLIT_SHRINKER_CALLBACK */
-
-       } else {
-               count = splat_linux_shrinker_size;
-               splat_vprint(splat_linux_shrinker_file, SPLAT_LINUX_TEST1_NAME,
-                   "Cache size is %lu\n", splat_linux_shrinker_size);
-       }
-
-       /* Far more calls than expected abort drop_slab as a failsafe */
-       if (failsafe > 100) {
-               splat_vprint(splat_linux_shrinker_file, SPLAT_LINUX_TEST1_NAME,
-                   "Far more calls than expected (%d), size now %lu\n",
-                  failsafe, splat_linux_shrinker_size);
-               return (SHRINK_STOP);
-       } else {
-               /*
-                * We only increment failsafe if it doesn't trigger.  This
-                * makes any failsafe failure persistent until the next test.
-                */
-               failsafe++;
-       }
-
-       /* Shrinker has run, so signal back to test. */
-       wake_up(&shrinker_wait);
-
-       return (count);
-}
-
-SPL_SHRINKER_CALLBACK_WRAPPER(splat_linux_shrinker_fn);
-
-#define DROP_SLAB_CMD \
-       "exec 0</dev/null " \
-       "     1>/proc/sys/vm/drop_caches " \
-       "     2>/dev/null; " \
-       "echo 2"
-
-static int
-splat_linux_drop_slab(struct file *file)
-{
-       char *argv[] = { "/bin/sh",
-                        "-c",
-                        DROP_SLAB_CMD,
-                        NULL };
-       char *envp[] = { "HOME=/",
-                        "TERM=linux",
-                        "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
-                        NULL };
-       int rc;
-
-       rc = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);
-       if (rc)
-               splat_vprint(file, SPLAT_LINUX_TEST1_NAME,
-                   "Failed user helper '%s %s %s', rc = %d\n",
-                   argv[0], argv[1], argv[2], rc);
-
-       return rc;
-}
-
-/*
- * Verify correct shrinker functionality by registering a shrinker
- * with the required compatibility macros.  We then use a simulated
- * cache and force the systems caches to be dropped.  The shrinker
- * should be repeatedly called until it reports that the cache is
- * empty.  It is then cleanly unregistered and correct behavior is
- * verified.  There are now four slightly different supported shrinker
- * API and this test ensures the compatibility code is correct.
- */
-static int
-splat_linux_test1(struct file *file, void *arg)
-{
-       int rc = -EINVAL;
-
-       /*
-        * Globals used by the shrinker, it is not safe to run this
-        * test concurrently this is a safe assumption for SPLAT tests.
-        * Regardless we do some minimal checking a bail if concurrent
-        * use is detected.
-        */
-       if (splat_linux_shrinker_size || splat_linux_shrinker_file) {
-               splat_vprint(file, SPLAT_LINUX_TEST1_NAME,
-                   "Failed due to concurrent shrinker test, rc = %d\n", rc);
-               return (rc);
-       }
-
-       splat_linux_shrinker_size = 1024;
-       splat_linux_shrinker_file = file;
-
-       spl_register_shrinker(&splat_linux_shrinker);
-       rc = splat_linux_drop_slab(file);
-       if (rc)
-               goto out;
-
-       /*
-        * By the time we get here, it is possible that the shrinker has not
-        * yet run. splat_linux_drop_slab sends a signal for it to run, but
-        * there is no guarantee of when it will actually run. We wait for it
-        * to run here, terminating when either the shrinker size is now 0 or
-        * we timeout after 1 second, which should be an eternity (error).
-        */
-       rc = wait_event_timeout(shrinker_wait, !splat_linux_shrinker_size, HZ);
-       if (!rc) {
-               splat_vprint(file, SPLAT_LINUX_TEST1_NAME,
-                   "Failed cache shrinking timed out, size now %lu",
-                   splat_linux_shrinker_size);
-               rc = -ETIMEDOUT;
-       } else {
-               rc = 0;
-       }
-
-       if (!rc && splat_linux_shrinker_size != 0) {
-               splat_vprint(file, SPLAT_LINUX_TEST1_NAME,
-                   "Failed cache was not shrunk to 0, size now %lu",
-                   splat_linux_shrinker_size);
-               rc = -EDOM;
-       }
-out:
-       spl_unregister_shrinker(&splat_linux_shrinker);
-
-       splat_linux_shrinker_size = 0;
-       splat_linux_shrinker_file = NULL;
-
-       return rc;
-}
-
-splat_subsystem_t *
-splat_linux_init(void)
-{
-       splat_subsystem_t *sub;
-
-       sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-       if (sub == NULL)
-               return NULL;
-
-       memset(sub, 0, sizeof(*sub));
-       strncpy(sub->desc.name, SPLAT_LINUX_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_LINUX_DESC, SPLAT_DESC_SIZE);
-       INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-       spin_lock_init(&sub->test_lock);
-       sub->desc.id = SPLAT_SUBSYSTEM_LINUX;
-
-       splat_test_init(sub, SPLAT_LINUX_TEST1_NAME, SPLAT_LINUX_TEST1_DESC,
-                       SPLAT_LINUX_TEST1_ID, splat_linux_test1);
-
-       return sub;
-}
-
-void
-splat_linux_fini(splat_subsystem_t *sub)
-{
-       ASSERT(sub);
-       splat_test_fini(sub, SPLAT_LINUX_TEST1_ID);
-
-       kfree(sub);
-}
-
-int
-splat_linux_id(void) {
-       return SPLAT_SUBSYSTEM_LINUX;
-}
diff --git a/module/splat/splat-list.c b/module/splat/splat-list.c
deleted file mode 100644 (file)
index 8a5f3c9..0000000
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) List Tests.
- */
-
-#include <sys/list.h>
-#include <sys/kmem.h>
-#include "splat-internal.h"
-
-#define SPLAT_LIST_NAME                        "list"
-#define SPLAT_LIST_DESC                        "Kernel List Tests"
-
-#define SPLAT_LIST_TEST1_ID            0x0c01
-#define SPLAT_LIST_TEST1_NAME          "create/destroy"
-#define SPLAT_LIST_TEST1_DESC          "Create/destroy Test"
-
-#define SPLAT_LIST_TEST2_ID            0x0c02
-#define SPLAT_LIST_TEST2_NAME          "ins/rm head"
-#define SPLAT_LIST_TEST2_DESC          "Insert/remove head Test"
-
-#define SPLAT_LIST_TEST3_ID            0x0c03
-#define SPLAT_LIST_TEST3_NAME          "ins/rm tail"
-#define SPLAT_LIST_TEST3_DESC          "Insert/remove tail Test"
-
-#define SPLAT_LIST_TEST4_ID            0x0c04
-#define SPLAT_LIST_TEST4_NAME          "insert_after"
-#define SPLAT_LIST_TEST4_DESC          "Insert_after Test"
-
-#define SPLAT_LIST_TEST5_ID            0x0c05
-#define SPLAT_LIST_TEST5_NAME          "insert_before"
-#define SPLAT_LIST_TEST5_DESC          "Insert_before Test"
-
-#define SPLAT_LIST_TEST6_ID            0x0c06
-#define SPLAT_LIST_TEST6_NAME          "remove"
-#define SPLAT_LIST_TEST6_DESC          "Remove Test"
-
-#define SPLAT_LIST_TEST7_ID            0x0c7
-#define SPLAT_LIST_TEST7_NAME          "active"
-#define SPLAT_LIST_TEST7_DESC          "Active Test"
-
-/* It is important that li_node is not the first element, this
- * ensures the list_d2l/list_object macros are working correctly. */
-typedef struct list_item {
-       int li_data;
-       list_node_t li_node;
-} list_item_t;
-
-#define LIST_ORDER_STACK               0
-#define LIST_ORDER_QUEUE               1
-
-static int
-splat_list_test1(struct file *file, void *arg)
-{
-       list_t list;
-
-       splat_vprint(file, SPLAT_LIST_TEST1_NAME, "Creating list\n%s", "");
-       list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node));
-
-       if (!list_is_empty(&list)) {
-               splat_vprint(file, SPLAT_LIST_TEST1_NAME,
-                            "New list NOT empty%s\n", "");
-               /* list_destroy() intentionally skipped to avoid assert */
-               return -EEXIST;
-       }
-
-       splat_vprint(file, SPLAT_LIST_TEST1_NAME, "Destroying list\n%s", "");
-       list_destroy(&list);
-
-       /* Validate the list has been destroyed */
-       if (list_link_active(&list.list_head)) {
-               splat_vprint(file, SPLAT_LIST_TEST1_NAME,
-                            "Destroyed list still active%s", "");
-               return -EIO;
-       }
-
-        return 0;
-}
-
-static int
-splat_list_validate(list_t *list, int size, int order, int mult)
-{
-       list_item_t *li;
-       int i;
-
-       /* Walk all items in list from head to verify stack or queue
-        * ordering.  We bound the for loop by size+1 to ensure that
-        * we still terminate if there is list corruption.  We also
-        * intentionally make things a little more complex than they
-        * need to be by using list_head/list_next for queues, and
-        * list_tail/list_prev for stacks.  This is simply done for
-        * coverage and to ensure these function are working right.
-        */
-       for (i = 0, li = (order ? list_head(list) : list_tail(list));
-            i < size + 1 && li != NULL;
-            i++, li = (order ? list_next(list, li) : list_prev(list, li)))
-               if (li->li_data != i * mult)
-                       return -EIDRM;
-
-       if (i != size)
-               return -E2BIG;
-
-       return 0;
-}
-
-static int
-splat_list_test2(struct file *file, void *arg)
-{
-       list_t list;
-       list_item_t *li;
-       int i, list_size = 8, rc = 0;
-
-       splat_vprint(file, SPLAT_LIST_TEST2_NAME, "Creating list\n%s", "");
-       list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node));
-
-       /* Insert all items at the list head to form a stack */
-       splat_vprint(file, SPLAT_LIST_TEST2_NAME,
-                    "Adding %d items to list head\n", list_size);
-       for (i = 0; i < list_size; i++) {
-               li = kmem_alloc(sizeof(list_item_t), KM_SLEEP);
-               if (li == NULL) {
-                       rc = -ENOMEM;
-                       goto out;
-               }
-
-               list_link_init(&li->li_node);
-               li->li_data = i;
-               list_insert_head(&list, li);
-       }
-
-       splat_vprint(file, SPLAT_LIST_TEST2_NAME,
-                    "Validating %d item list is a stack\n", list_size);
-       rc = splat_list_validate(&list, list_size, LIST_ORDER_STACK, 1);
-       if (rc)
-               splat_vprint(file, SPLAT_LIST_TEST2_NAME,
-                            "List validation failed, %d\n", rc);
-out:
-       /* Remove all items */
-       splat_vprint(file, SPLAT_LIST_TEST2_NAME,
-                    "Removing %d items from list head\n", list_size);
-       while ((li = list_remove_head(&list)))
-               kmem_free(li, sizeof(list_item_t));
-
-       splat_vprint(file, SPLAT_LIST_TEST2_NAME, "Destroying list\n%s", "");
-       list_destroy(&list);
-
-        return rc;
-}
-
-static int
-splat_list_test3(struct file *file, void *arg)
-{
-       list_t list;
-       list_item_t *li;
-       int i, list_size = 8, rc = 0;
-
-       splat_vprint(file, SPLAT_LIST_TEST3_NAME, "Creating list\n%s", "");
-       list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node));
-
-       /* Insert all items at the list tail to form a queue */
-       splat_vprint(file, SPLAT_LIST_TEST3_NAME,
-                    "Adding %d items to list tail\n", list_size);
-       for (i = 0; i < list_size; i++) {
-               li = kmem_alloc(sizeof(list_item_t), KM_SLEEP);
-               if (li == NULL) {
-                       rc = -ENOMEM;
-                       goto out;
-               }
-
-               list_link_init(&li->li_node);
-               li->li_data = i;
-               list_insert_tail(&list, li);
-       }
-
-       splat_vprint(file, SPLAT_LIST_TEST3_NAME,
-                    "Validating %d item list is a queue\n", list_size);
-       rc = splat_list_validate(&list, list_size, LIST_ORDER_QUEUE, 1);
-       if (rc)
-               splat_vprint(file, SPLAT_LIST_TEST3_NAME,
-                            "List validation failed, %d\n", rc);
-out:
-       /* Remove all items */
-       splat_vprint(file, SPLAT_LIST_TEST3_NAME,
-                    "Removing %d items from list tail\n", list_size);
-       while ((li = list_remove_tail(&list)))
-               kmem_free(li, sizeof(list_item_t));
-
-       splat_vprint(file, SPLAT_LIST_TEST3_NAME, "Destroying list\n%s", "");
-       list_destroy(&list);
-
-        return rc;
-}
-
-static int
-splat_list_test4(struct file *file, void *arg)
-{
-       list_t list;
-       list_item_t *li_new, *li_last = NULL;
-       int i, list_size = 8, rc = 0;
-
-       splat_vprint(file, SPLAT_LIST_TEST4_NAME, "Creating list\n%s", "");
-       list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node));
-
-       /* Insert all items after the last item to form a queue */
-       splat_vprint(file, SPLAT_LIST_TEST4_NAME,
-                    "Adding %d items each after the last item\n", list_size);
-       for (i = 0; i < list_size; i++) {
-               li_new = kmem_alloc(sizeof(list_item_t), KM_SLEEP);
-               if (li_new == NULL) {
-                       rc = -ENOMEM;
-                       goto out;
-               }
-
-               list_link_init(&li_new->li_node);
-               li_new->li_data = i;
-               list_insert_after(&list, li_last, li_new);
-               li_last = li_new;
-       }
-
-       splat_vprint(file, SPLAT_LIST_TEST4_NAME,
-                    "Validating %d item list is a queue\n", list_size);
-       rc = splat_list_validate(&list, list_size, LIST_ORDER_QUEUE, 1);
-       if (rc)
-               splat_vprint(file, SPLAT_LIST_TEST4_NAME,
-                            "List validation failed, %d\n", rc);
-out:
-       /* Remove all items */
-       splat_vprint(file, SPLAT_LIST_TEST4_NAME,
-                    "Removing %d items from list tail\n", list_size);
-       while ((li_new = list_remove_head(&list)))
-               kmem_free(li_new, sizeof(list_item_t));
-
-       splat_vprint(file, SPLAT_LIST_TEST4_NAME, "Destroying list\n%s", "");
-       list_destroy(&list);
-
-        return rc;
-}
-
-static int
-splat_list_test5(struct file *file, void *arg)
-{
-       list_t list;
-       list_item_t *li_new, *li_last = NULL;
-       int i, list_size = 8, rc = 0;
-
-       splat_vprint(file, SPLAT_LIST_TEST5_NAME, "Creating list\n%s", "");
-       list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node));
-
-       /* Insert all items before the last item to form a stack */
-       splat_vprint(file, SPLAT_LIST_TEST5_NAME,
-                    "Adding %d items each before the last item\n", list_size);
-       for (i = 0; i < list_size; i++) {
-               li_new = kmem_alloc(sizeof(list_item_t), KM_SLEEP);
-               if (li_new == NULL) {
-                       rc = -ENOMEM;
-                       goto out;
-               }
-
-               list_link_init(&li_new->li_node);
-               li_new->li_data = i;
-               list_insert_before(&list, li_last, li_new);
-               li_last = li_new;
-       }
-
-       splat_vprint(file, SPLAT_LIST_TEST5_NAME,
-                    "Validating %d item list is a queue\n", list_size);
-       rc = splat_list_validate(&list, list_size, LIST_ORDER_STACK, 1);
-       if (rc)
-               splat_vprint(file, SPLAT_LIST_TEST5_NAME,
-                            "List validation failed, %d\n", rc);
-out:
-       /* Remove all items */
-       splat_vprint(file, SPLAT_LIST_TEST5_NAME,
-                    "Removing %d items from list tail\n", list_size);
-       while ((li_new = list_remove_tail(&list)))
-               kmem_free(li_new, sizeof(list_item_t));
-
-       splat_vprint(file, SPLAT_LIST_TEST5_NAME, "Destroying list\n%s", "");
-       list_destroy(&list);
-
-        return rc;
-}
-
-static int
-splat_list_test6(struct file *file, void *arg)
-{
-       list_t list;
-       list_item_t *li, *li_prev;
-       int i, list_size = 8, rc = 0;
-
-       splat_vprint(file, SPLAT_LIST_TEST6_NAME, "Creating list\n%s", "");
-       list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node));
-
-       /* Insert all items at the list tail to form a queue */
-       splat_vprint(file, SPLAT_LIST_TEST6_NAME,
-                    "Adding %d items to list tail\n", list_size);
-       for (i = 0; i < list_size; i++) {
-               li = kmem_alloc(sizeof(list_item_t), KM_SLEEP);
-               if (li == NULL) {
-                       rc = -ENOMEM;
-                       goto out;
-               }
-
-               list_link_init(&li->li_node);
-               li->li_data = i;
-               list_insert_tail(&list, li);
-       }
-
-       /* Remove all odd items from the queue */
-       splat_vprint(file, SPLAT_LIST_TEST6_NAME,
-                    "Removing %d odd items from the list\n", list_size >> 1);
-       for (li = list_head(&list); li != NULL; li = list_next(&list, li)) {
-               if (li->li_data % 2 == 1) {
-                       li_prev = list_prev(&list, li);
-                       list_remove(&list, li);
-                       kmem_free(li, sizeof(list_item_t));
-                       li = li_prev;
-               }
-       }
-
-       splat_vprint(file, SPLAT_LIST_TEST6_NAME, "Validating %d item "
-                    "list is a queue of only even elements\n", list_size / 2);
-       rc = splat_list_validate(&list, list_size / 2, LIST_ORDER_QUEUE, 2);
-       if (rc)
-               splat_vprint(file, SPLAT_LIST_TEST6_NAME,
-                            "List validation failed, %d\n", rc);
-out:
-       /* Remove all items */
-       splat_vprint(file, SPLAT_LIST_TEST6_NAME,
-                    "Removing %d items from list tail\n", list_size / 2);
-       while ((li = list_remove_tail(&list)))
-               kmem_free(li, sizeof(list_item_t));
-
-       splat_vprint(file, SPLAT_LIST_TEST6_NAME, "Destroying list\n%s", "");
-       list_destroy(&list);
-
-        return rc;
-}
-
-static int
-splat_list_test7(struct file *file, void *arg)
-{
-       list_t list;
-       list_item_t *li;
-       int rc = 0;
-
-       splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Creating list\n%s", "");
-       list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node));
-
-       li = kmem_alloc(sizeof(list_item_t), KM_SLEEP);
-       if (li == NULL) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       /* Validate newly initialized node is inactive */
-       splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Init list node\n%s", "");
-       list_link_init(&li->li_node);
-       if (list_link_active(&li->li_node)) {
-               splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Newly initialized "
-                           "list node should inactive %p/%p\n",
-                           li->li_node.prev, li->li_node.next);
-               rc = -EINVAL;
-               goto out_li;
-       }
-
-       /* Validate node is active when linked in to a list */
-       splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Insert list node\n%s", "");
-       list_insert_head(&list, li);
-       if (!list_link_active(&li->li_node)) {
-               splat_vprint(file, SPLAT_LIST_TEST7_NAME, "List node "
-                           "inserted in list should be active %p/%p\n",
-                           li->li_node.prev, li->li_node.next);
-               rc = -EINVAL;
-               goto out;
-       }
-
-       /* Validate node is inactive when removed from list */
-       splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Remove list node\n%s", "");
-       list_remove(&list, li);
-       if (list_link_active(&li->li_node)) {
-               splat_vprint(file, SPLAT_LIST_TEST7_NAME, "List node "
-                           "removed from list should be inactive %p/%p\n",
-                           li->li_node.prev, li->li_node.next);
-               rc = -EINVAL;
-       }
-out_li:
-       kmem_free(li, sizeof(list_item_t));
-out:
-       /* Remove all items */
-       while ((li = list_remove_head(&list)))
-               kmem_free(li, sizeof(list_item_t));
-
-       splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Destroying list\n%s", "");
-       list_destroy(&list);
-
-        return rc;
-}
-
-splat_subsystem_t *
-splat_list_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_LIST_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_LIST_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_LIST;
-
-        splat_test_init(sub, SPLAT_LIST_TEST1_NAME, SPLAT_LIST_TEST1_DESC,
-                       SPLAT_LIST_TEST1_ID, splat_list_test1);
-        splat_test_init(sub, SPLAT_LIST_TEST2_NAME, SPLAT_LIST_TEST2_DESC,
-                       SPLAT_LIST_TEST2_ID, splat_list_test2);
-        splat_test_init(sub, SPLAT_LIST_TEST3_NAME, SPLAT_LIST_TEST3_DESC,
-                       SPLAT_LIST_TEST3_ID, splat_list_test3);
-        splat_test_init(sub, SPLAT_LIST_TEST4_NAME, SPLAT_LIST_TEST4_DESC,
-                       SPLAT_LIST_TEST4_ID, splat_list_test4);
-        splat_test_init(sub, SPLAT_LIST_TEST5_NAME, SPLAT_LIST_TEST5_DESC,
-                       SPLAT_LIST_TEST5_ID, splat_list_test5);
-        splat_test_init(sub, SPLAT_LIST_TEST6_NAME, SPLAT_LIST_TEST6_DESC,
-                       SPLAT_LIST_TEST6_ID, splat_list_test6);
-        splat_test_init(sub, SPLAT_LIST_TEST7_NAME, SPLAT_LIST_TEST7_DESC,
-                       SPLAT_LIST_TEST7_ID, splat_list_test7);
-
-        return sub;
-}
-
-void
-splat_list_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-
-        splat_test_fini(sub, SPLAT_LIST_TEST7_ID);
-        splat_test_fini(sub, SPLAT_LIST_TEST6_ID);
-        splat_test_fini(sub, SPLAT_LIST_TEST5_ID);
-        splat_test_fini(sub, SPLAT_LIST_TEST4_ID);
-        splat_test_fini(sub, SPLAT_LIST_TEST3_ID);
-        splat_test_fini(sub, SPLAT_LIST_TEST2_ID);
-        splat_test_fini(sub, SPLAT_LIST_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_list_id(void)
-{
-        return SPLAT_SUBSYSTEM_LIST;
-}
diff --git a/module/splat/splat-mutex.c b/module/splat/splat-mutex.c
deleted file mode 100644 (file)
index 202e6c0..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Mutex Tests.
- */
-
-#include <sys/mutex.h>
-#include <sys/taskq.h>
-#include <linux/delay.h>
-#include <linux/mm_compat.h>
-#include "splat-internal.h"
-
-#define SPLAT_MUTEX_NAME                "mutex"
-#define SPLAT_MUTEX_DESC                "Kernel Mutex Tests"
-
-#define SPLAT_MUTEX_TEST1_ID            0x0401
-#define SPLAT_MUTEX_TEST1_NAME          "tryenter"
-#define SPLAT_MUTEX_TEST1_DESC          "Validate mutex_tryenter() correctness"
-
-#define SPLAT_MUTEX_TEST2_ID            0x0402
-#define SPLAT_MUTEX_TEST2_NAME          "race"
-#define SPLAT_MUTEX_TEST2_DESC          "Many threads entering/exiting the mutex"
-
-#define SPLAT_MUTEX_TEST3_ID            0x0403
-#define SPLAT_MUTEX_TEST3_NAME          "owned"
-#define SPLAT_MUTEX_TEST3_DESC          "Validate mutex_owned() correctness"
-
-#define SPLAT_MUTEX_TEST4_ID            0x0404
-#define SPLAT_MUTEX_TEST4_NAME          "owner"
-#define SPLAT_MUTEX_TEST4_DESC          "Validate mutex_owner() correctness"
-
-#define SPLAT_MUTEX_TEST_MAGIC          0x115599DDUL
-#define SPLAT_MUTEX_TEST_NAME           "mutex_test"
-#define SPLAT_MUTEX_TEST_TASKQ          "mutex_taskq"
-#define SPLAT_MUTEX_TEST_COUNT          128
-
-typedef struct mutex_priv {
-        unsigned long mp_magic;
-        struct file *mp_file;
-        kmutex_t mp_mtx;
-        int mp_rc;
-        int mp_rc2;
-} mutex_priv_t;
-
-static void
-splat_mutex_test1_func(void *arg)
-{
-        mutex_priv_t *mp = (mutex_priv_t *)arg;
-        ASSERT(mp->mp_magic == SPLAT_MUTEX_TEST_MAGIC);
-
-        if (mutex_tryenter(&mp->mp_mtx)) {
-                mp->mp_rc = 0;
-                mutex_exit(&mp->mp_mtx);
-        } else {
-                mp->mp_rc = -EBUSY;
-        }
-}
-
-static int
-splat_mutex_test1(struct file *file, void *arg)
-{
-        mutex_priv_t *mp;
-        taskq_t *tq;
-       taskqid_t id;
-        int rc = 0;
-
-        mp = (mutex_priv_t *)kmalloc(sizeof(*mp), GFP_KERNEL);
-        if (mp == NULL)
-                return -ENOMEM;
-
-        tq = taskq_create(SPLAT_MUTEX_TEST_TASKQ, 1, defclsyspri,
-                          50, INT_MAX, TASKQ_PREPOPULATE);
-        if (tq == NULL) {
-                rc = -ENOMEM;
-                goto out2;
-        }
-
-        mp->mp_magic = SPLAT_MUTEX_TEST_MAGIC;
-        mp->mp_file = file;
-        mutex_init(&mp->mp_mtx, SPLAT_MUTEX_TEST_NAME, MUTEX_DEFAULT, NULL);
-        mutex_enter(&mp->mp_mtx);
-
-        /*
-         * Schedule a task function which will try and acquire the mutex via
-         * mutex_tryenter() while it's held.  This should fail and the task
-         * function will indicate this status in the passed private data.
-         */
-        mp->mp_rc = -EINVAL;
-       id = taskq_dispatch(tq, splat_mutex_test1_func, mp, TQ_SLEEP);
-       if (id == TASKQID_INVALID) {
-                mutex_exit(&mp->mp_mtx);
-                splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, "%s",
-                             "taskq_dispatch() failed\n");
-                rc = -EINVAL;
-                goto out;
-        }
-
-        taskq_wait_id(tq, id);
-        mutex_exit(&mp->mp_mtx);
-
-        /* Task function successfully acquired mutex, very bad! */
-        if (mp->mp_rc != -EBUSY) {
-                splat_vprint(file, SPLAT_MUTEX_TEST1_NAME,
-                   "mutex_trylock() incorrectly succeeded when "
-                   "the mutex was held, %d/%d\n", (int)id, mp->mp_rc);
-                rc = -EINVAL;
-                goto out;
-        } else {
-                splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, "%s",
-                             "mutex_trylock() correctly failed when "
-                             "the mutex was held\n");
-        }
-
-        /*
-         * Schedule a task function which will try and acquire the mutex via
-         * mutex_tryenter() while it is not held.  This should succeed and
-         * can be verified by checking the private data.
-         */
-        mp->mp_rc = -EINVAL;
-       id = taskq_dispatch(tq, splat_mutex_test1_func, mp, TQ_SLEEP);
-       if (id == TASKQID_INVALID) {
-                splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, "%s",
-                             "taskq_dispatch() failed\n");
-                rc = -EINVAL;
-                goto out;
-        }
-
-        taskq_wait_id(tq, id);
-
-        /* Task function failed to acquire mutex, very bad! */
-        if (mp->mp_rc != 0) {
-                splat_vprint(file, SPLAT_MUTEX_TEST1_NAME,
-                   "mutex_trylock() incorrectly failed when the mutex "
-                   "was not held, %d/%d\n", (int)id, mp->mp_rc);
-                rc = -EINVAL;
-        } else {
-                splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, "%s",
-                             "mutex_trylock() correctly succeeded "
-                             "when the mutex was not held\n");
-        }
-out:
-        taskq_destroy(tq);
-        mutex_destroy(&(mp->mp_mtx));
-out2:
-        kfree(mp);
-        return rc;
-}
-
-static void
-splat_mutex_test2_func(void *arg)
-{
-        mutex_priv_t *mp = (mutex_priv_t *)arg;
-        int rc;
-        ASSERT(mp->mp_magic == SPLAT_MUTEX_TEST_MAGIC);
-
-        /* Read the value before sleeping and write it after we wake up to
-         * maximize the chance of a race if mutexs are not working properly */
-        mutex_enter(&mp->mp_mtx);
-        rc = mp->mp_rc;
-        set_current_state(TASK_INTERRUPTIBLE);
-        schedule_timeout(HZ / 100);  /* 1/100 of a second */
-        VERIFY(mp->mp_rc == rc);
-        mp->mp_rc = rc + 1;
-        mutex_exit(&mp->mp_mtx);
-}
-
-static int
-splat_mutex_test2(struct file *file, void *arg)
-{
-        mutex_priv_t *mp;
-        taskq_t *tq;
-       taskqid_t id;
-        int i, rc = 0;
-
-        mp = (mutex_priv_t *)kmalloc(sizeof(*mp), GFP_KERNEL);
-        if (mp == NULL)
-                return -ENOMEM;
-
-        /* Create several threads allowing tasks to race with each other */
-        tq = taskq_create(SPLAT_MUTEX_TEST_TASKQ, num_online_cpus(),
-                          defclsyspri, 50, INT_MAX, TASKQ_PREPOPULATE);
-        if (tq == NULL) {
-                rc = -ENOMEM;
-                goto out;
-        }
-
-        mp->mp_magic = SPLAT_MUTEX_TEST_MAGIC;
-        mp->mp_file = file;
-        mutex_init(&(mp->mp_mtx), SPLAT_MUTEX_TEST_NAME, MUTEX_DEFAULT, NULL);
-        mp->mp_rc = 0;
-
-        /*
-         * Schedule N work items to the work queue each of which enters the
-         * mutex, sleeps briefly, then exits the mutex.  On a multiprocessor
-         * box these work items will be handled by all available CPUs.  The
-         * task function checks to ensure the tracked shared variable is
-         * always only incremented by one.  Additionally, the mutex itself
-         * is instrumented such that if any two processors are in the
-         * critical region at the same time the system will panic.  If the
-         * mutex is implemented right this will never happy, that's a pass.
-         */
-        for (i = 0; i < SPLAT_MUTEX_TEST_COUNT; i++) {
-               id = taskq_dispatch(tq, splat_mutex_test2_func, mp, TQ_SLEEP);
-               if (id == TASKQID_INVALID) {
-                        splat_vprint(file, SPLAT_MUTEX_TEST2_NAME,
-                                     "Failed to queue task %d\n", i);
-                        rc = -EINVAL;
-                }
-        }
-
-        taskq_wait(tq);
-
-        if (mp->mp_rc == SPLAT_MUTEX_TEST_COUNT) {
-                splat_vprint(file, SPLAT_MUTEX_TEST2_NAME, "%d racing threads "
-                           "correctly entered/exited the mutex %d times\n",
-                           num_online_cpus(), mp->mp_rc);
-        } else {
-                splat_vprint(file, SPLAT_MUTEX_TEST2_NAME, "%d racing threads "
-                           "only processed %d/%d mutex work items\n",
-                           num_online_cpus(),mp->mp_rc,SPLAT_MUTEX_TEST_COUNT);
-                rc = -EINVAL;
-        }
-
-        taskq_destroy(tq);
-        mutex_destroy(&(mp->mp_mtx));
-out:
-        kfree(mp);
-        return rc;
-}
-
-static void
-splat_mutex_owned(void *priv)
-{
-        mutex_priv_t *mp = (mutex_priv_t *)priv;
-
-        ASSERT(mp->mp_magic == SPLAT_MUTEX_TEST_MAGIC);
-        mp->mp_rc = mutex_owned(&mp->mp_mtx);
-        mp->mp_rc2 = MUTEX_HELD(&mp->mp_mtx);
-}
-
-static int
-splat_mutex_test3(struct file *file, void *arg)
-{
-        mutex_priv_t mp;
-        taskq_t *tq;
-       taskqid_t id;
-        int rc = 0;
-
-        mp.mp_magic = SPLAT_MUTEX_TEST_MAGIC;
-        mp.mp_file = file;
-        mutex_init(&mp.mp_mtx, SPLAT_MUTEX_TEST_NAME, MUTEX_DEFAULT, NULL);
-
-        if ((tq = taskq_create(SPLAT_MUTEX_TEST_NAME, 1, defclsyspri,
-                               50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) {
-                splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Taskq '%s' "
-                             "create failed\n", SPLAT_MUTEX_TEST3_NAME);
-                return -EINVAL;
-        }
-
-        mutex_enter(&mp.mp_mtx);
-
-        /* Mutex should be owned by current */
-        if (!mutex_owned(&mp.mp_mtx)) {
-                splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Unowned mutex "
-                             "should be owned by pid %d\n", current->pid);
-                rc = -EINVAL;
-                goto out_exit;
-        }
-
-       id = taskq_dispatch(tq, splat_mutex_owned, &mp, TQ_SLEEP);
-       if (id == TASKQID_INVALID) {
-                splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Failed to "
-                             "dispatch function '%s' to taskq\n",
-                             sym2str(splat_mutex_owned));
-                rc = -EINVAL;
-                goto out_exit;
-        }
-        taskq_wait(tq);
-
-        /* Mutex should not be owned which checked from a different thread */
-        if (mp.mp_rc || mp.mp_rc2) {
-                splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Mutex owned by "
-                             "pid %d not by taskq\n", current->pid);
-                rc = -EINVAL;
-                goto out_exit;
-        }
-
-        mutex_exit(&mp.mp_mtx);
-
-        /* Mutex should not be owned by current */
-        if (mutex_owned(&mp.mp_mtx)) {
-                splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Mutex owned by "
-                             "pid %d it should be unowned\b", current->pid);
-                rc = -EINVAL;
-                goto out;
-        }
-
-       id = taskq_dispatch(tq, splat_mutex_owned, &mp, TQ_SLEEP);
-       if (id == TASKQID_INVALID) {
-                splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Failed to "
-                             "dispatch function '%s' to taskq\n",
-                             sym2str(splat_mutex_owned));
-                rc = -EINVAL;
-                goto out;
-        }
-        taskq_wait(tq);
-
-        /* Mutex should be owned by no one */
-        if (mp.mp_rc || mp.mp_rc2) {
-                splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Mutex owned by "
-                             "no one, %d/%d disagrees\n", mp.mp_rc, mp.mp_rc2);
-                rc = -EINVAL;
-                goto out;
-        }
-
-        splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "%s",
-                   "Correct mutex_owned() behavior\n");
-        goto out;
-out_exit:
-        mutex_exit(&mp.mp_mtx);
-out:
-        mutex_destroy(&mp.mp_mtx);
-        taskq_destroy(tq);
-
-        return rc;
-}
-
-static int
-splat_mutex_test4(struct file *file, void *arg)
-{
-        kmutex_t mtx;
-        kthread_t *owner;
-        int rc = 0;
-
-        mutex_init(&mtx, SPLAT_MUTEX_TEST_NAME, MUTEX_DEFAULT, NULL);
-
-        /*
-         * Verify mutex owner is cleared after being dropped.  Depending
-         * on how you build your kernel this behavior changes, ensure the
-         * SPL mutex implementation is properly detecting this.
-         */
-        mutex_enter(&mtx);
-        msleep(100);
-        mutex_exit(&mtx);
-        if (MUTEX_HELD(&mtx)) {
-                splat_vprint(file, SPLAT_MUTEX_TEST4_NAME, "Mutex should "
-                           "not be held, bit is by %p\n", mutex_owner(&mtx));
-                rc = -EINVAL;
-                goto out;
-        }
-
-        mutex_enter(&mtx);
-
-        /* Mutex should be owned by current */
-        owner = mutex_owner(&mtx);
-        if (current != owner) {
-                splat_vprint(file, SPLAT_MUTEX_TEST4_NAME, "Mutex should "
-                           "be owned by pid %d but is owned by pid %d\n",
-                           current->pid, owner ? owner->pid : -1);
-                rc = -EINVAL;
-                goto out;
-        }
-
-        mutex_exit(&mtx);
-
-        /* Mutex should not be owned by any task */
-        owner = mutex_owner(&mtx);
-        if (owner) {
-                splat_vprint(file, SPLAT_MUTEX_TEST4_NAME, "Mutex should not "
-                           "be owned but is owned by pid %d\n", owner->pid);
-                rc = -EINVAL;
-                goto out;
-        }
-
-        splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "%s",
-                   "Correct mutex_owner() behavior\n");
-out:
-        mutex_destroy(&mtx);
-
-        return rc;
-}
-
-splat_subsystem_t *
-splat_mutex_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_MUTEX_NAME, SPLAT_NAME_SIZE);
-        strncpy(sub->desc.desc, SPLAT_MUTEX_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-        INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_MUTEX;
-
-        splat_test_init(sub, SPLAT_MUTEX_TEST1_NAME, SPLAT_MUTEX_TEST1_DESC,
-                      SPLAT_MUTEX_TEST1_ID, splat_mutex_test1);
-        splat_test_init(sub, SPLAT_MUTEX_TEST2_NAME, SPLAT_MUTEX_TEST2_DESC,
-                      SPLAT_MUTEX_TEST2_ID, splat_mutex_test2);
-        splat_test_init(sub, SPLAT_MUTEX_TEST3_NAME, SPLAT_MUTEX_TEST3_DESC,
-                      SPLAT_MUTEX_TEST3_ID, splat_mutex_test3);
-        splat_test_init(sub, SPLAT_MUTEX_TEST4_NAME, SPLAT_MUTEX_TEST4_DESC,
-                      SPLAT_MUTEX_TEST4_ID, splat_mutex_test4);
-
-        return sub;
-}
-
-void
-splat_mutex_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-        splat_test_fini(sub, SPLAT_MUTEX_TEST4_ID);
-        splat_test_fini(sub, SPLAT_MUTEX_TEST3_ID);
-        splat_test_fini(sub, SPLAT_MUTEX_TEST2_ID);
-        splat_test_fini(sub, SPLAT_MUTEX_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_mutex_id(void) {
-        return SPLAT_SUBSYSTEM_MUTEX;
-}
diff --git a/module/splat/splat-random.c b/module/splat/splat-random.c
deleted file mode 100644 (file)
index 2ddb823..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Random Number Generator Tests.
- */
-
-#include <sys/random.h>
-#include <sys/kmem.h>
-#include "splat-internal.h"
-
-#define SPLAT_KRNG_NAME                        "krng"
-#define SPLAT_KRNG_DESC                        "Kernel Random Number Generator Tests"
-
-#define SPLAT_KRNG_TEST1_ID            0x0301
-#define SPLAT_KRNG_TEST1_NAME          "freq"
-#define SPLAT_KRNG_TEST1_DESC          "Frequency Test"
-
-#define KRNG_NUM_BITS                  1048576
-#define KRNG_NUM_BYTES                 (KRNG_NUM_BITS >> 3)
-#define KRNG_NUM_BITS_DIV2             (KRNG_NUM_BITS >> 1)
-#define KRNG_ERROR_RANGE               2097
-
-/* Random Number Generator Tests
-   There can be meny more tests on quality of the
-   random number generator.  For now we are only
-   testing the frequency of particular bits.
-   We could also test consecutive sequences,
-   randomness within a particular block, etc.
-   but is probably not necessary for our purposes */
-
-static int
-splat_krng_test1(struct file *file, void *arg)
-{
-       uint8_t *buf;
-       int i, j, diff, num = 0, rc = 0;
-
-       buf = kmalloc(sizeof(*buf) * KRNG_NUM_BYTES, GFP_KERNEL);
-       if (buf == NULL) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       memset(buf, 0, sizeof(*buf) * KRNG_NUM_BYTES);
-
-       /* Always succeeds */
-       random_get_pseudo_bytes(buf, sizeof(uint8_t) * KRNG_NUM_BYTES);
-
-       for (i = 0; i < KRNG_NUM_BYTES; i++) {
-               uint8_t tmp = buf[i];
-               for (j = 0; j < 8; j++) {
-                       uint8_t tmp2 = ((tmp >> j) & 0x01);
-                       if (tmp2 == 1) {
-                               num++;
-                       }
-               }
-       }
-
-       kfree(buf);
-
-       diff = KRNG_NUM_BITS_DIV2 - num;
-       if (diff < 0)
-               diff *= -1;
-
-       splat_print(file, "Test 1 Number of ones: %d\n", num);
-       splat_print(file, "Test 1 Difference from expected: %d Allowed: %d\n",
-                  diff, KRNG_ERROR_RANGE);
-
-       if (diff > KRNG_ERROR_RANGE)
-               rc = -ERANGE;
-out:
-       return rc;
-}
-
-splat_subsystem_t *
-splat_krng_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_KRNG_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_KRNG_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_KRNG;
-
-        splat_test_init(sub, SPLAT_KRNG_TEST1_NAME, SPLAT_KRNG_TEST1_DESC,
-                     SPLAT_KRNG_TEST1_ID, splat_krng_test1);
-
-        return sub;
-}
-
-void
-splat_krng_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-
-        splat_test_fini(sub, SPLAT_KRNG_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_krng_id(void) {
-        return SPLAT_SUBSYSTEM_KRNG;
-}
diff --git a/module/splat/splat-rwlock.c b/module/splat/splat-rwlock.c
deleted file mode 100644 (file)
index 562a5f0..0000000
+++ /dev/null
@@ -1,747 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Read/Writer Lock Tests.
- */
-
-#include <sys/random.h>
-#include <sys/rwlock.h>
-#include <sys/taskq.h>
-#include <linux/delay.h>
-#include <linux/mm_compat.h>
-#include "splat-internal.h"
-
-#define SPLAT_RWLOCK_NAME              "rwlock"
-#define SPLAT_RWLOCK_DESC              "Kernel RW Lock Tests"
-
-#define SPLAT_RWLOCK_TEST1_ID          0x0701
-#define SPLAT_RWLOCK_TEST1_NAME                "N-rd/1-wr"
-#define SPLAT_RWLOCK_TEST1_DESC                "Multiple readers one writer"
-
-#define SPLAT_RWLOCK_TEST2_ID          0x0702
-#define SPLAT_RWLOCK_TEST2_NAME                "0-rd/N-wr"
-#define SPLAT_RWLOCK_TEST2_DESC                "Multiple writers"
-
-#define SPLAT_RWLOCK_TEST3_ID          0x0703
-#define SPLAT_RWLOCK_TEST3_NAME                "held"
-#define SPLAT_RWLOCK_TEST3_DESC                "RW_{LOCK|READ|WRITE}_HELD"
-
-#define SPLAT_RWLOCK_TEST4_ID          0x0704
-#define SPLAT_RWLOCK_TEST4_NAME                "tryenter"
-#define SPLAT_RWLOCK_TEST4_DESC                "Tryenter"
-
-#define SPLAT_RWLOCK_TEST5_ID          0x0705
-#define SPLAT_RWLOCK_TEST5_NAME                "rw_downgrade"
-#define SPLAT_RWLOCK_TEST5_DESC                "Write downgrade"
-
-#define SPLAT_RWLOCK_TEST6_ID          0x0706
-#define SPLAT_RWLOCK_TEST6_NAME                "rw_tryupgrade-1"
-#define SPLAT_RWLOCK_TEST6_DESC                "rwsem->count value"
-
-#define SPLAT_RWLOCK_TEST7_ID          0x0707
-#define SPLAT_RWLOCK_TEST7_NAME                "rw_tryupgrade-2"
-#define SPLAT_RWLOCK_TEST7_DESC                "Read upgrade"
-
-#define SPLAT_RWLOCK_TEST_MAGIC                0x115599DDUL
-#define SPLAT_RWLOCK_TEST_NAME         "rwlock_test"
-#define SPLAT_RWLOCK_TEST_TASKQ                "rwlock_taskq"
-#define SPLAT_RWLOCK_TEST_COUNT                8
-
-#define SPLAT_RWLOCK_RELEASE_INIT      0
-#define SPLAT_RWLOCK_RELEASE_WR                1
-#define SPLAT_RWLOCK_RELEASE_RD                2
-
-typedef struct rw_priv {
-       unsigned long rw_magic;
-       struct file *rw_file;
-       krwlock_t rw_rwlock;
-       spinlock_t rw_lock;
-       spl_wait_queue_head_t rw_waitq;
-       int rw_completed;
-       int rw_holders;
-       int rw_waiters;
-       int rw_release;
-       int rw_rc;
-       krw_t rw_type;
-} rw_priv_t;
-
-typedef struct rw_thr {
-       const char *rwt_name;
-       rw_priv_t *rwt_rwp;
-       struct task_struct *rwt_thread;
-} rw_thr_t;
-
-void splat_init_rw_priv(rw_priv_t *rwp, struct file *file)
-{
-       rwp->rw_magic = SPLAT_RWLOCK_TEST_MAGIC;
-       rwp->rw_file = file;
-       rw_init(&rwp->rw_rwlock, SPLAT_RWLOCK_TEST_NAME, RW_DEFAULT, NULL);
-       spin_lock_init(&rwp->rw_lock);
-       init_waitqueue_head(&rwp->rw_waitq);
-       rwp->rw_completed = 0;
-       rwp->rw_holders = 0;
-       rwp->rw_waiters = 0;
-       rwp->rw_release = SPLAT_RWLOCK_RELEASE_INIT;
-       rwp->rw_rc = 0;
-       rwp->rw_type = 0;
-}
-
-#if defined(CONFIG_PREEMPT_RT_FULL)
-static int
-splat_rwlock_test1(struct file *file, void *arg)
-{
-       /*
-        * This test will never succeed on PREEMPT_RT_FULL because these
-        * kernels only allow a single thread to hold the lock.
-        */
-       return 0;
-}
-#else
-static int
-splat_rwlock_wr_thr(void *arg)
-{
-       rw_thr_t *rwt = (rw_thr_t *)arg;
-       rw_priv_t *rwp = rwt->rwt_rwp;
-       uint8_t rnd;
-
-       ASSERT(rwp->rw_magic == SPLAT_RWLOCK_TEST_MAGIC);
-
-       get_random_bytes((void *)&rnd, 1);
-       msleep((unsigned int)rnd);
-
-       splat_vprint(rwp->rw_file, rwt->rwt_name,
-           "%s trying to acquire rwlock (%d holding/%d waiting)\n",
-           rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters);
-       spin_lock(&rwp->rw_lock);
-       rwp->rw_waiters++;
-       spin_unlock(&rwp->rw_lock);
-       rw_enter(&rwp->rw_rwlock, RW_WRITER);
-
-       spin_lock(&rwp->rw_lock);
-       rwp->rw_waiters--;
-       rwp->rw_holders++;
-       spin_unlock(&rwp->rw_lock);
-       splat_vprint(rwp->rw_file, rwt->rwt_name,
-           "%s acquired rwlock (%d holding/%d waiting)\n",
-           rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters);
-
-       /* Wait for control thread to signal we can release the write lock */
-       wait_event_interruptible(rwp->rw_waitq, splat_locked_test(&rwp->rw_lock,
-           rwp->rw_release == SPLAT_RWLOCK_RELEASE_WR));
-
-       spin_lock(&rwp->rw_lock);
-       rwp->rw_completed++;
-       rwp->rw_holders--;
-       spin_unlock(&rwp->rw_lock);
-       splat_vprint(rwp->rw_file, rwt->rwt_name,
-           "%s dropped rwlock (%d holding/%d waiting)\n",
-           rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters);
-
-       rw_exit(&rwp->rw_rwlock);
-
-       return 0;
-}
-
-static int
-splat_rwlock_rd_thr(void *arg)
-{
-       rw_thr_t *rwt = (rw_thr_t *)arg;
-       rw_priv_t *rwp = rwt->rwt_rwp;
-       uint8_t rnd;
-
-       ASSERT(rwp->rw_magic == SPLAT_RWLOCK_TEST_MAGIC);
-
-       get_random_bytes((void *)&rnd, 1);
-       msleep((unsigned int)rnd);
-
-       /* Don't try and take the semaphore until after someone has it */
-       wait_event_interruptible(rwp->rw_waitq,
-           splat_locked_test(&rwp->rw_lock, rwp->rw_holders > 0));
-
-       splat_vprint(rwp->rw_file, rwt->rwt_name,
-           "%s trying to acquire rwlock (%d holding/%d waiting)\n",
-           rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters);
-       spin_lock(&rwp->rw_lock);
-       rwp->rw_waiters++;
-       spin_unlock(&rwp->rw_lock);
-       rw_enter(&rwp->rw_rwlock, RW_READER);
-
-       spin_lock(&rwp->rw_lock);
-       rwp->rw_waiters--;
-       rwp->rw_holders++;
-       spin_unlock(&rwp->rw_lock);
-       splat_vprint(rwp->rw_file, rwt->rwt_name,
-           "%s acquired rwlock (%d holding/%d waiting)\n",
-           rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters);
-
-       /* Wait for control thread to signal we can release the read lock */
-       wait_event_interruptible(rwp->rw_waitq, splat_locked_test(&rwp->rw_lock,
-           rwp->rw_release == SPLAT_RWLOCK_RELEASE_RD));
-
-       spin_lock(&rwp->rw_lock);
-       rwp->rw_completed++;
-       rwp->rw_holders--;
-       spin_unlock(&rwp->rw_lock);
-       splat_vprint(rwp->rw_file, rwt->rwt_name,
-           "%s dropped rwlock (%d holding/%d waiting)\n",
-           rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters);
-
-       rw_exit(&rwp->rw_rwlock);
-
-       return 0;
-}
-
-static int
-splat_rwlock_test1(struct file *file, void *arg)
-{
-       int i, count = 0, rc = 0;
-       rw_thr_t rwt[SPLAT_RWLOCK_TEST_COUNT];
-       rw_priv_t *rwp;
-
-       rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL);
-       if (rwp == NULL)
-               return -ENOMEM;
-
-       splat_init_rw_priv(rwp, file);
-
-       /* Create some threads, the exact number isn't important just as
-        * long as we know how many we managed to create and should expect. */
-       for (i = 0; i < SPLAT_RWLOCK_TEST_COUNT; i++) {
-               rwt[i].rwt_rwp = rwp;
-               rwt[i].rwt_name = SPLAT_RWLOCK_TEST1_NAME;
-
-               /* The first thread will be the writer */
-               if (i == 0)
-                       rwt[i].rwt_thread = spl_kthread_create(splat_rwlock_wr_thr,
-                           &rwt[i], "%s/%d", SPLAT_RWLOCK_TEST_NAME, i);
-               else
-                       rwt[i].rwt_thread = spl_kthread_create(splat_rwlock_rd_thr,
-                           &rwt[i], "%s/%d", SPLAT_RWLOCK_TEST_NAME, i);
-
-               if (!IS_ERR(rwt[i].rwt_thread)) {
-                       wake_up_process(rwt[i].rwt_thread);
-                       count++;
-               }
-       }
-
-       /* Wait for the writer */
-       while (splat_locked_test(&rwp->rw_lock, rwp->rw_holders == 0)) {
-               wake_up_interruptible(&rwp->rw_waitq);
-               msleep(100);
-       }
-
-       /* Wait for 'count-1' readers */
-       while (splat_locked_test(&rwp->rw_lock, rwp->rw_waiters < count - 1)) {
-               wake_up_interruptible(&rwp->rw_waitq);
-               msleep(100);
-       }
-
-       /* Verify there is only one lock holder */
-       if (splat_locked_test(&rwp->rw_lock, rwp->rw_holders) != 1) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST1_NAME, "Only 1 holder "
-                            "expected for rwlock (%d holding/%d waiting)\n",
-                            rwp->rw_holders, rwp->rw_waiters);
-               rc = -EINVAL;
-       }
-
-       /* Verify 'count-1' readers */
-       if (splat_locked_test(&rwp->rw_lock, rwp->rw_waiters != count - 1)) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST1_NAME, "Only %d waiters "
-                            "expected for rwlock (%d holding/%d waiting)\n",
-                            count - 1, rwp->rw_holders, rwp->rw_waiters);
-               rc = -EINVAL;
-       }
-
-       /* Signal the writer to release, allows readers to acquire */
-       spin_lock(&rwp->rw_lock);
-       rwp->rw_release = SPLAT_RWLOCK_RELEASE_WR;
-       wake_up_interruptible(&rwp->rw_waitq);
-       spin_unlock(&rwp->rw_lock);
-
-       /* Wait for 'count-1' readers to hold the lock */
-       while (splat_locked_test(&rwp->rw_lock, rwp->rw_holders < count - 1)) {
-               wake_up_interruptible(&rwp->rw_waitq);
-               msleep(100);
-       }
-
-       /* Verify there are 'count-1' readers */
-       if (splat_locked_test(&rwp->rw_lock, rwp->rw_holders != count - 1)) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST1_NAME, "Only %d holders "
-                            "expected for rwlock (%d holding/%d waiting)\n",
-                            count - 1, rwp->rw_holders, rwp->rw_waiters);
-               rc = -EINVAL;
-       }
-
-       /* Release 'count-1' readers */
-       spin_lock(&rwp->rw_lock);
-       rwp->rw_release = SPLAT_RWLOCK_RELEASE_RD;
-       wake_up_interruptible(&rwp->rw_waitq);
-       spin_unlock(&rwp->rw_lock);
-
-       /* Wait for the test to complete */
-       while (splat_locked_test(&rwp->rw_lock,
-                                rwp->rw_holders>0 || rwp->rw_waiters>0))
-               msleep(100);
-
-       rw_destroy(&(rwp->rw_rwlock));
-       kfree(rwp);
-
-       return rc;
-}
-#endif
-
-static void
-splat_rwlock_test2_func(void *arg)
-{
-       rw_priv_t *rwp = (rw_priv_t *)arg;
-       int rc;
-       ASSERT(rwp->rw_magic == SPLAT_RWLOCK_TEST_MAGIC);
-
-       /* Read the value before sleeping and write it after we wake up to
-        * maximize the chance of a race if rwlocks are not working properly */
-       rw_enter(&rwp->rw_rwlock, RW_WRITER);
-       rc = rwp->rw_rc;
-       set_current_state(TASK_INTERRUPTIBLE);
-       schedule_timeout(HZ / 100);  /* 1/100 of a second */
-       VERIFY(rwp->rw_rc == rc);
-       rwp->rw_rc = rc + 1;
-       rw_exit(&rwp->rw_rwlock);
-}
-
-static int
-splat_rwlock_test2(struct file *file, void *arg)
-{
-       rw_priv_t *rwp;
-       taskq_t *tq;
-       int i, rc = 0, tq_count = 256;
-
-       rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL);
-       if (rwp == NULL)
-               return -ENOMEM;
-
-       splat_init_rw_priv(rwp, file);
-
-       /* Create several threads allowing tasks to race with each other */
-       tq = taskq_create(SPLAT_RWLOCK_TEST_TASKQ, num_online_cpus(),
-                         defclsyspri, 50, INT_MAX, TASKQ_PREPOPULATE);
-       if (tq == NULL) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       /*
-        * Schedule N work items to the work queue each of which enters the
-        * writer rwlock, sleeps briefly, then exits the writer rwlock.  On a
-        * multiprocessor box these work items will be handled by all available
-        * CPUs.  The task function checks to ensure the tracked shared variable
-        * is always only incremented by one.  Additionally, the rwlock itself
-        * is instrumented such that if any two processors are in the
-        * critical region at the same time the system will panic.  If the
-        * rwlock is implemented right this will never happy, that's a pass.
-        */
-       for (i = 0; i < tq_count; i++) {
-               if (taskq_dispatch(tq, splat_rwlock_test2_func, rwp,
-                   TQ_SLEEP) == TASKQID_INVALID) {
-                       splat_vprint(file, SPLAT_RWLOCK_TEST2_NAME,
-                                    "Failed to queue task %d\n", i);
-                       rc = -EINVAL;
-               }
-       }
-
-       taskq_wait(tq);
-
-       if (rwp->rw_rc == tq_count) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST2_NAME, "%d racing threads "
-                            "correctly entered/exited the rwlock %d times\n",
-                            num_online_cpus(), rwp->rw_rc);
-       } else {
-               splat_vprint(file, SPLAT_RWLOCK_TEST2_NAME, "%d racing threads "
-                            "only processed %d/%d w rwlock work items\n",
-                            num_online_cpus(), rwp->rw_rc, tq_count);
-               rc = -EINVAL;
-       }
-
-       taskq_destroy(tq);
-       rw_destroy(&(rwp->rw_rwlock));
-out:
-       kfree(rwp);
-       return rc;
-}
-
-#define splat_rwlock_test3_helper(rwp,rex1,rex2,wex1,wex2,held_func,rc)        \
-do {                                                                   \
-       int result, _rc1_, _rc2_, _rc3_, _rc4_;                         \
-                                                                       \
-       rc = 0;                                                         \
-       rw_enter(&(rwp)->rw_rwlock, RW_READER);                         \
-       _rc1_ = ((result = held_func(&(rwp)->rw_rwlock)) != rex1);      \
-       splat_vprint(file, SPLAT_RWLOCK_TEST3_NAME, "%s" #held_func     \
-                    " returned %d (expected %d) when RW_READER\n",     \
-                    _rc1_ ? "Fail " : "", result, rex1);               \
-       rw_exit(&(rwp)->rw_rwlock);                                     \
-       _rc2_ = ((result = held_func(&(rwp)->rw_rwlock)) != rex2);      \
-       splat_vprint(file, SPLAT_RWLOCK_TEST3_NAME, "%s" #held_func     \
-                    " returned %d (expected %d) when !RW_READER\n",    \
-                    _rc2_ ? "Fail " : "", result, rex2);               \
-                                                                       \
-       rw_enter(&(rwp)->rw_rwlock, RW_WRITER);                         \
-       _rc3_ = ((result = held_func(&(rwp)->rw_rwlock)) != wex1);      \
-       splat_vprint(file, SPLAT_RWLOCK_TEST3_NAME, "%s" #held_func     \
-                    " returned %d (expected %d) when RW_WRITER\n",     \
-                    _rc3_ ? "Fail " : "", result, wex1);               \
-       rw_exit(&(rwp)->rw_rwlock);                                     \
-       _rc4_ = ((result = held_func(&(rwp)->rw_rwlock)) != wex2);      \
-       splat_vprint(file, SPLAT_RWLOCK_TEST3_NAME, "%s" #held_func     \
-                    " returned %d (expected %d) when !RW_WRITER\n",    \
-                    _rc4_ ? "Fail " : "", result, wex2);               \
-                                                                       \
-       rc = ((_rc1_ ||  _rc2_ || _rc3_ || _rc4_) ? -EINVAL : 0);       \
-} while(0);
-
-static int
-splat_rwlock_test3(struct file *file, void *arg)
-{
-       rw_priv_t *rwp;
-       int rc1, rc2, rc3;
-
-       rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL);
-       if (rwp == NULL)
-               return -ENOMEM;
-
-       splat_init_rw_priv(rwp, file);
-
-       splat_rwlock_test3_helper(rwp, 1, 0, 1, 0, RW_LOCK_HELD, rc1);
-       splat_rwlock_test3_helper(rwp, 1, 0, 0, 0, RW_READ_HELD, rc2);
-       splat_rwlock_test3_helper(rwp, 0, 0, 1, 0, RW_WRITE_HELD, rc3);
-
-       rw_destroy(&rwp->rw_rwlock);
-       kfree(rwp);
-
-       return ((rc1 || rc2 || rc3) ? -EINVAL : 0);
-}
-
-static void
-splat_rwlock_test4_func(void *arg)
-{
-       rw_priv_t *rwp = (rw_priv_t *)arg;
-       ASSERT(rwp->rw_magic == SPLAT_RWLOCK_TEST_MAGIC);
-
-       if (rw_tryenter(&rwp->rw_rwlock, rwp->rw_type)) {
-               rwp->rw_rc = 0;
-               rw_exit(&rwp->rw_rwlock);
-       } else {
-               rwp->rw_rc = -EBUSY;
-       }
-}
-
-static char *
-splat_rwlock_test4_name(krw_t type)
-{
-       switch (type) {
-               case RW_NONE: return "RW_NONE";
-               case RW_WRITER: return "RW_WRITER";
-               case RW_READER: return "RW_READER";
-       }
-
-       return NULL;
-}
-
-static int
-splat_rwlock_test4_type(taskq_t *tq, rw_priv_t *rwp, int expected_rc,
-                       krw_t holder_type, krw_t try_type)
-{
-       int id, rc = 0;
-
-       /* Schedule a task function which will try and acquire the rwlock
-        * using type try_type while the rwlock is being held as holder_type.
-        * The result must match expected_rc for the test to pass */
-       rwp->rw_rc = -EINVAL;
-       rwp->rw_type = try_type;
-
-       if (holder_type == RW_WRITER || holder_type == RW_READER)
-               rw_enter(&rwp->rw_rwlock, holder_type);
-
-       id = taskq_dispatch(tq, splat_rwlock_test4_func, rwp, TQ_SLEEP);
-       if (id == TASKQID_INVALID) {
-               splat_vprint(rwp->rw_file, SPLAT_RWLOCK_TEST4_NAME, "%s",
-                            "taskq_dispatch() failed\n");
-               rc = -EINVAL;
-               goto out;
-       }
-
-       taskq_wait_id(tq, id);
-
-       if (rwp->rw_rc != expected_rc)
-               rc = -EINVAL;
-
-       splat_vprint(rwp->rw_file, SPLAT_RWLOCK_TEST4_NAME,
-                    "%srw_tryenter(%s) returned %d (expected %d) when %s\n",
-                    rc ? "Fail " : "", splat_rwlock_test4_name(try_type),
-                    rwp->rw_rc, expected_rc,
-                    splat_rwlock_test4_name(holder_type));
-out:
-       if (holder_type == RW_WRITER || holder_type == RW_READER)
-               rw_exit(&rwp->rw_rwlock);
-
-       return rc;
-}
-
-static int
-splat_rwlock_test4(struct file *file, void *arg)
-{
-       rw_priv_t *rwp;
-       taskq_t *tq;
-       int rc = 0, rc1, rc2, rc3, rc4, rc5, rc6;
-
-       rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL);
-       if (rwp == NULL)
-               return -ENOMEM;
-
-       tq = taskq_create(SPLAT_RWLOCK_TEST_TASKQ, 1, defclsyspri,
-                         50, INT_MAX, TASKQ_PREPOPULATE);
-       if (tq == NULL) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       splat_init_rw_priv(rwp, file);
-
-       /*
-        * Validate all combinations of rw_tryenter() contention.
-        *
-        * The concurrent reader test is modified for PREEMPT_RT_FULL
-        * kernels which do not permit concurrent read locks to be taken
-        * from different threads.  The same thread is allowed to take
-        * the read lock multiple times.
-        */
-       rc1 = splat_rwlock_test4_type(tq, rwp, -EBUSY, RW_WRITER, RW_WRITER);
-       rc2 = splat_rwlock_test4_type(tq, rwp, -EBUSY, RW_WRITER, RW_READER);
-       rc3 = splat_rwlock_test4_type(tq, rwp, -EBUSY, RW_READER, RW_WRITER);
-#if defined(CONFIG_PREEMPT_RT_FULL)
-       rc4 = splat_rwlock_test4_type(tq, rwp, -EBUSY, RW_READER, RW_READER);
-#else
-       rc4 = splat_rwlock_test4_type(tq, rwp, 0,      RW_READER, RW_READER);
-#endif
-       rc5 = splat_rwlock_test4_type(tq, rwp, 0,      RW_NONE,   RW_WRITER);
-       rc6 = splat_rwlock_test4_type(tq, rwp, 0,      RW_NONE,   RW_READER);
-
-       if (rc1 || rc2 || rc3 || rc4 || rc5 || rc6)
-               rc = -EINVAL;
-
-       taskq_destroy(tq);
-out:
-       rw_destroy(&(rwp->rw_rwlock));
-       kfree(rwp);
-
-       return rc;
-}
-
-static int
-splat_rwlock_test5(struct file *file, void *arg)
-{
-       rw_priv_t *rwp;
-       int rc = -EINVAL;
-
-       rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL);
-       if (rwp == NULL)
-               return -ENOMEM;
-
-       splat_init_rw_priv(rwp, file);
-
-       rw_enter(&rwp->rw_rwlock, RW_WRITER);
-       if (!RW_WRITE_HELD(&rwp->rw_rwlock)) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST5_NAME,
-                            "rwlock should be write lock: %d\n",
-                            RW_WRITE_HELD(&rwp->rw_rwlock));
-               goto out;
-       }
-
-       rw_downgrade(&rwp->rw_rwlock);
-       if (!RW_READ_HELD(&rwp->rw_rwlock)) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST5_NAME,
-                            "rwlock should be read lock: %d\n",
-                            RW_READ_HELD(&rwp->rw_rwlock));
-               goto out;
-       }
-
-       rc = 0;
-       splat_vprint(file, SPLAT_RWLOCK_TEST5_NAME, "%s",
-                    "rwlock properly downgraded\n");
-out:
-       rw_exit(&rwp->rw_rwlock);
-       rw_destroy(&rwp->rw_rwlock);
-       kfree(rwp);
-
-       return rc;
-}
-
-static int
-splat_rwlock_test6(struct file *file, void *arg)
-{
-       rw_priv_t *rwp;
-       int rc;
-
-       rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL);
-       if (rwp == NULL)
-               return -ENOMEM;
-
-       splat_init_rw_priv(rwp, file);
-
-       rw_enter(&rwp->rw_rwlock, RW_READER);
-       if (RWSEM_COUNT(SEM(&rwp->rw_rwlock)) !=
-           SPL_RWSEM_SINGLE_READER_VALUE) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST6_NAME,
-                   "We assumed single reader rwsem->count "
-                   "should be %ld, but is %ld\n",
-                   (long int)SPL_RWSEM_SINGLE_READER_VALUE,
-                   (long int)RWSEM_COUNT(SEM(&rwp->rw_rwlock)));
-               rc = -ENOLCK;
-               goto out;
-       }
-       rw_exit(&rwp->rw_rwlock);
-
-       rw_enter(&rwp->rw_rwlock, RW_WRITER);
-       if (RWSEM_COUNT(SEM(&rwp->rw_rwlock)) !=
-           SPL_RWSEM_SINGLE_WRITER_VALUE) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST6_NAME,
-                   "We assumed single writer rwsem->count "
-                   "should be %ld, but is %ld\n",
-                   (long int)SPL_RWSEM_SINGLE_WRITER_VALUE,
-                   (long int)RWSEM_COUNT(SEM(&rwp->rw_rwlock)));
-               rc = -ENOLCK;
-               goto out;
-       }
-       rc = 0;
-       splat_vprint(file, SPLAT_RWLOCK_TEST6_NAME, "%s",
-                    "rwsem->count same as we assumed\n");
-out:
-       rw_exit(&rwp->rw_rwlock);
-       rw_destroy(&rwp->rw_rwlock);
-       kfree(rwp);
-
-       return rc;
-}
-
-static int
-splat_rwlock_test7(struct file *file, void *arg)
-{
-       rw_priv_t *rwp;
-       int rc;
-
-       rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL);
-       if (rwp == NULL)
-               return -ENOMEM;
-
-       splat_init_rw_priv(rwp, file);
-
-       rw_enter(&rwp->rw_rwlock, RW_READER);
-       if (!RW_READ_HELD(&rwp->rw_rwlock)) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST7_NAME,
-                            "rwlock should be read lock: %d\n",
-                            RW_READ_HELD(&rwp->rw_rwlock));
-               rc = -ENOLCK;
-               goto out;
-       }
-
-       /* With one reader upgrade should never fail. */
-       rc = rw_tryupgrade(&rwp->rw_rwlock);
-       if (!rc) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST7_NAME,
-                            "rwlock failed upgrade from reader: %d\n",
-                            RW_READ_HELD(&rwp->rw_rwlock));
-               rc = -ENOLCK;
-               goto out;
-       }
-
-       if (RW_READ_HELD(&rwp->rw_rwlock) || !RW_WRITE_HELD(&rwp->rw_rwlock)) {
-               splat_vprint(file, SPLAT_RWLOCK_TEST7_NAME, "rwlock should "
-                          "have 0 (not %d) reader and 1 (not %d) writer\n",
-                          RW_READ_HELD(&rwp->rw_rwlock),
-                          RW_WRITE_HELD(&rwp->rw_rwlock));
-               goto out;
-       }
-
-       rc = 0;
-       splat_vprint(file, SPLAT_RWLOCK_TEST7_NAME, "%s",
-                    "rwlock properly upgraded\n");
-out:
-       rw_exit(&rwp->rw_rwlock);
-       rw_destroy(&rwp->rw_rwlock);
-       kfree(rwp);
-
-       return rc;
-}
-
-splat_subsystem_t *
-splat_rwlock_init(void)
-{
-       splat_subsystem_t *sub;
-
-       sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-       if (sub == NULL)
-               return NULL;
-
-       memset(sub, 0, sizeof(*sub));
-       strncpy(sub->desc.name, SPLAT_RWLOCK_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_RWLOCK_DESC, SPLAT_DESC_SIZE);
-       INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-       spin_lock_init(&sub->test_lock);
-       sub->desc.id = SPLAT_SUBSYSTEM_RWLOCK;
-
-       splat_test_init(sub, SPLAT_RWLOCK_TEST1_NAME, SPLAT_RWLOCK_TEST1_DESC,
-                     SPLAT_RWLOCK_TEST1_ID, splat_rwlock_test1);
-       splat_test_init(sub, SPLAT_RWLOCK_TEST2_NAME, SPLAT_RWLOCK_TEST2_DESC,
-                     SPLAT_RWLOCK_TEST2_ID, splat_rwlock_test2);
-       splat_test_init(sub, SPLAT_RWLOCK_TEST3_NAME, SPLAT_RWLOCK_TEST3_DESC,
-                     SPLAT_RWLOCK_TEST3_ID, splat_rwlock_test3);
-       splat_test_init(sub, SPLAT_RWLOCK_TEST4_NAME, SPLAT_RWLOCK_TEST4_DESC,
-                     SPLAT_RWLOCK_TEST4_ID, splat_rwlock_test4);
-       splat_test_init(sub, SPLAT_RWLOCK_TEST5_NAME, SPLAT_RWLOCK_TEST5_DESC,
-                     SPLAT_RWLOCK_TEST5_ID, splat_rwlock_test5);
-       splat_test_init(sub, SPLAT_RWLOCK_TEST6_NAME, SPLAT_RWLOCK_TEST6_DESC,
-                     SPLAT_RWLOCK_TEST6_ID, splat_rwlock_test6);
-       splat_test_init(sub, SPLAT_RWLOCK_TEST7_NAME, SPLAT_RWLOCK_TEST7_DESC,
-                     SPLAT_RWLOCK_TEST7_ID, splat_rwlock_test7);
-
-       return sub;
-}
-
-void
-splat_rwlock_fini(splat_subsystem_t *sub)
-{
-       ASSERT(sub);
-       splat_test_fini(sub, SPLAT_RWLOCK_TEST7_ID);
-       splat_test_fini(sub, SPLAT_RWLOCK_TEST6_ID);
-       splat_test_fini(sub, SPLAT_RWLOCK_TEST5_ID);
-       splat_test_fini(sub, SPLAT_RWLOCK_TEST4_ID);
-       splat_test_fini(sub, SPLAT_RWLOCK_TEST3_ID);
-       splat_test_fini(sub, SPLAT_RWLOCK_TEST2_ID);
-       splat_test_fini(sub, SPLAT_RWLOCK_TEST1_ID);
-       kfree(sub);
-}
-
-int
-splat_rwlock_id(void) {
-       return SPLAT_SUBSYSTEM_RWLOCK;
-}
diff --git a/module/splat/splat-taskq.c b/module/splat/splat-taskq.c
deleted file mode 100644 (file)
index ff73e10..0000000
+++ /dev/null
@@ -1,1548 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Task Queue Tests.
- */
-
-#include <sys/kmem.h>
-#include <sys/vmem.h>
-#include <sys/random.h>
-#include <sys/taskq.h>
-#include <sys/time.h>
-#include <sys/timer.h>
-#include <linux/delay.h>
-#include "splat-internal.h"
-
-#define SPLAT_TASKQ_NAME               "taskq"
-#define SPLAT_TASKQ_DESC               "Kernel Task Queue Tests"
-
-#define SPLAT_TASKQ_TEST1_ID           0x0201
-#define SPLAT_TASKQ_TEST1_NAME         "single"
-#define SPLAT_TASKQ_TEST1_DESC         "Single task queue, single task"
-
-#define SPLAT_TASKQ_TEST2_ID           0x0202
-#define SPLAT_TASKQ_TEST2_NAME         "multiple"
-#define SPLAT_TASKQ_TEST2_DESC         "Multiple task queues, multiple tasks"
-
-#define SPLAT_TASKQ_TEST3_ID           0x0203
-#define SPLAT_TASKQ_TEST3_NAME         "system"
-#define SPLAT_TASKQ_TEST3_DESC         "System task queue, multiple tasks"
-
-#define SPLAT_TASKQ_TEST4_ID           0x0204
-#define SPLAT_TASKQ_TEST4_NAME         "wait"
-#define SPLAT_TASKQ_TEST4_DESC         "Multiple task waiting"
-
-#define SPLAT_TASKQ_TEST5_ID           0x0205
-#define SPLAT_TASKQ_TEST5_NAME         "order"
-#define SPLAT_TASKQ_TEST5_DESC         "Correct task ordering"
-
-#define SPLAT_TASKQ_TEST6_ID           0x0206
-#define SPLAT_TASKQ_TEST6_NAME         "front"
-#define SPLAT_TASKQ_TEST6_DESC         "Correct ordering with TQ_FRONT flag"
-
-#define SPLAT_TASKQ_TEST7_ID           0x0207
-#define SPLAT_TASKQ_TEST7_NAME         "recurse"
-#define SPLAT_TASKQ_TEST7_DESC         "Single task queue, recursive dispatch"
-
-#define SPLAT_TASKQ_TEST8_ID           0x0208
-#define SPLAT_TASKQ_TEST8_NAME         "contention"
-#define SPLAT_TASKQ_TEST8_DESC         "1 queue, 100 threads, 131072 tasks"
-
-#define SPLAT_TASKQ_TEST9_ID           0x0209
-#define SPLAT_TASKQ_TEST9_NAME         "delay"
-#define SPLAT_TASKQ_TEST9_DESC         "Delayed task execution"
-
-#define SPLAT_TASKQ_TEST10_ID          0x020a
-#define SPLAT_TASKQ_TEST10_NAME                "cancel"
-#define SPLAT_TASKQ_TEST10_DESC                "Cancel task execution"
-
-#define SPLAT_TASKQ_TEST11_ID          0x020b
-#define SPLAT_TASKQ_TEST11_NAME                "dynamic"
-#define SPLAT_TASKQ_TEST11_DESC                "Dynamic task queue thread creation"
-
-#define SPLAT_TASKQ_ORDER_MAX          8
-#define SPLAT_TASKQ_DEPTH_MAX          16
-
-
-typedef struct splat_taskq_arg {
-       int flag;
-       int id;
-       atomic_t *count;
-       int order[SPLAT_TASKQ_ORDER_MAX];
-       unsigned int depth;
-       clock_t expire;
-       taskq_t *tq;
-       taskq_ent_t *tqe;
-       spinlock_t lock;
-       struct file *file;
-       const char *name;
-} splat_taskq_arg_t;
-
-typedef struct splat_taskq_id {
-       int id;
-       splat_taskq_arg_t *arg;
-} splat_taskq_id_t;
-
-/*
- * Create a taskq, queue a task, wait until task completes, ensure
- * task ran properly, cleanup taskq.
- */
-static void
-splat_taskq_test13_func(void *arg)
-{
-       splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg;
-
-       ASSERT(tq_arg);
-       splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST1_NAME,
-                  "Taskq '%s' function '%s' setting flag\n",
-                  tq_arg->name, sym2str(splat_taskq_test13_func));
-       tq_arg->flag = 1;
-}
-
-static int
-splat_taskq_test1_impl(struct file *file, void *arg, boolean_t prealloc)
-{
-       taskq_t *tq;
-       taskqid_t id;
-       splat_taskq_arg_t tq_arg;
-       taskq_ent_t *tqe;
-
-       tqe = kmem_alloc(sizeof (taskq_ent_t), KM_SLEEP);
-       taskq_init_ent(tqe);
-
-       splat_vprint(file, SPLAT_TASKQ_TEST1_NAME,
-                    "Taskq '%s' creating (%s dispatch)\n",
-                    SPLAT_TASKQ_TEST1_NAME,
-                    prealloc ? "prealloc" : "dynamic");
-       if ((tq = taskq_create(SPLAT_TASKQ_TEST1_NAME, 1, defclsyspri,
-                              50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) {
-               splat_vprint(file, SPLAT_TASKQ_TEST1_NAME,
-                          "Taskq '%s' create failed\n",
-                          SPLAT_TASKQ_TEST1_NAME);
-               kmem_free(tqe, sizeof (taskq_ent_t));
-               return -EINVAL;
-       }
-
-       tq_arg.flag = 0;
-       tq_arg.id   = 0;
-       tq_arg.file = file;
-       tq_arg.name = SPLAT_TASKQ_TEST1_NAME;
-
-       splat_vprint(file, SPLAT_TASKQ_TEST1_NAME,
-                  "Taskq '%s' function '%s' dispatching\n",
-                  tq_arg.name, sym2str(splat_taskq_test13_func));
-       if (prealloc) {
-               taskq_dispatch_ent(tq, splat_taskq_test13_func,
-                                  &tq_arg, TQ_SLEEP, tqe);
-               id = tqe->tqent_id;
-       } else {
-               id = taskq_dispatch(tq, splat_taskq_test13_func,
-                                   &tq_arg, TQ_SLEEP);
-       }
-
-       if (id == TASKQID_INVALID) {
-               splat_vprint(file, SPLAT_TASKQ_TEST1_NAME,
-                            "Taskq '%s' function '%s' dispatch failed\n",
-                            tq_arg.name, sym2str(splat_taskq_test13_func));
-               kmem_free(tqe, sizeof (taskq_ent_t));
-               taskq_destroy(tq);
-               return -EINVAL;
-       }
-
-       splat_vprint(file, SPLAT_TASKQ_TEST1_NAME, "Taskq '%s' waiting\n",
-                  tq_arg.name);
-       taskq_wait(tq);
-       splat_vprint(file, SPLAT_TASKQ_TEST1_NAME, "Taskq '%s' destroying\n",
-                  tq_arg.name);
-
-       kmem_free(tqe, sizeof (taskq_ent_t));
-       taskq_destroy(tq);
-
-       return (tq_arg.flag) ? 0 : -EINVAL;
-}
-
-static int
-splat_taskq_test1(struct file *file, void *arg)
-{
-       int rc;
-
-       rc = splat_taskq_test1_impl(file, arg, B_FALSE);
-       if (rc)
-               return rc;
-
-       rc = splat_taskq_test1_impl(file, arg, B_TRUE);
-
-       return rc;
-}
-
-/*
- * Create multiple taskq's, each with multiple tasks, wait until
- * all tasks complete, ensure all tasks ran properly and in the
- * correct order.  Run order must be the same as the order submitted
- * because we only have 1 thread per taskq.  Finally cleanup the taskq.
- */
-static void
-splat_taskq_test2_func1(void *arg)
-{
-       splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg;
-
-       ASSERT(tq_arg);
-       splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST2_NAME,
-                  "Taskq '%s/%d' function '%s' flag = %d = %d * 2\n",
-                  tq_arg->name, tq_arg->id,
-                  sym2str(splat_taskq_test2_func1),
-                  tq_arg->flag * 2, tq_arg->flag);
-       tq_arg->flag *= 2;
-}
-
-static void
-splat_taskq_test2_func2(void *arg)
-{
-       splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg;
-
-       ASSERT(tq_arg);
-       splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST2_NAME,
-                  "Taskq '%s/%d' function '%s' flag = %d = %d + 1\n",
-                  tq_arg->name, tq_arg->id,
-                  sym2str(splat_taskq_test2_func2),
-                  tq_arg->flag + 1, tq_arg->flag);
-       tq_arg->flag += 1;
-}
-
-#define TEST2_TASKQS                    8
-#define TEST2_THREADS_PER_TASKQ         1
-
-static int
-splat_taskq_test2_impl(struct file *file, void *arg, boolean_t prealloc) {
-       taskq_t *tq[TEST2_TASKQS] = { NULL };
-       taskqid_t id;
-       splat_taskq_arg_t *tq_args[TEST2_TASKQS] = { NULL };
-       taskq_ent_t *func1_tqes = NULL;
-       taskq_ent_t *func2_tqes = NULL;
-       int i, rc = 0;
-
-       func1_tqes = kmalloc(sizeof(*func1_tqes) * TEST2_TASKQS, GFP_KERNEL);
-       if (func1_tqes == NULL) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       func2_tqes = kmalloc(sizeof(*func2_tqes) * TEST2_TASKQS, GFP_KERNEL);
-       if (func2_tqes == NULL) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       for (i = 0; i < TEST2_TASKQS; i++) {
-               taskq_init_ent(&func1_tqes[i]);
-               taskq_init_ent(&func2_tqes[i]);
-
-               tq_args[i] = kmalloc(sizeof (splat_taskq_arg_t), GFP_KERNEL);
-               if (tq_args[i] == NULL) {
-                       rc = -ENOMEM;
-                       break;
-               }
-
-               splat_vprint(file, SPLAT_TASKQ_TEST2_NAME,
-                            "Taskq '%s/%d' creating (%s dispatch)\n",
-                            SPLAT_TASKQ_TEST2_NAME, i,
-                            prealloc ? "prealloc" : "dynamic");
-               if ((tq[i] = taskq_create(SPLAT_TASKQ_TEST2_NAME,
-                                         TEST2_THREADS_PER_TASKQ,
-                                         defclsyspri, 50, INT_MAX,
-                                         TASKQ_PREPOPULATE)) == NULL) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST2_NAME,
-                                  "Taskq '%s/%d' create failed\n",
-                                  SPLAT_TASKQ_TEST2_NAME, i);
-                       rc = -EINVAL;
-                       break;
-               }
-
-               tq_args[i]->flag = i;
-               tq_args[i]->id   = i;
-               tq_args[i]->file = file;
-               tq_args[i]->name = SPLAT_TASKQ_TEST2_NAME;
-
-               splat_vprint(file, SPLAT_TASKQ_TEST2_NAME,
-                          "Taskq '%s/%d' function '%s' dispatching\n",
-                          tq_args[i]->name, tq_args[i]->id,
-                          sym2str(splat_taskq_test2_func1));
-               if (prealloc) {
-                       taskq_dispatch_ent(tq[i], splat_taskq_test2_func1,
-                           tq_args[i], TQ_SLEEP, &func1_tqes[i]);
-                       id = func1_tqes[i].tqent_id;
-               } else {
-                       id = taskq_dispatch(tq[i], splat_taskq_test2_func1,
-                           tq_args[i], TQ_SLEEP);
-               }
-
-               if (id == TASKQID_INVALID) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST2_NAME,
-                                  "Taskq '%s/%d' function '%s' dispatch "
-                                  "failed\n", tq_args[i]->name, tq_args[i]->id,
-                                  sym2str(splat_taskq_test2_func1));
-                       rc = -EINVAL;
-                       break;
-               }
-
-               splat_vprint(file, SPLAT_TASKQ_TEST2_NAME,
-                          "Taskq '%s/%d' function '%s' dispatching\n",
-                          tq_args[i]->name, tq_args[i]->id,
-                          sym2str(splat_taskq_test2_func2));
-               if (prealloc) {
-                       taskq_dispatch_ent(tq[i], splat_taskq_test2_func2,
-                           tq_args[i], TQ_SLEEP, &func2_tqes[i]);
-                       id = func2_tqes[i].tqent_id;
-               } else {
-                       id = taskq_dispatch(tq[i], splat_taskq_test2_func2,
-                           tq_args[i], TQ_SLEEP);
-               }
-
-               if (id == TASKQID_INVALID) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, "Taskq "
-                                    "'%s/%d' function '%s' dispatch failed\n",
-                                    tq_args[i]->name, tq_args[i]->id,
-                                    sym2str(splat_taskq_test2_func2));
-                       rc = -EINVAL;
-                       break;
-               }
-       }
-
-       /* When rc is set we're effectively just doing cleanup here, so
-        * ignore new errors in that case.  They just cause noise. */
-       for (i = 0; i < TEST2_TASKQS; i++) {
-               if (tq_args[i] == NULL)
-                       continue;
-
-               if (tq[i] != NULL) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST2_NAME,
-                                  "Taskq '%s/%d' waiting\n",
-                                  tq_args[i]->name, tq_args[i]->id);
-                       taskq_wait(tq[i]);
-                       splat_vprint(file, SPLAT_TASKQ_TEST2_NAME,
-                                  "Taskq '%s/%d; destroying\n",
-                                 tq_args[i]->name, tq_args[i]->id);
-
-                       taskq_destroy(tq[i]);
-
-                       if (!rc && tq_args[i]->flag != ((i * 2) + 1)) {
-                               splat_vprint(file, SPLAT_TASKQ_TEST2_NAME,
-                                          "Taskq '%s/%d' processed tasks "
-                                          "out of order; %d != %d\n",
-                                          tq_args[i]->name, tq_args[i]->id,
-                                          tq_args[i]->flag, i * 2 + 1);
-                               rc = -EINVAL;
-                       } else {
-                               splat_vprint(file, SPLAT_TASKQ_TEST2_NAME,
-                                          "Taskq '%s/%d' processed tasks "
-                                          "in the correct order; %d == %d\n",
-                                          tq_args[i]->name, tq_args[i]->id,
-                                          tq_args[i]->flag, i * 2 + 1);
-                       }
-
-                       kfree(tq_args[i]);
-               }
-       }
-out:
-       if (func1_tqes)
-               kfree(func1_tqes);
-
-       if (func2_tqes)
-               kfree(func2_tqes);
-
-       return rc;
-}
-
-static int
-splat_taskq_test2(struct file *file, void *arg) {
-       int rc;
-
-       rc = splat_taskq_test2_impl(file, arg, B_FALSE);
-       if (rc)
-               return rc;
-
-       rc = splat_taskq_test2_impl(file, arg, B_TRUE);
-
-       return rc;
-}
-
-/*
- * Use the global system task queue with a single task, wait until task
- * completes, ensure task ran properly.
- */
-static int
-splat_taskq_test3_impl(struct file *file, void *arg, boolean_t prealloc)
-{
-       taskqid_t id;
-       splat_taskq_arg_t *tq_arg;
-       taskq_ent_t *tqe;
-       int error;
-
-       tq_arg = kmem_alloc(sizeof (splat_taskq_arg_t), KM_SLEEP);
-       tqe = kmem_alloc(sizeof (taskq_ent_t), KM_SLEEP);
-       taskq_init_ent(tqe);
-
-       tq_arg->flag = 0;
-       tq_arg->id   = 0;
-       tq_arg->file = file;
-       tq_arg->name = SPLAT_TASKQ_TEST3_NAME;
-
-       splat_vprint(file, SPLAT_TASKQ_TEST3_NAME,
-                  "Taskq '%s' function '%s' %s dispatch\n",
-                  tq_arg->name, sym2str(splat_taskq_test13_func),
-                  prealloc ? "prealloc" : "dynamic");
-       if (prealloc) {
-               taskq_dispatch_ent(system_taskq, splat_taskq_test13_func,
-                                  tq_arg, TQ_SLEEP, tqe);
-               id = tqe->tqent_id;
-       } else {
-               id = taskq_dispatch(system_taskq, splat_taskq_test13_func,
-                                   tq_arg, TQ_SLEEP);
-       }
-
-       if (id == TASKQID_INVALID) {
-               splat_vprint(file, SPLAT_TASKQ_TEST3_NAME,
-                          "Taskq '%s' function '%s' dispatch failed\n",
-                          tq_arg->name, sym2str(splat_taskq_test13_func));
-               kmem_free(tqe, sizeof (taskq_ent_t));
-               kmem_free(tq_arg, sizeof (splat_taskq_arg_t));
-               return -EINVAL;
-       }
-
-       splat_vprint(file, SPLAT_TASKQ_TEST3_NAME, "Taskq '%s' waiting\n",
-                  tq_arg->name);
-       taskq_wait(system_taskq);
-
-       error = (tq_arg->flag) ? 0 : -EINVAL;
-
-       kmem_free(tqe, sizeof (taskq_ent_t));
-       kmem_free(tq_arg, sizeof (splat_taskq_arg_t));
-
-       return (error);
-}
-
-static int
-splat_taskq_test3(struct file *file, void *arg)
-{
-       int rc;
-
-       rc = splat_taskq_test3_impl(file, arg, B_FALSE);
-       if (rc)
-               return rc;
-
-       rc = splat_taskq_test3_impl(file, arg, B_TRUE);
-
-       return rc;
-}
-
-/*
- * Create a taskq and dispatch a large number of tasks to the queue.
- * Then use taskq_wait() to block until all the tasks complete, then
- * cross check that all the tasks ran by checking the shared atomic
- * counter which is incremented in the task function.
- *
- * First we try with a large 'maxalloc' value, then we try with a small one.
- * We should not drop tasks when TQ_SLEEP is used in taskq_dispatch(), even
- * if the number of pending tasks is above maxalloc.
- */
-static void
-splat_taskq_test4_func(void *arg)
-{
-       splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg;
-       ASSERT(tq_arg);
-
-       atomic_inc(tq_arg->count);
-}
-
-static int
-splat_taskq_test4_common(struct file *file, void *arg, int minalloc,
-                         int maxalloc, int nr_tasks, boolean_t prealloc)
-{
-       taskq_t *tq;
-       taskqid_t id;
-       splat_taskq_arg_t tq_arg;
-       taskq_ent_t *tqes;
-       atomic_t count;
-       int i, j, rc = 0;
-
-       tqes = kmalloc(sizeof(*tqes) * nr_tasks, GFP_KERNEL);
-       if (tqes == NULL)
-               return -ENOMEM;
-
-       splat_vprint(file, SPLAT_TASKQ_TEST4_NAME,
-                    "Taskq '%s' creating (%s dispatch) (%d/%d/%d)\n",
-                    SPLAT_TASKQ_TEST4_NAME,
-                    prealloc ? "prealloc" : "dynamic",
-                    minalloc, maxalloc, nr_tasks);
-       if ((tq = taskq_create(SPLAT_TASKQ_TEST4_NAME, 1, defclsyspri,
-                              minalloc, maxalloc, TASKQ_PREPOPULATE)) == NULL) {
-               splat_vprint(file, SPLAT_TASKQ_TEST4_NAME,
-                            "Taskq '%s' create failed\n",
-                            SPLAT_TASKQ_TEST4_NAME);
-               rc = -EINVAL;
-               goto out_free;
-       }
-
-       tq_arg.file = file;
-       tq_arg.name = SPLAT_TASKQ_TEST4_NAME;
-       tq_arg.count = &count;
-
-       for (i = 1; i <= nr_tasks; i *= 2) {
-               atomic_set(tq_arg.count, 0);
-               splat_vprint(file, SPLAT_TASKQ_TEST4_NAME,
-                            "Taskq '%s' function '%s' dispatched %d times\n",
-                            tq_arg.name, sym2str(splat_taskq_test4_func), i);
-
-               for (j = 0; j < i; j++) {
-                       taskq_init_ent(&tqes[j]);
-
-                       if (prealloc) {
-                               taskq_dispatch_ent(tq, splat_taskq_test4_func,
-                                                  &tq_arg, TQ_SLEEP, &tqes[j]);
-                               id = tqes[j].tqent_id;
-                       } else {
-                               id = taskq_dispatch(tq, splat_taskq_test4_func,
-                                                   &tq_arg, TQ_SLEEP);
-                       }
-
-                       if (id == TASKQID_INVALID) {
-                               splat_vprint(file, SPLAT_TASKQ_TEST4_NAME,
-                                       "Taskq '%s' function '%s' dispatch "
-                                       "%d failed\n", tq_arg.name,
-                                       sym2str(splat_taskq_test4_func), j);
-                                       rc = -EINVAL;
-                                       goto out;
-                       }
-               }
-
-               splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, "Taskq '%s' "
-                            "waiting for %d dispatches\n", tq_arg.name, i);
-               taskq_wait(tq);
-               splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, "Taskq '%s' "
-                            "%d/%d dispatches finished\n", tq_arg.name,
-                            atomic_read(&count), i);
-               if (atomic_read(&count) != i) {
-                       rc = -ERANGE;
-                       goto out;
-
-               }
-       }
-out:
-       splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, "Taskq '%s' destroying\n",
-                  tq_arg.name);
-       taskq_destroy(tq);
-
-out_free:
-       kfree(tqes);
-
-       return rc;
-}
-
-static int
-splat_taskq_test4_impl(struct file *file, void *arg, boolean_t prealloc)
-{
-       int rc;
-
-       rc = splat_taskq_test4_common(file, arg, 50, INT_MAX, 1024, prealloc);
-       if (rc)
-               return rc;
-
-       rc = splat_taskq_test4_common(file, arg, 1, 1, 32, prealloc);
-
-       return rc;
-}
-
-static int
-splat_taskq_test4(struct file *file, void *arg)
-{
-       int rc;
-
-       rc = splat_taskq_test4_impl(file, arg, B_FALSE);
-       if (rc)
-               return rc;
-
-       rc = splat_taskq_test4_impl(file, arg, B_TRUE);
-
-       return rc;
-}
-
-/*
- * Create a taskq and dispatch a specific sequence of tasks carefully
- * crafted to validate the order in which tasks are processed.  When
- * there are multiple worker threads each thread will process the
- * next pending task as soon as it completes its current task.  This
- * means that tasks do not strictly complete in order in which they
- * were dispatched (increasing task id).  This is fine but we need to
- * verify taskq_wait_outstanding() blocks until the passed task id and
- * all lower task ids complete.  We do this by dispatching the following
- * specific sequence of tasks each of which block for N time units.
- * We then use taskq_wait_outstanding() to unblock at specific task id and
- * verify the only the expected task ids have completed and in the
- * correct order.  The two cases of interest are:
- *
- * 1) Task ids larger than the waited for task id can run and
- *    complete as long as there is an available worker thread.
- * 2) All task ids lower than the waited one must complete before
- *    unblocking even if the waited task id itself has completed.
- *
- * The following table shows each task id and how they will be
- * scheduled.  Each rows represent one time unit and each column
- * one of the three worker threads.  The places taskq_wait_outstanding()
- * must unblock for a specific id are identified as well as the
- * task ids which must have completed and their order.
- *
- *       +-----+       <--- taskq_wait_outstanding(tq, 8) unblocks
- *       |     |            Required Completion Order: 1,2,4,5,3,8,6,7
- * +-----+     |
- * |     |     |
- * |     |     +-----+
- * |     |     |  8  |
- * |     |     +-----+ <--- taskq_wait_outstanding(tq, 3) unblocks
- * |     |  7  |     |      Required Completion Order: 1,2,4,5,3
- * |     +-----+     |
- * |  6  |     |     |
- * +-----+     |     |
- * |     |  5  |     |
- * |     +-----+     |
- * |  4  |     |     |
- * +-----+     |     |
- * |  1  |  2  |  3  |
- * +-----+-----+-----+
- *
- */
-static void
-splat_taskq_test5_func(void *arg)
-{
-       splat_taskq_id_t *tq_id = (splat_taskq_id_t *)arg;
-       splat_taskq_arg_t *tq_arg = tq_id->arg;
-       int factor;
-
-       /* Delays determined by above table */
-       switch (tq_id->id) {
-               default:                factor = 0;     break;
-               case 1: case 8:         factor = 1;     break;
-               case 2: case 4: case 5: factor = 2;     break;
-               case 6: case 7:         factor = 4;     break;
-               case 3:                 factor = 5;     break;
-       }
-
-       msleep(factor * 100);
-       splat_vprint(tq_arg->file, tq_arg->name,
-                    "Taskqid %d complete for taskq '%s'\n",
-                    tq_id->id, tq_arg->name);
-
-       spin_lock(&tq_arg->lock);
-       tq_arg->order[tq_arg->flag] = tq_id->id;
-       tq_arg->flag++;
-       spin_unlock(&tq_arg->lock);
-}
-
-static int
-splat_taskq_test_order(splat_taskq_arg_t *tq_arg, int *order)
-{
-       int i, j;
-
-       for (i = 0; i < SPLAT_TASKQ_ORDER_MAX; i++) {
-               if (tq_arg->order[i] != order[i]) {
-                       splat_vprint(tq_arg->file, tq_arg->name,
-                                    "Taskq '%s' incorrect completion "
-                                    "order\n", tq_arg->name);
-                       splat_vprint(tq_arg->file, tq_arg->name,
-                                    "%s", "Expected { ");
-
-                       for (j = 0; j < SPLAT_TASKQ_ORDER_MAX; j++)
-                               splat_print(tq_arg->file, "%d ", order[j]);
-
-                       splat_print(tq_arg->file, "%s", "}\n");
-                       splat_vprint(tq_arg->file, tq_arg->name,
-                                    "%s", "Got      { ");
-
-                       for (j = 0; j < SPLAT_TASKQ_ORDER_MAX; j++)
-                               splat_print(tq_arg->file, "%d ",
-                                           tq_arg->order[j]);
-
-                       splat_print(tq_arg->file, "%s", "}\n");
-                       return -EILSEQ;
-               }
-       }
-
-       splat_vprint(tq_arg->file, tq_arg->name,
-                    "Taskq '%s' validated correct completion order\n",
-                    tq_arg->name);
-
-       return 0;
-}
-
-static int
-splat_taskq_test5_impl(struct file *file, void *arg, boolean_t prealloc)
-{
-       taskq_t *tq;
-       taskqid_t id;
-       splat_taskq_id_t tq_id[SPLAT_TASKQ_ORDER_MAX];
-       splat_taskq_arg_t tq_arg;
-       int order1[SPLAT_TASKQ_ORDER_MAX] = { 1,2,4,5,3,0,0,0 };
-       int order2[SPLAT_TASKQ_ORDER_MAX] = { 1,2,4,5,3,8,6,7 };
-       taskq_ent_t *tqes;
-       int i, rc = 0;
-
-       tqes = kmem_alloc(sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX, KM_SLEEP);
-       memset(tqes, 0, sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX);
-
-       splat_vprint(file, SPLAT_TASKQ_TEST5_NAME,
-                    "Taskq '%s' creating (%s dispatch)\n",
-                    SPLAT_TASKQ_TEST5_NAME,
-                    prealloc ? "prealloc" : "dynamic");
-       if ((tq = taskq_create(SPLAT_TASKQ_TEST5_NAME, 3, defclsyspri,
-                              50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) {
-               splat_vprint(file, SPLAT_TASKQ_TEST5_NAME,
-                            "Taskq '%s' create failed\n",
-                            SPLAT_TASKQ_TEST5_NAME);
-               return -EINVAL;
-       }
-
-       tq_arg.flag = 0;
-       memset(&tq_arg.order, 0, sizeof(int) * SPLAT_TASKQ_ORDER_MAX);
-       spin_lock_init(&tq_arg.lock);
-       tq_arg.file = file;
-       tq_arg.name = SPLAT_TASKQ_TEST5_NAME;
-
-       for (i = 0; i < SPLAT_TASKQ_ORDER_MAX; i++) {
-               taskq_init_ent(&tqes[i]);
-
-               tq_id[i].id = i + 1;
-               tq_id[i].arg = &tq_arg;
-
-               if (prealloc) {
-                       taskq_dispatch_ent(tq, splat_taskq_test5_func,
-                                      &tq_id[i], TQ_SLEEP, &tqes[i]);
-                       id = tqes[i].tqent_id;
-               } else {
-                       id = taskq_dispatch(tq, splat_taskq_test5_func,
-                                           &tq_id[i], TQ_SLEEP);
-               }
-
-               if (id == TASKQID_INVALID) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST5_NAME,
-                               "Taskq '%s' function '%s' dispatch failed\n",
-                               tq_arg.name, sym2str(splat_taskq_test5_func));
-                               rc = -EINVAL;
-                               goto out;
-               }
-
-               if (tq_id[i].id != id) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST5_NAME,
-                               "Taskq '%s' expected taskqid %d got %d\n",
-                               tq_arg.name, (int)tq_id[i].id, (int)id);
-                               rc = -EINVAL;
-                               goto out;
-               }
-       }
-
-       splat_vprint(file, SPLAT_TASKQ_TEST5_NAME, "Taskq '%s' "
-                    "waiting for taskqid %d completion\n", tq_arg.name, 3);
-       taskq_wait_outstanding(tq, 3);
-       if ((rc = splat_taskq_test_order(&tq_arg, order1)))
-               goto out;
-
-       splat_vprint(file, SPLAT_TASKQ_TEST5_NAME, "Taskq '%s' "
-                    "waiting for taskqid %d completion\n", tq_arg.name, 8);
-       taskq_wait_outstanding(tq, 8);
-       rc = splat_taskq_test_order(&tq_arg, order2);
-
-out:
-       splat_vprint(file, SPLAT_TASKQ_TEST5_NAME,
-                    "Taskq '%s' destroying\n", tq_arg.name);
-       taskq_destroy(tq);
-
-       kmem_free(tqes, sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX);
-
-       return rc;
-}
-
-static int
-splat_taskq_test5(struct file *file, void *arg)
-{
-       int rc;
-
-       rc = splat_taskq_test5_impl(file, arg, B_FALSE);
-       if (rc)
-               return rc;
-
-       rc = splat_taskq_test5_impl(file, arg, B_TRUE);
-
-       return rc;
-}
-
-/*
- * Create a single task queue with three threads.  Dispatch 8 tasks,
- * setting TQ_FRONT on only the last three.  Sleep after
- * dispatching tasks 1-3 to ensure they will run and hold the threads
- * busy while we dispatch the remaining tasks.  Verify that tasks 6-8
- * run before task 4-5.
- *
- * The following table shows each task id and how they will be
- * scheduled.  Each rows represent one time unit and each column
- * one of the three worker threads.
- *
- * NB: The Horizontal Line is the LAST Time unit consumed by the Task,
- *     and must be included in the factor calculation.
- *  T
- * 17->       +-----+
- * 16         | T6  |
- * 15-> +-----+     |
- * 14   | T6  |     |
- * 13-> |     |  5  +-----+
- * 12   |     |     | T6  |
- * 11-> |     +-----|     |
- * 10   |  4  | T6  |     |
- *  9-> +-----+     |  8  |
- *  8   | T5  |     |     |
- *  7-> |     |  7  +-----+
- *  6   |     |     | T7  |
- *  5-> |     +-----+     |
- *  4   |  6  |  T5 |     |
- *  3-> +-----+     |     |
- *  2   | T3  |     |     |
- *  1   |  1  |  2  |  3  |
- *  0   +-----+-----+-----+
- *
- */
-static void
-splat_taskq_test6_func(void *arg)
-{
-        /* Delays determined by above table */
-        static const int factor[SPLAT_TASKQ_ORDER_MAX+1] = {0,3,5,7,6,6,5,6,6};
-
-       splat_taskq_id_t *tq_id = (splat_taskq_id_t *)arg;
-       splat_taskq_arg_t *tq_arg = tq_id->arg;
-
-       splat_vprint(tq_arg->file, tq_arg->name,
-                    "Taskqid %d starting for taskq '%s'\n",
-                    tq_id->id, tq_arg->name);
-
-        if (tq_id->id < SPLAT_TASKQ_ORDER_MAX+1) {
-               msleep(factor[tq_id->id] * 50);
-       }
-
-       spin_lock(&tq_arg->lock);
-       tq_arg->order[tq_arg->flag] = tq_id->id;
-       tq_arg->flag++;
-       spin_unlock(&tq_arg->lock);
-
-       splat_vprint(tq_arg->file, tq_arg->name,
-                    "Taskqid %d complete for taskq '%s'\n",
-                    tq_id->id, tq_arg->name);
-}
-
-static int
-splat_taskq_test6_impl(struct file *file, void *arg, boolean_t prealloc)
-{
-       taskq_t *tq;
-       taskqid_t id;
-       splat_taskq_id_t tq_id[SPLAT_TASKQ_ORDER_MAX];
-       splat_taskq_arg_t tq_arg;
-       int order[SPLAT_TASKQ_ORDER_MAX] = { 1,2,3,6,7,8,4,5 };
-       taskq_ent_t *tqes;
-       int i, rc = 0;
-       uint_t tflags;
-
-       tqes = kmem_alloc(sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX, KM_SLEEP);
-       memset(tqes, 0, sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX);
-
-       splat_vprint(file, SPLAT_TASKQ_TEST6_NAME,
-                    "Taskq '%s' creating (%s dispatch)\n",
-                    SPLAT_TASKQ_TEST6_NAME,
-                    prealloc ? "prealloc" : "dynamic");
-       if ((tq = taskq_create(SPLAT_TASKQ_TEST6_NAME, 3, defclsyspri,
-                              50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) {
-               splat_vprint(file, SPLAT_TASKQ_TEST6_NAME,
-                            "Taskq '%s' create failed\n",
-                            SPLAT_TASKQ_TEST6_NAME);
-               return -EINVAL;
-       }
-
-       tq_arg.flag = 0;
-       memset(&tq_arg.order, 0, sizeof(int) * SPLAT_TASKQ_ORDER_MAX);
-       spin_lock_init(&tq_arg.lock);
-       tq_arg.file = file;
-       tq_arg.name = SPLAT_TASKQ_TEST6_NAME;
-
-       for (i = 0; i < SPLAT_TASKQ_ORDER_MAX; i++) {
-               taskq_init_ent(&tqes[i]);
-
-               tq_id[i].id = i + 1;
-               tq_id[i].arg = &tq_arg;
-               tflags = TQ_SLEEP;
-               if (i > 4)
-                       tflags |= TQ_FRONT;
-
-               if (prealloc) {
-                       taskq_dispatch_ent(tq, splat_taskq_test6_func,
-                                          &tq_id[i], tflags, &tqes[i]);
-                       id = tqes[i].tqent_id;
-               } else {
-                       id = taskq_dispatch(tq, splat_taskq_test6_func,
-                                           &tq_id[i], tflags);
-               }
-
-               if (id == TASKQID_INVALID) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST6_NAME,
-                               "Taskq '%s' function '%s' dispatch failed\n",
-                               tq_arg.name, sym2str(splat_taskq_test6_func));
-                               rc = -EINVAL;
-                               goto out;
-               }
-
-               if (tq_id[i].id != id) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST6_NAME,
-                               "Taskq '%s' expected taskqid %d got %d\n",
-                               tq_arg.name, (int)tq_id[i].id, (int)id);
-                               rc = -EINVAL;
-                               goto out;
-               }
-               /* Sleep to let tasks 1-3 start executing. */
-               if ( i == 2 )
-                       msleep(100);
-       }
-
-       splat_vprint(file, SPLAT_TASKQ_TEST6_NAME, "Taskq '%s' "
-                    "waiting for taskqid %d completion\n", tq_arg.name,
-                    SPLAT_TASKQ_ORDER_MAX);
-       taskq_wait_outstanding(tq, SPLAT_TASKQ_ORDER_MAX);
-       rc = splat_taskq_test_order(&tq_arg, order);
-
-out:
-       splat_vprint(file, SPLAT_TASKQ_TEST6_NAME,
-                    "Taskq '%s' destroying\n", tq_arg.name);
-       taskq_destroy(tq);
-
-       kmem_free(tqes, sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX);
-
-       return rc;
-}
-
-static int
-splat_taskq_test6(struct file *file, void *arg)
-{
-       int rc;
-
-       rc = splat_taskq_test6_impl(file, arg, B_FALSE);
-       if (rc)
-               return rc;
-
-       rc = splat_taskq_test6_impl(file, arg, B_TRUE);
-
-       return rc;
-}
-
-static void
-splat_taskq_test7_func(void *arg)
-{
-       splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg;
-       taskqid_t id;
-
-       ASSERT(tq_arg);
-
-       if (tq_arg->depth >= SPLAT_TASKQ_DEPTH_MAX)
-               return;
-
-       tq_arg->depth++;
-
-       splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST7_NAME,
-                    "Taskq '%s' function '%s' dispatching (depth = %u)\n",
-                    tq_arg->name, sym2str(splat_taskq_test7_func),
-                    tq_arg->depth);
-
-       if (tq_arg->tqe) {
-               VERIFY(taskq_empty_ent(tq_arg->tqe));
-               taskq_dispatch_ent(tq_arg->tq, splat_taskq_test7_func,
-                                  tq_arg, TQ_SLEEP, tq_arg->tqe);
-               id = tq_arg->tqe->tqent_id;
-       } else {
-               id = taskq_dispatch(tq_arg->tq, splat_taskq_test7_func,
-                                   tq_arg, TQ_SLEEP);
-       }
-
-       if (id == TASKQID_INVALID) {
-               splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST7_NAME,
-                            "Taskq '%s' function '%s' dispatch failed "
-                            "(depth = %u)\n", tq_arg->name,
-                            sym2str(splat_taskq_test7_func), tq_arg->depth);
-               tq_arg->flag = -EINVAL;
-               return;
-       }
-}
-
-static int
-splat_taskq_test7_impl(struct file *file, void *arg, boolean_t prealloc)
-{
-       taskq_t *tq;
-       splat_taskq_arg_t *tq_arg;
-       taskq_ent_t *tqe;
-       int error;
-
-       splat_vprint(file, SPLAT_TASKQ_TEST7_NAME,
-                    "Taskq '%s' creating (%s dispatch)\n",
-                    SPLAT_TASKQ_TEST7_NAME,
-                    prealloc ? "prealloc" :  "dynamic");
-       if ((tq = taskq_create(SPLAT_TASKQ_TEST7_NAME, 1, defclsyspri,
-                              50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) {
-               splat_vprint(file, SPLAT_TASKQ_TEST7_NAME,
-                            "Taskq '%s' create failed\n",
-                            SPLAT_TASKQ_TEST7_NAME);
-               return -EINVAL;
-       }
-
-       tq_arg = kmem_alloc(sizeof (splat_taskq_arg_t), KM_SLEEP);
-       tqe = kmem_alloc(sizeof (taskq_ent_t), KM_SLEEP);
-
-       tq_arg->depth = 0;
-       tq_arg->flag  = 0;
-       tq_arg->id    = 0;
-       tq_arg->file  = file;
-       tq_arg->name  = SPLAT_TASKQ_TEST7_NAME;
-       tq_arg->tq    = tq;
-
-       if (prealloc) {
-               taskq_init_ent(tqe);
-               tq_arg->tqe = tqe;
-       } else {
-               tq_arg->tqe = NULL;
-       }
-
-       splat_taskq_test7_func(tq_arg);
-
-       if (tq_arg->flag == 0) {
-               splat_vprint(file, SPLAT_TASKQ_TEST7_NAME,
-                            "Taskq '%s' waiting\n", tq_arg->name);
-               taskq_wait_outstanding(tq, SPLAT_TASKQ_DEPTH_MAX);
-       }
-
-       error = (tq_arg->depth == SPLAT_TASKQ_DEPTH_MAX ? 0 : -EINVAL);
-
-       splat_vprint(file, SPLAT_TASKQ_TEST7_NAME,
-                     "Taskq '%s' destroying\n", tq_arg->name);
-
-       kmem_free(tqe, sizeof (taskq_ent_t));
-       kmem_free(tq_arg, sizeof (splat_taskq_arg_t));
-
-       taskq_destroy(tq);
-
-       return (error);
-}
-
-static int
-splat_taskq_test7(struct file *file, void *arg)
-{
-       int rc;
-
-       rc = splat_taskq_test7_impl(file, arg, B_FALSE);
-       if (rc)
-               return (rc);
-
-       rc = splat_taskq_test7_impl(file, arg, B_TRUE);
-
-       return (rc);
-}
-
-static void
-splat_taskq_throughput_func(void *arg)
-{
-       splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg;
-       ASSERT(tq_arg);
-
-       atomic_inc(tq_arg->count);
-}
-
-static int
-splat_taskq_throughput(struct file *file, void *arg, const char *name,
-    int nthreads, int minalloc, int maxalloc, int flags, int tasks,
-    struct timespec *delta)
-{
-       taskq_t *tq;
-       taskqid_t id;
-       splat_taskq_arg_t tq_arg;
-       taskq_ent_t **tqes;
-       atomic_t count;
-       struct timespec start, stop;
-       int i, j, rc = 0;
-
-       tqes = vmalloc(sizeof (*tqes) * tasks);
-       if (tqes == NULL)
-               return (-ENOMEM);
-
-       memset(tqes, 0, sizeof (*tqes) * tasks);
-
-       splat_vprint(file, name, "Taskq '%s' creating (%d/%d/%d/%d)\n",
-           name, nthreads, minalloc, maxalloc, tasks);
-       if ((tq = taskq_create(name, nthreads, defclsyspri,
-           minalloc, maxalloc, flags)) == NULL) {
-               splat_vprint(file, name, "Taskq '%s' create failed\n", name);
-               rc = -EINVAL;
-               goto out_free;
-       }
-
-       tq_arg.file = file;
-       tq_arg.name = name;
-       tq_arg.count = &count;
-       atomic_set(tq_arg.count, 0);
-
-       getnstimeofday(&start);
-
-       for (i = 0; i < tasks; i++) {
-               tqes[i] = kmalloc(sizeof (taskq_ent_t), GFP_KERNEL);
-               if (tqes[i] == NULL) {
-                       rc = -ENOMEM;
-                       goto out;
-               }
-
-               taskq_init_ent(tqes[i]);
-               taskq_dispatch_ent(tq, splat_taskq_throughput_func,
-                   &tq_arg, TQ_SLEEP, tqes[i]);
-               id = tqes[i]->tqent_id;
-
-               if (id == TASKQID_INVALID) {
-                       splat_vprint(file, name, "Taskq '%s' function '%s' "
-                           "dispatch %d failed\n", tq_arg.name,
-                           sym2str(splat_taskq_throughput_func), i);
-                       rc = -EINVAL;
-                       goto out;
-               }
-       }
-
-       splat_vprint(file, name, "Taskq '%s' waiting for %d dispatches\n",
-           tq_arg.name, tasks);
-
-       taskq_wait(tq);
-
-       if (delta != NULL) {
-               getnstimeofday(&stop);
-               *delta = timespec_sub(stop, start);
-       }
-
-       splat_vprint(file, name, "Taskq '%s' %d/%d dispatches finished\n",
-           tq_arg.name, atomic_read(tq_arg.count), tasks);
-
-       if (atomic_read(tq_arg.count) != tasks)
-               rc = -ERANGE;
-
-out:
-       splat_vprint(file, name, "Taskq '%s' destroying\n", tq_arg.name);
-       taskq_destroy(tq);
-out_free:
-       for (j = 0; j < tasks && tqes[j] != NULL; j++)
-               kfree(tqes[j]);
-
-       vfree(tqes);
-
-       return (rc);
-}
-
-/*
- * Create a taskq with 100 threads and dispatch a huge number of trivial
- * tasks to generate contention on tq->tq_lock.  This test should always
- * pass.  The purpose is to provide a benchmark for measuring the
- * effectiveness of taskq optimizations.
- */
-#define        TEST8_NUM_TASKS                 0x20000
-#define        TEST8_THREADS_PER_TASKQ         100
-
-static int
-splat_taskq_test8(struct file *file, void *arg)
-{
-       return (splat_taskq_throughput(file, arg,
-           SPLAT_TASKQ_TEST8_NAME, TEST8_THREADS_PER_TASKQ,
-           1, INT_MAX, TASKQ_PREPOPULATE, TEST8_NUM_TASKS, NULL));
-}
-
-/*
- * Create a taskq and dispatch a number of delayed tasks to the queue.
- * For each task verify that it was run no early than requested.
- */
-static void
-splat_taskq_test9_func(void *arg)
-{
-       splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg;
-       ASSERT(tq_arg);
-
-       if (ddi_time_after_eq(ddi_get_lbolt(), tq_arg->expire))
-               atomic_inc(tq_arg->count);
-
-       kmem_free(tq_arg, sizeof(splat_taskq_arg_t));
-}
-
-static int
-splat_taskq_test9(struct file *file, void *arg)
-{
-       taskq_t *tq;
-       atomic_t count;
-       int i, rc = 0;
-       int minalloc = 1;
-       int maxalloc = 10;
-       int nr_tasks = 100;
-
-       splat_vprint(file, SPLAT_TASKQ_TEST9_NAME,
-           "Taskq '%s' creating (%s dispatch) (%d/%d/%d)\n",
-           SPLAT_TASKQ_TEST9_NAME, "delay", minalloc, maxalloc, nr_tasks);
-       if ((tq = taskq_create(SPLAT_TASKQ_TEST9_NAME, 3, defclsyspri,
-           minalloc, maxalloc, TASKQ_PREPOPULATE)) == NULL) {
-               splat_vprint(file, SPLAT_TASKQ_TEST9_NAME,
-                   "Taskq '%s' create failed\n", SPLAT_TASKQ_TEST9_NAME);
-               return -EINVAL;
-       }
-
-       atomic_set(&count, 0);
-
-       for (i = 1; i <= nr_tasks; i++) {
-               splat_taskq_arg_t *tq_arg;
-               taskqid_t id;
-               uint32_t rnd;
-
-               /* A random timeout in jiffies of at most 5 seconds */
-               get_random_bytes((void *)&rnd, 4);
-               rnd = rnd % (5 * HZ);
-
-               tq_arg = kmem_alloc(sizeof(splat_taskq_arg_t), KM_SLEEP);
-               tq_arg->file = file;
-               tq_arg->name = SPLAT_TASKQ_TEST9_NAME;
-               tq_arg->expire = ddi_get_lbolt() + rnd;
-               tq_arg->count = &count;
-
-               splat_vprint(file, SPLAT_TASKQ_TEST9_NAME,
-                   "Taskq '%s' delay dispatch %u jiffies\n",
-                   SPLAT_TASKQ_TEST9_NAME, rnd);
-
-               id = taskq_dispatch_delay(tq, splat_taskq_test9_func,
-                   tq_arg, TQ_SLEEP, ddi_get_lbolt() + rnd);
-
-               if (id == TASKQID_INVALID) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST9_NAME,
-                          "Taskq '%s' delay dispatch failed\n",
-                          SPLAT_TASKQ_TEST9_NAME);
-                       kmem_free(tq_arg, sizeof(splat_taskq_arg_t));
-                       taskq_wait(tq);
-                       rc = -EINVAL;
-                       goto out;
-               }
-       }
-
-       splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, "Taskq '%s' waiting for "
-           "%d delay dispatches\n", SPLAT_TASKQ_TEST9_NAME, nr_tasks);
-
-       taskq_wait(tq);
-       if (atomic_read(&count) != nr_tasks)
-               rc = -ERANGE;
-
-       splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, "Taskq '%s' %d/%d delay "
-           "dispatches finished on time\n", SPLAT_TASKQ_TEST9_NAME,
-           atomic_read(&count), nr_tasks);
-       splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, "Taskq '%s' destroying\n",
-           SPLAT_TASKQ_TEST9_NAME);
-out:
-       taskq_destroy(tq);
-
-       return rc;
-}
-
-/*
- * Create a taskq and dispatch then cancel tasks in the queue.
- */
-static void
-splat_taskq_test10_func(void *arg)
-{
-       splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg;
-       uint8_t rnd;
-
-       if (ddi_time_after_eq(ddi_get_lbolt(), tq_arg->expire))
-               atomic_inc(tq_arg->count);
-
-       /* Randomly sleep to further perturb the system */
-       get_random_bytes((void *)&rnd, 1);
-       msleep(1 + (rnd % 9));
-}
-
-static int
-splat_taskq_test10(struct file *file, void *arg)
-{
-       taskq_t *tq;
-       splat_taskq_arg_t **tqas;
-       atomic_t count;
-       int i, j, rc = 0;
-       int minalloc = 1;
-       int maxalloc = 10;
-       int nr_tasks = 100;
-       int canceled = 0;
-       int completed = 0;
-       int blocked = 0;
-       clock_t start, cancel;
-
-       tqas = vmalloc(sizeof(*tqas) * nr_tasks);
-       if (tqas == NULL)
-               return -ENOMEM;
-        memset(tqas, 0, sizeof(*tqas) * nr_tasks);
-
-       splat_vprint(file, SPLAT_TASKQ_TEST10_NAME,
-           "Taskq '%s' creating (%s dispatch) (%d/%d/%d)\n",
-           SPLAT_TASKQ_TEST10_NAME, "delay", minalloc, maxalloc, nr_tasks);
-       if ((tq = taskq_create(SPLAT_TASKQ_TEST10_NAME, 3, defclsyspri,
-           minalloc, maxalloc, TASKQ_PREPOPULATE)) == NULL) {
-               splat_vprint(file, SPLAT_TASKQ_TEST10_NAME,
-                   "Taskq '%s' create failed\n", SPLAT_TASKQ_TEST10_NAME);
-               rc = -EINVAL;
-               goto out_free;
-       }
-
-       atomic_set(&count, 0);
-
-       for (i = 0; i < nr_tasks; i++) {
-               splat_taskq_arg_t *tq_arg;
-               uint32_t rnd;
-
-               /* A random timeout in jiffies of at most 5 seconds */
-               get_random_bytes((void *)&rnd, 4);
-               rnd = rnd % (5 * HZ);
-
-               tq_arg = kmem_alloc(sizeof(splat_taskq_arg_t), KM_SLEEP);
-               tq_arg->file = file;
-               tq_arg->name = SPLAT_TASKQ_TEST10_NAME;
-               tq_arg->count = &count;
-               tqas[i] = tq_arg;
-
-               /*
-                * Dispatch every 1/3 one immediately to mix it up, the cancel
-                * code is inherently racy and we want to try and provoke any
-                * subtle concurrently issues.
-                */
-               if ((i % 3) == 0) {
-                       tq_arg->expire = ddi_get_lbolt();
-                       tq_arg->id = taskq_dispatch(tq, splat_taskq_test10_func,
-                           tq_arg, TQ_SLEEP);
-               } else {
-                       tq_arg->expire = ddi_get_lbolt() + rnd;
-                       tq_arg->id = taskq_dispatch_delay(tq,
-                           splat_taskq_test10_func,
-                           tq_arg, TQ_SLEEP, ddi_get_lbolt() + rnd);
-               }
-
-               if (tq_arg->id == TASKQID_INVALID) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST10_NAME,
-                          "Taskq '%s' dispatch failed\n",
-                          SPLAT_TASKQ_TEST10_NAME);
-                       kmem_free(tq_arg, sizeof(splat_taskq_arg_t));
-                       taskq_wait(tq);
-                       rc = -EINVAL;
-                       goto out;
-               } else {
-                       splat_vprint(file, SPLAT_TASKQ_TEST10_NAME,
-                           "Taskq '%s' dispatch %lu in %lu jiffies\n",
-                           SPLAT_TASKQ_TEST10_NAME, (unsigned long)tq_arg->id,
-                           !(i % 3) ? 0 : tq_arg->expire - ddi_get_lbolt());
-               }
-       }
-
-       /*
-        * Start randomly canceling tasks for the duration of the test.  We
-        * happen to know the valid task id's will be in the range 1..nr_tasks
-        * because the taskq is private and was just created.  However, we
-        * have no idea of a particular task has already executed or not.
-        */
-       splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, "Taskq '%s' randomly "
-           "canceling task ids\n", SPLAT_TASKQ_TEST10_NAME);
-
-       start = ddi_get_lbolt();
-       i = 0;
-
-       while (ddi_time_before(ddi_get_lbolt(), start + 5 * HZ)) {
-               taskqid_t id;
-               uint32_t rnd;
-
-               i++;
-               cancel = ddi_get_lbolt();
-               get_random_bytes((void *)&rnd, 4);
-               id = 1 + (rnd % nr_tasks);
-               rc = taskq_cancel_id(tq, id);
-
-               /*
-                * Keep track of the results of the random cancels.
-                */
-               if (rc == 0) {
-                       canceled++;
-               } else if (rc == ENOENT) {
-                       completed++;
-               } else if (rc == EBUSY) {
-                       blocked++;
-               } else {
-                       rc = -EINVAL;
-                       break;
-               }
-
-               /*
-                * Verify we never get blocked to long in taskq_cancel_id().
-                * The worst case is 10ms if we happen to cancel the task
-                * which is currently executing.  We allow a factor of 2x.
-                */
-               if (ddi_get_lbolt() - cancel > HZ / 50) {
-                       splat_vprint(file, SPLAT_TASKQ_TEST10_NAME,
-                           "Taskq '%s' cancel for %lu took %lu\n",
-                           SPLAT_TASKQ_TEST10_NAME, (unsigned long)id,
-                           ddi_get_lbolt() - cancel);
-                       rc = -ETIMEDOUT;
-                       break;
-               }
-
-               get_random_bytes((void *)&rnd, 4);
-               msleep(1 + (rnd % 100));
-               rc = 0;
-       }
-
-       taskq_wait(tq);
-
-       /*
-        * Cross check the results of taskq_cancel_id() with the number of
-        * times the dispatched function actually ran successfully.
-        */
-       if ((rc == 0) && (nr_tasks - canceled != atomic_read(&count)))
-               rc = -EDOM;
-
-       splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, "Taskq '%s' %d attempts, "
-           "%d canceled, %d completed, %d blocked, %d/%d tasks run\n",
-           SPLAT_TASKQ_TEST10_NAME, i, canceled, completed, blocked,
-           atomic_read(&count), nr_tasks);
-       splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, "Taskq '%s' destroying %d\n",
-           SPLAT_TASKQ_TEST10_NAME, rc);
-out:
-       taskq_destroy(tq);
-out_free:
-       for (j = 0; j < nr_tasks && tqas[j] != NULL; j++)
-               kmem_free(tqas[j], sizeof(splat_taskq_arg_t));
-       vfree(tqas);
-
-       return rc;
-}
-
-/*
- * Create a dynamic taskq with 100 threads and dispatch a huge number of
- * trivial tasks.  This will cause the taskq to grow quickly to its max
- * thread count.  This test should always pass.  The purpose is to provide
- * a benchmark for measuring the performance of dynamic taskqs.
- */
-#define        TEST11_NUM_TASKS                        100000
-#define        TEST11_THREADS_PER_TASKQ                100
-
-static int
-splat_taskq_test11(struct file *file, void *arg)
-{
-       struct timespec normal, dynamic;
-       int error;
-
-       error = splat_taskq_throughput(file, arg, SPLAT_TASKQ_TEST11_NAME,
-           TEST11_THREADS_PER_TASKQ, 1, INT_MAX,
-           TASKQ_PREPOPULATE, TEST11_NUM_TASKS, &normal);
-       if (error)
-               return (error);
-
-       error = splat_taskq_throughput(file, arg, SPLAT_TASKQ_TEST11_NAME,
-           TEST11_THREADS_PER_TASKQ, 1, INT_MAX,
-           TASKQ_PREPOPULATE | TASKQ_DYNAMIC, TEST11_NUM_TASKS, &dynamic);
-       if (error)
-               return (error);
-
-       splat_vprint(file, SPLAT_TASKQ_TEST11_NAME,
-           "Timing taskq_wait(): normal=%ld.%09lds, dynamic=%ld.%09lds\n",
-           normal.tv_sec, normal.tv_nsec,
-           dynamic.tv_sec, dynamic.tv_nsec);
-
-       /* A 10x increase in runtime is used to indicate a core problem. */
-       if (((int64_t)dynamic.tv_sec * NANOSEC + (int64_t)dynamic.tv_nsec) >
-           (((int64_t)normal.tv_sec * NANOSEC + (int64_t)normal.tv_nsec) * 10))
-               error = -ETIME;
-
-       return (error);
-}
-
-splat_subsystem_t *
-splat_taskq_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_TASKQ_NAME, SPLAT_NAME_SIZE);
-        strncpy(sub->desc.desc, SPLAT_TASKQ_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-       spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_TASKQ;
-
-       splat_test_init(sub, SPLAT_TASKQ_TEST1_NAME, SPLAT_TASKQ_TEST1_DESC,
-                     SPLAT_TASKQ_TEST1_ID, splat_taskq_test1);
-       splat_test_init(sub, SPLAT_TASKQ_TEST2_NAME, SPLAT_TASKQ_TEST2_DESC,
-                     SPLAT_TASKQ_TEST2_ID, splat_taskq_test2);
-       splat_test_init(sub, SPLAT_TASKQ_TEST3_NAME, SPLAT_TASKQ_TEST3_DESC,
-                     SPLAT_TASKQ_TEST3_ID, splat_taskq_test3);
-       splat_test_init(sub, SPLAT_TASKQ_TEST4_NAME, SPLAT_TASKQ_TEST4_DESC,
-                     SPLAT_TASKQ_TEST4_ID, splat_taskq_test4);
-       splat_test_init(sub, SPLAT_TASKQ_TEST5_NAME, SPLAT_TASKQ_TEST5_DESC,
-                     SPLAT_TASKQ_TEST5_ID, splat_taskq_test5);
-       splat_test_init(sub, SPLAT_TASKQ_TEST6_NAME, SPLAT_TASKQ_TEST6_DESC,
-                     SPLAT_TASKQ_TEST6_ID, splat_taskq_test6);
-       splat_test_init(sub, SPLAT_TASKQ_TEST7_NAME, SPLAT_TASKQ_TEST7_DESC,
-                     SPLAT_TASKQ_TEST7_ID, splat_taskq_test7);
-       splat_test_init(sub, SPLAT_TASKQ_TEST8_NAME, SPLAT_TASKQ_TEST8_DESC,
-                     SPLAT_TASKQ_TEST8_ID, splat_taskq_test8);
-       splat_test_init(sub, SPLAT_TASKQ_TEST9_NAME, SPLAT_TASKQ_TEST9_DESC,
-                     SPLAT_TASKQ_TEST9_ID, splat_taskq_test9);
-       splat_test_init(sub, SPLAT_TASKQ_TEST10_NAME, SPLAT_TASKQ_TEST10_DESC,
-                     SPLAT_TASKQ_TEST10_ID, splat_taskq_test10);
-       splat_test_init(sub, SPLAT_TASKQ_TEST11_NAME, SPLAT_TASKQ_TEST11_DESC,
-                     SPLAT_TASKQ_TEST11_ID, splat_taskq_test11);
-
-        return sub;
-}
-
-void
-splat_taskq_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST11_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST10_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST9_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST8_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST7_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST6_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST5_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST4_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST3_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST2_ID);
-       splat_test_fini(sub, SPLAT_TASKQ_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_taskq_id(void) {
-        return SPLAT_SUBSYSTEM_TASKQ;
-}
diff --git a/module/splat/splat-thread.c b/module/splat/splat-thread.c
deleted file mode 100644 (file)
index f2e6bf1..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Thread Tests.
- */
-
-#include <sys/thread.h>
-#include <sys/random.h>
-#include <linux/delay.h>
-#include <linux/mm_compat.h>
-#include <linux/wait_compat.h>
-#include <linux/slab.h>
-#include "splat-internal.h"
-
-#define SPLAT_THREAD_NAME              "thread"
-#define SPLAT_THREAD_DESC              "Kernel Thread Tests"
-
-#define SPLAT_THREAD_TEST1_ID          0x0601
-#define SPLAT_THREAD_TEST1_NAME                "create"
-#define SPLAT_THREAD_TEST1_DESC                "Validate thread creation"
-
-#define SPLAT_THREAD_TEST2_ID          0x0602
-#define SPLAT_THREAD_TEST2_NAME                "exit"
-#define SPLAT_THREAD_TEST2_DESC                "Validate thread exit"
-
-#define SPLAT_THREAD_TEST3_ID          0x6003
-#define SPLAT_THREAD_TEST3_NAME                "tsd"
-#define SPLAT_THREAD_TEST3_DESC                "Validate thread specific data"
-
-#define SPLAT_THREAD_TEST_MAGIC                0x4488CC00UL
-#define SPLAT_THREAD_TEST_KEYS         32
-#define SPLAT_THREAD_TEST_THREADS      16
-
-typedef struct thread_priv {
-        unsigned long tp_magic;
-        struct file *tp_file;
-        spinlock_t tp_lock;
-        spl_wait_queue_head_t tp_waitq;
-       uint_t tp_keys[SPLAT_THREAD_TEST_KEYS];
-       int tp_rc;
-       int tp_count;
-       int tp_dtor_count;
-} thread_priv_t;
-
-static int
-splat_thread_rc(thread_priv_t *tp, int rc)
-{
-       int ret;
-
-       spin_lock(&tp->tp_lock);
-       ret = (tp->tp_rc == rc);
-       spin_unlock(&tp->tp_lock);
-
-       return ret;
-}
-
-static int
-splat_thread_count(thread_priv_t *tp, int count)
-{
-       int ret;
-
-       spin_lock(&tp->tp_lock);
-       ret = (tp->tp_count == count);
-       spin_unlock(&tp->tp_lock);
-
-       return ret;
-}
-
-static void
-splat_thread_work1(void *priv)
-{
-       thread_priv_t *tp = (thread_priv_t *)priv;
-
-       spin_lock(&tp->tp_lock);
-       ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC);
-       tp->tp_rc = 1;
-       wake_up(&tp->tp_waitq);
-       spin_unlock(&tp->tp_lock);
-
-       thread_exit();
-}
-
-static int
-splat_thread_test1(struct file *file, void *arg)
-{
-       thread_priv_t tp;
-       kthread_t *thr;
-
-       tp.tp_magic = SPLAT_THREAD_TEST_MAGIC;
-       tp.tp_file = file;
-        spin_lock_init(&tp.tp_lock);
-       init_waitqueue_head(&tp.tp_waitq);
-       tp.tp_rc = 0;
-
-       thr = (kthread_t *)thread_create(NULL, 0, splat_thread_work1, &tp, 0,
-                                        &p0, TS_RUN, defclsyspri);
-       /* Must never fail under Solaris, but we check anyway since this
-        * can happen in the linux SPL, we may want to change this behavior */
-       if (thr == NULL)
-               return  -ESRCH;
-
-       /* Sleep until the thread sets tp.tp_rc == 1 */
-       wait_event(tp.tp_waitq, splat_thread_rc(&tp, 1));
-
-        splat_vprint(file, SPLAT_THREAD_TEST1_NAME, "%s",
-                  "Thread successfully started properly\n");
-       return 0;
-}
-
-static void
-splat_thread_work2(void *priv)
-{
-       thread_priv_t *tp = (thread_priv_t *)priv;
-
-       spin_lock(&tp->tp_lock);
-       ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC);
-       tp->tp_rc = 1;
-       wake_up(&tp->tp_waitq);
-       spin_unlock(&tp->tp_lock);
-
-       thread_exit();
-
-       /* The following code is unreachable when thread_exit() is
-        * working properly, which is exactly what we're testing */
-       spin_lock(&tp->tp_lock);
-       tp->tp_rc = 2;
-       wake_up(&tp->tp_waitq);
-       spin_unlock(&tp->tp_lock);
-}
-
-static int
-splat_thread_test2(struct file *file, void *arg)
-{
-       thread_priv_t tp;
-       kthread_t *thr;
-       int rc = 0;
-
-       tp.tp_magic = SPLAT_THREAD_TEST_MAGIC;
-       tp.tp_file = file;
-        spin_lock_init(&tp.tp_lock);
-       init_waitqueue_head(&tp.tp_waitq);
-       tp.tp_rc = 0;
-
-       thr = (kthread_t *)thread_create(NULL, 0, splat_thread_work2, &tp, 0,
-                                        &p0, TS_RUN, defclsyspri);
-       /* Must never fail under Solaris, but we check anyway since this
-        * can happen in the linux SPL, we may want to change this behavior */
-       if (thr == NULL)
-               return -ESRCH;
-
-       /* Sleep until the thread sets tp.tp_rc == 1 */
-       wait_event(tp.tp_waitq, splat_thread_rc(&tp, 1));
-
-       /* Sleep until the thread sets tp.tp_rc == 2, or until we hit
-        * the timeout.  If thread exit is working properly we should
-        * hit the timeout and never see to.tp_rc == 2. */
-       rc = wait_event_timeout(tp.tp_waitq, splat_thread_rc(&tp, 2), HZ / 10);
-       if (rc > 0) {
-               rc = -EINVAL;
-               splat_vprint(file, SPLAT_THREAD_TEST2_NAME, "%s",
-                          "Thread did not exit properly at thread_exit()\n");
-       } else {
-               splat_vprint(file, SPLAT_THREAD_TEST2_NAME, "%s",
-                          "Thread successfully exited at thread_exit()\n");
-       }
-
-       return rc;
-}
-
-static void
-splat_thread_work3_common(thread_priv_t *tp)
-{
-       ulong_t rnd;
-       int i, rc = 0;
-
-       /* set a unique value for each key using a random value */
-       get_random_bytes((void *)&rnd, 4);
-       for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++)
-               tsd_set(tp->tp_keys[i], (void *)(i + rnd));
-
-       /* verify the unique value for each key */
-       for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++)
-               if (tsd_get(tp->tp_keys[i]) !=  (void *)(i + rnd))
-                       rc = -EINVAL;
-
-       /* set the value to thread_priv_t for use by the destructor */
-       for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++)
-               tsd_set(tp->tp_keys[i], (void *)tp);
-
-       spin_lock(&tp->tp_lock);
-       if (rc && !tp->tp_rc)
-               tp->tp_rc = rc;
-
-       tp->tp_count++;
-       wake_up_all(&tp->tp_waitq);
-       spin_unlock(&tp->tp_lock);
-}
-
-static void
-splat_thread_work3_wait(void *priv)
-{
-       thread_priv_t *tp = (thread_priv_t *)priv;
-
-       ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC);
-       splat_thread_work3_common(tp);
-       wait_event(tp->tp_waitq, splat_thread_count(tp, 0));
-       thread_exit();
-}
-
-static void
-splat_thread_work3_exit(void *priv)
-{
-       thread_priv_t *tp = (thread_priv_t *)priv;
-
-       ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC);
-       splat_thread_work3_common(tp);
-       thread_exit();
-}
-
-static void
-splat_thread_dtor3(void *priv)
-{
-       thread_priv_t *tp = (thread_priv_t *)priv;
-
-       ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC);
-       spin_lock(&tp->tp_lock);
-       tp->tp_dtor_count++;
-       spin_unlock(&tp->tp_lock);
-}
-
-/*
- * Create threads which set and verify SPLAT_THREAD_TEST_KEYS number of
- * keys.  These threads may then exit by calling thread_exit() which calls
- * tsd_exit() resulting in all their thread specific data being reclaimed.
- * Alternately, the thread may block in which case the thread specific
- * data will be reclaimed as part of tsd_destroy().  In either case all
- * thread specific data must be reclaimed, this is verified by ensuring
- * the registered destructor is called the correct number of times.
- */
-static int
-splat_thread_test3(struct file *file, void *arg)
-{
-       int i, rc = 0, expected, wait_count = 0, exit_count = 0;
-       thread_priv_t tp;
-
-       tp.tp_magic = SPLAT_THREAD_TEST_MAGIC;
-       tp.tp_file = file;
-        spin_lock_init(&tp.tp_lock);
-       init_waitqueue_head(&tp.tp_waitq);
-       tp.tp_rc = 0;
-       tp.tp_count = 0;
-       tp.tp_dtor_count = 0;
-
-       for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++) {
-               tp.tp_keys[i] = 0;
-               tsd_create(&tp.tp_keys[i], splat_thread_dtor3);
-       }
-
-       /* Start tsd wait threads */
-       for (i = 0; i < SPLAT_THREAD_TEST_THREADS; i++) {
-               if (thread_create(NULL, 0, splat_thread_work3_wait,
-                                 &tp, 0, &p0, TS_RUN, defclsyspri))
-                       wait_count++;
-       }
-
-       /* All wait threads have setup their tsd and are blocking. */
-       wait_event(tp.tp_waitq, splat_thread_count(&tp, wait_count));
-
-       if (tp.tp_dtor_count != 0) {
-               splat_vprint(file, SPLAT_THREAD_TEST3_NAME,
-                   "Prematurely ran %d tsd destructors\n", tp.tp_dtor_count);
-               if (!rc)
-                       rc = -ERANGE;
-       }
-
-       /* Start tsd exit threads */
-       for (i = 0; i < SPLAT_THREAD_TEST_THREADS; i++) {
-               if (thread_create(NULL, 0, splat_thread_work3_exit,
-                                 &tp, 0, &p0, TS_RUN, defclsyspri))
-                       exit_count++;
-       }
-
-       /* All exit threads verified tsd and are in the process of exiting */
-       wait_event(tp.tp_waitq,splat_thread_count(&tp, wait_count+exit_count));
-       msleep(500);
-
-       expected = (SPLAT_THREAD_TEST_KEYS * exit_count);
-       if (tp.tp_dtor_count != expected) {
-               splat_vprint(file, SPLAT_THREAD_TEST3_NAME,
-                   "Expected %d exit tsd destructors but saw %d\n",
-                   expected, tp.tp_dtor_count);
-               if (!rc)
-                       rc = -ERANGE;
-       }
-
-       /* Destroy all keys and associated tsd in blocked threads */
-       for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++)
-               tsd_destroy(&tp.tp_keys[i]);
-
-       expected = (SPLAT_THREAD_TEST_KEYS * (exit_count + wait_count));
-       if (tp.tp_dtor_count != expected) {
-               splat_vprint(file, SPLAT_THREAD_TEST3_NAME,
-                   "Expected %d wait+exit tsd destructors but saw %d\n",
-                   expected, tp.tp_dtor_count);
-               if (!rc)
-                       rc = -ERANGE;
-       }
-
-       /* Release the remaining wait threads, sleep briefly while they exit */
-       spin_lock(&tp.tp_lock);
-       tp.tp_count = 0;
-       wake_up_all(&tp.tp_waitq);
-       spin_unlock(&tp.tp_lock);
-       msleep(500);
-
-       if (tp.tp_rc) {
-               splat_vprint(file, SPLAT_THREAD_TEST3_NAME,
-                   "Thread tsd_get()/tsd_set() error %d\n", tp.tp_rc);
-               if (!rc)
-                       rc = tp.tp_rc;
-       } else if (!rc) {
-               splat_vprint(file, SPLAT_THREAD_TEST3_NAME, "%s",
-                   "Thread specific data verified\n");
-       }
-
-       return rc;
-}
-
-splat_subsystem_t *
-splat_thread_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_THREAD_NAME, SPLAT_NAME_SIZE);
-        strncpy(sub->desc.desc, SPLAT_THREAD_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-        INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_THREAD;
-
-        splat_test_init(sub, SPLAT_THREAD_TEST1_NAME, SPLAT_THREAD_TEST1_DESC,
-                      SPLAT_THREAD_TEST1_ID, splat_thread_test1);
-        splat_test_init(sub, SPLAT_THREAD_TEST2_NAME, SPLAT_THREAD_TEST2_DESC,
-                      SPLAT_THREAD_TEST2_ID, splat_thread_test2);
-        splat_test_init(sub, SPLAT_THREAD_TEST3_NAME, SPLAT_THREAD_TEST3_DESC,
-                      SPLAT_THREAD_TEST3_ID, splat_thread_test3);
-
-        return sub;
-}
-
-void
-splat_thread_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-        splat_test_fini(sub, SPLAT_THREAD_TEST3_ID);
-        splat_test_fini(sub, SPLAT_THREAD_TEST2_ID);
-        splat_test_fini(sub, SPLAT_THREAD_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_thread_id(void) {
-        return SPLAT_SUBSYSTEM_THREAD;
-}
diff --git a/module/splat/splat-time.c b/module/splat/splat-time.c
deleted file mode 100644 (file)
index a0e2619..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Time Tests.
- */
-
-#include <sys/time.h>
-#include <linux/mm_compat.h>
-#include <linux/slab.h>
-#include "splat-internal.h"
-
-#define SPLAT_TIME_NAME                        "time"
-#define SPLAT_TIME_DESC                        "Kernel Time Tests"
-
-#define SPLAT_TIME_TEST1_ID            0x0801
-#define SPLAT_TIME_TEST1_NAME          "time1"
-#define SPLAT_TIME_TEST1_DESC          "HZ Test"
-
-#define SPLAT_TIME_TEST2_ID            0x0802
-#define SPLAT_TIME_TEST2_NAME          "time2"
-#define SPLAT_TIME_TEST2_DESC          "Monotonic Test"
-
-static int
-splat_time_test1(struct file *file, void *arg)
-{
-       int myhz = hz;
-       splat_vprint(file, SPLAT_TIME_TEST1_NAME, "hz is %d\n", myhz);
-        return 0;
-}
-
-static int
-splat_time_test2(struct file *file, void *arg)
-{
-        hrtime_t tm1, tm2;
-       int i;
-
-        tm1 = gethrtime();
-        splat_vprint(file, SPLAT_TIME_TEST2_NAME, "time is %lld\n", tm1);
-
-        for(i = 0; i < 100; i++) {
-                tm2 = gethrtime();
-                splat_vprint(file, SPLAT_TIME_TEST2_NAME, "time is %lld\n", tm2);
-
-                if(tm1 > tm2) {
-                        splat_print(file, "%s: gethrtime() is not giving "
-                                   "monotonically increasing values\n",
-                                   SPLAT_TIME_TEST2_NAME);
-                        return 1;
-                }
-                tm1 = tm2;
-
-                set_current_state(TASK_INTERRUPTIBLE);
-                schedule_timeout(10);
-        }
-
-        return 0;
-}
-
-splat_subsystem_t *
-splat_time_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_TIME_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_TIME_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_TIME;
-
-        splat_test_init(sub, SPLAT_TIME_TEST1_NAME, SPLAT_TIME_TEST1_DESC,
-                     SPLAT_TIME_TEST1_ID, splat_time_test1);
-        splat_test_init(sub, SPLAT_TIME_TEST2_NAME, SPLAT_TIME_TEST2_DESC,
-                     SPLAT_TIME_TEST2_ID, splat_time_test2);
-
-        return sub;
-}
-
-void
-splat_time_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-
-        splat_test_fini(sub, SPLAT_TIME_TEST2_ID);
-        splat_test_fini(sub, SPLAT_TIME_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_time_id(void)
-{
-        return SPLAT_SUBSYSTEM_TIME;
-}
diff --git a/module/splat/splat-vnode.c b/module/splat/splat-vnode.c
deleted file mode 100644 (file)
index 4ccf24f..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Vnode Tests.
- */
-
-#include <sys/vnode.h>
-#include "splat-internal.h"
-
-#define SPLAT_VNODE_NAME               "vnode"
-#define SPLAT_VNODE_DESC               "Kernel Vnode Tests"
-
-#define SPLAT_VNODE_TEST1_ID           0x0901
-#define SPLAT_VNODE_TEST1_NAME         "vn_open"
-#define SPLAT_VNODE_TEST1_DESC         "Vn_open Test"
-
-#define SPLAT_VNODE_TEST2_ID           0x0902
-#define SPLAT_VNODE_TEST2_NAME         "vn_openat"
-#define SPLAT_VNODE_TEST2_DESC         "Vn_openat Test"
-
-#define SPLAT_VNODE_TEST3_ID           0x0903
-#define SPLAT_VNODE_TEST3_NAME         "vn_rdwr"
-#define SPLAT_VNODE_TEST3_DESC         "Vn_rdwrt Test"
-
-#define SPLAT_VNODE_TEST5_ID           0x0905
-#define SPLAT_VNODE_TEST5_NAME         "vn_getattr"
-#define SPLAT_VNODE_TEST5_DESC         "Vn_getattr Test"
-
-#define SPLAT_VNODE_TEST6_ID           0x0906
-#define SPLAT_VNODE_TEST6_NAME         "vn_sync"
-#define SPLAT_VNODE_TEST6_DESC         "Vn_sync Test"
-
-#define SPLAT_VNODE_TEST_FILE          "/etc/fstab"
-#define SPLAT_VNODE_TEST_FILE_AT       "etc/fstab"
-#define SPLAT_VNODE_TEST_FILE_RW       "/tmp/spl.vnode.tmp"
-#define SPLAT_VNODE_TEST_FILE_RW1      "/tmp/spl.vnode.tmp.1"
-#define SPLAT_VNODE_TEST_FILE_RW2      "/tmp/spl.vnode.tmp.2"
-
-static int
-splat_vnode_user_cmd(struct file *file, void *arg,
-                     char *name, char *cmd)
-{
-       char sh_path[] = "/bin/sh";
-       char *argv[] = { sh_path,
-                        "-c",
-                        cmd,
-                        NULL };
-       char *envp[] = { "HOME=/",
-                        "TERM=linux",
-                        "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
-                        NULL };
-       int rc;
-
-       rc = call_usermodehelper(sh_path, argv, envp, UMH_WAIT_PROC);
-       if (rc) {
-               splat_vprint(file, name,
-                            "Failed command: %s %s %s (%d)\n",
-                            argv[0], argv[1], cmd, rc);
-               return -EPERM;
-       }
-
-       return 0;
-}
-
-static int
-splat_vnode_unlink_all(struct file *file, void *arg, char *name)
-{
-       char *cmds[] = { "rm -f " SPLAT_VNODE_TEST_FILE_RW,
-                        "rm -f " SPLAT_VNODE_TEST_FILE_RW1,
-                        "rm -f " SPLAT_VNODE_TEST_FILE_RW2,
-                        NULL };
-       int i = 0, rc = 0;
-
-       while (cmds[i] != NULL) {
-               if ((rc = splat_vnode_user_cmd(file, arg, name, cmds[i])))
-                       return rc;
-
-               i++;
-       }
-
-       return rc;
-}
-
-static int
-splat_vnode_test1(struct file *file, void *arg)
-{
-       vnode_t *vp;
-       int rc;
-
-       if ((rc = vn_open(SPLAT_VNODE_TEST_FILE, UIO_SYSSPACE,
-                         FREAD, 0644, &vp, 0, 0))) {
-               splat_vprint(file, SPLAT_VNODE_TEST1_NAME,
-                            "Failed to vn_open test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE, rc);
-               return -rc;
-       }
-
-        rc = VOP_CLOSE(vp, 0, 0, 0, 0, 0);
-
-       if (rc) {
-               splat_vprint(file, SPLAT_VNODE_TEST1_NAME,
-                            "Failed to vn_close test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE, rc);
-               return -rc;
-       }
-
-       splat_vprint(file, SPLAT_VNODE_TEST1_NAME, "Successfully vn_open'ed "
-                    "and vn_closed test file: %s\n", SPLAT_VNODE_TEST_FILE);
-
-        return -rc;
-} /* splat_vnode_test1() */
-
-static int
-splat_vnode_test2(struct file *file, void *arg)
-{
-       vnode_t *vp;
-       int rc;
-
-       if ((rc = vn_openat(SPLAT_VNODE_TEST_FILE_AT, UIO_SYSSPACE,
-                           FREAD, 0644, &vp, 0, 0, rootdir, 0))) {
-               splat_vprint(file, SPLAT_VNODE_TEST2_NAME,
-                            "Failed to vn_openat test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE, rc);
-               return -rc;
-       }
-
-        rc = VOP_CLOSE(vp, 0, 0, 0, 0, 0);
-
-       if (rc) {
-               splat_vprint(file, SPLAT_VNODE_TEST2_NAME,
-                            "Failed to vn_close test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE, rc);
-               return -rc;
-       }
-
-       splat_vprint(file, SPLAT_VNODE_TEST2_NAME, "Successfully vn_openat'ed "
-                    "and vn_closed test file: %s\n", SPLAT_VNODE_TEST_FILE);
-
-        return -rc;
-} /* splat_vnode_test2() */
-
-static int
-splat_vnode_test3(struct file *file, void *arg)
-{
-       vnode_t *vp;
-       char buf1[32] = "SPL VNode Interface Test File\n";
-       char buf2[32] = "";
-       int rc;
-
-       if ((rc = splat_vnode_unlink_all(file, arg, SPLAT_VNODE_TEST3_NAME)))
-               return rc;
-
-       if ((rc = vn_open(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE,
-                         FWRITE | FREAD | FCREAT | FEXCL,
-                         0644, &vp, 0, 0))) {
-               splat_vprint(file, SPLAT_VNODE_TEST3_NAME,
-                            "Failed to vn_open test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE_RW, rc);
-               return -rc;
-       }
-
-        rc = vn_rdwr(UIO_WRITE, vp, buf1, strlen(buf1), 0,
-                     UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL);
-       if (rc) {
-               splat_vprint(file, SPLAT_VNODE_TEST3_NAME,
-                            "Failed vn_rdwr write of test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE_RW, rc);
-               goto out;
-       }
-
-        rc = vn_rdwr(UIO_READ, vp, buf2, strlen(buf1), 0,
-                     UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL);
-       if (rc) {
-               splat_vprint(file, SPLAT_VNODE_TEST3_NAME,
-                            "Failed vn_rdwr read of test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE_RW, rc);
-               goto out;
-       }
-
-       if (strncmp(buf1, buf2, strlen(buf1))) {
-               rc = EINVAL;
-               splat_vprint(file, SPLAT_VNODE_TEST3_NAME,
-                            "Failed strncmp data written does not match "
-                            "data read\nWrote: %sRead:  %s\n", buf1, buf2);
-               goto out;
-       }
-
-       rc = 0;
-       splat_vprint(file, SPLAT_VNODE_TEST3_NAME, "Wrote: %s", buf1);
-       splat_vprint(file, SPLAT_VNODE_TEST3_NAME, "Read:  %s", buf2);
-       splat_vprint(file, SPLAT_VNODE_TEST3_NAME, "Successfully wrote and "
-                    "read expected data pattern to test file: %s\n",
-                    SPLAT_VNODE_TEST_FILE_RW);
-
-out:
-        VOP_CLOSE(vp, 0, 0, 0, 0, 0);
-
-        return -rc;
-} /* splat_vnode_test3() */
-
-static int
-splat_vnode_test5(struct file *file, void *arg)
-{
-       vnode_t *vp;
-       vattr_t vap;
-       int rc;
-
-       if ((rc = vn_open(SPLAT_VNODE_TEST_FILE, UIO_SYSSPACE,
-                         FREAD, 0644, &vp, 0, 0))) {
-               splat_vprint(file, SPLAT_VNODE_TEST5_NAME,
-                            "Failed to vn_open test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE, rc);
-               return -rc;
-       }
-
-       rc = VOP_GETATTR(vp, &vap, 0, 0, NULL);
-       if (rc) {
-               splat_vprint(file, SPLAT_VNODE_TEST5_NAME,
-                            "Failed to vn_getattr test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE, rc);
-               goto out;
-       }
-
-       if (vap.va_type != VREG) {
-               rc = EINVAL;
-               splat_vprint(file, SPLAT_VNODE_TEST5_NAME,
-                            "Failed expected regular file type "
-                            "(%d != VREG): %s (%d)\n", vap.va_type,
-                            SPLAT_VNODE_TEST_FILE, rc);
-               goto out;
-       }
-
-       splat_vprint(file, SPLAT_VNODE_TEST1_NAME, "Successfully "
-                    "vn_getattr'ed test file: %s\n", SPLAT_VNODE_TEST_FILE);
-
-out:
-        VOP_CLOSE(vp, 0, 0, 0, 0, 0);
-
-        return -rc;
-} /* splat_vnode_test5() */
-
-static int
-splat_vnode_test6(struct file *file, void *arg)
-{
-       vnode_t *vp;
-       char buf[32] = "SPL VNode Interface Test File\n";
-       int rc;
-
-       if ((rc = splat_vnode_unlink_all(file, arg, SPLAT_VNODE_TEST6_NAME)))
-               return rc;
-
-       if ((rc = vn_open(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE,
-                         FWRITE | FCREAT | FEXCL, 0644, &vp, 0, 0))) {
-               splat_vprint(file, SPLAT_VNODE_TEST6_NAME,
-                            "Failed to vn_open test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE_RW, rc);
-               return -rc;
-       }
-
-        rc = vn_rdwr(UIO_WRITE, vp, buf, strlen(buf), 0,
-                     UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL);
-       if (rc) {
-               splat_vprint(file, SPLAT_VNODE_TEST6_NAME,
-                            "Failed vn_rdwr write of test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE_RW, rc);
-               goto out;
-       }
-
-       rc = vn_fsync(vp, 0, 0, 0);
-       if (rc) {
-               splat_vprint(file, SPLAT_VNODE_TEST6_NAME,
-                            "Failed vn_fsync of test file: %s (%d)\n",
-                            SPLAT_VNODE_TEST_FILE_RW, rc);
-               goto out;
-       }
-
-       rc = 0;
-       splat_vprint(file, SPLAT_VNODE_TEST6_NAME, "Successfully "
-                    "fsync'ed test file %s\n", SPLAT_VNODE_TEST_FILE_RW);
-out:
-        VOP_CLOSE(vp, 0, 0, 0, 0, 0);
-
-        return -rc;
-} /* splat_vnode_test6() */
-
-splat_subsystem_t *
-splat_vnode_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_VNODE_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_VNODE_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_VNODE;
-
-        splat_test_init(sub, SPLAT_VNODE_TEST1_NAME, SPLAT_VNODE_TEST1_DESC,
-                       SPLAT_VNODE_TEST1_ID, splat_vnode_test1);
-        splat_test_init(sub, SPLAT_VNODE_TEST2_NAME, SPLAT_VNODE_TEST2_DESC,
-                       SPLAT_VNODE_TEST2_ID, splat_vnode_test2);
-        splat_test_init(sub, SPLAT_VNODE_TEST3_NAME, SPLAT_VNODE_TEST3_DESC,
-                       SPLAT_VNODE_TEST3_ID, splat_vnode_test3);
-        splat_test_init(sub, SPLAT_VNODE_TEST5_NAME, SPLAT_VNODE_TEST5_DESC,
-                       SPLAT_VNODE_TEST5_ID, splat_vnode_test5);
-        splat_test_init(sub, SPLAT_VNODE_TEST6_NAME, SPLAT_VNODE_TEST6_DESC,
-                       SPLAT_VNODE_TEST6_ID, splat_vnode_test6);
-
-        return sub;
-} /* splat_vnode_init() */
-
-void
-splat_vnode_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-
-        splat_test_fini(sub, SPLAT_VNODE_TEST6_ID);
-        splat_test_fini(sub, SPLAT_VNODE_TEST5_ID);
-        splat_test_fini(sub, SPLAT_VNODE_TEST3_ID);
-        splat_test_fini(sub, SPLAT_VNODE_TEST2_ID);
-        splat_test_fini(sub, SPLAT_VNODE_TEST1_ID);
-
-        kfree(sub);
-} /* splat_vnode_fini() */
-
-int
-splat_vnode_id(void)
-{
-        return SPLAT_SUBSYSTEM_VNODE;
-} /* splat_vnode_id() */
diff --git a/module/splat/splat-zlib.c b/module/splat/splat-zlib.c
deleted file mode 100644 (file)
index 28e521c..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- *  Copyright (C) 2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
- *  UCRL-CODE-235197
- *
- *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://zfsonlinux.org/>.
- *
- *  The SPL is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  The SPL is distributed in the hope that it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- *  Solaris Porting LAyer Tests (SPLAT) Zlib Compression Tests.
- */
-
-#include <sys/zmod.h>
-#include <sys/random.h>
-#include <sys/kmem.h>
-#include <sys/vmem.h>
-#include "splat-internal.h"
-
-#define SPLAT_ZLIB_NAME                        "zlib"
-#define SPLAT_ZLIB_DESC                        "Zlib Compression Tests"
-
-#define SPLAT_ZLIB_TEST1_ID            0x0f01
-#define SPLAT_ZLIB_TEST1_NAME          "compress/uncompress"
-#define SPLAT_ZLIB_TEST1_DESC          "Compress/Uncompress Test"
-
-#define BUFFER_SIZE                    (128 * 1024)
-
-static int
-splat_zlib_test1_check(struct file *file, void *src, void *dst, void *chk,
-    int level)
-{
-       size_t dst_len = BUFFER_SIZE;
-       size_t chk_len = BUFFER_SIZE;
-       int rc;
-
-       memset(dst, 0, BUFFER_SIZE);
-       memset(chk, 0, BUFFER_SIZE);
-
-       rc = z_compress_level(dst, &dst_len, src, BUFFER_SIZE, level);
-       if (rc != Z_OK) {
-               splat_vprint(file, SPLAT_ZLIB_TEST1_NAME,
-                   "Failed level %d z_compress_level(), %d\n", level, rc);
-               return -EINVAL;
-       }
-
-       rc = z_uncompress(chk, &chk_len, dst, dst_len);
-       if (rc != Z_OK) {
-               splat_vprint(file, SPLAT_ZLIB_TEST1_NAME,
-                   "Failed level %d z_uncompress(), %d\n", level, rc);
-               return -EINVAL;
-       }
-
-       rc = memcmp(src, chk, BUFFER_SIZE);
-       if (rc) {
-               splat_vprint(file, SPLAT_ZLIB_TEST1_NAME,
-                   "Failed level %d memcmp()), %d\n", level, rc);
-               return -EINVAL;
-       }
-
-       splat_vprint(file, SPLAT_ZLIB_TEST1_NAME,
-           "Passed level %d, compressed %d bytes to %d bytes\n",
-           level, BUFFER_SIZE, (int)dst_len);
-
-       return 0;
-}
-
-/*
- * Compress a buffer, uncompress the newly compressed buffer, then
- * compare it to the original.  Do this for all 9 compression levels.
- */
-static int
-splat_zlib_test1(struct file *file, void *arg)
-{
-       void *src = NULL, *dst = NULL, *chk = NULL;
-       int i, rc, level;
-
-       src = vmalloc(BUFFER_SIZE);
-       if (src == NULL) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       dst = vmalloc(BUFFER_SIZE);
-       if (dst == NULL) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       chk = vmalloc(BUFFER_SIZE);
-       if (chk == NULL) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       /* Source buffer is a repeating 1024 byte random pattern. */
-       random_get_pseudo_bytes(src, sizeof(uint8_t) * 1024);
-       for (i = 1; i < 128; i++)
-               memcpy(src + (i * 1024), src, 1024);
-
-       for (level = 1; level <= 9; level++)
-               if ((rc = splat_zlib_test1_check(file, src, dst, chk, level)))
-                       break;
-out:
-       if (src)
-               vfree(src);
-
-       if (dst)
-               vfree(dst);
-
-       if (chk)
-               vfree(chk);
-
-       return rc;
-}
-
-splat_subsystem_t *
-splat_zlib_init(void)
-{
-        splat_subsystem_t *sub;
-
-        sub = kmalloc(sizeof(*sub), GFP_KERNEL);
-        if (sub == NULL)
-                return NULL;
-
-        memset(sub, 0, sizeof(*sub));
-        strncpy(sub->desc.name, SPLAT_ZLIB_NAME, SPLAT_NAME_SIZE);
-       strncpy(sub->desc.desc, SPLAT_ZLIB_DESC, SPLAT_DESC_SIZE);
-        INIT_LIST_HEAD(&sub->subsystem_list);
-       INIT_LIST_HEAD(&sub->test_list);
-        spin_lock_init(&sub->test_lock);
-        sub->desc.id = SPLAT_SUBSYSTEM_ZLIB;
-
-        splat_test_init(sub, SPLAT_ZLIB_TEST1_NAME, SPLAT_ZLIB_TEST1_DESC,
-                     SPLAT_ZLIB_TEST1_ID, splat_zlib_test1);
-
-        return sub;
-}
-
-void
-splat_zlib_fini(splat_subsystem_t *sub)
-{
-        ASSERT(sub);
-
-        splat_test_fini(sub, SPLAT_ZLIB_TEST1_ID);
-
-        kfree(sub);
-}
-
-int
-splat_zlib_id(void) {
-        return SPLAT_SUBSYSTEM_ZLIB;
-}
diff --git a/rpm/Makefile.am b/rpm/Makefile.am
deleted file mode 100644 (file)
index f2cf72c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = generic redhat
diff --git a/rpm/generic/.gitignore b/rpm/generic/.gitignore
deleted file mode 100644 (file)
index 67129ff..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/spl-dkms.spec
-/spl-kmod.spec
-/spl.spec
diff --git a/rpm/generic/Makefile.am b/rpm/generic/Makefile.am
deleted file mode 100644 (file)
index da6c4ab..0000000
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_DIST = spl.spec.in spl-kmod.spec.in spl-dkms.spec.in
diff --git a/rpm/generic/spl-dkms.spec.in b/rpm/generic/spl-dkms.spec.in
deleted file mode 100644 (file)
index a8691d2..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-%{?!packager: %define packager Brian Behlendorf <behlendorf1@llnl.gov>}
-
-%if ! 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version}
-%define not_rpm 1
-%endif
-
-%define module  @PACKAGE@
-%define mkconf  scripts/dkms.mkconf
-
-# Python permits the !/usr/bin/python shebang for scripts that are cross
-# compatible between python2 and python3, but Fedora 28 does not.  Fedora
-# wants us to choose python3 for cross-compatible scripts.  Since we want
-# to support python2 and python3 users, exclude our scripts from Fedora 28's
-# RPM build check, so that we don't get a bunch of build warnings.
-#
-# Details: https://github.com/zfsonlinux/zfs/issues/7360
-#
-%global __brp_mangle_shebangs_exclude_from      splslab.py
-
-Name:           %{module}-dkms
-
-Version:        @VERSION@
-Release:        @RELEASE@%{?dist}
-Summary:        Kernel module(s) (dkms)
-
-Group:          System Environment/Kernel
-License:        GPLv2+
-URL:            http://zfsonlinux.org/
-Source0:        %{module}-%{version}.tar.gz
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildArch:      noarch
-
-Requires:       dkms >= 2.2.0.2
-Requires:       gcc, make, perl
-%if 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version}
-Requires:       kernel-devel
-%endif
-Provides:       %{module}-kmod = %{version}
-
-%description
-This package contains the dkms kernel modules required to emulate
-several interfaces provided by the Solaris kernel.
-
-%prep
-%setup -q -n %{module}-%{version}
-
-%build
-%{mkconf} -n %{module} -v %{version} -f dkms.conf
-
-%install
-if [ "$RPM_BUILD_ROOT" != "/" ]; then
-    rm -rf $RPM_BUILD_ROOT
-fi
-mkdir -p $RPM_BUILD_ROOT/usr/src/
-cp -rf ${RPM_BUILD_DIR}/%{module}-%{version} $RPM_BUILD_ROOT/usr/src/
-
-%clean
-if [ "$RPM_BUILD_ROOT" != "/" ]; then
-    rm -rf $RPM_BUILD_ROOT
-fi
-
-%files
-%defattr(-,root,root)
-/usr/src/%{module}-%{version}
-
-%post
-for POSTINST in /usr/lib/dkms/common.postinst; do
-    if [ -f $POSTINST ]; then
-        $POSTINST %{module} %{version}
-        exit $?
-    fi
-    echo "WARNING: $POSTINST does not exist."
-done
-echo -e "ERROR: DKMS version is too old and %{module} was not"
-echo -e "built with legacy DKMS support."
-echo -e "You must either rebuild %{module} with legacy postinst"
-echo -e "support or upgrade DKMS to a more current version."
-exit 1
-
-%preun
-CONFIG_H="/var/lib/dkms/%{module}/%{version}/*/*/%{module}_config.h"
-SPEC_META_ALIAS="@PACKAGE@-@VERSION@-@RELEASE@"
-DKMS_META_ALIAS=`cat $CONFIG_H 2>/dev/null |
-    awk -F'"' '/META_ALIAS/ { print $2; exit 0 }'`
-if [ "$SPEC_META_ALIAS" = "$DKMS_META_ALIAS" ]; then
-    echo -e
-    echo -e "Uninstall of %{module} module ($SPEC_META_ALIAS) beginning:"
-    dkms remove -m %{module} -v %{version} --all %{!?not_rpm:--rpm_safe_upgrade}
-fi
-exit 0
-
-%changelog
-* %(date "+%a %b %d %Y") %packager %{version}-%{release}
-- Automatic build by DKMS
diff --git a/rpm/generic/spl-kmod.spec.in b/rpm/generic/spl-kmod.spec.in
deleted file mode 100644 (file)
index c33c250..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-%define module  @PACKAGE@
-#define repo    rpmfusion
-#define repo    chaos
-
-# (un)define the next line to either build for the newest or all current kernels
-%define buildforkernels newest
-#define buildforkernels current
-#define buildforkernels akmod
-
-%bcond_with     debug
-%bcond_with     debug_log
-%bcond_with     debug_kmem
-%bcond_with     debug_kmem_tracking
-%bcond_with     atomic_spinlocks
-
-
-Name:           %{module}-kmod
-
-Version:        @VERSION@
-Release:        @RELEASE@%{?dist}
-Summary:        Kernel module(s)
-
-Group:          System Environment/Kernel
-License:        GPLv2+
-URL:            http://zfsonlinux.org/
-Source0:        %{module}-%{version}.tar.gz
-Source10:       kmodtool
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id} -u -n)
-
-# The developments headers will conflict with the dkms packages.
-Conflicts:      %{module}-dkms
-
-%if %{defined repo}
-
-# Building for a repository use the proper build-sysbuild package
-# to determine which kernel-devel packages should be installed.
-BuildRequires:  %{_bindir}/kmodtool
-%{!?kernels:BuildRequires: buildsys-build-%{repo}-kerneldevpkgs-%{?buildforkernels:%{buildforkernels}}%{!?buildforkernels:current}-%{_target_cpu}}
-
-%else
-
-# Building local packages attempt to to use the installed kernel.
-%{?rhel:BuildRequires: kernel-devel}
-%{?fedora:BuildRequires: kernel-devel}
-%{?suse_version:BuildRequires: kernel-source}
-
-%if !%{defined kernels} && !%{defined build_src_rpm}
-    %if 0%{?rhel}%{?fedora}%{?suse_version}
-        %define kernels %(ls -1 /usr/src/kernels)
-    %else
-        %define kernels %(ls -1 /lib/modules)
-    %endif
-%endif
-%endif
-
-# LDFLAGS are not sanitized by arch/*/Makefile for these architectures.
-%ifarch ppc ppc64 ppc64le aarch64
-%global __global_ldflags %{nil}
-%endif
-
-%if 0%{?fedora} >= 17
-%define prefix  /usr
-%endif
-
-# Kmodtool does its magic here.  A patched version of kmodtool is shipped
-# because the latest versions may not be available for your distribution.
-# 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) }
-
-
-%description
-This package contains the kernel modules required to emulate
-several interfaces provided by the Solaris kernel.
-
-%prep
-# Error out if there was something wrong with kmodtool.
-%{?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
-
-%if %{with debug}
-    %define debug --enable-debug
-%else
-    %define debug --disable-debug
-%endif
-
-%if %{with debug_log}
-    %define debug_log --enable-debug-log
-%else
-    %define debug_log --disable-debug-log
-%endif
-
-%if %{with debug_kmem}
-    %define debug_kmem --enable-debug-kmem
-%else
-    %define debug_kmem --disable-debug-kmem
-%endif
-
-%if %{with debug_kmem_tracking}
-    %define debug_kmem_tracking --enable-debug-kmem-tracking
-%else
-    %define debug_kmem_tracking --disable-debug-kmem-tracking
-%endif
-
-%if %{with atomic_spinlocks}
-    %define atomic_spinlocks --enable-atomic-spinlocks
-%else
-    %define atomic_spinlocks --disable-atomic-spinlocks
-%endif
-
-# Leverage VPATH from configure to avoid making multiple copies.
-%define _configure ../%{module}-%{version}/configure
-
-%setup -q -c -T -a 0
-
-for kernel_version in %{?kernel_versions}; do
-    %{__mkdir} _kmod_build_${kernel_version%%___*}
-done
-
-%build
-for kernel_version in %{?kernel_versions}; do
-    cd _kmod_build_${kernel_version%%___*}
-    %configure \
-        --with-config=kernel \
-%if 0%{?rhel}%{?fedora}
-        --with-linux="${kernel_version##*___}" \
-        --with-linux-obj="${kernel_version##*___}" \
-%else
-        --with-linux="$( \
-        if [ -e "/lib/modules/${kernel_version%%___*}/source" ]; then \
-            echo "/lib/modules/${kernel_version%%___*}/source"; \
-        else \
-            echo "/lib/modules/${kernel_version%%___*}/build"; \
-        fi)" \
-        --with-linux-obj="/lib/modules/${kernel_version%%___*}/build" \
-%endif
-        %{debug} \
-        %{debug_log} \
-        %{debug_kmem} \
-        %{debug_kmem_tracking} \
-        %{atomic_spinlocks}
-    make %{?_smp_mflags}
-    cd ..
-done
-
-
-%install
-rm -rf ${RPM_BUILD_ROOT}
-
-# Relies on the kernel 'modules_install' make target.
-for kernel_version in %{?kernel_versions}; do
-    cd _kmod_build_${kernel_version%%___*}
-    make install \
-        DESTDIR=${RPM_BUILD_ROOT} \
-        %{?prefix:INSTALL_MOD_PATH=%{?prefix}} \
-        INSTALL_MOD_DIR=%{kmodinstdir_postfix}
-    cd ..
-done
-
-# find-debuginfo.sh only considers executables
-chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*/*
-%{?akmod_install}
-
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%changelog
-* Wed Jul 26 2017 Brian Behlendorf <behlendorf1@llnl.gov> - 0.7.0-1
-- Released 0.7.0-1, detailed release notes are available at:
-- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.0
diff --git a/rpm/generic/spl.spec.in b/rpm/generic/spl.spec.in
deleted file mode 100644 (file)
index 7ba71fd..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# Python permits the !/usr/bin/python shebang for scripts that are cross
-# compatible between python2 and python3, but Fedora 28 does not.  Fedora
-# wants us to choose python3 for cross-compatible scripts.  Since we want
-# to support python2 and python3 users, exclude our scripts from Fedora 28's
-# RPM build check, so that we don't get a bunch of build warnings.
-#
-# Details: https://github.com/zfsonlinux/zfs/issues/7360
-#
-%global __brp_mangle_shebangs_exclude_from     splslab.py
-
-Name:           @PACKAGE@
-Version:        @VERSION@
-Release:        @RELEASE@%{?dist}
-Summary:        Commands to control the kernel modules
-
-Group:          System Environment/Kernel
-License:        GPLv2+
-URL:            http://zfsonlinux.org/
-Source0:        %{name}-%{version}.tar.gz
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-Requires:       %{name}-kmod = %{version}
-Provides:       %{name}-kmod-common = %{version}
-
-%description
-This package contains the commands to verify the SPL
-kernel modules are functioning properly.
-
-%prep
-%setup -q
-
-%build
-%configure --with-config=user
-make %{?_smp_mflags}
-
-%install
-%{__rm} -rf $RPM_BUILD_ROOT
-make install DESTDIR=%{?buildroot}
-
-%files
-%doc AUTHORS COPYING DISCLAIMER
-%{_bindir}/*
-%{_sbindir}/*
-%{_mandir}/man1/*
-%{_mandir}/man5/*
-
-%changelog
-* Wed Jul 26 2017 Brian Behlendorf <behlendorf1@llnl.gov> - 0.7.0-1
-- Released 0.7.0-1, detailed release notes are available at:
-- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.0
diff --git a/rpm/redhat/.gitignore b/rpm/redhat/.gitignore
deleted file mode 100644 (file)
index 67129ff..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/spl-dkms.spec
-/spl-kmod.spec
-/spl.spec
diff --git a/rpm/redhat/Makefile.am b/rpm/redhat/Makefile.am
deleted file mode 100644 (file)
index da6c4ab..0000000
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_DIST = spl.spec.in spl-kmod.spec.in spl-dkms.spec.in
diff --git a/rpm/redhat/spl-dkms.spec.in b/rpm/redhat/spl-dkms.spec.in
deleted file mode 120000 (symlink)
index 900f524..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../generic/spl-dkms.spec.in
\ No newline at end of file
diff --git a/rpm/redhat/spl-kmod.spec.in b/rpm/redhat/spl-kmod.spec.in
deleted file mode 100644 (file)
index 4e2a9f9..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-%bcond_with     debug
-%bcond_with     debug_log
-%bcond_with     debug_kmem
-%bcond_with     debug_kmem_tracking
-%bcond_with     atomic_spinlocks
-
-Name:           @PACKAGE@-kmod
-Version:        @VERSION@
-Release:        @RELEASE@%{?dist}
-
-Summary:        Kernel module(s)
-Group:          System Environment/Kernel
-License:        GPLv2+
-URL:            http://zfsonlinux.org/
-BuildRequires:  %kernel_module_package_buildreqs
-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:       @PACKAGE@ = %{version}\n\
-Conflicts:      @PACKAGE@-dkms\n\n" > %{_sourcedir}/kmod-preamble)
-
-# LDFLAGS are not sanitized by arch/*/Makefile for these architectures.
-%ifarch ppc ppc64 ppc64le aarch64
-%global __global_ldflags %{nil}
-%endif
-
-%description
-This package contains the kernel modules required to emulate
-several interfaces provided by the Solaris kernel.
-
-%define kmod_name spl
-
-%kernel_module_package -n %{kmod_name} -p %{_sourcedir}/kmod-preamble
-
-%define ksrc %{_usrsrc}/kernels/%{kverrel}
-%define kobj %{ksrc}
-
-%package -n kmod-%{kmod_name}-devel
-Summary:        SPL kernel module(s) devel common
-Group:          System Environment/Kernel
-
-%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.
-
-%prep
-if ! [ -d "%{ksrc}"  ]; then
-        echo "Kernel build directory isn't set properly, cannot continue"
-        exit 1
-fi
-
-%if %{with debug}
-%define debug --enable-debug
-%else
-%define debug --disable-debug
-%endif
-
-%if %{with debug_log}
-%define debug_log --enable-debug-log
-%else
-%define debug_log --disable-debug-log
-%endif
-
-%if %{with debug_kmem}
-%define debug_kmem --enable-debug-kmem
-%else
-%define debug_kmem --disable-debug-kmem
-%endif
-
-%if %{with debug_kmem_tracking}
-%define debug_kmem_tracking --enable-debug-kmem-tracking
-%else
-%define debug_kmem_tracking --disable-debug-kmem-tracking
-%endif
-
-%if %{with atomic_spinlocks}
-%define atomic_spinlocks --enable-atomic-spinlocks
-%else
-%define atomic_spinlocks --disable-atomic-spinlocks
-%endif
-
-%setup -n %{kmod_name}-%{version}
-%build
-%configure \
-        --with-config=kernel \
-        --with-linux=%{ksrc} \
-        --with-linux-obj=%{kobj} \
-        %{debug} \
-        %{debug_log} \
-        %{debug_kmem} \
-        %{debug_kmem_tracking} \
-        %{atomic_spinlocks}
-make %{?_smp_mflags}
-
-%install
-make install \
-        DESTDIR=${RPM_BUILD_ROOT} \
-        INSTALL_MOD_DIR=extra/%{kmod_name}
-%{__rm} -f %{buildroot}/lib/modules/%{kverrel}/modules.*
-# find-debuginfo.sh only considers executables
-%{__chmod} u+x  %{buildroot}/lib/modules/%{kverrel}/extra/*/*/*
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files -n kmod-%{kmod_name}-devel
-%{_usrsrc}/%{kmod_name}-%{version}
diff --git a/rpm/redhat/spl.spec.in b/rpm/redhat/spl.spec.in
deleted file mode 120000 (symlink)
index d3276f0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../generic/spl.spec.in
\ No newline at end of file
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
deleted file mode 100644 (file)
index a718c4b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-EXTRA_DIST = check.sh dkms.mkconf dkms.postbuild kmodtool
-
-check:
-       scripts/check.sh
diff --git a/scripts/check.sh b/scripts/check.sh
deleted file mode 100755 (executable)
index 5f5cb18..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/bin/bash
-###############################################################################
-# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
-# Copyright (C) 2007 The Regents of the University of California.
-# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-# Written by Brian Behlendorf <behlendorf1@llnl.gov>.
-# UCRL-CODE-235197
-#
-# This file is part of the SPL, Solaris Porting Layer.
-# For details, see <http://zfsonlinux.org/>.
-#
-# The SPL is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# The SPL is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with the SPL.  If not, see <http://www.gnu.org/licenses/>.
-###############################################################################
-# This script runs the full set of regression tests.
-###############################################################################
-
-prog=check.sh
-spl_module=../module/spl/spl.ko
-splat_module=../module/splat/splat.ko
-splat_cmd=../cmd/splat/splat
-verbose=
-
-die() {
-       echo "${prog}: $1" >&2
-       exit 1
-}
-
-warn() {
-       echo "${prog}: $1" >&2
-}
-
-if [ -n "$V" ]; then
-       verbose="-v"
-fi
-
-if [ -n "$TESTS" ]; then
-       tests="$TESTS"
-else
-       tests="-a"
-fi
-
-if [ $(id -u) != 0 ]; then
-       die "Must run as root"
-fi
-
-if /sbin/lsmod | egrep -q "^spl|^splat"; then
-       die "Must start with spl modules unloaded"
-fi
-
-if [ ! -f ${spl_module} ] || [ ! -f ${splat_module} ]; then
-       die "Source tree must be built, run 'make'"
-fi
-
-/sbin/modprobe zlib_inflate &>/dev/null
-/sbin/modprobe zlib_deflate &>/dev/null
-
-echo "Loading ${spl_module}"
-/sbin/insmod ${spl_module} || die "Failed to load ${spl_module}"
-
-echo "Loading ${splat_module}"
-/sbin/insmod ${splat_module} || die "Unable to load ${splat_module}"
-
-# Wait a maximum of 3 seconds for udev to detect the new splatctl 
-# device, if we do not see the character device file created assume
-# udev is not running and manually create the character device.
-for i in `seq 1 50`; do
-       sleep 0.1
-
-       if [ -c /dev/splatctl ]; then
-               break
-       fi
-
-       if [ $i -eq 50 ]; then
-               mknod /dev/splatctl c 229 0
-       fi
-done
-
-$splat_cmd $tests $verbose
-
-echo "Unloading ${splat_module}"
-/sbin/rmmod ${splat_module} || die "Failed to unload ${splat_module}"
-
-echo "Unloading ${spl_module}"
-/sbin/rmmod ${spl_module} || die "Unable to unload ${spl_module}"
-
-exit 0
diff --git a/scripts/dkms.mkconf b/scripts/dkms.mkconf
deleted file mode 100755 (executable)
index 67b9dad..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-
-PROG=$0
-
-pkgcfg=/etc/sysconfig/spl
-
-while getopts "n:v:c:f:" opt; do
-        case $opt in
-                n) pkgname=$OPTARG ;;
-                v) pkgver=$OPTARG  ;;
-                c) pkgcfg=$OPTARG ;;
-                f) filename=$OPTARG ;;
-        esac
-done
-
-if [ -z "${pkgname}" -o -z "${pkgver}" -o -z "${filename}" ]; then
-        echo "Usage: $PROG -n <pkgname> -v <pkgver> -c <pkgcfg> -f <filename>"
-        exit 1
-fi
-
-cat >${filename} <<EOF
-PACKAGE_NAME="${pkgname}"
-PACKAGE_VERSION="${pkgver}"
-PACKAGE_CONFIG="${pkgcfg}"
-PRE_BUILD="configure
-  --prefix=/usr
-  --with-config=kernel
-  --with-linux=\${kernel_source_dir}
-  --with-linux-obj=\${kernel_source_dir}
-  \$(
-    [[ -r \${PACKAGE_CONFIG} ]] \\
-    && source \${PACKAGE_CONFIG} \\
-    && shopt -q -s extglob \\
-    && \\
-    {
-      if [[ \${SPL_DKMS_ENABLE_DEBUG,,} == @(y|yes) ]]
-      then
-        echo --enable-debug
-      fi
-      if [[ \${SPL_DKMS_ENABLE_DEBUG_KMEM,,} == @(y|yes) ]]
-      then
-        echo --enable-debug-kmem
-      fi
-      if [[ \${SPL_DKMS_ENABLE_DEBUG_KMEM_TRACKING,,} == @(y|yes) ]]
-      then
-        echo --enable-debug-kmem-tracking
-      fi
-      if [[ \${SPL_DKMS_ENABLE_ATOMIC_SPINLOCKS,,} == @(y|yes) ]]
-      then
-        echo --enable-atomic-spinlocks
-      fi
-    }
-  )
-"
-POST_BUILD="scripts/dkms.postbuild
-  -n \${PACKAGE_NAME}
-  -v \${PACKAGE_VERSION}
-  -a \${arch}
-  -k \${kernelver}
-  -t \${dkms_tree}
-"
-AUTOINSTALL="yes"
-REMAKE_INITRD="no"
-MAKE[0]="make"
-STRIP[0]="\$(
-  [[ -r \${PACKAGE_CONFIG} ]] \\
-  && source \${PACKAGE_CONFIG} \\
-  && shopt -q -s extglob \\
-  && [[ \${SPL_DKMS_DISABLE_STRIP,,} == @(y|yes) ]] \\
-  && echo -n no
-)"
-STRIP[1]="\${STRIP[0]}"
-BUILT_MODULE_NAME[0]="spl"
-BUILT_MODULE_LOCATION[0]="module/spl/"
-DEST_MODULE_LOCATION[0]="/extra/spl/spl"
-BUILT_MODULE_NAME[1]="splat"
-BUILT_MODULE_LOCATION[1]="module/splat/"
-DEST_MODULE_LOCATION[1]="/extra/splat/splat"
-EOF
diff --git a/scripts/dkms.postbuild b/scripts/dkms.postbuild
deleted file mode 100755 (executable)
index a23bbda..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-PROG=$0
-
-while getopts "a:k:n:t:v:" opt; do
-       case $opt in
-               a) arch=$OPTARG    ;;
-               k) kver=$OPTARG    ;;
-               n) pkgname=$OPTARG ;;
-               t) tree=$OPTARG    ;;
-               v) pkgver=$OPTARG  ;;
-       esac
-done
-
-if [ -z "${arch}" -o -z "${kver}" -o -z "${pkgname}" -o \
-     -z "${tree}" -o -z "${pkgver}" ]; then
-       echo "Usage: $PROG -a <arch> -k <kver> -n <pkgname>" \
-            "-t <tree> -v <pkgver>"
-       exit 1
-fi
-
-cp ${tree}/${pkgname}/${pkgver}/build/spl_config.h          \
-   ${tree}/${pkgname}/${pkgver}/build/module/Module.symvers \
-   ${tree}/${pkgname}/${pkgver}/${kver}/${arch}/
diff --git a/scripts/kmodtool b/scripts/kmodtool
deleted file mode 100644 (file)
index ce3f042..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-#!/bin/bash
-
-# kmodtool - Helper script for building kernel module RPMs
-# Copyright (c) 2003-2012 Ville Skyttä <ville.skytta@iki.fi>,
-#                         Thorsten Leemhuis <fedora@leemhuis.info>
-#                         Nicolas Chauvet <kwizart@gmail.com>
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-shopt -s extglob
-
-myprog="kmodtool-${repo}"
-myver="0.12.1"
-
-kmodname=
-build_kernels="current"
-kernels_known_variants=
-kernel_versions=
-kernel_versions_to_build_for=
-prefix=
-filterfile=
-target=
-buildroot=
-
-error_out()
-{
-       local errorlevel=${1}
-       shift
-       echo "Error: $@" >&2
-       # the next line is not multi-line safe -- not needed *yet*
-       echo "%global kmodtool_check echo \"kmodtool error: $@\"; exit ${errorlevel};"
-       exit ${errorlevel}
-}
-
-print_rpmtemplate_header()
-{
-       echo
-       echo '%global kmodinstdir_prefix  '${prefix}/lib/modules/
-       echo '%global kmodinstdir_postfix '/extra/${kmodname}/
-       echo '%global kernel_versions     '${kernel_versions}
-       echo
-}
-
-print_akmodtemplate ()
-{
-       echo
-       cat <<EOF
-
-%global akmod_install mkdir -p \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/; \\\
-LANG=C rpmbuild --define "_sourcedir %{_sourcedir}" \\\
---define "_srcrpmdir \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/" \\\
--bs --nodeps %{_specdir}/%{name}.spec ; \\\
-ln -s \$(ls \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/) \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/${kmodname}-kmod.latest
-
-%package -n akmod-${kmodname}
-Summary:       Akmod package for ${kmodname} kernel module(s) 
-Group:                 System Environment/Kernel
-Requires:   kmodtool
-Requires:      akmods
-%{?AkmodsBuildRequires:Requires: %{AkmodsBuildRequires}}
-# same requires and provides as a kmods package would have
-Requires:      ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version}
-Provides:      ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
-EOF
-
-       if [[ ${obsolete_name} ]]; then
-               echo "Provides:   akmod-${obsolete_name} = ${obsolete_version}"
-               echo "Obsoletes:  akmod-${obsolete_name} < ${obsolete_version}"
-       fi
-
-       cat <<EOF
-
-%description -n akmod-${kmodname}
-This package provides the akmod package for the ${kmodname} kernel modules.
-
-%posttrans -n akmod-${kmodname}
-nohup ${prefix}/sbin/akmods --from-akmod-posttrans --akmod ${kmodname} &> /dev/null &
-
-%files -n akmod-${kmodname}
-%defattr(-,root,root,-)
-%{_usrsrc}/akmods/*
-
-EOF
-}
-
-print_akmodmeta ()
-{
-               cat <<EOF
-%package      -n kmod-${kmodname}
-Summary:         Metapackage which tracks in ${kmodname} kernel module for newest kernel${dashvariant}
-Group:           System Environment/Kernel
-
-Provides:        ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
-Provides:        kmod-${kmodname}-xen = %{?epoch:%{epoch}:}%{version}-%{release}
-Provides:        kmod-${kmodname}-smp = %{?epoch:%{epoch}:}%{version}-%{release}
-Provides:        kmod-${kmodname}-PAE = %{?epoch:%{epoch}:}%{version}-%{release}
-Requires:        akmod-${kmodname} = %{?epoch:%{epoch}:}%{version}-%{release}
-EOF
-
-       if [[ ${obsolete_name} ]]; then
-               echo "Provides:        kmod-${obsolete_name} = ${obsolete_version}"
-               echo "Obsoletes:       kmod-${obsolete_name} < ${obsolete_version}"
-       fi
-cat <<EOF
-
-%description  -n kmod-${kmodname}${dashvariant}
-This is a meta-package without payload which sole purpose is to require the
-${kmodname} kernel module(s) for the newest kernel${dashvariant},
-to make sure you get it together with a new kernel.
-
-%files        -n kmod-${kmodname}${dashvariant}
-%defattr(644,root,root,755)
-EOF
-}
-
-print_rpmtemplate_per_kmodpkg ()
-{
-       if [[ "${1}" == "--custom" ]]; then
-               shift
-               local customkernel=true
-       elif [[ "${1}" == "--redhat" ]]; then
-               # this is needed for akmods
-               shift
-               local redhatkernel=true
-       fi
-
-       local kernel_uname_r=${1}
-       local kernel_variant="${2:+-${2}}"
-
-    # first part
-       cat <<EOF
-%package       -n kmod-${kmodname}-${kernel_uname_r}
-Summary:          ${kmodname} kernel module(s) for ${kernel_uname_r}
-Group:            System Environment/Kernel
-Provides:         kernel-modules-for-kernel = ${kernel_uname_r}
-Provides:         kmod-${kmodname}-uname-r = ${kernel_uname_r}
-Provides:         ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
-Requires:         ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version}
-Requires(post):   ${prefix}/sbin/depmod
-Requires(postun): ${prefix}/sbin/depmod
-EOF
-
-       if [[ ${obsolete_name} ]]; then
-               echo "Provides:        kmod-${obsolete_name}-${kernel_uname_r} = ${obsolete_version}"
-               echo "Obsoletes:       kmod-${obsolete_name}-${kernel_uname_r} < ${obsolete_version}"
-       fi
-
-       # second part
-       if [[ ! "${customkernel}" ]]; then
-            cat <<EOF
-Requires:         kernel-uname-r = ${kernel_uname_r}
-BuildRequires:   kernel-devel-uname-r = ${kernel_uname_r}
-%{?KmodsRequires:Requires: %{KmodsRequires}-uname-r = ${kernel_uname_r}}
-%{?KmodsRequires:BuildRequires: %{KmodsRequires}-uname-r = ${kernel_uname_r}}
-%post          -n kmod-${kmodname}-${kernel_uname_r}
-${prefix}/sbin/depmod -aeF /boot/System.map-${kernel_uname_r} ${kernel_uname_r} > /dev/null || :
-%postun        -n kmod-${kmodname}-${kernel_uname_r}
-${prefix}/sbin/depmod  -aF /boot/System.map-${kernel_uname_r} ${kernel_uname_r} &> /dev/null || :
-
-EOF
-       else
-         cat <<EOF
-%post          -n kmod-${kmodname}-${kernel_uname_r}
-[[ "$(uname -r)" == "${kernel_uname_r}"  ]] && ${prefix}/sbin/depmod -a > /dev/null || :
-%postun        -n kmod-${kmodname}-${kernel_uname_r}
-[[ "$(uname -r)" == "${kernel_uname_r}"  ]] && ${prefix}/sbin/depmod -a > /dev/null || :
-
-EOF
-       fi
-
-  # third part
-       cat <<EOF
-%description  -n kmod-${kmodname}-${kernel_uname_r}
-This package provides the ${kmodname} kernel modules built for the Linux
-kernel ${kernel_uname_r} for the %{_target_cpu} family of processors.
-%files        -n kmod-${kmodname}-${kernel_uname_r}
-%defattr(644,root,root,755)
-%dir $prefix/lib/modules/${kernel_uname_r}/extra
-${prefix}/lib/modules/${kernel_uname_r}/extra/${kmodname}/
-
-
-EOF
-}
-
-print_rpmtemplate_kmoddevelpkg ()
-{
-       if [[ "${1}" == "--custom" ]]; then
-               shift
-               local customkernel=true
-       elif [[ "${1}" == "--redhat" ]]; then
-               shift
-               local redhatkernel=true
-       fi
-
-       local kernel_uname_r=${1}
-
-       cat <<EOF
-%package       -n kmod-${kmodname}-devel
-Summary:          ${kmodname} kernel module(s) devel common
-Group:            System Environment/Kernel
-Provides:         ${kmodname}-devel-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
-EOF
-
-       if [[ ! ${customkernel} ]] && [[ ! ${redhatkernel} ]]; then
-               echo "Requires:        kmod-${kmodname}-devel-${kernel_uname_r} >= %{?epoch:%{epoch}:}%{version}-%{release}"
-       fi
-
-       if [[ ${obsolete_name} ]]; then
-               echo "Provides:        kmod-${obsolete_name}-devel = ${obsolete_version}"
-               echo "Obsoletes:       kmod-${obsolete_name}-devel < ${obsolete_version}"
-       fi
-
-       cat <<EOF
-%description  -n kmod-${kmodname}-devel
-This package provides the common header files to build kernel modules
-which depend on the ${kmodname} kernel module.  It may optionally require
-the ${kmodname}-devel-<kernel> objects for the newest kernel.
-
-%files        -n kmod-${kmodname}-devel
-%defattr(644,root,root,755)
-%{_usrsrc}/${kmodname}-%{version}
-EOF
-
-       for kernel in ${1}; do
-               local kernel_uname_r=${kernel}
-               echo "%exclude %{_usrsrc}/${kmodname}-%{version}/${kernel_uname_r}"
-       done
-
-       echo
-       echo
-}
-
-print_rpmtemplate_per_kmoddevelpkg ()
-{
-       if [[ "${1}" == "--custom" ]]; then
-               shift
-               local customkernel=true
-       elif [[ "${1}" == "--redhat" ]]; then
-               # this is needed for akmods
-               shift
-               local redhatkernel=true
-       fi
-
-       local kernel_uname_r=${1}
-       local kernel_variant="${2:+-${2}}"
-
-       # first part
-       cat <<EOF
-%package       -n kmod-${kmodname}-devel-${kernel_uname_r}
-Summary:          ${kmodname} kernel module(s) devel for ${kernel_uname_r}
-Group:            System Environment/Kernel
-Provides:         kernel-objects-for-kernel = ${kernel_uname_r}
-Provides:         ${kmodname}-devel-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
-Provides:         kmod-${kmodname}-devel-uname-r = ${kernel_uname_r}
-EOF
-
-       if [[ ${obsolete_name} ]]; then
-               echo "Provides:        kmod-${obsolete_name}-devel-${kernel_uname_r} = ${obsolete_version}"
-               echo "Obsoletes:       kmod-${obsolete_name}-devel-${kernel_uname_r} < ${obsolete_version}"
-       fi
-
-       # second part
-       if [[ ! "${customkernel}" ]]; then
-               cat <<EOF
-Requires:         kernel-devel-uname-r = ${kernel_uname_r}
-BuildRequires:    kernel-devel-uname-r = ${kernel_uname_r}
-%{?KmodsDevelRequires:Requires: %{KmodsDevelRequires}-uname-r = ${kernel_uname_r}}
-%{?KmodsDevelRequires:BuildRequires: %{KmodsDevelRequires}-uname-r = ${kernel_uname_r}}
-EOF
-       fi
-
-       # third part
-       cat <<EOF
-%description  -n kmod-${kmodname}-devel-${kernel_uname_r}
-This package provides objects and symbols required to build kernel modules
-which depend on the ${kmodname} kernel modules built for the Linux
-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
-}
-
-print_rpmtemplate_kmodmetapkg ()
-{
-               local kernel_uname_r=${1}
-               local kernel_variant="${2:+-${2}}"
-
-               cat <<EOF
-%package      -n kmod-${kmodname}${kernel_variant}
-Summary:         Metapackage which tracks in ${kmodname} kernel module for newest kernel${kernel_variant}
-Group:           System Environment/Kernel
-
-Provides:        ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
-Requires:        kmod-${kmodname}-${kernel_uname_r} >= %{?epoch:%{epoch}:}%{version}-%{release}
-%{?KmodsMetaRequires:Requires: %{?KmodsMetaRequires}}
-EOF
-
-               if [[ ${obsolete_name} ]]; then
-                       echo "Provides:        kmod-${obsolete_name}${kernel_variant} = ${obsolete_version}"
-                       echo "Obsoletes:       kmod-${obsolete_name}${kernel_variant} < ${obsolete_version}"
-               fi
-
-               cat <<EOF
-
-%description  -n kmod-${kmodname}${kernel_variant}
-This is a meta-package without payload which sole purpose is to require the
-${kmodname} kernel module(s) for the newest kernel${kernel_variant}.
-to make sure you get it together with a new kernel.
-
-%files        -n kmod-${kmodname}${kernel_variant}
-%defattr(644,root,root,755)
-
-
-EOF
-}
-
-print_customrpmtemplate ()
-{
-       for kernel in ${1}
-       do
-               if [[ -e "${buildroot}/usr/src/kernels/${kernel}" ]] ; then
-                       # this looks like a Fedora/RH kernel -- print a normal template (which includes the proper BR) and be happy :)
-                       kernel_versions="${kernel_versions}${kernel}___${buildroot}%{_usrsrc}/kernels/${kernel} "
-
-                       # parse kernel versions string and print template
-                       local kernel_verrelarch=${kernel%%${kernels_known_variants}}
-                       print_rpmtemplate_per_kmodpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}}
-
-                       # create development package
-                       if [[ "${devel}" ]]; then
-                               # create devel package including common headers
-                               print_rpmtemplate_kmoddevelpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}}
-
-                               # create devel package
-                               print_rpmtemplate_per_kmoddevelpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}}
-                       fi
-               elif [[ -e ${prefix}/lib/modules/"${kernel}"/build/Makefile ]] ; then 
-                       # likely a user-build-kernel with available buildfiles
-                       # fixme: we should check if uname from Makefile is the same as ${kernel}
-
-                       kernel_versions="${kernel_versions}${kernel}___${prefix}/lib/modules/${kernel}/build/ "
-                       print_rpmtemplate_per_kmodpkg --custom "${kernel}"
-
-                       # create development package
-                       if [[ "${devel}" ]]; then
-                               # create devel package including common headers
-                               print_rpmtemplate_kmoddevelpkg --custom "${kernel}"
-
-                               # create devel package
-                               print_rpmtemplate_per_kmoddevelpkg --custom "${kernel}"
-                       fi
-               else
-                       error_out 2 "Don't know how to handle ${kernel} -- ${prefix}/lib/modules/${kernel}/build/Makefile not found"
-               fi
-       done
-
-       # well, it's no header anymore, but who cares ;-)
-       print_rpmtemplate_header
-}
-
-
-print_rpmtemplate ()
-{
-       # create kernel_versions var
-       for kernel_version in ${kernel_versions_to_build_for}
-       do
-               kernel_versions="${kernel_versions}${kernel_version}___%{_usrsrc}/kernels/${kernel_version} "
-       done
-
-       # and print it and some other required stuff as macro
-       print_rpmtemplate_header
-
-       # now print the packages itselfs
-       for kernel in ${kernel_versions_to_build_for} ; do
-
-               local kernel_verrelarch=${kernel%%${kernels_known_variants}}
-
-               # create metapackage 
-               print_rpmtemplate_kmodmetapkg ${kernel} ${kernel##${kernel_verrelarch}}
-
-               # create package
-               print_rpmtemplate_per_kmodpkg ${kernel} ${kernel##${kernel_verrelarch}}
-
-               if [[ "${devel}" ]]; then
-                       # create devel package including common headers
-                       print_rpmtemplate_kmoddevelpkg ${kernel} ${kernel##${kernel_verrelarch}}
-
-                       # create devel package
-                       print_rpmtemplate_per_kmoddevelpkg ${kernel} ${kernel##${kernel_verrelarch}}
-               fi
-       done
-}
-
-myprog_help ()
-{
-       echo "Usage: $(basename ${0}) [OPTIONS]"
-       echo $'\n'"Creates a template to be used during kmod building"
-       echo $'\n'"Available options:"
-       echo " --filterfile <file>  -- filter the results with grep --file <file>"
-       echo " --for-kernels <list> -- created templates only for these kernels"
-       echo " --kmodname <file>    -- name of the kmod (required)"
-       echo " --devel              -- make kmod-devel package"
-       echo " --noakmod            -- no akmod package"
-       echo " --repo <name>        -- use buildsys-build-<name>-kerneldevpkgs"
-       echo " --target <arch>      -- target-arch (required)"
-       echo " --buildroot <dir>    -- Build root (place to look for build files)"
-}
-
-while [ "${1}" ] ; do
-       case "${1}" in
-               --filterfile)
-                       shift
-                       if [[ ! "${1}" ]] ; then
-                               error_out 2 "Please provide path to a filter-file together with --filterfile" >&2
-                       elif [[ ! -e "${1}" ]]; then    
-                               error_out 2 "Filterfile ${1} not found" >&2
-                       fi
-                       filterfile="${1}"
-                       shift
-                       ;;
-               --kmodname)
-                       shift
-                       if [[ ! "${1}" ]] ; then
-                               error_out 2 "Please provide the name of the kmod together with --kmodname" >&2
-                   fi
-                       # strip pending -kmod
-                       kmodname="${1%%-kmod}"
-                       shift
-                       ;;
-               --devel)
-                       shift
-                       devel="true"
-                       ;;
-               --prefix)
-                       shift
-                       if [[ ! "${1}" ]] ; then
-                               error_out 2 "Please provide a prefix with --prefix" >&2
-                   fi
-                       prefix="${1}"
-                       shift
-                       ;;
-               --repo)
-                       shift
-                       if [[ ! "${1}" ]] ; then
-                               error_out 2 "Please provide the name of the repo together with --repo" >&2
-                   fi
-                       repo=${1}
-                       shift
-                       ;;
-               --for-kernels)
-                       shift
-                       if [[ ! "${1}" ]] ; then
-                               error_out 2 "Please provide the name of the kmod together with --kmodname" >&2
-                       fi
-                       for_kernels="${1}"
-                       shift
-                       ;;
-               --noakmod)
-                       shift
-                       noakmod="true"
-                       ;;
-               --obsolete-name)
-                       shift
-                       if [[ ! "${1}" ]] ; then
-                               error_out 2 "Please provide the name of the kmod to obsolte together with --obsolete-name" >&2
-                       fi
-                       obsolete_name="${1}"
-                       shift
-                       ;;
-               --obsolete-version)
-                       shift
-                       if [[ ! "${1}" ]] ; then
-                               error_out 2 "Please provide the version of the kmod to obsolte together with --obsolete-version" >&2
-                       fi
-                       obsolete_version="${1}"
-                       shift
-                       ;;
-               --target)
-                       shift
-                       target="${1}"
-                       shift
-                       ;;
-               --akmod)
-                       shift
-                       build_kernels="akmod"
-                       ;;
-               --newest)
-                       shift
-                       build_kernels="newest"
-                       ;;
-               --current)
-                       shift
-                       build_kernels="current"
-                       ;;
-               --buildroot)
-                       shift
-                       buildroot="${1}"
-                       shift
-                       ;;
-               --help)
-                       myprog_help
-                       exit 0
-                       ;;
-               --version)
-                       echo "${myprog} ${myver}"
-                       exit 0
-                       ;;
-               *)
-                       echo "Error: Unknown option '${1}'." >&2
-                       usage >&2
-                       exit 2
-                       ;;
-       esac
-done
-
-if [[ -e ./kmodtool-kernel-variants ]]; then
-       kernels_known_variants="$(cat ./kmodtool-kernel-variants)"
-elif [[ -e /usr/share/kmodtool/kernel-variants ]] ; then
-       kernels_known_variants="$(cat /usr/share/kmodtool/kernel-variants)"
-else
-       kernels_known_variants="@(smp?(-debug)|PAE?(-debug)|debug|kdump|xen|kirkwood|highbank|imx|omap|tegra)"
-fi
-
-# general sanity checks
-if [[ ! "${target}" ]]; then
-               error_out 2 "please pass target arch with --target"
-elif [[ ! "${kmodname}" ]]; then
-               error_out 2 "please pass kmodname with --kmodname"
-elif [[ ! "${kernels_known_variants}" ]] ; then
-               error_out 2 "could not determine known variants"
-elif ( [[ "${obsolete_name}" ]] && [[ ! "${obsolete_version}" ]] ) ||  ( [[ ! "${obsolete_name}" ]] && [[ "${obsolete_version}" ]] ) ; then
-               error_out 2 "you need to provide both --obsolete-name and --obsolete-version"
-fi
-
-# go
-if [[ "${for_kernels}" ]]; then
-       # this is easy:
-       print_customrpmtemplate "${for_kernels}"
-elif [[ "${build_kernels}" == "akmod" ]]; then
-       # do only a akmod package
-       print_akmodtemplate
-       print_akmodmeta
-else
-       # seems we are on out own to decide for which kernels to build
-
-       # we need more sanity checks in this case
-       if [[ ! "${repo}" ]]; then
-               error_out 2 "please provide repo name with --repo"
-       elif ! $(which buildsys-build-${repo}-kerneldevpkgs &> /dev/null) ; then
-               error_out 2 "buildsys-build-${repo}-kerneldevpkgs not found"
-       fi
-
-       # call buildsys-build-${repo}-kerneldevpkgs to get the list of kernels
-       cmdoptions="--target ${target}"
-
-       # filterfile to filter list of kernels? 
-       if [[ "${filterfile}" ]] ; then
-                cmdoptions="${cmdoptions} --filterfile ${filterfile}"
-       fi
-
-       kernel_versions_to_build_for="$(buildsys-build-${repo}-kerneldevpkgs --${build_kernels} ${cmdoptions})"
-       returncode=$?
-       if (( ${returncode} != 0 )); then
-               error_out 2 "buildsys-build-${repo}-kerneldevpkgs failed: $(buildsys-build-${repo}-kerneldevpkgs --${build_kernels} ${cmdoptions})"
-       fi
-
-       if [[ "${build_kernels}" == "current" ]] && [[ ! "${noakmod}" ]]; then
-               print_akmodtemplate
-       fi
-
-       print_rpmtemplate 
-fi
diff --git a/spl.release.in b/spl.release.in
deleted file mode 100644 (file)
index fd7c84c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-@SPL_META_VERSION@-@SPL_META_RELEASE@