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(-)
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>
--
2.34.1
On Mon, Apr 28, 2025 at 05:10:22PM -0600, Uday Shankar 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. > > Signed-off-by: Uday Shankar <ushankar@purestorage.com> kernel selftest is supposed to run under the kernel tree without installing headers system wide, nice! Reviewed-by: Ming Lei <ming.lei@redhat.com> Thanks, Ming
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,
Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
>
> 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(-)
>
> 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>
>
> --
> 2.34.1
>
>
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. */
|
© 2016 - 2026 Red Hat, Inc.