Message ID | 20250428-ublk_selftests-v1-3-5795f7b00cda@purestorage.com |
---|---|
State | New |
Headers | show |
Series | [1/3] selftests: ublk: kublk: build with -Werror iff CONFIG_WERROR=y | expand |
On Mon, Apr 28, 2025 at 06:14:18PM -0700, Caleb Sander Mateos wrote: > On Mon, Apr 28, 2025 at 4:11 PM Uday Shankar <ushankar@purestorage.com> wrote: > > > > Building kublk currently fails (with a "could not find linux/ublk_cmd.h" > > error message) if kernel headers are not installed in a system-global > > location (i.e. somewhere in the compiler's default include search path). > > This failure is unnecessary, as make kselftest installs kernel headers > > in the build tree - kublk's build just isn't looking for them properly. > > There is an include path in kublk's CFLAGS which is probably intended to > > find the kernel headers installed in the build tree; fix it so that it > > can actually find them. > > > > This introduces some macro redefinition issues between glibc-provided > > headers and kernel headers; fix those by eliminating one include in > > kublk. > > I'm curious what symbol was redefined. struct iovec? Anyways, The RWF_* flags. Here's an example error: In file included from /root/linux/tools/testing/selftests/../../../usr/include/linux/io_uring.h:11, from kublk.h:25, from kublk.c:6: /root/linux/tools/testing/selftests/../../../usr/include/linux/fs.h:318: error: "RWF_HIPRI" redefined [-Werror] 318 | #define RWF_HIPRI ((__kernel_rwf_t)0x00000001) | In file included from /usr/include/sys/uio.h:179, from kublk.h:22, from kublk.c:6: /usr/include/bits/uio-ext.h:45: note: this is the location of the previous definition 45 | #define RWF_HIPRI 0x00000001 /* High priority request. */ |
diff --git a/tools/testing/selftests/ublk/Makefile b/tools/testing/selftests/ublk/Makefile index 86474cfe8d03b2df3f8c9bc1a5902701a0f72f58..feca641635d706a856898f8e22a630f5f47361b6 100644 --- a/tools/testing/selftests/ublk/Makefile +++ b/tools/testing/selftests/ublk/Makefile @@ -2,7 +2,7 @@ CONFIG = $(top_srcdir)/include/config/auto.conf WERROR = $(if $(shell grep CONFIG_WERROR=y ${CONFIG}),-Werror,) -CFLAGS += -O3 -Wl,-no-as-needed -Wall ${WERROR} -I $(top_srcdir) +CFLAGS += -O3 -Wl,-no-as-needed -Wall ${WERROR} -I $(top_srcdir)/usr/include LDLIBS += -lpthread -lm -luring TEST_PROGS := test_generic_01.sh diff --git a/tools/testing/selftests/ublk/kublk.h b/tools/testing/selftests/ublk/kublk.h index 918db5cd633fc1041e1e0805142f00e7e4f28bf7..4b943e57a890e5f14fa11dd19d67c4c8684c4417 100644 --- a/tools/testing/selftests/ublk/kublk.h +++ b/tools/testing/selftests/ublk/kublk.h @@ -19,7 +19,6 @@ #include <sys/inotify.h> #include <sys/wait.h> #include <sys/eventfd.h> -#include <sys/uio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <linux/io_uring.h>
Building kublk currently fails (with a "could not find linux/ublk_cmd.h" error message) if kernel headers are not installed in a system-global location (i.e. somewhere in the compiler's default include search path). This failure is unnecessary, as make kselftest installs kernel headers in the build tree - kublk's build just isn't looking for them properly. There is an include path in kublk's CFLAGS which is probably intended to find the kernel headers installed in the build tree; fix it so that it can actually find them. This introduces some macro redefinition issues between glibc-provided headers and kernel headers; fix those by eliminating one include in kublk. Signed-off-by: Uday Shankar <ushankar@purestorage.com> --- tools/testing/selftests/ublk/Makefile | 2 +- tools/testing/selftests/ublk/kublk.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-)