Skip to content

2.3.3 staging prep #17459

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 49 commits into from
Jun 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
e184a0e
Fix off-by-one bug in range tree code
pcd1193182 May 23, 2025
dd3e295
Reformat cli help and man page to be in sync
cmharr May 19, 2025
71592e7
Refactor man page and CLI help output per mandoc
cmharr May 20, 2025
c419ab9
ZTS: testing for leaked key mappings in encrypted non-raw send
gamanakis May 24, 2025
4016c6a
ZIL: Improve write log size accounting
amotin May 24, 2025
ef24928
Expose dataset encryption status via fast stat path
ixhamza May 27, 2025
49eab8c
ZVOL: Comment platform-specific empty functions bodies on FreeBSD side
fuporovvStack May 28, 2025
5bbf200
zcp: get_prop: fix encryptionroot and encryption
snajpa May 28, 2025
9e22846
Only interrupt active disk I/Os in failmode=continue
pcd1193182 May 28, 2025
ed185d6
Linux 6.15 compat: META
tonyhutter May 28, 2025
f1ad6ee
zfs_log: make zfs_immediate_write_sz uint
robn Nov 29, 2024
d1c3c44
tunables: don't assert initialisation in impl getters
robn Dec 7, 2024
4536f13
tunables: ensure tunable and variable have same define gate
robn Dec 4, 2024
0853533
tunables: remove FreeBSD compat macros for Linux module params
robn May 24, 2025
82e66dd
tunables: remove direct use of module_param_cb
robn May 24, 2025
ed7ef7f
tunables: remove support for s64 tunables
robn May 24, 2025
f2b6e59
tunables: use Linux ullong param ops for u64
robn May 24, 2025
bfad1de
tunables: remove unused param get/set aliases
robn May 24, 2025
19650a5
tunables: remove __check_old_set_param workaround
robn May 24, 2025
85dc700
tunables: fix spelling
robn May 24, 2025
1652a62
Linux build: always use objtool
AttilaFueloep May 30, 2025
370f68a
linux/zvol_os: don't try to set disk ops if alloc fails
robn May 30, 2025
df95421
CI: Retire Ubuntu 20.04 builder
behlendorf May 30, 2025
74e0603
vdev: skip faulting disks pending removal
ixhamza May 29, 2025
01cc3c9
zpool: clarify ZPOOL_STATUS_REMOVED_DEV status message
ixhamza May 29, 2025
59a46cc
Set spa_final_txg in spa_unload()
amotin May 30, 2025
4535f5e
abd_os: move headers from libzpool to libspl
robn May 30, 2025
ec4d4f8
ZTS: Add AlmaLinux 10
mcmilk May 30, 2025
cd16b56
ZTS: Enable io_uring support on el9/el10
mcmilk May 30, 2025
b7467d8
CI: Retire Fedora 40 builder
behlendorf May 31, 2025
36979ee
Linux build: silence objtool warnings
AttilaFueloep Jun 5, 2025
00df540
ZTS: Enable io_uring on CentOS Stream 9 and 10 also
mcmilk Jun 9, 2025
7119b8f
Allow zero compression if dedup is enabled
amotin Jun 10, 2025
5ad7e69
Make TX abort after assign safer
amotin Jun 10, 2025
a4aff0c
Reduce zfs_dmu_offset_next_sync penalty
amotin Jun 11, 2025
7b5fa89
Improve block cloning transactions accounting
amotin Jun 11, 2025
b483824
zts: test syncfs() behaviour when pool suspends
robn Jun 4, 2025
e18cf87
zfs_sync: remove support for impossible scenarios
robn Jun 4, 2025
7a096b9
zfs_sync: return error when pool suspends
robn Jun 4, 2025
ec52594
zpl_sync_fs: work around kernels that ignore sync_fs errors
robn Jun 4, 2025
538ece1
zfs_log_write: only put the callback on the last itx
robn Jun 10, 2025
2c9e9ec
FreeBSD: zfs_putpages: don't undirty pages until after write completes
robn Jun 5, 2025
335c2a7
CI: Automate some GitHub PR status labels manipulations
amotin Nov 5, 2024
d35a4b0
During pool export flush the ARC asynchronously
don-brady Dec 5, 2024
12904c0
ARC: parallel eviction
allanjude May 14, 2025
deaba27
dmu_traverse: remove 'ignore_hole_birth' tunable alias
robn Dec 4, 2024
bdb8e99
Relax zfs_vnops_read_chunk_size limitations
amotin Jun 4, 2025
480e7c1
ioctl: remove FICLONE/FICLONERANGE/FIDEDUPERANGE compat
robn May 8, 2025
203964b
Fix mixed-use-of-spaces-and-tabs rpmlint warning
Germano0 Jun 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions .github/workflows/labels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: labels

on:
pull_request_target:
types: [ opened, synchronize, reopened, converted_to_draft, ready_for_review ]

permissions:
pull-requests: write

jobs:
open:
runs-on: ubuntu-latest
if: ${{ github.event.action == 'opened' && github.event.pull_request.draft }}
steps:
- env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE: ${{ github.event.pull_request.html_url }}
run: |
gh pr edit $ISSUE --add-label "Status: Work in Progress"

push:
runs-on: ubuntu-latest
if: ${{ github.event.action == 'synchronize' || github.event.action == 'reopened' }}
steps:
- env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE: ${{ github.event.pull_request.html_url }}
run: |
gh pr edit $ISSUE --remove-label "Status: Accepted,Status: Inactive,Status: Revision Needed,Status: Stale"

draft:
runs-on: ubuntu-latest
if: ${{ github.event.action == 'converted_to_draft' }}
steps:
- env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE: ${{ github.event.pull_request.html_url }}
run: |
gh pr edit $ISSUE --remove-label "Status: Accepted,Status: Code Review Needed,Status: Inactive,Status: Revision Needed,Status: Stale" --add-label "Status: Work in Progress"

rfr:
runs-on: ubuntu-latest
if: ${{ github.event.action == 'ready_for_review' }}
steps:
- env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE: ${{ github.event.pull_request.html_url }}
run: |
gh pr edit $ISSUE --remove-label "Status: Accepted,Status: Inactive,Status: Revision Needed,Status: Stale,Status: Work in Progress" --add-label "Status: Code Review Needed"
15 changes: 5 additions & 10 deletions .github/workflows/scripts/qemu-2-start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ case "$OS" in
OSNAME="AlmaLinux 9"
URL="https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-latest.x86_64.qcow2"
;;
almalinux10)
OSNAME="AlmaLinux 10"
OSv="almalinux9"
URL="https://repo.almalinux.org/almalinux/10/cloud/x86_64/images/AlmaLinux-10-GenericCloud-latest.x86_64.qcow2"
;;
archlinux)
OSNAME="Archlinux"
URL="https://geo.mirror.pkgbuild.com/images/latest/Arch-Linux-x86_64-cloudimg.qcow2"
Expand All @@ -56,11 +61,6 @@ case "$OS" in
OSNAME="Debian 12"
URL="https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2"
;;
fedora40)
OSNAME="Fedora 40"
OSv="fedora-unknown"
URL="https://download.fedoraproject.org/pub/fedora/linux/releases/40/Cloud/x86_64/images/Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2"
;;
fedora41)
OSNAME="Fedora 41"
OSv="fedora-unknown"
Expand Down Expand Up @@ -122,11 +122,6 @@ case "$OS" in
MIRROR="http://opensuse-mirror-gce-us.susecloud.net"
URL="$MIRROR/tumbleweed/appliances/openSUSE-MicroOS.x86_64-OpenStack-Cloud.qcow2"
;;
ubuntu20)
OSNAME="Ubuntu 20.04"
OSv="ubuntu20.04"
URL="$UBMIRROR/focal/current/focal-server-cloudimg-amd64.img"
;;
ubuntu22)
OSNAME="Ubuntu 22.04"
OSv="ubuntu22.04"
Expand Down
6 changes: 2 additions & 4 deletions .github/workflows/scripts/qemu-3-deps-vm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ case "$1" in
sudo dnf install -y kernel-abi-whitelists
echo "##[endgroup]"
;;
almalinux9|centos-stream9|centos-stream10)
almalinux9|almalinux10|centos-stream9|centos-stream10)
echo "##[group]Enable epel and crb repositories"
sudo dnf config-manager -y --set-enabled crb
sudo dnf install -y epel-release
Expand Down Expand Up @@ -171,9 +171,7 @@ case "$1" in
echo "##[group]Install Ubuntu specific"
sudo apt-get install -yq linux-tools-common libtirpc-dev \
linux-modules-extra-$(uname -r)
if [ "$1" != "ubuntu20" ]; then
sudo apt-get install -yq dh-sequence-dkms
fi
sudo apt-get install -yq dh-sequence-dkms
echo "##[endgroup]"
echo "##[group]Delete Ubuntu OpenZFS modules"
for i in $(find /lib/modules -name zfs -type d); do sudo rm -rvf $i; done
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scripts/qemu-4-build-vm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ fi
#
# rhel8.10
# almalinux9.5
# fedora40
# fedora42
source /etc/os-release
sudo hostname "$ID$VERSION_ID"

Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/scripts/qemu-6-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,13 @@ case "$1" in
;;
esac

# enable io_uring on el9/el10
case "$1" in
almalinux9|almalinux10|centos-stream*)
sudo sysctl kernel.io_uring_disabled=0 > /dev/null
;;
esac

# run functional testings and save exitcode
cd /var/tmp
TAGS=$2/$3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/zfs-qemu-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: ['almalinux8', 'almalinux9', 'fedora40', 'fedora41', 'fedora42']
os: ['almalinux8', 'almalinux9', 'almalinux10', 'fedora41', 'fedora42']
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/zfs-qemu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ jobs:
- name: Generate OS config and CI type
id: os
run: |
FULL_OS='["almalinux8", "almalinux9", "debian11", "debian12", "fedora40", "fedora41", "fedora42", "freebsd13-4r", "freebsd14-2s", "freebsd15-0c", "ubuntu20", "ubuntu22", "ubuntu24"]'
QUICK_OS='["almalinux8", "almalinux9", "debian12", "fedora42", "freebsd14-2r", "ubuntu24"]'
FULL_OS='["almalinux8", "almalinux9", "almalinux10", "debian11", "debian12", "fedora41", "fedora42", "freebsd13-4r", "freebsd14-2s", "freebsd15-0c", "ubuntu22", "ubuntu24"]'
QUICK_OS='["almalinux8", "almalinux9", "almalinux10", "debian12", "fedora42", "freebsd14-2r", "ubuntu24"]'
# determine CI type when running on PR
ci_type="full"
if ${{ github.event_name == 'pull_request' }}; then
Expand Down Expand Up @@ -81,8 +81,8 @@ jobs:
strategy:
fail-fast: false
matrix:
# rhl: almalinux8, almalinux9, centos-stream9, fedora40, fedora41
# debian: debian11, debian12, ubuntu20, ubuntu22, ubuntu24
# rhl: almalinux8, almalinux9, centos-stream9, fedora41
# debian: debian11, debian12, ubuntu22, ubuntu24
# misc: archlinux, tumbleweed
# FreeBSD variants of 2024-12:
# FreeBSD Release: freebsd13-4r, freebsd14-2r
Expand Down
2 changes: 1 addition & 1 deletion META
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ Release: 1
Release-Tags: relext
License: CDDL
Author: OpenZFS
Linux-Maximum: 6.14
Linux-Maximum: 6.15
Linux-Minimum: 4.18
39 changes: 20 additions & 19 deletions cmd/zpool/zpool_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -521,11 +521,11 @@ get_usage(zpool_help_t idx)
return (gettext("\ttrim [-dw] [-r <rate>] [-c | -s] <pool> "
"[<device> ...]\n"));
case HELP_STATUS:
return (gettext("\tstatus [--power] [-j [--json-int, "
"--json-flat-vdevs, ...\n"
"\t --json-pool-key-guid]] [-c [script1,script2,...]] "
"[-dDegiLpPstvx] ...\n"
"\t [-T d|u] [pool] [interval [count]]\n"));
return (gettext("\tstatus [-DdegiLPpstvx] "
"[-c script1[,script2,...]] ...\n"
"\t [-j|--json [--json-flat-vdevs] [--json-int] "
"[--json-pool-key-guid]] ...\n"
"\t [-T d|u] [--power] [pool] [interval [count]]\n"));
case HELP_UPGRADE:
return (gettext("\tupgrade\n"
"\tupgrade -v\n"
Expand Down Expand Up @@ -10432,10 +10432,9 @@ print_status_reason(zpool_handle_t *zhp, status_cbdata_t *cbp,
break;

case ZPOOL_STATUS_REMOVED_DEV:
snprintf(status, ST_SIZE, gettext("One or more devices has "
"been removed by the administrator.\n\tSufficient "
"replicas exist for the pool to continue functioning in "
"a\n\tdegraded state.\n"));
snprintf(status, ST_SIZE, gettext("One or more devices have "
"been removed.\n\tSufficient replicas exist for the pool "
"to continue functioning in a\n\tdegraded state.\n"));
snprintf(action, AC_SIZE, gettext("Online the device "
"using zpool online' or replace the device with\n\t'zpool "
"replace'.\n"));
Expand Down Expand Up @@ -10980,28 +10979,30 @@ status_callback(zpool_handle_t *zhp, void *data)
}

/*
* zpool status [-c [script1,script2,...]] [-dDegiLpPstvx] [--power] ...
* [-T d|u] [pool] [interval [count]]
* zpool status [-dDegiLpPstvx] [-c [script1,script2,...]] ...
* [-j|--json [--json-flat-vdevs] [--json-int] ...
* [--json-pool-key-guid]] [--power] [-T d|u] ...
* [pool] [interval [count]]
*
* -c CMD For each vdev, run command CMD
* -d Display Direct I/O write verify errors
* -D Display dedup status (undocumented)
* -d Display Direct I/O write verify errors
* -e Display only unhealthy vdevs
* -g Display guid for individual vdev name.
* -i Display vdev initialization status.
* -j [...] Display output in JSON format
* --json-flat-vdevs Display vdevs in flat hierarchy
* --json-int Display numbers in integer format instead of string
* --json-pool-key-guid Use pool GUID as key for pool objects
* -L Follow links when resolving vdev path name.
* -p Display values in parsable (exact) format.
* -P Display full path for vdev name.
* -p Display values in parsable (exact) format.
* --power Display vdev enclosure slot power status
* -s Display slow IOs column.
* -t Display vdev TRIM status.
* -T Display a timestamp in date(1) or Unix format
* -t Display vdev TRIM status.
* -v Display complete error logs
* -x Display only pools with potential problems
* -j Display output in JSON format
* --power Display vdev enclosure slot power status
* --json-int Display numbers in inteeger format instead of string
* --json-flat-vdevs Display vdevs in flat hierarchy
* --json-pool-key-guid Use pool GUID as key for pool objects
*
* Describes the health status of all pools or some subset.
*/
Expand Down
3 changes: 1 addition & 2 deletions config/Rules.am
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_srcdir)/module/icp/include \
-I$(top_srcdir)/lib/libspl/include \
-I$(top_srcdir)/lib/libspl/include/os/@ac_system_l@ \
-I$(top_srcdir)/lib/libzpool/include
-I$(top_srcdir)/lib/libspl/include/os/@ac_system_l@

AM_LIBTOOLFLAGS = --silent

Expand Down
19 changes: 19 additions & 0 deletions config/kernel-objtool.m4
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ AC_DEFUN([ZFS_AC_KERNEL_OBJTOOL_HEADER], [
#include <linux/objtool.h>
],[
],[
objtool_header=$LINUX/include/linux/objtool.h
AC_DEFINE(HAVE_KERNEL_OBJTOOL_HEADER, 1,
[kernel has linux/objtool.h])
AC_MSG_RESULT(linux/objtool.h)
],[
objtool_header=$LINUX/include/linux/frame.h
AC_MSG_RESULT(linux/frame.h)
])
])
Expand Down Expand Up @@ -62,6 +64,23 @@ AC_DEFUN([ZFS_AC_KERNEL_OBJTOOL], [
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_STACK_FRAME_NON_STANDARD, 1,
[STACK_FRAME_NON_STANDARD is defined])

dnl # Needed for kernels missing the asm macro. We grep
dnl # for it in the header file since there is currently
dnl # no test to check the result of assembling a file.
AC_MSG_CHECKING(
[whether STACK_FRAME_NON_STANDARD asm macro is defined])
dnl # Escape square brackets.
sp='@<:@@<:@:space:@:>@@:>@'
dotmacro='@<:@.@:>@macro'
regexp="^$sp*$dotmacro$sp+STACK_FRAME_NON_STANDARD$sp"
AS_IF([$EGREP -s -q "$regexp" $objtool_header],[
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_STACK_FRAME_NON_STANDARD_ASM, 1,
[STACK_FRAME_NON_STANDARD asm macro is defined])
],[
AC_MSG_RESULT(no)
])
],[
AC_MSG_RESULT(no)
])
Expand Down
27 changes: 27 additions & 0 deletions config/kernel-sb-wb-err.m4
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# dnl
# dnl 5.8 (735e4ae5ba28) introduced a superblock scoped errseq_t to use to
# dnl record writeback errors for syncfs() to return. Up until 5.17, when
# dnl sync_fs errors were returned directly, this is the only way for us to
# dnl report an error from syncfs().
# dnl
AC_DEFUN([ZFS_AC_KERNEL_SRC_SUPER_BLOCK_S_WB_ERR], [
ZFS_LINUX_TEST_SRC([super_block_s_wb_err], [
#include <linux/fs.h>

static const struct super_block
sb __attribute__ ((unused)) = {
.s_wb_err = 0,
};
],[])
])

AC_DEFUN([ZFS_AC_KERNEL_SUPER_BLOCK_S_WB_ERR], [
AC_MSG_CHECKING([whether super_block has s_wb_err])
ZFS_LINUX_TEST_RESULT([super_block_s_wb_err], [
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_SUPER_BLOCK_S_WB_ERR, 1,
[have super_block s_wb_err])
],[
AC_MSG_RESULT(no)
])
])
2 changes: 2 additions & 0 deletions config/kernel.m4
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
ZFS_AC_KERNEL_SRC_FILE
ZFS_AC_KERNEL_SRC_PIN_USER_PAGES
ZFS_AC_KERNEL_SRC_TIMER
ZFS_AC_KERNEL_SRC_SUPER_BLOCK_S_WB_ERR
case "$host_cpu" in
powerpc*)
ZFS_AC_KERNEL_SRC_CPU_HAS_FEATURE
Expand Down Expand Up @@ -246,6 +247,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
ZFS_AC_KERNEL_FILE
ZFS_AC_KERNEL_PIN_USER_PAGES
ZFS_AC_KERNEL_TIMER
ZFS_AC_KERNEL_SUPER_BLOCK_S_WB_ERR
case "$host_cpu" in
powerpc*)
ZFS_AC_KERNEL_CPU_HAS_FEATURE
Expand Down
1 change: 1 addition & 0 deletions include/libzfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,7 @@ _LIBZFS_H int zfs_crypto_attempt_load_keys(libzfs_handle_t *, const char *);
_LIBZFS_H int zfs_crypto_load_key(zfs_handle_t *, boolean_t, const char *);
_LIBZFS_H int zfs_crypto_unload_key(zfs_handle_t *);
_LIBZFS_H int zfs_crypto_rewrap(zfs_handle_t *, nvlist_t *, boolean_t);
_LIBZFS_H boolean_t zfs_is_encrypted(zfs_handle_t *);

typedef struct zprop_list {
int pl_prop;
Expand Down
5 changes: 1 addition & 4 deletions include/os/freebsd/spl/sys/ccompile.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,7 @@ extern "C" {
#endif

#define EXPORT_SYMBOL(x)
#define module_param(a, b, c)
#define module_param_call(a, b, c, d, e)
#define module_param_named(a, b, c, d)
#define MODULE_PARM_DESC(a, b)

#define asm __asm
#ifdef ZFS_DEBUG
#undef NDEBUG
Expand Down
1 change: 1 addition & 0 deletions include/os/freebsd/spl/sys/vm.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
extern const int zfs_vm_pagerret_bad;
extern const int zfs_vm_pagerret_error;
extern const int zfs_vm_pagerret_ok;
extern const int zfs_vm_pagerret_pend;
extern const int zfs_vm_pagerput_sync;
extern const int zfs_vm_pagerput_inval;

Expand Down
Loading