From a672a1a5f222f356f25176ffdd8d50340de1daff Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Thu, 7 May 2026 22:31:46 +0100 Subject: [PATCH 01/16] DAOS-18943 build: Upgrade SPDK dependency to v26.01 - Update SPDK version from v24.09 to v26.01 - Remove obsolete patches - Update daos-spdk package version to 3.0.0 Features: full_regression Signed-off-by: Tom Nabarro --- ...8322b812fe31cc3e1d0308a7f5bd4b06b9886.diff | 51 --- ....patch => 0001_external_isal_v26.01.patch} | 335 +++++++++++------- deps/patches/spdk/0002_spdk_rwf_nowait.patch | 78 ---- utils/build.config | 4 +- utils/rpms/daos-spdk.changelog | 4 + utils/rpms/package_info.sh | 2 +- 6 files changed, 220 insertions(+), 254 deletions(-) delete mode 100644 deps/patches/spdk/0001_3428322b812fe31cc3e1d0308a7f5bd4b06b9886.diff rename deps/patches/spdk/{0003_external_isal.patch => 0001_external_isal_v26.01.patch} (52%) delete mode 100644 deps/patches/spdk/0002_spdk_rwf_nowait.patch diff --git a/deps/patches/spdk/0001_3428322b812fe31cc3e1d0308a7f5bd4b06b9886.diff b/deps/patches/spdk/0001_3428322b812fe31cc3e1d0308a7f5bd4b06b9886.diff deleted file mode 100644 index f427d33d2d8..00000000000 --- a/deps/patches/spdk/0001_3428322b812fe31cc3e1d0308a7f5bd4b06b9886.diff +++ /dev/null @@ -1,51 +0,0 @@ -diff --git a/module/bdev/aio/bdev_aio.c b/module/bdev/aio/bdev_aio.c -index 075459b1564..b51d6c83a3f 100644 ---- a/module/bdev/aio/bdev_aio.c -+++ b/module/bdev/aio/bdev_aio.c -@@ -64,7 +64,9 @@ struct file_disk { - struct spdk_bdev disk; - char *filename; - int fd; -+#ifdef RWF_NOWAIT - bool use_nowait; -+#endif - TAILQ_ENTRY(file_disk) link; - bool block_size_override; - bool readonly; -@@ -114,7 +116,9 @@ bdev_aio_open(struct file_disk *disk) - { - int fd; - int io_flag = disk->readonly ? O_RDONLY : O_RDWR; -+#ifdef RWF_NOWAIT - struct stat st; -+#endif - - fd = open(disk->filename, io_flag | O_DIRECT); - if (fd < 0) { -@@ -129,11 +133,14 @@ bdev_aio_open(struct file_disk *disk) - } - - disk->fd = fd; -+ -+#ifdef RWF_NOWAIT - /* Some aio operations can block, for example if number outstanding - * I/O exceeds number of block layer tags. But not all files can - * support RWF_NOWAIT flag. So use RWF_NOWAIT on block devices only. - */ - disk->use_nowait = fstat(fd, &st) == 0 && S_ISBLK(st.st_mode); -+#endif - - return 0; - } -@@ -205,9 +212,11 @@ bdev_aio_submit_io(enum spdk_bdev_io_type type, struct file_disk *fdisk, - io_set_eventfd(iocb, aio_ch->group_ch->efd); - } - iocb->data = aio_task; -+#ifdef RWF_NOWAIT - if (fdisk->use_nowait) { - iocb->aio_rw_flags = RWF_NOWAIT; - } -+#endif - aio_task->len = nbytes; - aio_task->ch = aio_ch; - diff --git a/deps/patches/spdk/0003_external_isal.patch b/deps/patches/spdk/0001_external_isal_v26.01.patch similarity index 52% rename from deps/patches/spdk/0003_external_isal.patch rename to deps/patches/spdk/0001_external_isal_v26.01.patch index 3a4a9be7824..b1ac642e911 100644 --- a/deps/patches/spdk/0003_external_isal.patch +++ b/deps/patches/spdk/0001_external_isal_v26.01.patch @@ -1,41 +1,39 @@ diff --git a/CONFIG b/CONFIG -index 89c34e90b..086db27a4 100644 +index 996f1f385..43ade295e 100644 --- a/CONFIG +++ b/CONFIG -@@ -170,9 +170,11 @@ CONFIG_CUSTOMOCF=n +@@ -164,9 +164,13 @@ CONFIG_CUSTOMOCF=n # Build ISA-L library CONFIG_ISAL=y +CONFIG_ISAL_PATH= ++CONFIG_ISAL_INSTALLED=n # Build ISA-L-crypto library CONFIG_ISAL_CRYPTO=y +CONFIG_ISAL_CRYPTO_PATH= ++CONFIG_ISAL_CRYPTO_INSTALLED=n # Build with IO_URING support CONFIG_URING=n diff --git a/Makefile b/Makefile -index 3aeae41ad..5e249aaa3 100644 +index 657821bf5..bd07e03d0 100644 --- a/Makefile +++ b/Makefile -@@ -18,8 +18,16 @@ DIRS-$(CONFIG_EXAMPLES) += examples +@@ -18,8 +18,12 @@ DIRS-$(CONFIG_EXAMPLES) += examples DIRS-$(CONFIG_APPS) += app DIRS-y += test DIRS-$(CONFIG_IPSEC_MB) += ipsecbuild -+ifeq ($(CONFIG_ISAL),y) +ifeq ($(CONFIG_ISAL_PATH),) DIRS-$(CONFIG_ISAL) += isalbuild +endif -+endif -+ifeq ($(CONFIG_ISAL_CRYPTO),y) +ifeq ($(CONFIG_ISAL_CRYPTO_PATH),) DIRS-$(CONFIG_ISAL_CRYPTO) += isalcryptobuild -+endif +endif DIRS-$(CONFIG_VFIO_USER) += vfiouserbuild DIRS-$(CONFIG_SMA) += proto DIRS-$(CONFIG_XNVME) += xnvmebuild -@@ -63,14 +71,18 @@ DPDK_DEPS += ipsecbuild +@@ -63,14 +67,18 @@ DPDK_DEPS += ipsecbuild endif ifeq ($(CONFIG_ISAL),y) @@ -55,58 +53,63 @@ index 3aeae41ad..5e249aaa3 100644 ifeq ($(CONFIG_VFIO_USER),y) VFIOUSERBUILD = vfiouserbuild diff --git a/configure b/configure -index 26c9b0f4d..8ef548fa8 100755 +index ae05d5c93..80acf5571 100755 --- a/configure +++ b/configure -@@ -62,6 +62,8 @@ function usage() { +@@ -64,6 +64,8 @@ function usage() { echo " --without-idxd Disabled while experimental. Only built for x86 when enabled." echo " --with-crypto Build isa-l-crypto and vbdev crypto module. No path required." echo " --without-crypto Disable isa-l-crypto and vbdev crypto module." -+ echo " --with-isal[=DIR] Don't build isal, use external library" -+ echo " --with-isal-crypto[=DIR] Don't build isal-crypto, use external library" ++ echo " --with-isal[=DIR] Don't build isa-l, use external library instead." ++ echo " --with-isal-crypto[=DIR] Don't build isa-l_crypto, use external library instead." echo " --with-fio[=DIR] Build fio_plugin." echo " --without-fio default: /usr/src/fio" - echo " --with-xnvme Build xNVMe bdev module." -@@ -581,6 +583,26 @@ for i in "$@"; do - --without-fio) - CONFIG[FIO_PLUGIN]=n + echo " --with-cuda Enable the CUDA accel module." +@@ -571,6 +573,28 @@ for i in "$@"; do + --without-cuda) + CONFIG[CUDA]=n ;; + --with-isal) ;& + --with-isal=*) -+ # if specified, set the default so we don't build it -+ CONFIG[ISAL_PATH]="/usr" ++ # if set, set a default value ++ CONFIG[ISAL_PATH]=/usr + if [[ -n ${i#*=} ]] && [[ ${i#*=} != "$i" ]]; then + CONFIG[ISAL_PATH]=${i#*=} + fi + check_dir "--with-isal=${CONFIG[ISAL_PATH]}" + CONFIG[ISAL]=y ++ CONFIG[ISAL_INSTALLED]=y + ;; + --with-isal-crypto) ;& + --with-isal-crypto=*) -+ # if specified, set the default so we don't build it -+ CONFIG[ISAL_CRYPTO_PATH]="/usr" ++ # if set, set a default value ++ CONFIG[ISAL_CRYPTO_PATH]=/usr + if [[ -n ${i#*=} ]] && [[ ${i#*=} != "$i" ]]; then + CONFIG[ISAL_CRYPTO_PATH]=${i#*=} + fi + check_dir "--with-isal-crypto=${CONFIG[ISAL_CRYPTO_PATH]}" + CONFIG[ISAL_CRYPTO]=y ++ CONFIG[ISAL_CRYPTO_INSTALLED]=y + ;; - --with-vtune=*) - check_dir "$i" - CONFIG[VTUNE_DIR]="${i#*=}" -@@ -1228,7 +1250,10 @@ if [[ "${CONFIG[FUZZER]}" = "y" && "$CC_TYPE" != "clang" ]]; then + --with-fio) ;& + --with-fio=*) + if [[ ${i#*=} != "$i" ]]; then +@@ -1207,7 +1231,13 @@ if [[ "${CONFIG[FUZZER]}" = "y" && "$CC_TYPE" != "clang" ]]; then exit 1 fi -if [[ $arch == x86_64* ]] || [[ $arch == aarch64* ]]; then -+if [[ -d "${CONFIG[ISAL_PATH]}" ]]; then ++if [[ "${CONFIG[ISAL_INSTALLED]}" = "y" ]]; then ++ if [[ "${CONFIG[SHARED]}" != "y" ]]; then ++ echo "External isa-l only supported with --with-shared" ++ exit 1 ++ fi + echo "Using ISA-L from ${CONFIG[ISAL_PATH]}" -+ CONFIG[ISAL]=y +elif [[ $arch == x86_64* ]] || [[ $arch == aarch64* ]]; then CONFIG[ISAL]=y # make sure the submodule is initialized if [ ! -f "$rootdir"/isa-l/autogen.sh ]; then -@@ -1266,35 +1291,40 @@ else +@@ -1245,34 +1275,43 @@ else fi # now either configure ISA-L or disable unavailable features @@ -120,7 +123,7 @@ index 26c9b0f4d..8ef548fa8 100755 - fi - if [[ "${CONFIG[SHARED]}" = "y" ]]; then - ISAL_OPTS+=("--enable-shared=yes") -+if [[ ! -d "${CONFIG[ISAL_PATH]}" ]]; then ++if [[ ! "${CONFIG[ISAL_INSTALLED]}" = "y" ]]; then + if [[ "${CONFIG[ISAL]}" = "y" ]]; then + cd $rootdir/isa-l + ISAL_LOG=$rootdir/.spdk-isal.log @@ -137,7 +140,7 @@ index 26c9b0f4d..8ef548fa8 100755 + ISAL_OPTS+=("--prefix=${CONFIG[PREFIX]}") + echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..." + ./autogen.sh &> $ISAL_LOG -+ ./configure CFLAGS="-fPIC -g -O2 -fuse-ld=$LD_TYPE -Wno-unused-command-line-argument" "${ISAL_OPTS[@]}" --enable-shared=no >> $ISAL_LOG 2>&1 ++ ./configure CFLAGS="-fPIC -g -O2 -fuse-ld=$LD_TYPE -Wno-unused-command-line-argument" "${ISAL_OPTS[@]}" >> $ISAL_LOG 2>&1 + echo "done." + cd $rootdir else @@ -145,26 +148,28 @@ index 26c9b0f4d..8ef548fa8 100755 + echo "Without ISA-L, there is no software support for crypto or compression," + echo "so these features will be disabled." + CONFIG[CRYPTO]=n -+ CONFIG[VBDEV_COMPRESS]=n + CONFIG[DPDK_COMPRESSDEV]=n fi - ISAL_OPTS+=("--prefix=${CONFIG[PREFIX]}") - echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..." - ./autogen.sh &> $ISAL_LOG -- ./configure CFLAGS="-fPIC -g -O2 -fuse-ld=$LD_TYPE -Wno-unused-command-line-argument" "${ISAL_OPTS[@]}" --enable-shared=no >> $ISAL_LOG 2>&1 +- ./configure CFLAGS="-fPIC -g -O2 -fuse-ld=$LD_TYPE -Wno-unused-command-line-argument" "${ISAL_OPTS[@]}" >> $ISAL_LOG 2>&1 - echo "done." - cd $rootdir -else - echo "Without ISA-L, there is no software support for crypto or compression," - echo "so these features will be disabled." - CONFIG[CRYPTO]=n -- CONFIG[VBDEV_COMPRESS]=n - CONFIG[DPDK_COMPRESSDEV]=n fi # ISA-L-crypto complements ISA-L functionality, it is only enabled together with ISA-L -if [[ "${CONFIG[ISAL]}" = "y" ]]; then -+if [[ -d "${CONFIG[ISAL_CRYPTO_PATH]}" ]]; then ++if [[ "${CONFIG[ISAL_CRYPTO_INSTALLED]}" = "y" ]]; then ++ if [[ "${CONFIG[SHARED]}" != "y" ]]; then ++ echo "External isa-l_crypto only supported with --with-shared" ++ exit 1 ++ fi + echo "Using isa-l_crypto from ${CONFIG[ISAL_CRYPTO_PATH]}" + CONFIG[ISAL_CRYPTO]=y +elif [[ "${CONFIG[ISAL]}" = "y" ]]; then @@ -172,191 +177,277 @@ index 26c9b0f4d..8ef548fa8 100755 echo "ISA-L-crypto is required but was not found, please init the submodule with:" echo " git submodule update --init" diff --git a/dpdkbuild/Makefile b/dpdkbuild/Makefile -index 64da6cc32..a88c8a6ec 100644 +index ab2de2339..6eae8208e 100644 --- a/dpdkbuild/Makefile +++ b/dpdkbuild/Makefile -@@ -108,8 +108,8 @@ DPDK_DRIVERS += compress compress/isal - ifeq ($(CONFIG_VBDEV_COMPRESS_MLX5),y) - DPDK_DRIVERS += compress/mlx5 - endif --DPDK_CFLAGS += -I$(ISAL_DIR) -I$(ISAL_BUILD_DIR) --DPDK_LDFLAGS += -L$(ISAL_DIR)/.libs -lisal -+DPDK_CFLAGS += -I$(ISAL_DIR) -I$(ISAL_DIR)/include -I$(ISAL_BUILD_DIR) -+DPDK_LDFLAGS += -L$(ISAL_DIR)/.libs -L$(ISAL_DIR)/lib64 -lisal +@@ -99,8 +99,13 @@ endif + ifeq ($(CONFIG_DPDK_COMPRESSDEV),y) + DPDK_DRIVERS += compress compress/isal + DPDK_LIBS += compressdev ++ifeq ($(CONFIG_ISAL_PATH),) + DPDK_CFLAGS += -I$(ISAL_DIR) -I$(ISAL_BUILD_DIR) + DPDK_LDFLAGS += -L$(ISAL_DIR)/.libs -lisal ++else ++DPDK_CFLAGS += -I$(ISAL_DIR)/include ++DPDK_LDFLAGS += -L$(ISAL_DIR)/lib64 -lisal ++endif endif DPDK_ENABLED_DRIVERS = $(shell echo $(DPDK_DRIVERS) | sed -E "s/ +/,/g") +diff --git a/include/spdk/isa-l-crypto.h b/include/spdk/isa-l-crypto.h +new file mode 100644 +index 000000000..79c9ee60d +--- /dev/null ++++ b/include/spdk/isa-l-crypto.h +@@ -0,0 +1,35 @@ ++/* SPDX-License-Identifier: BSD-3-Clause ++ * Copyright (C) 2025 Google LLC ++ * All rights reserved. ++ */ ++ ++/** \file ++ * Wrapper for isa-l_crypto headers ++ */ ++ ++#ifndef SPDK_ISAL_CRYPTO_H ++#define SPDK_ISAL_CRYPTO_H ++ ++#include "spdk/config.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#ifndef SPDK_CONFIG_ISAL_CRYPTO ++#error include/spdk/isa-l-crypto.h included when ISA-L-crypto is disabled! ++#endif ++ ++#ifdef SPDK_CONFIG_ISAL_CRYPTO_INSTALLED ++#include ++#include ++#else ++#include "../isa-l-crypto/include/isa-l_crypto/aes_xts.h" ++#include "../isa-l-crypto/include/isa-l_crypto/isal_crypto_api.h" ++#endif ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/include/spdk/isa-l.h b/include/spdk/isa-l.h +new file mode 100644 +index 000000000..ff362fb5c +--- /dev/null ++++ b/include/spdk/isa-l.h +@@ -0,0 +1,40 @@ ++/* SPDX-License-Identifier: BSD-3-Clause ++ * Copyright (C) 2025 Google LLC ++ * All rights reserved. ++ */ ++ ++/** \file ++ * Wrapper for isa-l headers ++ */ ++ ++#ifndef SPDK_ISAL_H ++#define SPDK_ISAL_H ++ ++#include "spdk/config.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#ifndef SPDK_CONFIG_ISAL ++#error include/spdk/isa-l.h included when ISA-L is disabled! ++#endif ++ ++#define SPDK_HAVE_ISAL ++#ifdef SPDK_CONFIG_ISAL_INSTALLED ++#include ++#include ++#include ++#include ++#else ++#include "../isa-l/include/crc.h" ++#include "../isa-l/include/crc64.h" ++#include "../isa-l/include/igzip_lib.h" ++#include "../isa-l/include/raid.h" ++#endif ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif diff --git a/lib/accel/Makefile b/lib/accel/Makefile -index 0d4cb1239..840a031a1 100644 +index 7065e1e45..b762c7c76 100644 --- a/lib/accel/Makefile +++ b/lib/accel/Makefile -@@ -18,6 +18,8 @@ ifeq ($(CONFIG_HAVE_LZ4),y) +@@ -18,6 +18,10 @@ ifeq ($(CONFIG_HAVE_LZ4),y) LOCAL_SYS_LIBS += -llz4 endif -+LOCAL_SYS_LIBS += -L$(ISAL_CRYPTO_DIR)/lib64 -lisal_crypto ++ifeq ($(CONFIG_ISAL_CRYPTO),y) ++LOCAL_SYS_LIBS += -L$(ISAL_CRYPTO_LIB_DIR) -lisal_crypto ++endif + SPDK_MAP_FILE = $(abspath $(CURDIR)/spdk_accel.map) include $(SPDK_ROOT_DIR)/mk/spdk.lib.mk diff --git a/lib/accel/accel_sw.c b/lib/accel/accel_sw.c -index d7e2dfff9..03b1dcb4c 100644 +index e9e9b5a4d..3bcdc9839 100644 --- a/lib/accel/accel_sw.c +++ b/lib/accel/accel_sw.c -@@ -24,12 +24,21 @@ +@@ -24,10 +24,9 @@ #endif #ifdef SPDK_CONFIG_ISAL -+#ifdef SPDK_CONFIG_ISAL_PATH -+#include -+#else - #include "../isa-l/include/igzip_lib.h" -+#endif +-#include "../isa-l/include/igzip_lib.h" ++#include "spdk/isa-l.h" #ifdef SPDK_CONFIG_ISAL_CRYPTO -+#ifdef SPDK_CONFIG_ISAL_CRYPTO_PATH -+#include "isa-l-crypto/aes_xts.h" -+#include "isa-l-crypto/isal_crypto_api.h" -+#else - #include "../isa-l-crypto/include/aes_xts.h" - #include "../isa-l-crypto/include/isal_crypto_api.h" +-#include "../isa-l-crypto/include/isa-l_crypto/aes_xts.h" +-#include "../isa-l-crypto/include/isa-l_crypto/isal_crypto_api.h" ++#include "spdk/isa-l-crypto.h" #endif #endif -+#endif - /* Per the AES-XTS spec, the size of data unit cannot be bigger than 2^20 blocks, 128b each block */ - #define ACCEL_AES_XTS_MAX_BLOCK_SIZE (1 << 24) -diff --git a/lib/env_dpdk/env.mk b/lib/env_dpdk/env.mk -index f71de7f48..a45a019df 100644 ---- a/lib/env_dpdk/env.mk -+++ b/lib/env_dpdk/env.mk -@@ -171,7 +171,7 @@ endif - endif - - ifeq ($(CONFIG_VBDEV_COMPRESS),y) --DPDK_PRIVATE_LINKER_ARGS += -lisal -L$(ISAL_DIR)/.libs -+DPDK_PRIVATE_LINKER_ARGS += -lisal -L$(ISAL_DIR)/.libs -L$(ISAL_DIR)/lib64 - ifeq ($(CONFIG_VBDEV_COMPRESS_MLX5),y) - DPDK_PRIVATE_LINKER_ARGS += -lmlx5 -libverbs - endif diff --git a/lib/util/Makefile b/lib/util/Makefile -index e9daa2623..c2fa28734 100644 +index 272ca555a..3673d4572 100644 --- a/lib/util/Makefile +++ b/lib/util/Makefile -@@ -22,6 +22,8 @@ ifeq ($(CONFIG_HAVE_UUID_GENERATE_SHA1), n) +@@ -22,6 +22,10 @@ ifeq ($(CONFIG_HAVE_UUID_GENERATE_SHA1), n) LOCAL_SYS_LIBS += -lssl endif -+LOCAL_SYS_LIBS += -L$(ISAL_DIR)/lib64 -lisal ++ifeq ($(CONFIG_ISAL),y) ++LOCAL_SYS_LIBS += -L$(ISAL_LIB_DIR) -lisal ++endif + CFLAGS += -Wpointer-arith SPDK_MAP_FILE = $(abspath $(CURDIR)/spdk_util.map) diff --git a/lib/util/crc16.c b/lib/util/crc16.c -index f085a2851..a5e6937ca 100644 +index f085a2851..1ac00a6b4 100644 --- a/lib/util/crc16.c +++ b/lib/util/crc16.c -@@ -11,7 +11,12 @@ +@@ -11,7 +11,7 @@ */ #ifdef SPDK_CONFIG_ISAL -+#ifdef SPDK_CONFIG_ISAL_PATH -+#include -+#else - #include "isa-l/include/crc.h" -+#endif -+ +-#include "isa-l/include/crc.h" ++#include "spdk/isa-l.h" uint16_t spdk_crc16_t10dif(uint16_t init_crc, const void *buf, size_t len) diff --git a/lib/util/crc64.c b/lib/util/crc64.c -index b1a37af35..31bd7bd3c 100644 +index b1a37af35..8b9cb490b 100644 --- a/lib/util/crc64.c +++ b/lib/util/crc64.c -@@ -7,7 +7,11 @@ +@@ -7,7 +7,7 @@ #include "spdk/crc64.h" #ifdef SPDK_CONFIG_ISAL -+#ifdef SPDK_CONFIG_ISAL_PATH -+#include -+#else - #include "isa-l/include/crc64.h" -+#endif +-#include "isa-l/include/crc64.h" ++#include "spdk/isa-l.h" uint64_t spdk_crc64_nvme(const void *buf, size_t len, uint64_t crc) diff --git a/lib/util/crc_internal.h b/lib/util/crc_internal.h -index b432d0d7b..f9979249f 100644 +index b432d0d7b..b55ac798a 100644 --- a/lib/util/crc_internal.h +++ b/lib/util/crc_internal.h -@@ -10,7 +10,11 @@ +@@ -9,8 +9,7 @@ + #include "spdk/config.h" #ifdef SPDK_CONFIG_ISAL - #define SPDK_HAVE_ISAL +-#define SPDK_HAVE_ISAL -#include -+#ifdef SPDK_CONFIG_ISAL_PATH -+#include -+#else -+#include "isa-l/include/crc.h" -+#endif ++#include "spdk/isa-l.h" #elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) #define SPDK_HAVE_ARM_CRC #include diff --git a/lib/util/xor.c b/lib/util/xor.c -index 07eca5f50..2b15aea3b 100644 +index 07eca5f50..ce51f762d 100644 --- a/lib/util/xor.c +++ b/lib/util/xor.c -@@ -85,7 +85,11 @@ xor_gen_basic(void *dest, void **sources, uint32_t n, uint32_t len) +@@ -85,7 +85,7 @@ xor_gen_basic(void *dest, void **sources, uint32_t n, uint32_t len) } #ifdef SPDK_CONFIG_ISAL -+#ifdef SPDK_CONFIG_ISAL_PATH -+#include -+#else - #include "isa-l/include/raid.h" -+#endif +-#include "isa-l/include/raid.h" ++#include "spdk/isa-l.h" #define SPDK_XOR_BUF_ALIGN 32 diff --git a/mk/spdk.common.mk b/mk/spdk.common.mk -index 19f0192c2..65ef68f50 100644 +index 5a98c9636..6b48a6133 100644 --- a/mk/spdk.common.mk +++ b/mk/spdk.common.mk -@@ -179,23 +179,31 @@ endif +@@ -179,25 +179,39 @@ endif IPSEC_MB_DIR=$(CONFIG_IPSEC_MB_DIR) +ifeq ($(CONFIG_ISAL_PATH),) ISAL_DIR=$(SPDK_ROOT_DIR)/isa-l ++ISAL_INCLUDE_DIR=$(ISAL_DIR)/.. ++ISAL_LIB_DIR=$(ISAL_DIR)/.libs +else -+ISAL_DIR=$(CONFIG_ISAL_PATH) ++ISAL_INCLUDE_DIR=$(CONFIG_ISAL_PATH)/include ++ISAL_LIB_DIR=$(CONFIG_ISAL_PATH)/lib64 +endif +ifeq ($(CONFIG_ISAL_CRYPTO_PATH),) ISAL_CRYPTO_DIR=$(SPDK_ROOT_DIR)/isa-l-crypto ++ISAL_CRYPTO_INCLUDE_DIR=$(ISAL_CRYPTO_DIR)/.. ++ISAL_CRYPTO_LIB_DIR=$(ISAL_CRYPTO_DIR)/.libs +else -+ISAL_CRYPTO_DIR=$(CONFIG_ISAL_CRYPTO_PATH) ++ISAL_CRYPTO_INCLUDE_DIR=$(CONFIG_ISAL_CRYPTO_PATH)/include ++ISAL_CRYPTO_LIB_DIR=$(CONFIG_ISAL_CRYPTO_PATH)/lib64 +endif ISAL_BUILD_DIR=$(SPDK_ROOT_DIR)/isalbuild ISAL_CRYPTO_BUILD_DIR=$(SPDK_ROOT_DIR)/isalcryptobuild --ifeq ($(CONFIG_ISAL), y) + ifeq ($(CONFIG_ISAL), y) -COMMON_CFLAGS += -I$(ISAL_DIR)/.. -I$(ISAL_BUILD_DIR) -+ifeq ($(CONFIG_ISAL),y) -+COMMON_CFLAGS += -I$(ISAL_DIR)/.. -I$(ISAL_DIR)/include -I$(ISAL_BUILD_DIR) ++COMMON_CFLAGS += -I$(ISAL_INCLUDE_DIR) -I$(ISAL_BUILD_DIR) ifeq ($(CONFIG_SHARED),y) -SYS_LIBS += -L$(ISAL_DIR)/.libs -lisal -LDFLAGS += -Wl,-rpath=$(ISAL_DIR)/.libs -+SYS_LIBS += -L$(ISAL_DIR)/.libs -L$(ISAL_DIR)/lib64 -lisal -+LDFLAGS += -Wl,-rpath=$(ISAL_DIR)/.lib -Wl,-rpath=$(ISAL_DIR)/lib64 ++SYS_LIBS += -L$(ISAL_LIB_DIR) -lisal ++LDFLAGS += -Wl,-rpath=$(ISAL_LIB_DIR) else - SYS_LIBS += $(ISAL_DIR)/.libs/libisal.a +-SYS_LIBS += $(ISAL_DIR)/.libs/libisal.a ++SYS_LIBS += $(ISAL_LIB_DIR)/libisal.a endif -ifeq ($(CONFIG_ISAL_CRYPTO), y) +-COMMON_CFLAGS += -I$(ISAL_CRYPTO_DIR)/.. -I$(ISAL_CRYPTO_BUILD_DIR) +ifeq ($(CONFIG_ISAL_CRYPTO),y) - COMMON_CFLAGS += -I$(ISAL_CRYPTO_DIR)/.. -I$(ISAL_CRYPTO_BUILD_DIR) ++COMMON_CFLAGS += -I$(ISAL_CRYPTO_INCLUDE_DIR) -I$(ISAL_CRYPTO_BUILD_DIR) ifeq ($(CONFIG_SHARED),y) -SYS_LIBS += -L$(ISAL_CRYPTO_DIR)/.libs -lisal_crypto -LDFLAGS += -Wl,-rpath=$(ISAL_CRYPTO_DIR)/.libs -+SYS_LIBS += -L$(ISAL_CRYPTO_DIR)/.libs -L$(ISAL_CRYPTO_DIR)/lib64 -lisal_crypto -+LDFLAGS += -Wl,-rpath=$(ISAL_CRYPTO_DIR)/.libs -Wl,-rpath=$(ISAL_CRYPTO_DIR)/lib64 ++SYS_LIBS += -L$(ISAL_CRYPTO_LIB_DIR) -lisal_crypto ++LDFLAGS += -Wl,-rpath=$(ISAL_CRYPTO_LIB_DIR) else - SYS_LIBS += $(ISAL_CRYPTO_DIR)/.libs/libisal_crypto.a +-SYS_LIBS += $(ISAL_CRYPTO_DIR)/.libs/libisal_crypto.a ++SYS_LIBS += $(ISAL_CRYPTO_LIB_DIR)/libisal_crypto.a + endif endif + endif +diff --git a/test/cpp_headers/Makefile b/test/cpp_headers/Makefile +index 80e3af505..32376779d 100644 +--- a/test/cpp_headers/Makefile ++++ b/test/cpp_headers/Makefile +@@ -13,6 +13,12 @@ HEADERS := $(wildcard $(SPDK_ROOT_DIR)/include/spdk/*.h) + # on FreeBSD, we want to ignore queue_extras.h entirely. + HEADERS := $(filter-out $(SPDK_ROOT_DIR)/include/spdk/queue_extras.h,$(HEADERS)) + HEADERS := $(filter-out $(SPDK_ROOT_DIR)/include/spdk/vfu_target.h,$(HEADERS)) ++ifneq ($(CONFIG_ISAL),y) ++HEADERS := $(filter-out $(SPDK_ROOT_DIR)/include/spdk/isa-l.h,$(HEADERS)) ++endif ++ifneq ($(CONFIG_ISAL_CRYPTO),y) ++HEADERS := $(filter-out $(SPDK_ROOT_DIR)/include/spdk/isa-l-crypto.h,$(HEADERS)) ++endif + CXX_SRCS := $(patsubst %.h,%.cpp,$(notdir $(HEADERS))) + + install : all diff --git a/deps/patches/spdk/0002_spdk_rwf_nowait.patch b/deps/patches/spdk/0002_spdk_rwf_nowait.patch deleted file mode 100644 index e65bb55e32b..00000000000 --- a/deps/patches/spdk/0002_spdk_rwf_nowait.patch +++ /dev/null @@ -1,78 +0,0 @@ -diff --git a/CONFIG b/CONFIG -index 89c34e90b..02ce04692 100644 ---- a/CONFIG -+++ b/CONFIG -@@ -256,3 +256,6 @@ CONFIG_COPY_FILE_RANGE=n - - # liblz4 is available - CONFIG_HAVE_LZ4=n -+ -+# aio_rw_flags are enabled -+CONFIG_HAVE_AIO_RW_FLAGS=n -diff --git a/configure b/configure -index 26c9b0f4d..d8daedc37 100755 ---- a/configure -+++ b/configure -@@ -860,6 +860,22 @@ if [[ $sys_name != "Linux" ]]; then - fi - fi - -+if echo -e '#include \n' \ -+ '#include \n' \ -+ '#include \n' \ -+ '#ifndef RWF_NOWAIT\n' \ -+ '#error "No RWF_NOWAIT is defined"\n' \ -+ '#endif\n' \ -+ 'int main(int argc, char **argv) {\n' \ -+ 'return offsetof(struct iocb, aio_rw_flags);\n}\n' \ -+ | "${BUILD_CMD[@]}" -c - ; then -+ echo HAVE_AIO_RW_FLAGS=YES -+ CONFIG[HAVE_AIO_RW_FLAGS]="y" -+else -+ echo HAVE_AIO_RW_FLAGS=NO -+ CONFIG[HAVE_AIO_RW_FLAGS]="n" -+fi -+ - if [ "${CONFIG[RDMA]}" = "y" ]; then - if [[ ! "${CONFIG[RDMA_PROV]}" == "verbs" ]] && [[ ! "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]]; then - echo "Invalid RDMA provider specified, must be \"verbs\" or \"mlx5_dv\"" -diff --git a/module/bdev/aio/bdev_aio.c b/module/bdev/aio/bdev_aio.c -index b51d6c83a..01914fb9d 100644 ---- a/module/bdev/aio/bdev_aio.c -+++ b/module/bdev/aio/bdev_aio.c -@@ -64,7 +64,7 @@ struct file_disk { - struct spdk_bdev disk; - char *filename; - int fd; --#ifdef RWF_NOWAIT -+#ifdef SPDK_CONFIG_HAVE_AIO_RW_FLAGS - bool use_nowait; - #endif - TAILQ_ENTRY(file_disk) link; -@@ -116,7 +116,7 @@ bdev_aio_open(struct file_disk *disk) - { - int fd; - int io_flag = disk->readonly ? O_RDONLY : O_RDWR; --#ifdef RWF_NOWAIT -+#ifdef SPDK_CONFIG_HAVE_AIO_RW_FLAGS - struct stat st; - #endif - -@@ -134,7 +134,7 @@ bdev_aio_open(struct file_disk *disk) - - disk->fd = fd; - --#ifdef RWF_NOWAIT -+#ifdef SPDK_CONFIG_HAVE_AIO_RW_FLAGS - /* Some aio operations can block, for example if number outstanding - * I/O exceeds number of block layer tags. But not all files can - * support RWF_NOWAIT flag. So use RWF_NOWAIT on block devices only. -@@ -212,7 +212,7 @@ bdev_aio_submit_io(enum spdk_bdev_io_type type, struct file_disk *fdisk, - io_set_eventfd(iocb, aio_ch->group_ch->efd); - } - iocb->data = aio_task; --#ifdef RWF_NOWAIT -+#ifdef SPDK_CONFIG_HAVE_AIO_RW_FLAGS - if (fdisk->use_nowait) { - iocb->aio_rw_flags = RWF_NOWAIT; - } diff --git a/utils/build.config b/utils/build.config index f5febb67d71..590b12331bb 100644 --- a/utils/build.config +++ b/utils/build.config @@ -7,7 +7,7 @@ fused=v1.0.0 pmdk=2.1.3 isal=v2.31.1 isal_crypto=v2.25.0 -spdk=v24.09 +spdk=v26.01 ofi=v1.22.0 mercury=v2.4.1 protobufc=v1.3.3 @@ -26,7 +26,7 @@ protobufc=https://github.com/protobuf-c/protobuf-c.git ucx=https://github.com/openucx/ucx.git [patch_versions] -spdk=0001_3428322b812fe31cc3e1d0308a7f5bd4b06b9886.diff,0002_spdk_rwf_nowait.patch,0003_external_isal.patch +spdk=0001_external_isal_v26.01.patch mercury=0001_dep_versions.patch,0002_ofi_counters.patch,0003_ofi_auth_key.patch pmdk=https://github.com/daos-stack/pmdk/commit/bb048d67ccd07609f86a5e8b3c6ad54414d593ee.diff,https://github.com/daos-stack/pmdk/commit/69925cf455ef672c4cbdbdb13bef7ae581e67045.diff,https://github.com/daos-stack/pmdk/commit/6805ed4f8d1a4e4c6070bf8b68f0dffef08b9c99.diff argobots=0001_411e5b344642ebc82190fd8b125db512e5b449d1.diff,0002_bb0c908abfac4bfe37852eee621930634183c6aa.diff diff --git a/utils/rpms/daos-spdk.changelog b/utils/rpms/daos-spdk.changelog index 181aa36bc16..ab18725c457 100644 --- a/utils/rpms/daos-spdk.changelog +++ b/utils/rpms/daos-spdk.changelog @@ -1,3 +1,7 @@ +* Thu May 07 2026 Signed-off-by: Tom Nabarro - 3.0.0-1 +- Upgrade to SPDK v26.01 +- Update external ISA-L patch for v26.01 compatibility + * Tue Nov 25 2025 Jeff Olivier - 2.0.0-1 - Upgrade to SPDK 24.09. - Restore missing changelog diff --git a/utils/rpms/package_info.sh b/utils/rpms/package_info.sh index f41ebc4c082..74cf3dbc399 100644 --- a/utils/rpms/package_info.sh +++ b/utils/rpms/package_info.sh @@ -59,7 +59,7 @@ export isal_full="${isal_version}-${isal_release}" export isal_crypto_version="2.25.0" export isal_crypto_release="1${distro_name}" export isal_crypto_full="${isal_crypto_version}-${isal_crypto_release}" -export daos_spdk_version="2.0.0" +export daos_spdk_version="3.0.0" export daos_spdk_release="1${distro_name}" export daos_spdk_full="${daos_spdk_version}-${daos_spdk_release}" export fused_version="1.0.0" From 35bd3e6236ca3a09c2b4297c2897836d64604a94 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Fri, 8 May 2026 14:46:21 +0100 Subject: [PATCH 02/16] update isa-l-crypto version in line with SPDK v26.01 Signed-off-by: Tom Nabarro --- utils/build.config | 2 +- utils/rpms/isa-l_crypto.changelog | 3 +++ utils/rpms/package_info.sh | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/utils/build.config b/utils/build.config index 590b12331bb..f75baf259d5 100644 --- a/utils/build.config +++ b/utils/build.config @@ -6,7 +6,7 @@ argobots=v1.2 fused=v1.0.0 pmdk=2.1.3 isal=v2.31.1 -isal_crypto=v2.25.0 +isal_crypto=v2.26 spdk=v26.01 ofi=v1.22.0 mercury=v2.4.1 diff --git a/utils/rpms/isa-l_crypto.changelog b/utils/rpms/isa-l_crypto.changelog index fa390eeb012..2c7839ea6f6 100644 --- a/utils/rpms/isa-l_crypto.changelog +++ b/utils/rpms/isa-l_crypto.changelog @@ -1,3 +1,6 @@ +* Fri May 08 2026 Tom Nabarro - 2.26.0-1 +* Update DAOS to 2.26 release to mirror SPDK v26.01 submodule + * Thu Nov 6 2025 Jeff Olivier - 2.25.0-1 - Update DAOS to 2.25.0 release - Restore change log missing since 2.24.0-1 diff --git a/utils/rpms/package_info.sh b/utils/rpms/package_info.sh index 74cf3dbc399..87c0b1816ef 100644 --- a/utils/rpms/package_info.sh +++ b/utils/rpms/package_info.sh @@ -56,7 +56,7 @@ export pmdk_full="${pmdk_version}-${pmdk_release}" export isal_version="2.31.1" export isal_release="8${distro_name}" export isal_full="${isal_version}-${isal_release}" -export isal_crypto_version="2.25.0" +export isal_crypto_version="2.26" export isal_crypto_release="1${distro_name}" export isal_crypto_full="${isal_crypto_version}-${isal_crypto_release}" export daos_spdk_version="3.0.0" From d2163933a51d0d31c124f72f7dbce7a448e2ffd3 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Mon, 11 May 2026 13:24:29 +0100 Subject: [PATCH 03/16] fix isa-l_crypto include dir path Signed-off-by: Tom Nabarro --- deps/patches/spdk/0001_external_isal_v26.01.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deps/patches/spdk/0001_external_isal_v26.01.patch b/deps/patches/spdk/0001_external_isal_v26.01.patch index b1ac642e911..9828fd2e07d 100644 --- a/deps/patches/spdk/0001_external_isal_v26.01.patch +++ b/deps/patches/spdk/0001_external_isal_v26.01.patch @@ -223,8 +223,8 @@ index 000000000..79c9ee60d +#endif + +#ifdef SPDK_CONFIG_ISAL_CRYPTO_INSTALLED -+#include -+#include ++#include ++#include +#else +#include "../isa-l-crypto/include/isa-l_crypto/aes_xts.h" +#include "../isa-l-crypto/include/isa-l_crypto/isal_crypto_api.h" From 6a3d32cbfee7fb693f6c2ea514b8092631627216 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Mon, 11 May 2026 18:41:08 +0100 Subject: [PATCH 04/16] address API changes and add uv python package to build requirements Signed-off-by: Tom Nabarro --- requirements-build.txt | 1 + src/bio/bio_device.c | 2 +- src/control/lib/spdk/ctests/nvme_control_ut.c | 6 +++--- src/control/lib/spdk/src/nvme_control_common.c | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/requirements-build.txt b/requirements-build.txt index 952e8a520db..25df8cd9aab 100644 --- a/requirements-build.txt +++ b/requirements-build.txt @@ -3,3 +3,4 @@ ninja meson distro pyelftools +uv diff --git a/src/bio/bio_device.c b/src/bio/bio_device.c index 54baed2db69..95ac3e10f09 100644 --- a/src/bio/bio_device.c +++ b/src/bio/bio_device.c @@ -397,7 +397,7 @@ pci_device_cb(void *ctx, struct spdk_pci_device *pci_device) /* Populate pci_dev_type and socket_id */ - *opts->socket_id = spdk_pci_device_get_socket_id(pci_device); + *opts->socket_id = spdk_pci_device_get_numa_id(pci_device); device_type = spdk_pci_device_get_type(pci_device); if (device_type == NULL) { diff --git a/src/control/lib/spdk/ctests/nvme_control_ut.c b/src/control/lib/spdk/ctests/nvme_control_ut.c index 4bdcbe16d29..94eb5745ab7 100644 --- a/src/control/lib/spdk/ctests/nvme_control_ut.c +++ b/src/control/lib/spdk/ctests/nvme_control_ut.c @@ -1,6 +1,6 @@ /** * (C) Copyright 2019-2021 Intel Corporation. - * (C) Copyright 2025 Hewlett Packard Enterprise Development LP + * (C) Copyright 2025-2026 Hewlett Packard Enterprise Development LP * * SPDX-License-Identifier: BSD-2-Clause-Patent */ @@ -97,7 +97,7 @@ mock_spdk_nvme_ctrlr_get_pci_device(struct spdk_nvme_ctrlr *ctrlr) } static int -mock_spdk_pci_device_get_socket_id(struct spdk_pci_device *dev) +mock_spdk_pci_device_get_numa_id(struct spdk_pci_device *dev) { (void)dev; return 1; @@ -217,7 +217,7 @@ test_collect(void **state) assert_null(test_ret->ctrlrs); _collect(test_ret, &mock_copy_ctrlr_data, &mock_spdk_nvme_ctrlr_get_pci_device, - &mock_spdk_pci_device_get_socket_id, &mock_spdk_pci_device_get_type); + &mock_spdk_pci_device_get_numa_id, &mock_spdk_pci_device_get_type); if (test_ret->rc != 0) fprintf(stderr, "collect err: %s\n", test_ret->info); diff --git a/src/control/lib/spdk/src/nvme_control_common.c b/src/control/lib/spdk/src/nvme_control_common.c index 41d859e1a19..11bd00b4bc4 100644 --- a/src/control/lib/spdk/src/nvme_control_common.c +++ b/src/control/lib/spdk/src/nvme_control_common.c @@ -1,6 +1,6 @@ /** * (C) Copyright 2019-2023 Intel Corporation. - * (C) Copyright 2025 Hewlett Packard Enterprise Development LP + * (C) Copyright 2025-2026 Hewlett Packard Enterprise Development LP * * SPDX-License-Identifier: BSD-2-Clause-Patent */ @@ -555,7 +555,7 @@ collect(void) ret = init_ret(); _collect(ret, ©_ctrlr_data, &spdk_nvme_ctrlr_get_pci_device, - &spdk_pci_device_get_socket_id, &spdk_pci_device_get_type); + &spdk_pci_device_get_numa_id, &spdk_pci_device_get_type); return ret; } From dcaa0305deac5c2bd051d39b5b873ff513cbd422 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Tue, 12 May 2026 10:51:54 +0100 Subject: [PATCH 05/16] only patch elf files, specifically not python MCP scripts Signed-off-by: Tom Nabarro --- site_scons/prereq_tools/base.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/site_scons/prereq_tools/base.py b/site_scons/prereq_tools/base.py index de0bec1e65a..5c124045339 100644 --- a/site_scons/prereq_tools/base.py +++ b/site_scons/prereq_tools/base.py @@ -1474,10 +1474,19 @@ def _patch_rpaths(self): if lib.endswith(".py"): continue full_lib = os.path.join(path, lib) + # Check if file is an ELF binary before attempting to patch + try: + with open(full_lib, 'rb') as f: + magic = f.read(4) + if magic != b'\x7fELF': + # Not an ELF file, skip silently (e.g., Python script wrappers) + continue + except (IOError, OSError): + continue cmd = ['patchelf', '--set-rpath', ':'.join(rpath), full_lib] res = RUNNER.run_commands([cmd]) if not res: - if lib in ('libspdk.so', 'spdk_cli', 'spdk_rpc'): + if lib in ('libspdk.so', 'spdk_cli', 'spdk_rpc', 'spdk-mcp', 'spdk-sma'): print(f'Skipped patching {full_lib}') else: raise BuildFailure(f'Error running patchelf on {full_lib}') From 832ca617a2942adf40092ade373439d386149cee Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Tue, 12 May 2026 13:38:22 +0100 Subject: [PATCH 06/16] remove dpdk --no-telemetry opt now set by default in SPDK v26.1 Signed-off-by: Tom Nabarro --- src/common/control.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/common/control.c b/src/common/control.c index 75f5ee7db0d..81df0a9862e 100644 --- a/src/common/control.c +++ b/src/common/control.c @@ -92,14 +92,13 @@ dpdk_cli_build_opts(int eal_level, int default_level) "--log-level=user5:%d " "--log-level=user6:%d " "--log-level=user7:%d " - "--log-level=user8:%d " - "--no-telemetry", - eal_level, default_level, default_level, default_level, default_level, + "--log-level=user8:%d " eal_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, - default_level, default_level, default_level, default_level); + default_level, default_level, default_level, default_level, default_level, + default_level, default_level, default_level); if (ret < 0 || ret >= sizeof(dpdk_cli_opts_buffer)) return NULL; From 28a560a338a34bfc05b4b844e0a0c9b7a70ffcf3 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Tue, 12 May 2026 13:38:22 +0100 Subject: [PATCH 07/16] remove dpdk --no-telemetry opt now set by default in SPDK v26.1 Signed-off-by: Tom Nabarro --- src/common/control.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/control.c b/src/common/control.c index 81df0a9862e..c40ad1b82fe 100644 --- a/src/common/control.c +++ b/src/common/control.c @@ -92,13 +92,13 @@ dpdk_cli_build_opts(int eal_level, int default_level) "--log-level=user5:%d " "--log-level=user6:%d " "--log-level=user7:%d " - "--log-level=user8:%d " eal_level, + "--log-level=user8:%d", + eal_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, default_level, - default_level, default_level, default_level, default_level, default_level, - default_level, default_level, default_level); + default_level, default_level, default_level, default_level); if (ret < 0 || ret >= sizeof(dpdk_cli_opts_buffer)) return NULL; From 74eb70c5bea8ec8b16680ed3f3e492ad74f19ef3 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Tue, 12 May 2026 17:50:45 +0100 Subject: [PATCH 08/16] update docs for uv dep and spdk/dpdk log level envs Signed-off-by: Tom Nabarro --- docs/QSG/build_from_scratch.md | 5 +++++ docs/admin/env_variables.md | 2 ++ 2 files changed, 7 insertions(+) diff --git a/docs/QSG/build_from_scratch.md b/docs/QSG/build_from_scratch.md index f0031e2698e..961f79cc35c 100644 --- a/docs/QSG/build_from_scratch.md +++ b/docs/QSG/build_from_scratch.md @@ -87,6 +87,11 @@ PATH. $ python3 -m pip install -r requirements-build.txt ``` +**Note:** Starting with SPDK v26.01, the 'uv' Python package manager is required to build SPDK's +Python modules. This is automatically installed when you run the above `pip install -r requirements-build.txt` +command. If you encounter "uv: command not found" errors during the build, ensure you have run this +step or manually install uv with `pip install uv`. + ## Build DAOS Once all prerequisites installed and the sources are downloaded, diff --git a/docs/admin/env_variables.md b/docs/admin/env_variables.md index 12a00d406de..d21d9d57338 100644 --- a/docs/admin/env_variables.md +++ b/docs/admin/env_variables.md @@ -55,6 +55,8 @@ Environment variables in this section only apply to the server side. |DAOS\_DTX\_BATCHED\_ULT\_MAX|The max count of DTX batched commit ULTs. The valid range is [0, unlimited). 0 means to commit DTX synchronously. The default value is 32.| |DAOS\_FORWARD\_NEIGHBOR|Set to enable I/O forwarding on neighbor xstream in the absence of helper threads.| |DAOS\_POOL\_RF|Redundancy factor for the pool. The valid range is [0, 4]. The default value is 2.| +|DAOS\_SPDK\_LOG\_LEVEL|SPDK framework logging level. INTEGER. Valid range [0-4]. 0=DISABLED, 1=ERROR (default), 2=WARN, 3=NOTICE, 4=INFO/DEBUG. Higher levels increase verbosity. Useful for debugging NVMe initialization and SPDK issues. Set in engine config `env_vars` section.| +|DAOS\_DPDK\_LOG\_LEVEL|DPDK (Data Plane Development Kit) logging level. INTEGER. Valid range [1-8]. 1=EMERG, 2=ALERT, 3=CRIT, 4=ERR (default), 5=WARNING, 6=NOTICE, 7=INFO, 8=DEBUG. Higher levels increase verbosity. Useful for debugging DPDK initialization issues. Set in engine config `env_vars` section.| ## Server and Client environment variables From b1d1ffba83153bc926b11e7f19e2f635397385d1 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Tue, 12 May 2026 18:28:41 +0100 Subject: [PATCH 09/16] update daos-spdk version to 26.01 from 3.0.0 Signed-off-by: Tom Nabarro --- utils/rpms/daos-spdk.changelog | 4 ++-- utils/rpms/daos-spdk.sh | 8 ++++---- utils/rpms/daos.spec | 4 ++-- utils/rpms/package_info.sh | 3 ++- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/utils/rpms/daos-spdk.changelog b/utils/rpms/daos-spdk.changelog index ab18725c457..811e1a04c41 100644 --- a/utils/rpms/daos-spdk.changelog +++ b/utils/rpms/daos-spdk.changelog @@ -1,5 +1,5 @@ -* Thu May 07 2026 Signed-off-by: Tom Nabarro - 3.0.0-1 -- Upgrade to SPDK v26.01 +* Thu May 12 2026 Signed-off-by: Tom Nabarro - 26.01-1 +- Upgrade to SPDK v26.01, update version number to match SPDK release version - Update external ISA-L patch for v26.01 compatibility * Tue Nov 25 2025 Jeff Olivier - 2.0.0-1 diff --git a/utils/rpms/daos-spdk.sh b/utils/rpms/daos-spdk.sh index 4a7bed3428c..fc60b3d5523 100755 --- a/utils/rpms/daos-spdk.sh +++ b/utils/rpms/daos-spdk.sh @@ -36,8 +36,8 @@ list_files files "${SL_SPDK_PREFIX}/lib64/daos_srv/libspdk*.so.*" \ clean_bin "${files[@]}" append_install_list "${files[@]}" -TARGET_PATH="${libdir}/daos_srv/dpdk/pmds-24.1" -list_files files "${SL_SPDK_PREFIX}/lib64/daos_srv/dpdk/pmds-24.1/lib*.so.*" +TARGET_PATH="${libdir}/daos_srv/dpdk/pmds-26.0" +list_files files "${SL_SPDK_PREFIX}/lib64/daos_srv/dpdk/pmds-26.0/lib*.so.*" clean_bin "${files[@]}" append_install_list "${files[@]}" @@ -66,8 +66,8 @@ list_files files "${SL_SPDK_PREFIX}/lib64/pkgconfig/daos_spdk.pc" replace_paths "${SL_SPDK_PREFIX}" "${files[@]}" append_install_list "${files[@]}" -TARGET_PATH="${libdir}/daos_srv/dpdk/pmds-24.1" -list_files files "${SL_SPDK_PREFIX}/lib64/daos_srv/dpdk/pmds-24.1/lib*.so" +TARGET_PATH="${libdir}/daos_srv/dpdk/pmds-26.0" +list_files files "${SL_SPDK_PREFIX}/lib64/daos_srv/dpdk/pmds-26.0/lib*.so" append_install_list "${files[@]}" TARGET_PATH="${includedir}/daos_srv/spdk" diff --git a/utils/rpms/daos.spec b/utils/rpms/daos.spec index 8f0309c4823..9adc6ec0bbc 100644 --- a/utils/rpms/daos.spec +++ b/utils/rpms/daos.spec @@ -76,7 +76,7 @@ BuildRequires: capstone-devel %endif %if %{with server} BuildRequires: libaio-devel -BuildRequires: spdk-devel >= 22.01.2 +BuildRequires: spdk-devel >= 26.01 %endif %if (0%{?rhel} >= 8) BuildRequires: isa-l-devel @@ -159,7 +159,7 @@ to optimize performance and cost. %package server Summary: The DAOS server Requires: %{name}%{?_isa} = %{version}-%{release} -Requires: spdk-tools >= 22.01.2 +Requires: spdk-tools >= 26.01 Requires: ndctl # needed to set PMem configuration goals in BIOS through control-plane %if (0%{?suse_version} >= 1500) diff --git a/utils/rpms/package_info.sh b/utils/rpms/package_info.sh index 87c0b1816ef..51d4d01be33 100644 --- a/utils/rpms/package_info.sh +++ b/utils/rpms/package_info.sh @@ -59,7 +59,8 @@ export isal_full="${isal_version}-${isal_release}" export isal_crypto_version="2.26" export isal_crypto_release="1${distro_name}" export isal_crypto_full="${isal_crypto_version}-${isal_crypto_release}" -export daos_spdk_version="3.0.0" +export spdk_major_version="26.01" +export daos_spdk_version=${spdk_major_version} export daos_spdk_release="1${distro_name}" export daos_spdk_full="${daos_spdk_version}-${daos_spdk_release}" export fused_version="1.0.0" From a9fd3bb1cf80b2acceb557c04ced1d35ab165200 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Fri, 15 May 2026 13:45:00 +0100 Subject: [PATCH 10/16] add hatchling to build requirements to avoid SPDK build failure in CI, print SPDK version to INFO in engine log Test-tag: pr full_regression Priority: 2 Signed-off-by: Tom Nabarro --- requirements-build.txt | 1 + src/bio/bio_xstream.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/requirements-build.txt b/requirements-build.txt index 25df8cd9aab..bb5089fa1cc 100644 --- a/requirements-build.txt +++ b/requirements-build.txt @@ -4,3 +4,4 @@ meson distro pyelftools uv +hatchling diff --git a/src/bio/bio_xstream.c b/src/bio/bio_xstream.c index 4054ac61ea5..8c162cc5935 100644 --- a/src/bio/bio_xstream.c +++ b/src/bio/bio_xstream.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "bio_internal.h" #include @@ -219,6 +220,8 @@ bio_spdk_env_init(void) goto out; } + D_INFO("Initialized " SPDK_VERSION_STRING "\n"); + spdk_unaffinitize_thread(); rc = spdk_thread_lib_init(NULL, 0); From 83c58f110cf5ed07dcca4d183e375de85081ce0c Mon Sep 17 00:00:00 2001 From: Tomasz Gromadzki Date: Mon, 18 May 2026 02:56:44 +0000 Subject: [PATCH 11/16] Configure uv to use internal Artifactory PyPI proxy SPDK's Python package installer uses uv, which does not read /etc/pip.conf. Add /etc/uv/uv.toml in the repo-helper scripts for EL8, EL9 and Leap15 to redirect uv to the internal Artifactory PyPI proxy and enable native-tls so uv uses the system CA trust store (where the lab CA is already registered). Without this, uv falls back to pypi.org which is unreachable in lab environments, causing the SPDK build to fail with a connection timeout or an UnknownIssuer TLS error. ref: https://github.com/spdk/spdk/commit/52d23556a881e497ce7ce815391a41cb610eacb9 Signed-off-by: Tomasz Gromadzki --- utils/scripts/helpers/repo-helper-el8.sh | 8 ++++++++ utils/scripts/helpers/repo-helper-el9.sh | 8 ++++++++ utils/scripts/helpers/repo-helper-leap15.sh | 9 +++++++++ 3 files changed, 25 insertions(+) diff --git a/utils/scripts/helpers/repo-helper-el8.sh b/utils/scripts/helpers/repo-helper-el8.sh index 64b37198550..ed5e6a930e6 100755 --- a/utils/scripts/helpers/repo-helper-el8.sh +++ b/utils/scripts/helpers/repo-helper-el8.sh @@ -151,4 +151,12 @@ EOF :sources: - https://${trusted_host}/artifactory/api/gems/rubygems-proxy/ EOF + +# Set up the uv (a part of SPDK installer) +# to use the artifactory as the installation packages source +mkdir -p /etc/uv + cat < /etc/uv/uv.toml +index-url = "https://${trusted_host}/artifactory/api/pypi/pypi-proxy/simple" +native-tls = true +EOF fi diff --git a/utils/scripts/helpers/repo-helper-el9.sh b/utils/scripts/helpers/repo-helper-el9.sh index 2b3cc8e810c..fb989be544c 100644 --- a/utils/scripts/helpers/repo-helper-el9.sh +++ b/utils/scripts/helpers/repo-helper-el9.sh @@ -147,4 +147,12 @@ EOF :sources: - https://${trusted_host}/artifactory/api/gems/rubygems-proxy/ EOF + +# Set up the uv (a part of SPDK installer) +# to use the artifactory as the installation packages source +mkdir -p /etc/uv + cat < /etc/uv/uv.toml +index-url = "https://${trusted_host}/artifactory/api/pypi/pypi-proxy/simple" +native-tls = true +EOF fi diff --git a/utils/scripts/helpers/repo-helper-leap15.sh b/utils/scripts/helpers/repo-helper-leap15.sh index 700839f1517..e30ead448bd 100755 --- a/utils/scripts/helpers/repo-helper-leap15.sh +++ b/utils/scripts/helpers/repo-helper-leap15.sh @@ -190,6 +190,15 @@ if [ -n "$REPO_FILE_URL" ]; then quiet = 1 EOF +# Set up the uv (a part of SPDK installer) +# to use the artifactory as the installation packages source +mkdir -p /etc/uv + cat < /etc/uv/uv.toml +index-url = "https://${trusted_host}/artifactory/api/pypi/pypi-proxy/simple" +native-tls = true +EOF +fi + # Setup RubyGems to use artifactory as the primary installation source. # Prior to setup, it is essential to ensure that Ruby-Dev is installed. # Failure to comply with this procedure will result From 2a7666547d942b492b55347c94c80b15a8dc3742 Mon Sep 17 00:00:00 2001 From: Tomasz Gromadzki Date: Mon, 18 May 2026 03:27:54 +0000 Subject: [PATCH 12/16] Fix: remove redundant fi command Signed-off-by: Tomasz Gromadzki --- utils/scripts/helpers/repo-helper-el8.sh | 2 +- utils/scripts/helpers/repo-helper-el9.sh | 2 +- utils/scripts/helpers/repo-helper-leap15.sh | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/utils/scripts/helpers/repo-helper-el8.sh b/utils/scripts/helpers/repo-helper-el8.sh index ed5e6a930e6..ef7c887e8a6 100755 --- a/utils/scripts/helpers/repo-helper-el8.sh +++ b/utils/scripts/helpers/repo-helper-el8.sh @@ -154,7 +154,7 @@ EOF # Set up the uv (a part of SPDK installer) # to use the artifactory as the installation packages source -mkdir -p /etc/uv + mkdir -p /etc/uv cat < /etc/uv/uv.toml index-url = "https://${trusted_host}/artifactory/api/pypi/pypi-proxy/simple" native-tls = true diff --git a/utils/scripts/helpers/repo-helper-el9.sh b/utils/scripts/helpers/repo-helper-el9.sh index fb989be544c..7342941d88b 100644 --- a/utils/scripts/helpers/repo-helper-el9.sh +++ b/utils/scripts/helpers/repo-helper-el9.sh @@ -150,7 +150,7 @@ EOF # Set up the uv (a part of SPDK installer) # to use the artifactory as the installation packages source -mkdir -p /etc/uv + mkdir -p /etc/uv cat < /etc/uv/uv.toml index-url = "https://${trusted_host}/artifactory/api/pypi/pypi-proxy/simple" native-tls = true diff --git a/utils/scripts/helpers/repo-helper-leap15.sh b/utils/scripts/helpers/repo-helper-leap15.sh index e30ead448bd..20dc76182da 100755 --- a/utils/scripts/helpers/repo-helper-leap15.sh +++ b/utils/scripts/helpers/repo-helper-leap15.sh @@ -192,12 +192,11 @@ EOF # Set up the uv (a part of SPDK installer) # to use the artifactory as the installation packages source -mkdir -p /etc/uv + mkdir -p /etc/uv cat < /etc/uv/uv.toml index-url = "https://${trusted_host}/artifactory/api/pypi/pypi-proxy/simple" native-tls = true EOF -fi # Setup RubyGems to use artifactory as the primary installation source. # Prior to setup, it is essential to ensure that Ruby-Dev is installed. From e52b84818ce01e120c3fc581bb969f65422a0320 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Mon, 18 May 2026 16:43:17 +0100 Subject: [PATCH 13/16] fix unit test for dpdk_cli_opts_tests Test-tag: pr full_regression Priority: 2 Signed-off-by: Tom Nabarro --- src/common/tests/dpdk_cli_opts_tests.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/common/tests/dpdk_cli_opts_tests.c b/src/common/tests/dpdk_cli_opts_tests.c index 503623ea729..cc2bcd62b1c 100644 --- a/src/common/tests/dpdk_cli_opts_tests.c +++ b/src/common/tests/dpdk_cli_opts_tests.c @@ -28,9 +28,6 @@ test_dpdk_cli_build_opts_valid(void **state) char expected[64]; snprintf(expected, sizeof(expected), "--log-level=lib.eal:%d ", log_level); assert_non_null(strstr(opts, expected)); - - /* Verify it contains --no-telemetry */ - assert_non_null(strstr(opts, "--no-telemetry")); } } From f388d842e51f9479f67574806ac17b8808cd5243 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Wed, 20 May 2026 10:22:29 +0100 Subject: [PATCH 14/16] add valgrind for new DPDK 25.11 issue Test-tag: pr full_regression Signed-off-by: Tom Nabarro --- utils/test_memcheck.supp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/utils/test_memcheck.supp b/utils/test_memcheck.supp index 9c3e7e2b2df..d8a6695dfac 100644 --- a/utils/test_memcheck.supp +++ b/utils/test_memcheck.supp @@ -448,6 +448,15 @@ fun:spdk_mem_map_set_translation ... } +{ + DPDK_26_PCI_IOMMU_CLASS_UNINIT + Memcheck:Cond + fun:rte_pci_get_iommu_class + fun:rte_bus_get_iommu_class + fun:rte_eal_init + fun:spdk_env_init + fun:bio_spdk_env_init +} { setgrent() leak Memcheck:Leak From bb0f7fb10f2f54eab85ff7b9faee4bba0613f2ed Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Wed, 20 May 2026 10:25:29 +0100 Subject: [PATCH 15/16] remove unnecessary text Features: control pool Doc-only: false Signed-off-by: Tom Nabarro --- docs/QSG/build_from_scratch.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/QSG/build_from_scratch.md b/docs/QSG/build_from_scratch.md index 961f79cc35c..f0031e2698e 100644 --- a/docs/QSG/build_from_scratch.md +++ b/docs/QSG/build_from_scratch.md @@ -87,11 +87,6 @@ PATH. $ python3 -m pip install -r requirements-build.txt ``` -**Note:** Starting with SPDK v26.01, the 'uv' Python package manager is required to build SPDK's -Python modules. This is automatically installed when you run the above `pip install -r requirements-build.txt` -command. If you encounter "uv: command not found" errors during the build, ensure you have run this -step or manually install uv with `pip install uv`. - ## Build DAOS Once all prerequisites installed and the sources are downloaded, From 4b2577ad3f4ce462ab98d5cc834815627dcb377d Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Wed, 20 May 2026 21:32:44 +0100 Subject: [PATCH 16/16] fix deprecated enable_vmd -> vmd_enable SPDK rpc Features: control pool Priority: 2 Signed-off-by: Tom Nabarro --- src/control/server/storage/bdev/backend_class_test.go | 5 +++-- src/include/daos_srv/control.h | 2 +- src/utils/ddb/ddb_vmd_wa.c | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/control/server/storage/bdev/backend_class_test.go b/src/control/server/storage/bdev/backend_class_test.go index 9355953b9a3..87b468f2020 100644 --- a/src/control/server/storage/bdev/backend_class_test.go +++ b/src/control/server/storage/bdev/backend_class_test.go @@ -1,5 +1,6 @@ // // (C) Copyright 2021-2024 Intel Corporation. +// (C) Copyright 2026 Hewlett Packard Enterprise Development LP // (C) Copyright 2025 Google LLC // // SPDX-License-Identifier: BSD-2-Clause-Patent @@ -247,7 +248,7 @@ func TestBackend_writeJSONFile(t *testing.T) { Name: "vmd", Configs: []*SpdkSubsystemConfig{ { - Method: "enable_vmd", + Method: "vmd_enable", Params: &VmdEnableParams{}, }, }, @@ -350,7 +351,7 @@ func TestBackend_writeJSONFile(t *testing.T) { Name: "vmd", Configs: []*SpdkSubsystemConfig{ { - Method: "enable_vmd", + Method: "vmd_enable", Params: &VmdEnableParams{}, }, }, diff --git a/src/include/daos_srv/control.h b/src/include/daos_srv/control.h index 8c043052f08..c1d8771b777 100644 --- a/src/include/daos_srv/control.h +++ b/src/include/daos_srv/control.h @@ -50,7 +50,7 @@ /** NVMe config keys */ #define NVME_CONF_ATTACH_CONTROLLER "bdev_nvme_attach_controller" #define NVME_CONF_AIO_CREATE "bdev_aio_create" -#define NVME_CONF_ENABLE_VMD "enable_vmd" +#define NVME_CONF_ENABLE_VMD "vmd_enable" #define NVME_CONF_SET_HOTPLUG_RANGE "hotplug_busid_range" #define NVME_CONF_SET_ACCEL_PROPS "accel_props" #define NVME_CONF_SET_SPDK_RPC_SERVER "spdk_rpc_srv" diff --git a/src/utils/ddb/ddb_vmd_wa.c b/src/utils/ddb/ddb_vmd_wa.c index 7c25c391970..ecec0e6c728 100644 --- a/src/utils/ddb/ddb_vmd_wa.c +++ b/src/utils/ddb/ddb_vmd_wa.c @@ -39,7 +39,7 @@ #define KEY_SUBSYSTEM_CONFIG "config" #define KEY_METHOD_NAME "method" #define NAME_VMD "vmd" -#define METHOD_ENABLE_VMD "enable_vmd" +#define METHOD_ENABLE_VMD "vmd_enable" #define JSON_TRUE ((json_bool)1)