xref: /freebsd/sys/contrib/openzfs/module/zstd/README.md (revision 1323ec571215a77ddd21294f0871979d5ad6b992)
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` is the actual `zzstd` kernel module.
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.
28
29~~~
30
31Note: if the zstd library for zfs is updated to a newer version,
32the macro list in include/zstd_compat_wrapper.h usually needs to be updated.
33this can be done with some hand crafting of the output of the following
34script (on the object file generated from the "single-file library" script in zstd's
35contrib/single_file_libs):
36`nm zstd.o | awk '{print "#define "$3 " zfs_" $3}' > macrotable`
37
38
39## Altering ZSTD and breaking changes
40
41If ZSTD made changes that break compatibility or you need to make breaking
42changes to the way we handle ZSTD, it is required to maintain backwards
43compatibility.
44
45We already save the ZSTD version number within the block header to be used
46to add future compatibility checks and/or fixes. However, currently it is
47not actually used in such a way.
48