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..9828fd2e07d 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/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 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/site_scons/prereq_tools/base.py b/site_scons/prereq_tools/base.py index bc4fd1aa730..1b671d16817 100644 --- a/site_scons/prereq_tools/base.py +++ b/site_scons/prereq_tools/base.py @@ -1472,10 +1472,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}') 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/common/control.c b/src/common/control.c index 75f5ee7db0d..c40ad1b82fe 100644 --- a/src/common/control.c +++ b/src/common/control.c @@ -92,8 +92,7 @@ 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", + "--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, 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; } diff --git a/utils/build.config b/utils/build.config index 0dbc1be9733..814e3346bf5 100644 --- a/utils/build.config +++ b/utils/build.config @@ -6,8 +6,8 @@ argobots=v1.2 fused=v1.0.0 pmdk=2.1.3 isal=v2.31.1 -isal_crypto=v2.25.0 -spdk=v24.09 +isal_crypto=v2.26 +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..811e1a04c41 100644 --- a/utils/rpms/daos-spdk.changelog +++ b/utils/rpms/daos-spdk.changelog @@ -1,3 +1,7 @@ +* 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 - Upgrade to SPDK 24.09. - Restore missing changelog 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 254d641173e..6543d644d89 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/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 5103980c8d0..e138b0ddd62 100644 --- a/utils/rpms/package_info.sh +++ b/utils/rpms/package_info.sh @@ -56,10 +56,11 @@ 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="2.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"