ZFS 2.1.7 Released

https://github.com/openzfs/zfs/releases/tag/zfs-2.1.7

Supported Platforms

  • Linux : compatible with 3.10 - 6.0 kernels
  • FreeBSD : compatible with releases starting from 12.2-RELEASE

Changes

  • zfs-2.1.7: Use ubuntu-20.04 for zloop and sanity builders
  • Fix setting the large_block feature after receiving a snapshot #13699 #13782
  • Make autodetection disable pyzfs for kernel/srpm configurations #13394 #14178
  • Don’t leak packed recieved proprties #14197
  • Fix NULL pointer dereference in dbuf_prefetch_indirect_done() #14210
  • Lua: Fix bad bitshift in lua_strx2number() #14204
  • Fix clang 13 compilation errors #13551
  • Remove final K&R definitions #13447
  • module: zfs: vdev_removal: remove unused num_indirect #13304
  • tests: cmd: draid: remove unused and undocumented -v #13304
  • linux: libspl: zone: () → (void) #12968
  • Correct multipathd.target to .service #12709 #14171
  • Handle and detect #13709’s unlock regression (#14161)
  • Fix arc_p aggressive increase #14137 #14120
  • FreeBSD: Fix out of bounds read in zfs_ioctl_ozfs_to_legacy() #14135
  • Expose zfs_vdev_open_timeout_ms as a tunable #14133
  • Remove an unused variable #14125
  • Make 1-bit bitfields unsigned #14125
  • Address warnings about possible division by zero from clangsa #14124
  • Avoid null pointer dereference in dsl_fs_ss_limit_check() #14103
  • Fix too few arguments to formatting function #14098
  • Remove zpl_revalidate: fix snapshot rollback #9600 #14070
  • Fix theoretical use of uninitialized values #14043
  • Fix memory leaks in dmu_send()/dmu_send_obj() #13973
  • Fix possible NULL pointer dereference in sha2_mac_init() #14044
  • set_global_var() should not pass NULL pointers to dlclose() #14044
  • Fix NULL pointer dereference in spa_open_common() #14044
  • Fix NULL pointer passed to strlcpy from zap_lookup_impl() #14044
  • fm_fmri_hc_create() must call va_end() before returning #14044
  • Fix NULL pointer dereference in zdb #14044
  • ZED: Fix uninitialized value reads #14047
  • Fix theoretical array overflow in lua_typename() #13947
  • Fix potential NULL pointer dereference in lzc_ioctl() #14008
  • scripts/enum-extract.pl should not hard code perl path #14012
  • PAM: Fix unchecked return value from zfs_key_config_load() #13978
  • Fix potential NULL pointer dereference in dsl_dataset_promote_check() #13967
  • Fix unreachable code in zstreamdump #13946
  • PAM: Fix uninitialized value read #13957
  • set_global_var_parse_kv() should pass the pointer from strdup() #13867
  • Call va_end() before return in zpool_standard_error_fmt() #13904
  • Fix potential NULL pointer dereference in zfsdle_vdev_online() #13903
  • FreeBSD: Fix uninitialized pointer read in spa_import_rootpool() #13923
  • Linux: Fix use-after-free in zfsvfs_create() #13883
  • Fix null pointer dereferences in PAM #13889
  • Handle ECKSUM as new EZFS_CKSUM ‒ “insufficient replicas” #6805 #13808 #13898
  • Fix use-after-free bugs in icp code #13881
  • Remove incorrect free() in zfs_get_pci_slots_sys_path() #13864
  • Cleanup: Make memory barrier definitions consistent across kernels #13843
  • zpool_load_compat() should create strings of length ZFS_MAXPROPLEN #13866
  • icp: fix all !ENDBR objtool warnings in x86 Asm code #14035
  • icp: fix rodata being marked as text in x86 Asm code #14035
  • icp: properly fix all RETs in x86_64 Asm code #14035
  • libzfs recv: Check if user prop before inheritable
  • dsl_prop_known_index(): check for invalid prop #14142 #14147
  • zed: Avoid core dump if wholedisk property does not exist #14062
  • zed: Prevent special vdev to be replaced by hot spare #14129
  • Deny receiving into encrypted datasets if the keys are not loaded (#14139) #13598 #14055 #14119
  • zil: Relax assertion in zil_parse #14116
  • quota: extend quota for dataset #13839
  • Fix ARC target collapse when zfs_arc_meta_limit_percent=100 #14054 #14093
  • Propagate extent_bytes change to autotrim thread #14077
  • Linux 6.1 compat: change order of sys/mutex.h includes #14040
  • Linux 6.0 compat: META #14091
  • Linux compat: fix DECLARE_EVENT_CLASS() test when ZFS is built-in #14006
  • zfs_domount: fix double-disown of dataset / double-free of zfsvfs_t #14025
  • Linux: Remove ZFS_AC_KERNEL_SRC_MODULE_PARAM_CALL_CONST autotools check #13984 #14004
  • CI: bump actions/upload-artifact to v3 #14018
  • CI: bump actions/checkout to v3 #14018
  • Stop ganging due to past vdev write errors #14003
  • zvol_wait logic may terminate prematurely #13998
  • Remove ambiguity on demand vs prefetch stats reported by arc_summary #13985
  • Fix panic in dsl_process_sub_livelist for EINTR #13939
  • Bring per_txg_dirty_frees_percent back to 30 #13932 #13938
  • Add options to zfs redundant_metadata property #13680
  • FreeBSD: vn_flush_cached_data: observe vnode locking contract #14079
  • FreeBSD: Fix a pair of bugs in zfs_fhtovp() #14001 #13974
  • Fix sequential resilver drive failure race condition #14041 #14050
  • contrib: dracut: zfs-snapshot-bootfs: exit status fix
  • contrib: dracut: zfs-{rollback,snapshot}-bootfs: explicit snapname fix #13585
  • kcfpool_alloc() should have its argument list marked void #14023
  • etc: mask zfs-load-key.service #14010 #14019
  • initramfs: use mount.zfs instead of mount #13305
1 Like

uh-oh…

Thanks for the post though, Progress looking great!
Mostly bug fixes, like not using a hotspare (data) to replace a special vdev provider?..

Thanks for the heads-up.

Now I need to watch the auto upgrade on all my Fedora boxes because of zfs’ broken dkms integration.

Background

Every time zfs gets updated dkms breaks (dkms status returns an error) and needs manual fixing.

  • Because dkms is broken by the installation of the updated zfs packages, the dkms doesn’t compile the zfs kernel module for the current kernel. Therefore, all zpools are gone after the upgrade.
  • If the dnf update also pulls in a new kernel version at the same time you get a double whammy: Because the kernel module compilation fails, no initramfs is generated for the new kernel version which leads to the computer not booting and a cryptic and scary “kernel panic” :frowning:

Solution:

  • boot into an older kernel version, which has an existing older zfs kernel module.
  • In the dkms folder for zfs (/var/lib/dkms/zfs) you will find two folders named after zfs versions. The current version and the old, no longer existing, zfs version. rm -rf that old folder and the now broken links into the old folder. → dkms status now works without error.
  • Sometimes dkms status shows latest version of zfs registered with dkms, sometimes not (not sure why).
  • To register: dkms add zfs/2.1.7 or whatever the version of the installed zfs is.
  • dkms autoinstall to build kernel modules for the current kernel version; dkms build -k $(uname -r); dkms install -k $(uname -r); does the same for the current kernel version.
  • replace kernel version for other installed kernel versions - especially the latest installed version.
  • Create a new initramfs for all the kernel versions that need it: e.g. dracut -kver $(uname -r) for the current kernel version. Verify with ls /boot/ that initramfs for all kernels exist and have been updated. Reboot. Go on with your merry lifes.

I opened issues with openzfs a couple of times and explained it, but because zfs upgrades happen so infrequently I think this is just not properly tested.