git: bd2e56ef47d5 - stable/13 - zfs: merge openzfs/zfs@ef83e07db (zfs-2.1-release) into stable/13
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 11 Mar 2022 09:55:35 UTC
The branch stable/13 has been updated by mm:
URL: https://cgit.FreeBSD.org/src/commit/?id=bd2e56ef47d5a2c69f6f8e092abfd27a4d469d1e
commit bd2e56ef47d5a2c69f6f8e092abfd27a4d469d1e
Merge: dd6c1475a63a ef83e07db53e
Author: Martin Matuska <mm@FreeBSD.org>
AuthorDate: 2022-03-11 07:11:42 +0000
Commit: Martin Matuska <mm@FreeBSD.org>
CommitDate: 2022-03-11 09:54:49 +0000
zfs: merge openzfs/zfs@ef83e07db (zfs-2.1-release) into stable/13
OpenZFS release 2.1.3
Notable upstream pull request merges:
#12569 FreeBSD: Really zero the zero page
#12828 FreeBSD: Add vop_standard_writecount_nomsyn
#12828 zfs: Fix a deadlock between page busy and the teardown lock
#12828 FreeBSD: Catch up with more VFS changes
#12851 FreeBSD: Provide correct file generation number
#12857 Verify dRAID empty sectors
#12874 FreeBSD: Update argument types for VOP_READDIR
#12896 Reduce number of arc_prune threads
#12934 FreeBSD: Fix zvol_*_open() locking
#12961 FreeBSD: Fix leaked strings in libspl mnttab
#12964 Fix handling of errors from dmu_write_uio_dbuf() on FreeBSD
#12981 Introduce a flag to skip comparing the local mac when
raw sending
#12985 Avoid memory allocations in the ARC eviction thread
#13014 Report dnodes with faulty bonuslen
#13016 FreeBSD: Fix zvol_cdev_open locking
#13027 Fix clearing set-uid and set-gid bits on a file when
replying a write
#13031 Add enumerated vdev names to 'zpool iostat -v' and
'zpool list -v'
#13074 Enable encrypted raw sending to pools with greater ashift
#13076 Receive checks should allow unencrypted child datasets
#13098 Avoid dirtying the final TXGs when exporting a pool
#13172 Fix ENOSPC when unlinking multiple files from full pool
Obtained from: OpenZFS
OpenZFS commit: ef83e07db53e5d1017d3afbf376f4dbb2f6feada
OpenZFS tag: zfs-2.1.3
Relnotes: yes
.../.github/workflows/zfs-tests-functional.yml | 4 +-
.../openzfs/.github/workflows/zfs-tests-sanity.yml | 4 +-
sys/contrib/openzfs/META | 4 +-
sys/contrib/openzfs/README.md | 2 +-
sys/contrib/openzfs/cmd/mount_zfs/mount_zfs.c | 47 +++--
sys/contrib/openzfs/cmd/vdev_id/vdev_id | 11 +-
sys/contrib/openzfs/cmd/zed/agents/zfs_retire.c | 1 +
sys/contrib/openzfs/cmd/zed/zed.c | 2 +-
sys/contrib/openzfs/cmd/zed/zed.d/all-syslog.sh | 2 +-
.../openzfs/cmd/zed/zed.d/generic-notify.sh | 2 +-
.../openzfs/cmd/zed/zed.d/statechange-notify.sh | 5 +-
sys/contrib/openzfs/cmd/zed/zed.d/zed-functions.sh | 90 +++++++++-
sys/contrib/openzfs/cmd/zed/zed.d/zed.rc | 21 ++-
sys/contrib/openzfs/cmd/zed/zed_conf.c | 1 +
sys/contrib/openzfs/cmd/zed/zed_exec.c | 2 +
sys/contrib/openzfs/cmd/zpool/zpool.d/dm-deps | 10 +-
sys/contrib/openzfs/cmd/zpool/zpool.d/iostat | 6 +-
sys/contrib/openzfs/cmd/zpool/zpool.d/lsblk | 2 +-
sys/contrib/openzfs/cmd/zpool/zpool.d/media | 15 +-
sys/contrib/openzfs/cmd/zpool/zpool.d/ses | 2 +-
sys/contrib/openzfs/cmd/zpool/zpool_main.c | 8 +-
sys/contrib/openzfs/cmd/zstream/zstream_dump.c | 13 ++
sys/contrib/openzfs/config/Substfiles.am | 4 +-
sys/contrib/openzfs/config/always-python.m4 | 2 +-
sys/contrib/openzfs/config/always-pyzfs.m4 | 2 +-
sys/contrib/openzfs/config/kernel-add-disk.m4 | 26 +++
sys/contrib/openzfs/config/kernel-fallocate.m4 | 17 ++
sys/contrib/openzfs/config/kernel-fpu.m4 | 49 +++++-
sys/contrib/openzfs/config/kernel-kmem.m4 | 1 +
sys/contrib/openzfs/config/kernel-kthread.m4 | 68 ++++++++
sys/contrib/openzfs/config/kernel-pde-data.m4 | 16 +-
sys/contrib/openzfs/config/kernel-vfs-iov_iter.m4 | 22 ++-
sys/contrib/openzfs/config/kernel.m4 | 117 +++++++++----
sys/contrib/openzfs/config/toolchain-simd.m4 | 66 +++++++
sys/contrib/openzfs/config/user-libfetch.m4 | 71 ++++++++
sys/contrib/openzfs/config/user.m4 | 1 +
sys/contrib/openzfs/config/zfs-build.m4 | 3 +
sys/contrib/openzfs/config/zfs-meta.m4 | 4 +-
sys/contrib/openzfs/configure.ac | 1 +
sys/contrib/openzfs/contrib/bpftrace/zfs-trace.sh | 3 +-
.../dracut/02zfsexpandknowledge/module-setup.sh.in | 16 +-
.../contrib/dracut/90zfs/module-setup.sh.in | 8 +-
.../openzfs/contrib/dracut/90zfs/parse-zfs.sh.in | 2 +-
.../contrib/dracut/90zfs/zfs-env-bootfs.service.in | 2 +-
.../contrib/dracut/90zfs/zfs-generator.sh.in | 2 +-
.../contrib/dracut/90zfs/zfs-load-key.sh.in | 37 ++--
.../dracut/90zfs/zfs-rollback-bootfs.service.in | 2 +-
.../dracut/90zfs/zfs-snapshot-bootfs.service.in | 2 +-
sys/contrib/openzfs/contrib/initramfs/hooks/zfs.in | 7 +
sys/contrib/openzfs/contrib/initramfs/scripts/zfs | 18 +-
sys/contrib/openzfs/etc/default/zfs.in | 8 +-
sys/contrib/openzfs/etc/init.d/.gitignore | 1 +
sys/contrib/openzfs/etc/init.d/Makefile.am | 2 +-
sys/contrib/openzfs/etc/init.d/README.md | 11 +-
sys/contrib/openzfs/etc/init.d/zfs-import.in | 3 +-
sys/contrib/openzfs/etc/init.d/zfs-load-key.in | 131 ++++++++++++++
sys/contrib/openzfs/etc/systemd/system/.gitignore | 1 +
sys/contrib/openzfs/etc/systemd/system/Makefile.am | 5 +-
.../etc/systemd/system/zfs-scrub-monthly@.timer.in | 12 ++
.../etc/systemd/system/zfs-scrub-weekly@.timer.in | 12 ++
.../etc/systemd/system/zfs-scrub@.service.in | 14 ++
sys/contrib/openzfs/etc/zfs/zfs-functions.in | 23 +--
sys/contrib/openzfs/include/libzfs_impl.h | 2 +
.../openzfs/include/os/freebsd/spl/sys/vnode.h | 1 -
.../include/os/linux/kernel/linux/simd_x86.h | 124 ++++++++++++-
sys/contrib/openzfs/include/os/linux/spl/sys/uio.h | 4 +
sys/contrib/openzfs/include/sys/dsl_pool.h | 1 +
sys/contrib/openzfs/include/sys/fm/fs/zfs.h | 9 +
sys/contrib/openzfs/include/sys/spa.h | 2 +
sys/contrib/openzfs/include/sys/vdev_draid.h | 1 +
sys/contrib/openzfs/include/sys/vdev_raidz.h | 2 +
sys/contrib/openzfs/include/sys/zio.h | 2 +
sys/contrib/openzfs/lib/libshare/os/freebsd/nfs.c | 8 +-
sys/contrib/openzfs/lib/libspl/os/freebsd/mnttab.c | 25 ++-
sys/contrib/openzfs/lib/libzfs/Makefile.am | 2 +-
sys/contrib/openzfs/lib/libzfs/libzfs.abi | 73 +++++---
sys/contrib/openzfs/lib/libzfs/libzfs_crypto.c | 186 ++++++++++++++++++++
sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c | 14 +-
sys/contrib/openzfs/lib/libzfs/libzfs_util.c | 8 +
.../openzfs/lib/libzfs/os/linux/libzfs_mount_os.c | 2 +-
sys/contrib/openzfs/man/man4/zfs.4 | 7 +
sys/contrib/openzfs/man/man7/zfsprops.7 | 33 +++-
sys/contrib/openzfs/man/man7/zpoolprops.7 | 7 +-
sys/contrib/openzfs/man/man8/zfs-load-key.8 | 2 +-
sys/contrib/openzfs/man/man8/zfs-receive.8 | 4 +-
sys/contrib/openzfs/man/man8/zfs-share.8 | 12 +-
sys/contrib/openzfs/man/man8/zgenhostid.8 | 2 +-
sys/contrib/openzfs/man/man8/zpool-attach.8 | 2 +-
sys/contrib/openzfs/man/man8/zpool-clear.8 | 7 +-
sys/contrib/openzfs/man/man8/zpool-events.8 | 4 +-
sys/contrib/openzfs/man/man8/zpool-import.8 | 7 +-
sys/contrib/openzfs/man/man8/zpool-replace.8 | 2 +-
sys/contrib/openzfs/man/man8/zpool-scrub.8 | 21 +++
sys/contrib/openzfs/module/Makefile.in | 37 ++--
sys/contrib/openzfs/module/os/freebsd/zfs/abd_os.c | 1 +
.../openzfs/module/os/freebsd/zfs/vdev_file.c | 3 +-
.../openzfs/module/os/freebsd/zfs/zfs_ctldir.c | 2 +-
.../openzfs/module/os/freebsd/zfs/zfs_racct.c | 4 +
.../openzfs/module/os/freebsd/zfs/zfs_vfsops.c | 8 +-
.../openzfs/module/os/freebsd/zfs/zfs_vnops_os.c | 22 ++-
.../openzfs/module/os/freebsd/zfs/zio_crypt.c | 22 ++-
.../openzfs/module/os/freebsd/zfs/zvol_os.c | 90 ++++++----
.../openzfs/module/os/linux/spl/spl-kstat.c | 2 +-
.../openzfs/module/os/linux/spl/spl-procfs-list.c | 2 +-
.../openzfs/module/os/linux/spl/spl-taskq.c | 11 +-
.../openzfs/module/os/linux/spl/spl-thread.c | 7 +-
.../openzfs/module/os/linux/zfs/vdev_disk.c | 2 +-
.../openzfs/module/os/linux/zfs/vdev_file.c | 2 +-
.../openzfs/module/os/linux/zfs/zfs_racct.c | 2 +
.../openzfs/module/os/linux/zfs/zfs_vfsops.c | 5 +
.../openzfs/module/os/linux/zfs/zfs_vnops_os.c | 4 +
.../openzfs/module/os/linux/zfs/zio_crypt.c | 18 +-
sys/contrib/openzfs/module/os/linux/zfs/zpl_file.c | 9 +-
sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c | 125 +++++++------
sys/contrib/openzfs/module/zcommon/zfs_prop.c | 10 +-
sys/contrib/openzfs/module/zfs/abd.c | 6 +-
sys/contrib/openzfs/module/zfs/arc.c | 66 ++++---
sys/contrib/openzfs/module/zfs/bpobj.c | 4 +-
sys/contrib/openzfs/module/zfs/bptree.c | 2 +-
sys/contrib/openzfs/module/zfs/dbuf.c | 28 ++-
sys/contrib/openzfs/module/zfs/dmu.c | 9 +-
sys/contrib/openzfs/module/zfs/dmu_diff.c | 2 +-
sys/contrib/openzfs/module/zfs/dmu_objset.c | 10 +-
sys/contrib/openzfs/module/zfs/dmu_recv.c | 10 +-
sys/contrib/openzfs/module/zfs/dmu_redact.c | 2 +-
sys/contrib/openzfs/module/zfs/dmu_send.c | 5 +-
sys/contrib/openzfs/module/zfs/dmu_traverse.c | 2 +-
sys/contrib/openzfs/module/zfs/dmu_zfetch.c | 1 +
sys/contrib/openzfs/module/zfs/dnode.c | 11 +-
sys/contrib/openzfs/module/zfs/dnode_sync.c | 11 +-
sys/contrib/openzfs/module/zfs/dsl_bookmark.c | 4 +-
sys/contrib/openzfs/module/zfs/dsl_crypt.c | 9 +-
sys/contrib/openzfs/module/zfs/dsl_dataset.c | 6 +-
sys/contrib/openzfs/module/zfs/dsl_destroy.c | 4 +-
sys/contrib/openzfs/module/zfs/dsl_dir.c | 28 +--
sys/contrib/openzfs/module/zfs/dsl_pool.c | 10 +-
sys/contrib/openzfs/module/zfs/dsl_prop.c | 2 +-
sys/contrib/openzfs/module/zfs/dsl_scan.c | 34 ++--
sys/contrib/openzfs/module/zfs/dsl_synctask.c | 2 +-
sys/contrib/openzfs/module/zfs/fm.c | 4 +-
sys/contrib/openzfs/module/zfs/gzip.c | 2 +-
sys/contrib/openzfs/module/zfs/lz4.c | 6 +-
sys/contrib/openzfs/module/zfs/lzjb.c | 4 +-
sys/contrib/openzfs/module/zfs/metaslab.c | 16 +-
sys/contrib/openzfs/module/zfs/range_tree.c | 8 +-
sys/contrib/openzfs/module/zfs/sa.c | 8 +-
sys/contrib/openzfs/module/zfs/sha256.c | 5 +-
sys/contrib/openzfs/module/zfs/spa.c | 77 +++++---
sys/contrib/openzfs/module/zfs/spa_checkpoint.c | 10 +-
sys/contrib/openzfs/module/zfs/spa_errlog.c | 2 +
sys/contrib/openzfs/module/zfs/spa_misc.c | 2 +
sys/contrib/openzfs/module/zfs/vdev.c | 9 +-
sys/contrib/openzfs/module/zfs/vdev_draid.c | 51 +++++-
sys/contrib/openzfs/module/zfs/vdev_indirect.c | 6 +-
sys/contrib/openzfs/module/zfs/vdev_initialize.c | 4 +-
sys/contrib/openzfs/module/zfs/vdev_mirror.c | 2 +
sys/contrib/openzfs/module/zfs/vdev_missing.c | 7 +-
sys/contrib/openzfs/module/zfs/vdev_raidz.c | 24 ++-
sys/contrib/openzfs/module/zfs/vdev_removal.c | 4 +-
sys/contrib/openzfs/module/zfs/vdev_trim.c | 1 +
sys/contrib/openzfs/module/zfs/zap.c | 2 -
sys/contrib/openzfs/module/zfs/zap_leaf.c | 2 -
sys/contrib/openzfs/module/zfs/zap_micro.c | 2 -
sys/contrib/openzfs/module/zfs/zcp.c | 4 +-
sys/contrib/openzfs/module/zfs/zcp_synctask.c | 8 +-
sys/contrib/openzfs/module/zfs/zfs_fm.c | 77 +++++++-
sys/contrib/openzfs/module/zfs/zfs_vnops.c | 105 ++++++++---
sys/contrib/openzfs/module/zfs/zil.c | 21 +--
sys/contrib/openzfs/module/zfs/zio.c | 18 +-
sys/contrib/openzfs/module/zfs/zio_checksum.c | 10 +-
sys/contrib/openzfs/module/zfs/zio_compress.c | 4 +-
sys/contrib/openzfs/rpm/generic/zfs-dkms.spec.in | 2 +-
sys/contrib/openzfs/rpm/generic/zfs-kmod.spec.in | 5 +-
sys/contrib/openzfs/rpm/generic/zfs.spec.in | 7 +
sys/contrib/openzfs/rpm/redhat/zfs-kmod.spec.in | 5 +-
sys/contrib/openzfs/scripts/dkms.mkconf | 22 +--
sys/contrib/openzfs/scripts/kmodtool | 2 +-
sys/contrib/openzfs/scripts/zfs-tests.sh | 26 +--
sys/contrib/openzfs/scripts/zfs.sh | 11 +-
sys/contrib/openzfs/scripts/zimport.sh | 2 +-
sys/contrib/openzfs/tests/runfiles/common.run | 26 +--
sys/contrib/openzfs/tests/runfiles/linux.run | 14 +-
sys/contrib/openzfs/tests/runfiles/sanity.run | 3 +-
.../openzfs/tests/test-runner/bin/zts-report.py.in | 52 +++---
.../tests/zfs-tests/cmd/mmap_seek/mmap_seek.c | 4 +
.../openzfs/tests/zfs-tests/include/blkdev.shlib | 2 +-
.../openzfs/tests/zfs-tests/include/libtest.shlib | 30 +++-
.../tests/zfs-tests/tests/functional/Makefile.am | 1 +
.../functional/alloc_class/alloc_class.kshlib | 1 +
.../tests/functional/cli_root/zfs_load-key/HEXKEY | 1 +
.../functional/cli_root/zfs_load-key/Makefile.am | 6 +-
.../functional/cli_root/zfs_load-key/PASSPHRASE | 1 +
.../tests/functional/cli_root/zfs_load-key/RAWKEY | 1 +
.../functional/cli_root/zfs_load-key/cleanup.ksh | 2 +
.../functional/cli_root/zfs_load-key/setup.ksh | 5 +-
.../cli_root/zfs_load-key/zfs_load-key.cfg | 31 ++++
.../cli_root/zfs_load-key/zfs_load-key_all.ksh | 9 +
.../zfs_load-key/zfs_load-key_common.kshlib | 63 +++++++
.../cli_root/zfs_load-key/zfs_load-key_https.ksh | 78 +++++++++
.../zfs_load-key/zfs_load-key_location.ksh | 5 +
.../zfs_load-key/zfs_load-key_recursive.ksh | 6 +
.../functional/cli_root/zfs_receive/Makefile.am | 3 +-
.../zfs_receive/zfs_receive_-wR-encrypted-mix.ksh | 75 ++++++++
.../zfs_receive/zfs_receive_to_encrypted.ksh | 18 +-
.../cli_root/zfs_set/zfs_set_keylocation.ksh | 22 +--
.../cli_root/zpool_events/zpool_events_errors.ksh | 11 +-
.../cli_root/zpool_expand/zpool_expand_001_pos.ksh | 4 +-
.../zpool_import/import_devices_missing.ksh | 4 +-
.../zpool_import/import_rewind_config_changed.ksh | 58 ++++++-
.../cli_root/zpool_reopen/zpool_reopen.shlib | 4 +-
.../tests/functional/deadman/deadman_sync.ksh | 4 +-
.../functional/fallocate/fallocate_punch-hole.ksh | 27 ++-
.../tests/functional/history/history_006_neg.ksh | 4 +-
.../tests/functional/no_space/Makefile.am | 3 +-
.../tests/functional/no_space/enospc_002_pos.ksh | 5 +-
.../tests/functional/no_space/enospc_rm.ksh | 60 +++++++
.../pool_checkpoint/checkpoint_ro_rewind.ksh | 4 +-
.../tests/functional/redundancy/redundancy.kshlib | 2 +-
.../tests/functional/refreserv/refreserv_raidz.ksh | 2 +-
.../functional/reservation/reservation_021_neg.ksh | 2 +-
.../zfs-tests/tests/functional/rsend/Makefile.am | 2 +
.../zfs-tests/tests/functional/rsend/rsend.kshlib | 8 +
.../tests/functional/rsend/send-c_verify_ratio.ksh | 2 +-
.../tests/functional/rsend/send_raw_ashift.ksh | 193 +++++++++++++++++++++
.../functional/rsend/send_raw_spill_block.ksh | 161 +++++++++++++++++
.../rsend/send_realloc_encrypted_files.ksh | 6 +-
.../tests/functional/rsend/send_realloc_files.ksh | 6 +-
.../zfs-tests/tests/functional/simd/Makefile.am | 2 +
.../tests/functional/simd/simd_supported.ksh | 58 +++++++
.../tests/functional/snapshot/rollback_003_pos.ksh | 17 +-
.../zfs-tests/tests/functional/suid/Makefile.am | 1 +
.../tests/functional/suid/suid_write_to_file.c | 150 ++++++++--------
.../tests/functional/suid/suid_write_to_none.ksh | 2 +-
.../tests/functional/suid/suid_write_to_sgid.ksh | 2 +-
.../tests/functional/suid/suid_write_to_suid.ksh | 2 +-
.../functional/suid/suid_write_to_suid_sgid.ksh | 2 +-
.../functional/suid/suid_write_zil_replay.ksh | 99 +++++++++++
.../tests/functional/userquota/Makefile.am | 3 +-
.../userquota/userspace_send_encrypted.ksh | 119 +++++++++++++
.../zvol/zvol_misc/zvol_misc_common.kshlib | 11 +-
.../zvol/zvol_misc/zvol_misc_rename_inuse.ksh | 4 +-
.../zvol/zvol_misc/zvol_misc_snapdev.ksh | 2 +-
.../zvol/zvol_misc/zvol_misc_volmode.ksh | 93 +++++-----
.../functional/zvol/zvol_misc/zvol_misc_zil.ksh | 4 +-
sys/modules/zfs/Makefile | 1 +
sys/modules/zfs/zfs_config.h | 53 +++++-
sys/modules/zfs/zfs_gitrev.h | 2 +-
247 files changed, 3613 insertions(+), 910 deletions(-)
diff --cc sys/contrib/openzfs/README.md
index d666df7af309,000000000000..331889560950
mode 100644,000000..100644
--- a/sys/contrib/openzfs/README.md
+++ b/sys/contrib/openzfs/README.md
@@@ -1,35 -1,0 +1,35 @@@
+
+
+OpenZFS is an advanced file system and volume manager which was originally
+developed for Solaris and is now maintained by the OpenZFS community.
+This repository contains the code for running OpenZFS on Linux and FreeBSD.
+
+[](https://codecov.io/gh/openzfs/zfs)
+[](https://scan.coverity.com/projects/openzfs-zfs)
+
+# Official Resources
+
+ * [Documentation](https://openzfs.github.io/openzfs-docs/) - for using and developing this repo
+ * [ZoL Site](https://zfsonlinux.org) - Linux release info & links
+ * [Mailing lists](https://openzfs.github.io/openzfs-docs/Project%20and%20Community/Mailing%20Lists.html)
- * [OpenZFS site](http://open-zfs.org/) - for conference videos and info on other platforms (illumos, OSX, Windows, etc)
++ * [OpenZFS site](https://openzfs.org/) - for conference videos and info on other platforms (illumos, OSX, Windows, etc)
+
+# Installation
+
+Full documentation for installing OpenZFS on your favorite operating system can
+be found at the [Getting Started Page](https://openzfs.github.io/openzfs-docs/Getting%20Started/index.html).
+
+# Contribute & Develop
+
+We have a separate document with [contribution guidelines](./.github/CONTRIBUTING.md).
+
+We have a [Code of Conduct](./CODE_OF_CONDUCT.md).
+
+# Release
+
+OpenZFS is released under a CDDL license.
+For more details see the NOTICE, LICENSE and COPYRIGHT files; `UCRL-CODE-235197`
+
+# Supported Kernels
+ * The `META` file contains the officially recognized supported Linux kernel versions.
+ * Supported FreeBSD versions are any supported branches and releases starting from 12.2-RELEASE.
diff --cc sys/contrib/openzfs/config/kernel-add-disk.m4
index 000000000000,5d1779eb4328..5d1779eb4328
mode 000000,100644..100644
--- a/sys/contrib/openzfs/config/kernel-add-disk.m4
+++ b/sys/contrib/openzfs/config/kernel-add-disk.m4
diff --cc sys/contrib/openzfs/config/kernel-kthread.m4
index 000000000000,f5b824d7947a..f5b824d7947a
mode 000000,100644..100644
--- a/sys/contrib/openzfs/config/kernel-kthread.m4
+++ b/sys/contrib/openzfs/config/kernel-kthread.m4
diff --cc sys/contrib/openzfs/config/user-libfetch.m4
index 000000000000,d961c6ca77a1..d961c6ca77a1
mode 000000,100644..100644
--- a/sys/contrib/openzfs/config/user-libfetch.m4
+++ b/sys/contrib/openzfs/config/user-libfetch.m4
diff --cc sys/contrib/openzfs/etc/init.d/zfs-load-key.in
index 000000000000,2f8deffdc809..2f8deffdc809
mode 000000,100755..100755
--- a/sys/contrib/openzfs/etc/init.d/zfs-load-key.in
+++ b/sys/contrib/openzfs/etc/init.d/zfs-load-key.in
diff --cc sys/contrib/openzfs/etc/systemd/system/zfs-scrub-monthly@.timer.in
index 000000000000,903068468278..903068468278
mode 000000,100644..100644
--- a/sys/contrib/openzfs/etc/systemd/system/zfs-scrub-monthly@.timer.in
+++ b/sys/contrib/openzfs/etc/systemd/system/zfs-scrub-monthly@.timer.in
diff --cc sys/contrib/openzfs/etc/systemd/system/zfs-scrub-weekly@.timer.in
index 000000000000,ede699500599..ede699500599
mode 000000,100644..100644
--- a/sys/contrib/openzfs/etc/systemd/system/zfs-scrub-weekly@.timer.in
+++ b/sys/contrib/openzfs/etc/systemd/system/zfs-scrub-weekly@.timer.in
diff --cc sys/contrib/openzfs/etc/systemd/system/zfs-scrub@.service.in
index 000000000000,bebe91d746ae..bebe91d746ae
mode 000000,100644..100644
--- a/sys/contrib/openzfs/etc/systemd/system/zfs-scrub@.service.in
+++ b/sys/contrib/openzfs/etc/systemd/system/zfs-scrub@.service.in
diff --cc sys/contrib/openzfs/include/os/freebsd/spl/sys/vnode.h
index 1ac595aa15dd,000000000000..d2c900854acb
mode 100644,000000..100644
--- a/sys/contrib/openzfs/include/os/freebsd/spl/sys/vnode.h
+++ b/sys/contrib/openzfs/include/os/freebsd/spl/sys/vnode.h
@@@ -1,228 -1,0 +1,227 @@@
+/*
+ * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _OPENSOLARIS_SYS_VNODE_H_
+#define _OPENSOLARIS_SYS_VNODE_H_
+
+struct vnode;
+struct vattr;
+struct xucred;
+
+typedef struct flock flock64_t;
+typedef struct vnode vnode_t;
+typedef struct vattr vattr_t;
+typedef enum vtype vtype_t;
+
+#include <sys/types.h>
+#include <sys/queue.h>
+#include_next <sys/sdt.h>
+#include <sys/namei.h>
+enum symfollow { NO_FOLLOW = NOFOLLOW };
+
+#define NOCRED ((struct ucred *)0) /* no credential available */
+#define F_FREESP 11 /* Free file space */
+
+#include <sys/proc.h>
+#include <sys/vnode_impl.h>
+#ifndef IN_BASE
+#include_next <sys/vnode.h>
+#endif
+#include <sys/mount.h>
+#include <sys/cred.h>
+#include <sys/fcntl.h>
+#include <sys/refcount.h>
+#include <sys/file.h>
+#include <sys/filedesc.h>
+#include <sys/syscallsubr.h>
+#include <sys/vm.h>
+#include <vm/vm_object.h>
+
+typedef struct vop_vector vnodeops_t;
+#define VOP_FID VOP_VPTOFH
+#define vop_fid vop_vptofh
+#define vop_fid_args vop_vptofh_args
+#define a_fid a_fhp
+
+#define rootvfs (rootvnode == NULL ? NULL : rootvnode->v_mount)
+
+#ifndef IN_BASE
+static __inline int
+vn_is_readonly(vnode_t *vp)
+{
+ return (vp->v_mount->mnt_flag & MNT_RDONLY);
+}
+#endif
+#define vn_vfswlock(vp) (0)
+#define vn_vfsunlock(vp) do { } while (0)
+#define vn_ismntpt(vp) \
+ ((vp)->v_type == VDIR && (vp)->v_mountedhere != NULL)
+#define vn_mountedvfs(vp) ((vp)->v_mountedhere)
+#define vn_has_cached_data(vp) \
+ ((vp)->v_object != NULL && \
+ (vp)->v_object->resident_page_count > 0)
+
+#ifndef IN_BASE
+static __inline void
+vn_flush_cached_data(vnode_t *vp, boolean_t sync)
+{
+#if __FreeBSD_version > 1300054
+ if (vm_object_mightbedirty(vp->v_object)) {
+#else
+ if (vp->v_object->flags & OBJ_MIGHTBEDIRTY) {
+#endif
+ int flags = sync ? OBJPC_SYNC : 0;
+ zfs_vmobject_wlock(vp->v_object);
+ vm_object_page_clean(vp->v_object, 0, 0, flags);
+ zfs_vmobject_wunlock(vp->v_object);
+ }
+}
+#endif
+
+#define vn_exists(vp) do { } while (0)
+#define vn_invalid(vp) do { } while (0)
+#define vn_renamepath(tdvp, svp, tnm, lentnm) do { } while (0)
+#define vn_free(vp) do { } while (0)
+#define vn_matchops(vp, vops) ((vp)->v_op == &(vops))
+
+#define VN_HOLD(v) vref(v)
+#define VN_RELE(v) vrele(v)
+#define VN_URELE(v) vput(v)
+
+#define vnevent_create(vp, ct) do { } while (0)
+#define vnevent_link(vp, ct) do { } while (0)
+#define vnevent_remove(vp, dvp, name, ct) do { } while (0)
+#define vnevent_rmdir(vp, dvp, name, ct) do { } while (0)
+#define vnevent_rename_src(vp, dvp, name, ct) do { } while (0)
+#define vnevent_rename_dest(vp, dvp, name, ct) do { } while (0)
+#define vnevent_rename_dest_dir(vp, ct) do { } while (0)
+
+#define specvp(vp, rdev, type, cr) (VN_HOLD(vp), (vp))
+#define MANDLOCK(vp, mode) (0)
+
+/*
+ * We will use va_spare is place of Solaris' va_mask.
+ * This field is initialized in zfs_setattr().
+ */
+#define va_mask va_spare
+/* TODO: va_fileid is shorter than va_nodeid !!! */
+#define va_nodeid va_fileid
+/* TODO: This field needs conversion! */
+#define va_nblocks va_bytes
+#define va_blksize va_blocksize
- #define va_seq va_gen
+
+#define MAXOFFSET_T OFF_MAX
+#define EXCL 0
+
+#define FCREAT O_CREAT
+#define FTRUNC O_TRUNC
+#define FEXCL O_EXCL
+#ifndef FDSYNC
+#define FDSYNC FFSYNC
+#endif
+#define FRSYNC FFSYNC
+#define FSYNC FFSYNC
+#define FOFFMAX 0x00
+#define FIGNORECASE 0x00
+
+/*
+ * Attributes of interest to the caller of setattr or getattr.
+ */
+#define AT_MODE 0x00002
+#define AT_UID 0x00004
+#define AT_GID 0x00008
+#define AT_FSID 0x00010
+#define AT_NODEID 0x00020
+#define AT_NLINK 0x00040
+#define AT_SIZE 0x00080
+#define AT_ATIME 0x00100
+#define AT_MTIME 0x00200
+#define AT_CTIME 0x00400
+#define AT_RDEV 0x00800
+#define AT_BLKSIZE 0x01000
+#define AT_NBLOCKS 0x02000
+/* 0x04000 */ /* unused */
+#define AT_SEQ 0x08000
+/*
+ * If AT_XVATTR is set then there are additional bits to process in
+ * the xvattr_t's attribute bitmap. If this is not set then the bitmap
+ * MUST be ignored. Note that this bit must be set/cleared explicitly.
+ * That is, setting AT_ALL will NOT set AT_XVATTR.
+ */
+#define AT_XVATTR 0x10000
+
+#define AT_ALL (AT_MODE|AT_UID|AT_GID|AT_FSID|AT_NODEID|\
+ AT_NLINK|AT_SIZE|AT_ATIME|AT_MTIME|AT_CTIME|\
+ AT_RDEV|AT_BLKSIZE|AT_NBLOCKS|AT_SEQ)
+
+#define AT_STAT (AT_MODE|AT_UID|AT_GID|AT_FSID|AT_NODEID|AT_NLINK|\
+ AT_SIZE|AT_ATIME|AT_MTIME|AT_CTIME|AT_RDEV)
+
+#define AT_TIMES (AT_ATIME|AT_MTIME|AT_CTIME)
+
+#define AT_NOSET (AT_NLINK|AT_RDEV|AT_FSID|AT_NODEID|\
+ AT_BLKSIZE|AT_NBLOCKS|AT_SEQ)
+
+#ifndef IN_BASE
+static __inline void
+vattr_init_mask(vattr_t *vap)
+{
+
+ vap->va_mask = 0;
+
+ if (vap->va_uid != (uid_t)VNOVAL)
+ vap->va_mask |= AT_UID;
+ if (vap->va_gid != (gid_t)VNOVAL)
+ vap->va_mask |= AT_GID;
+ if (vap->va_size != (u_quad_t)VNOVAL)
+ vap->va_mask |= AT_SIZE;
+ if (vap->va_atime.tv_sec != VNOVAL)
+ vap->va_mask |= AT_ATIME;
+ if (vap->va_mtime.tv_sec != VNOVAL)
+ vap->va_mask |= AT_MTIME;
+ if (vap->va_mode != (uint16_t)VNOVAL)
+ vap->va_mask |= AT_MODE;
+ if (vap->va_flags != VNOVAL)
+ vap->va_mask |= AT_XVATTR;
+}
+#endif
+
+#define RLIM64_INFINITY 0
+
+static __inline int
+vn_rename(char *from, char *to, enum uio_seg seg)
+{
+
+ ASSERT(seg == UIO_SYSSPACE);
+
+ return (kern_renameat(curthread, AT_FDCWD, from, AT_FDCWD, to, seg));
+}
+
+#include <sys/vfs.h>
+
+#endif /* _OPENSOLARIS_SYS_VNODE_H_ */
diff --cc sys/contrib/openzfs/module/zfs/lz4.c
index 9da9d9e00635,000000000000..827ba2b662f5
mode 100644,000000..100644
--- a/sys/contrib/openzfs/module/zfs/lz4.c
+++ b/sys/contrib/openzfs/module/zfs/lz4.c
@@@ -1,1084 -1,0 +1,1082 @@@
+/*
+ * LZ4 - Fast LZ compression algorithm
+ * Header File
+ * Copyright (C) 2011-2013, Yann Collet.
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * You can contact the author at :
+ * - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html
+ * - LZ4 source repository : http://code.google.com/p/lz4/
+ */
+
+#include <sys/zfs_context.h>
+#include <sys/zio_compress.h>
+
+static int real_LZ4_compress(const char *source, char *dest, int isize,
+ int osize);
+static int LZ4_uncompress_unknownOutputSize(const char *source, char *dest,
+ int isize, int maxOutputSize);
+static int LZ4_compressCtx(void *ctx, const char *source, char *dest,
+ int isize, int osize);
+static int LZ4_compress64kCtx(void *ctx, const char *source, char *dest,
+ int isize, int osize);
+
+static void *lz4_alloc(int flags);
+static void lz4_free(void *ctx);
+
- /*ARGSUSED*/
+size_t
+lz4_compress_zfs(void *s_start, void *d_start, size_t s_len,
+ size_t d_len, int n)
+{
++ (void) n;
+ uint32_t bufsiz;
+ char *dest = d_start;
+
+ ASSERT(d_len >= sizeof (bufsiz));
+
+ bufsiz = real_LZ4_compress(s_start, &dest[sizeof (bufsiz)], s_len,
+ d_len - sizeof (bufsiz));
+
+ /* Signal an error if the compression routine returned zero. */
+ if (bufsiz == 0)
+ return (s_len);
+
+ /*
+ * The exact compressed size is needed by the decompression routine,
+ * so it is stored at the start of the buffer. Note that this may be
+ * less than the compressed block size, which is rounded up to a
+ * multiple of 1<<ashift.
+ */
+ *(uint32_t *)dest = BE_32(bufsiz);
+
+ return (bufsiz + sizeof (bufsiz));
+}
+
- /*ARGSUSED*/
+int
+lz4_decompress_zfs(void *s_start, void *d_start, size_t s_len,
+ size_t d_len, int n)
+{
++ (void) n;
+ const char *src = s_start;
+ uint32_t bufsiz = BE_IN32(src);
+
+ /* invalid compressed buffer size encoded at start */
+ if (bufsiz + sizeof (bufsiz) > s_len)
+ return (1);
+
+ /*
+ * Returns 0 on success (decompression function returned non-negative)
+ * and non-zero on failure (decompression function returned negative).
+ */
+ return (LZ4_uncompress_unknownOutputSize(&src[sizeof (bufsiz)],
+ d_start, bufsiz, d_len) < 0);
+}
+
+/*
+ * LZ4 API Description:
+ *
+ * Simple Functions:
+ * real_LZ4_compress() :
+ * isize : is the input size. Max supported value is ~1.9GB
+ * return : the number of bytes written in buffer dest
+ * or 0 if the compression fails (if LZ4_COMPRESSMIN is set).
+ * note : destination buffer must be already allocated.
+ * destination buffer must be sized to handle worst cases
+ * situations (input data not compressible) worst case size
+ * evaluation is provided by function LZ4_compressBound().
+ *
+ * real_LZ4_uncompress() :
+ * osize : is the output size, therefore the original size
+ * return : the number of bytes read in the source buffer.
+ * If the source stream is malformed, the function will stop
+ * decoding and return a negative result, indicating the byte
+ * position of the faulty instruction. This function never
+ * writes beyond dest + osize, and is therefore protected
+ * against malicious data packets.
+ * note : destination buffer must be already allocated
+ * note : real_LZ4_uncompress() is not used in ZFS so its code
+ * is not present here.
+ *
+ * Advanced Functions
+ *
+ * LZ4_compressBound() :
+ * Provides the maximum size that LZ4 may output in a "worst case"
+ * scenario (input data not compressible) primarily useful for memory
+ * allocation of output buffer.
+ *
+ * isize : is the input size. Max supported value is ~1.9GB
+ * return : maximum output size in a "worst case" scenario
+ * note : this function is limited by "int" range (2^31-1)
+ *
+ * LZ4_uncompress_unknownOutputSize() :
+ * isize : is the input size, therefore the compressed size
+ * maxOutputSize : is the size of the destination buffer (which must be
+ * already allocated)
+ * return : the number of bytes decoded in the destination buffer
+ * (necessarily <= maxOutputSize). If the source stream is
+ * malformed, the function will stop decoding and return a
+ * negative result, indicating the byte position of the faulty
+ * instruction. This function never writes beyond dest +
+ * maxOutputSize, and is therefore protected against malicious
+ * data packets.
+ * note : Destination buffer must be already allocated.
+ * This version is slightly slower than real_LZ4_uncompress()
+ *
+ * LZ4_compressCtx() :
+ * This function explicitly handles the CTX memory structure.
+ *
+ * ILLUMOS CHANGES: the CTX memory structure must be explicitly allocated
+ * by the caller (either on the stack or using kmem_cache_alloc). Passing
+ * NULL isn't valid.
+ *
+ * LZ4_compress64kCtx() :
+ * Same as LZ4_compressCtx(), but specific to small inputs (<64KB).
+ * isize *Must* be <64KB, otherwise the output will be corrupted.
+ *
+ * ILLUMOS CHANGES: the CTX memory structure must be explicitly allocated
+ * by the caller (either on the stack or using kmem_cache_alloc). Passing
+ * NULL isn't valid.
+ */
+
+/*
+ * Tuning parameters
+ */
+
+/*
+ * COMPRESSIONLEVEL: Increasing this value improves compression ratio
+ * Lowering this value reduces memory usage. Reduced memory usage
+ * typically improves speed, due to cache effect (ex: L1 32KB for Intel,
+ * L1 64KB for AMD). Memory usage formula : N->2^(N+2) Bytes
+ * (examples : 12 -> 16KB ; 17 -> 512KB)
+ */
+#define COMPRESSIONLEVEL 12
+
+/*
+ * NOTCOMPRESSIBLE_CONFIRMATION: Decreasing this value will make the
+ * algorithm skip faster data segments considered "incompressible".
+ * This may decrease compression ratio dramatically, but will be
+ * faster on incompressible data. Increasing this value will make
+ * the algorithm search more before declaring a segment "incompressible".
+ * This could improve compression a bit, but will be slower on
+ * incompressible data. The default value (6) is recommended.
+ */
+#define NOTCOMPRESSIBLE_CONFIRMATION 6
+
+/*
+ * BIG_ENDIAN_NATIVE_BUT_INCOMPATIBLE: This will provide a boost to
+ * performance for big endian cpu, but the resulting compressed stream
+ * will be incompatible with little-endian CPU. You can set this option
+ * to 1 in situations where data will stay within closed environment.
+ * This option is useless on Little_Endian CPU (such as x86).
+ */
+/* #define BIG_ENDIAN_NATIVE_BUT_INCOMPATIBLE 1 */
+
+/*
+ * CPU Feature Detection
+ */
+
+/* 32 or 64 bits ? */
+#if defined(_LP64)
+#define LZ4_ARCH64 1
+#else
+#define LZ4_ARCH64 0
+#endif
+
+/*
+ * Little Endian or Big Endian?
+ * Note: overwrite the below #define if you know your architecture endianness.
+ */
+#if defined(_ZFS_BIG_ENDIAN)
+#define LZ4_BIG_ENDIAN 1
+#else
+/*
+ * Little Endian assumed. PDP Endian and other very rare endian format
+ * are unsupported.
+ */
+#undef LZ4_BIG_ENDIAN
+#endif
+
+/*
+ * Unaligned memory access is automatically enabled for "common" CPU,
+ * such as x86. For others CPU, the compiler will be more cautious, and
+ * insert extra code to ensure aligned access is respected. If you know
+ * your target CPU supports unaligned memory access, you may want to
+ * force this option manually to improve performance
+ */
+#if defined(__ARM_FEATURE_UNALIGNED)
+#define LZ4_FORCE_UNALIGNED_ACCESS 1
+#endif
+
+/*
+ * Illumos : we can't use GCC's __builtin_ctz family of builtins in the
+ * kernel
+ * Linux : we can use GCC's __builtin_ctz family of builtins in the
+ * kernel
+ */
+#undef LZ4_FORCE_SW_BITCOUNT
+#if defined(__sparc)
+#define LZ4_FORCE_SW_BITCOUNT
+#endif
+
+/*
+ * Compiler Options
+ */
+/* Disable restrict */
+#define restrict
+
+/*
+ * Linux : GCC_VERSION is defined as of 3.9-rc1, so undefine it.
+ * torvalds/linux@3f3f8d2f48acfd8ed3b8e6b7377935da57b27b16
+ */
+#ifdef GCC_VERSION
+#undef GCC_VERSION
+#endif
+
+#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+
+#if (GCC_VERSION >= 302) || (__INTEL_COMPILER >= 800) || defined(__clang__)
+#define expect(expr, value) (__builtin_expect((expr), (value)))
+#else
+#define expect(expr, value) (expr)
+#endif
+
+#ifndef likely
+#define likely(expr) expect((expr) != 0, 1)
+#endif
+
+#ifndef unlikely
+#define unlikely(expr) expect((expr) != 0, 0)
+#endif
+
+#define lz4_bswap16(x) ((unsigned short int) ((((x) >> 8) & 0xffu) | \
+ (((x) & 0xffu) << 8)))
+
+/* Basic types */
+#define BYTE uint8_t
+#define U16 uint16_t
+#define U32 uint32_t
+#define S32 int32_t
+#define U64 uint64_t
+
+#ifndef LZ4_FORCE_UNALIGNED_ACCESS
+#pragma pack(1)
+#endif
+
+typedef struct _U16_S {
+ U16 v;
+} U16_S;
+typedef struct _U32_S {
+ U32 v;
+} U32_S;
+typedef struct _U64_S {
+ U64 v;
+} U64_S;
+
+#ifndef LZ4_FORCE_UNALIGNED_ACCESS
+#pragma pack()
+#endif
+
+#define A64(x) (((U64_S *)(x))->v)
+#define A32(x) (((U32_S *)(x))->v)
+#define A16(x) (((U16_S *)(x))->v)
+
+/*
+ * Constants
+ */
+#define MINMATCH 4
+
+#define HASH_LOG COMPRESSIONLEVEL
+#define HASHTABLESIZE (1 << HASH_LOG)
+#define HASH_MASK (HASHTABLESIZE - 1)
+
+#define SKIPSTRENGTH (NOTCOMPRESSIBLE_CONFIRMATION > 2 ? \
+ NOTCOMPRESSIBLE_CONFIRMATION : 2)
+
+#define COPYLENGTH 8
+#define LASTLITERALS 5
+#define MFLIMIT (COPYLENGTH + MINMATCH)
+#define MINLENGTH (MFLIMIT + 1)
+
+#define MAXD_LOG 16
+#define MAX_DISTANCE ((1 << MAXD_LOG) - 1)
+
+#define ML_BITS 4
+#define ML_MASK ((1U<<ML_BITS)-1)
+#define RUN_BITS (8-ML_BITS)
+#define RUN_MASK ((1U<<RUN_BITS)-1)
+
+
+/*
+ * Architecture-specific macros
+ */
+#if LZ4_ARCH64
+#define STEPSIZE 8
+#define UARCH U64
+#define AARCH A64
+#define LZ4_COPYSTEP(s, d) A64(d) = A64(s); d += 8; s += 8;
+#define LZ4_COPYPACKET(s, d) LZ4_COPYSTEP(s, d)
+#define LZ4_SECURECOPY(s, d, e) if (d < e) LZ4_WILDCOPY(s, d, e)
+#define HTYPE U32
+#define INITBASE(base) const BYTE* const base = ip
+#else /* !LZ4_ARCH64 */
+#define STEPSIZE 4
+#define UARCH U32
+#define AARCH A32
+#define LZ4_COPYSTEP(s, d) A32(d) = A32(s); d += 4; s += 4;
+#define LZ4_COPYPACKET(s, d) LZ4_COPYSTEP(s, d); LZ4_COPYSTEP(s, d);
+#define LZ4_SECURECOPY LZ4_WILDCOPY
+#define HTYPE const BYTE *
+#define INITBASE(base) const int base = 0
+#endif /* !LZ4_ARCH64 */
+
+#if (defined(LZ4_BIG_ENDIAN) && !defined(BIG_ENDIAN_NATIVE_BUT_INCOMPATIBLE))
+#define LZ4_READ_LITTLEENDIAN_16(d, s, p) \
+ { U16 v = A16(p); v = lz4_bswap16(v); d = (s) - v; }
+#define LZ4_WRITE_LITTLEENDIAN_16(p, i) \
+ { U16 v = (U16)(i); v = lz4_bswap16(v); A16(p) = v; p += 2; }
+#else
+#define LZ4_READ_LITTLEENDIAN_16(d, s, p) { d = (s) - A16(p); }
+#define LZ4_WRITE_LITTLEENDIAN_16(p, v) { A16(p) = v; p += 2; }
+#endif
+
+
+/* Local structures */
+struct refTables {
+ HTYPE hashTable[HASHTABLESIZE];
+};
+
+
+/* Macros */
+#define LZ4_HASH_FUNCTION(i) (((i) * 2654435761U) >> ((MINMATCH * 8) - \
*** 2057 LINES SKIPPED ***