1# ZSTD-On-ZFS Library Manual 2 3## Introduction 4 5This subtree contains the ZSTD library used in ZFS. It is heavily cut-down by 6dropping any unneeded files, and combined into a single file, but otherwise is 7intentionally unmodified. Please do not alter the file containing the zstd 8library, besides upgrading to a newer ZSTD release. 9 10Tree structure: 11 12* `zfs_zstd.c` are the actual `zfs` kernel module hooks. 13* `lib/` contains the unmodified version of the `Zstandard` library 14* `zstd-in.c` is our template file for generating the single-file library 15* `include/`: This directory contains supplemental includes for platform 16 compatibility, which are not expected to be used by ZFS elsewhere in the 17 future. Thus we keep them private to ZSTD. 18 19## Updating ZSTD 20 21To update ZSTD the following steps need to be taken: 22 231. Grab the latest release of [ZSTD](https://github.com/facebook/zstd/releases). 242. Copy the files output by the following script to `module/zstd/lib/`: 25`grep include [path to zstd]/contrib/single_file_libs/zstd-in.c | awk '{ print $2 }'` 263. Remove debug.c, threading.c, and zstdmt_compress.c. 274. Update Makefiles with resulting file lists. 285. Follow symbol renaming notes in `include/zstd_compat_wrapper.h` 29 30## Altering ZSTD and breaking changes 31 32If ZSTD made changes that break compatibility or you need to make breaking 33changes to the way we handle ZSTD, it is required to maintain backwards 34compatibility. 35 36We already save the ZSTD version number within the block header to be used 37to add future compatibility checks and/or fixes. However, currently it is 38not actually used in such a way. 39