opnsense-src/sys/contrib/openzfs/module/zstd
Martin Matuska c9539b8901 zfs: merge openzfs/zfs@57cfae4a2 (master)
Notable upstream pull request merges:
  #13816 Fix a race condition in dsl_dataset_sync() when
         activating features
  #14402 Prefetch on deadlists merge
  #14410 Improve resilver ETAs
  #14428 Resilver performance tuning
  #14439 Resolve WS-2021-0184 vulnerability in zstd
  #14440 EIO caused by encryption + recursive gang
  #14448 Fix console progress reporting for recursive send
  #14454 Improve arc_read() error reporting
  #14460 Restore FreeBSD to use .rodata
  #14474 Reduce need for contiguous memory for ioctls

Obtained from:	OpenZFS
OpenZFS commit:	57cfae4a2f
2023-02-16 22:38:51 +01:00
..
include
lib zfs: merge openzfs/zfs@57cfae4a2 (master) 2023-02-16 22:38:51 +01:00
README.md
zfs_zstd.c
zstd-in.c
zstd_sparc.c

ZSTD-On-ZFS Library Manual

Introduction

This subtree contains the ZSTD library used in ZFS. It is heavily cut-down by dropping any unneeded files, and combined into a single file, but otherwise is intentionally unmodified. Please do not alter the file containing the zstd library, besides upgrading to a newer ZSTD release.

Tree structure:

  • zfs_zstd.c are the actual zfs kernel module hooks.
  • lib/ contains the unmodified version of the Zstandard library
  • zstd-in.c is our template file for generating the single-file library
  • include/: This directory contains supplemental includes for platform compatibility, which are not expected to be used by ZFS elsewhere in the future. Thus we keep them private to ZSTD.

Updating ZSTD

To update ZSTD the following steps need to be taken:

  1. Grab the latest release of ZSTD.
  2. Copy the files output by the following script to module/zstd/lib/: grep include [path to zstd]/contrib/single_file_libs/zstd-in.c | awk '{ print $2 }'
  3. Remove debug.c, threading.c, and zstdmt_compress.c.
  4. Update Makefiles with resulting file lists.
  5. Follow symbol renaming notes in include/zstd_compat_wrapper.h

Altering ZSTD and breaking changes

If ZSTD made changes that break compatibility or you need to make breaking changes to the way we handle ZSTD, it is required to maintain backwards compatibility.

We already save the ZSTD version number within the block header to be used to add future compatibility checks and/or fixes. However, currently it is not actually used in such a way.