mirror_zfs/lib/libzfs
siv0 7f65e04abd
libzfs: scrub: only include start and end nv pairs if needed for scrub
This patch addresses running `zpool scrub <pool>` with ZFS 2.4 userspace
while the loaded kernel module is still 2.3, failing with:
```
cannot scrub <pool>: the loaded zfs module does not support an option
for this operation. A reboot may be required to enable this option.
```

Checking for the source of the message via `strace` showed the scrub
ioctl failing and setting errno to ZFS_ERR_IOC_ARG_UNAVAIL[0]. With
that and the comments in `module/zfs/zfs_ioctl.c`[1] commit: 894edd084
seemed like a likely cause for the backward incompatibility.

The corresponding kernelspace code in `module/zfs/zfs_ioctl.c` defaults
to a setting of 0 if either parameter is not set, so not providing the
nvpairs in case both are 0 should not make a semantic difference.

Tested by:
* loading zfs.ko in version 2.3.6
* running `zpool scrub testpool` with zpool from master (error occurs)
* running `zpool scrub testpool` with this patch applied (scrub is
  started)

This should help users who are still stuck on an older kernel module,
while their distribution ships newer ZFS userspace.

This was observed in the Proxmox community forum:
https://forum.proxmox.com/threads/.180467/

[0] d35951b18d/include/sys/fs/zfs.h (L1762)
[1] d35951b18d/module/zfs/zfs_ioctl.c (L7799)
Fixes: 894edd084 ("Add TXG timestamp database")

Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Co-authored-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Closes #18314
2026-03-12 15:06:23 -07:00
..
os libzfs: use mount_setattr for selective remount including legacy mounts 2026-03-09 11:06:22 -07:00
.gitignore Clean up lib dependencies 2020-07-10 14:26:00 -07:00
libzfs_changelist.c zfs: replace uu_avl with sys/avl 2025-11-17 06:21:26 -08:00
libzfs_config.c zfs: replace uu_avl with sys/avl 2025-11-17 06:21:26 -08:00
libzfs_crypto.c libzpool: remove global libzpool includes 2025-11-12 10:03:15 -08:00
libzfs_dataset.c libzfs/mnttab: lift mnttab cache into separate file 2026-03-10 13:07:07 -07:00
libzfs_diff.c fix libzfs diff mem leak in an error path 2026-03-10 12:39:49 -07:00
libzfs_impl.h libzfs/mnttab: shorten names, reorg a bit 2026-03-10 13:07:07 -07:00
libzfs_import.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
libzfs_iter.c Sort the blocking snapshots list #12751 (#17264) 2025-05-01 17:40:23 -07:00
libzfs_mnttab.c libzfs/mnttab: shorten names, reorg a bit 2026-03-10 13:07:07 -07:00
libzfs_mount.c libzfs: use mount_setattr for selective remount including legacy mounts 2026-03-09 11:06:22 -07:00
libzfs_pool.c libzfs: scrub: only include start and end nv pairs if needed for scrub 2026-03-12 15:06:23 -07:00
libzfs_sendrecv.c libzfs: teach zfs_create_ancestors() to accept properties 2026-03-09 14:49:52 -07:00
libzfs_share_nfs.c libshare: fold into libzfs and reorg headers a little 2025-12-19 19:52:33 -08:00
libzfs_share.c libshare: fold into libzfs and reorg headers a little 2025-12-19 19:52:33 -08:00
libzfs_share.h libshare: fold into libzfs and reorg headers a little 2025-12-19 19:52:33 -08:00
libzfs_status.c Suppress some ashift warnings 2025-10-13 10:41:42 -07:00
libzfs_util.c libspl/mnttab: remove struct extmnttab 2026-03-10 13:07:07 -07:00
libzfs.abi abi: updates for mnttab cleanup 2026-03-10 13:07:07 -07:00
libzfs.pc.in Spruce up pkg-config files for libzfs/libzfs_core 2020-09-04 11:11:18 -07:00
libzfs.suppr Library ABI tracking with abigail 2020-11-17 09:18:52 -08:00
Makefile.am libzfs/mnttab: lift mnttab cache into separate file 2026-03-10 13:07:07 -07:00
THIRDPARTYLICENSE.openssl Fix typos in lib/ 2019-09-02 17:53:27 -07:00
THIRDPARTYLICENSE.openssl.descrip Encryption patch follow-up 2017-10-11 16:54:48 -04:00