FS/XFS testing framework
 help / color / mirror / Atom feed
From: Anand Jain <anand.jain@oracle.com>
To: Mark Harmstone <maharmstone@fb.com>,
	fstests@vger.kernel.org, linux-btrfs@vger.kernel.org
Cc: neelx@suse.com, Johannes.Thumschirn@wdc.com
Subject: Re: [PATCH v3 1/2] configure: use pkg-config to find liburing
Date: Mon, 6 Jan 2025 08:14:32 +0530	[thread overview]
Message-ID: <2051b2a4-b9a8-4f09-b2e0-d3ed1d79e919@oracle.com> (raw)
In-Reply-To: <20241219145608.3925261-1-maharmstone@fb.com>

On 19/12/24 20:25, Mark Harmstone wrote:
> Change our autoconf macros so that instead of checking for the presence
> of liburing.h, we use pkg-config.
> 
> The benefit of this is that we can then check the version of liburing,
> and do conditional compilation based on this. There's a macro
> IO_URING_CHECK_VERSION already, but it's only in relatively recent
> versions of liburing.h.
> 
> This replaces HAVE_URING_H, defined by AC_CHECK_HEADERS, with
> HAVE_URING. I also had to rename PKG_{MAJOR,MINOR,REVISION,BUILD} to
> start with PACKAGE_, to avoid "possibly undefined macro" errors; it
> looks like pkg-config assumes that anything called PKG_* is for its own
> use.
> 
> Signed-off-by: Mark Harmstone <maharmstone@fb.com>
> ---
>   VERSION                         | 8 ++++----
>   m4/package_globals.m4           | 4 ++--
>   m4/package_liburing.m4          | 6 +++++-
>   release.sh                      | 2 +-
>   src/feature.c                   | 4 ++--
>   src/vfs/idmapped-mounts.c       | 6 +++---
>   src/vfs/idmapped-mounts.h       | 2 +-
>   src/vfs/tmpfs-idmapped-mounts.c | 6 +++---
>   src/vfs/utils.c                 | 4 ++--
>   src/vfs/utils.h                 | 6 +++---
>   src/vfs/vfstest.c               | 6 +++---
>   11 files changed, 29 insertions(+), 25 deletions(-)
> 
> diff --git a/VERSION b/VERSION
> index 7294a002..afcab53e 100644
> --- a/VERSION
> +++ b/VERSION
> @@ -1,7 +1,7 @@
>   #
>   # This file is used by configure to get version information
>   #
> -PKG_MAJOR=1
> -PKG_MINOR=1
> -PKG_REVISION=1
> -PKG_BUILD=1
> +PACKAGE_MAJOR=1
> +PACKAGE_MINOR=1
> +PACKAGE_REVISION=1
> +PACKAGE_BUILD=1
> diff --git a/m4/package_globals.m4 b/m4/package_globals.m4
> index ce7a8c51..c8d5d124 100644
> --- a/m4/package_globals.m4
> +++ b/m4/package_globals.m4
> @@ -9,9 +9,9 @@ AC_DEFUN([AC_PACKAGE_GLOBALS],
>       AC_SUBST(pkg_name)
>   
>       . ./VERSION
> -    pkg_version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
> +    pkg_version=${PACKAGE_MAJOR}.${PACKAGE_MINOR}.${PACKAGE_REVISION}
>       AC_SUBST(pkg_version)
> -    pkg_release=$PKG_BUILD
> +    pkg_release=$PACKAGE_BUILD
>       test -z "$BUILD_VERSION" || pkg_release="$BUILD_VERSION"
>       AC_SUBST(pkg_release)
>   
> diff --git a/m4/package_liburing.m4 b/m4/package_liburing.m4
> index c92cc02a..0553966d 100644
> --- a/m4/package_liburing.m4
> +++ b/m4/package_liburing.m4
> @@ -1,4 +1,8 @@
>   AC_DEFUN([AC_PACKAGE_WANT_URING],
> -  [ AC_CHECK_HEADERS(liburing.h, [ have_uring=true ], [ have_uring=false ])
> +  [ PKG_CHECK_MODULES([LIBURING], [liburing],
> +    [ AC_DEFINE([HAVE_LIBURING], [1], [Use liburing])
> +      have_uring=true
> +    ],
> +    [ have_uring=false ])
>       AC_SUBST(have_uring)
>     ])
> diff --git a/release.sh b/release.sh
> index 5b78ec79..70fbf47e 100644
> --- a/release.sh
> +++ b/release.sh
> @@ -5,7 +5,7 @@
>   
>   . ./VERSION
>   
> -version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
> +version=${PACKAGE_MAJOR}.${PACKAGE_MINOR}.${PACKAGE_REVISION}
>   date=`date +"%-d %B %Y"`
>   
>   echo "Cleaning up"
> diff --git a/src/feature.c b/src/feature.c
> index 7e474ce5..7df36acf 100644
> --- a/src/feature.c
> +++ b/src/feature.c
> @@ -42,7 +42,7 @@
>   #include <libaio.h>
>   #endif
>   
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   #include <liburing.h>
>   #endif
>   
> @@ -227,7 +227,7 @@ check_aio_support(void)
>   static int
>   check_uring_support(void)
>   {
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   	struct io_uring ring;
>   	int err;
>   
> diff --git a/src/vfs/idmapped-mounts.c b/src/vfs/idmapped-mounts.c
> index f4dfc3f3..ed9992f9 100644
> --- a/src/vfs/idmapped-mounts.c
> +++ b/src/vfs/idmapped-mounts.c
> @@ -2206,7 +2206,7 @@ out:
>   }
>   
>   
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   int tcore_io_uring_idmapped(const struct vfstest_info *info)
>   {
>   	int fret = -1;
> @@ -2743,7 +2743,7 @@ out_unmap:
>   
>   	return fret;
>   }
> -#endif /* HAVE_LIBURING_H */
> +#endif /* HAVE_LIBURING */
>   
>   /* Validate that protected symlinks work correctly on idmapped mounts. */
>   int tcore_protected_symlinks_idmapped_mounts(const struct vfstest_info *info)
> @@ -8859,7 +8859,7 @@ static const struct test_struct t_idmapped_mounts[] = {
>   	{ tcore_hardlink_crossing_idmapped_mounts,				true,	"cross idmapped mount hardlink",								},
>   	{ tcore_hardlink_from_idmapped_mount,					true,	"hardlinks from idmapped mounts",								},
>   	{ tcore_hardlink_from_idmapped_mount_in_userns,			true,	"hardlinks from idmapped mounts in user namespace",						},
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   	{ tcore_io_uring_idmapped,						true,	"io_uring from idmapped mounts",								},
>   	{ tcore_io_uring_idmapped_userns,					true,	"io_uring from idmapped mounts in user namespace",						},
>   	{ tcore_io_uring_idmapped_unmapped,					true,	"io_uring from idmapped mounts with unmapped ids",						},
> diff --git a/src/vfs/idmapped-mounts.h b/src/vfs/idmapped-mounts.h
> index 4a2c7b39..688394c8 100644
> --- a/src/vfs/idmapped-mounts.h
> +++ b/src/vfs/idmapped-mounts.h
> @@ -30,7 +30,7 @@ int tcore_fscaps_idmapped_mounts_in_userns_separate_userns(const struct vfstest_
>   int tcore_hardlink_crossing_idmapped_mounts(const struct vfstest_info *info);
>   int tcore_hardlink_from_idmapped_mount(const struct vfstest_info *info);
>   int tcore_hardlink_from_idmapped_mount_in_userns(const struct vfstest_info *info);
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   int tcore_io_uring_idmapped(const struct vfstest_info *info);
>   int tcore_io_uring_idmapped_userns(const struct vfstest_info *info);
>   int tcore_io_uring_idmapped_unmapped(const struct vfstest_info *info);
> diff --git a/src/vfs/tmpfs-idmapped-mounts.c b/src/vfs/tmpfs-idmapped-mounts.c
> index 0899aed9..d8212bce 100644
> --- a/src/vfs/tmpfs-idmapped-mounts.c
> +++ b/src/vfs/tmpfs-idmapped-mounts.c
> @@ -167,7 +167,7 @@ static int tmpfs_hardlink_from_idmapped_mount_in_userns(const struct vfstest_inf
>   	return tmpfs_nested_mount_setup(info, tcore_hardlink_from_idmapped_mount_in_userns);
>   }
>   
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   static int tmpfs_io_uring_idmapped(const struct vfstest_info *info)
>   {
>   	return tmpfs_nested_mount_setup(info, tcore_io_uring_idmapped);
> @@ -184,7 +184,7 @@ static int tmpfs_io_uring_idmapped_unmapped_userns(const struct vfstest_info *in
>   {
>   	return tmpfs_nested_mount_setup(info, tcore_io_uring_idmapped_unmapped_userns);
>   }
> -#endif /* HAVE_LIBURING_H */
> +#endif /* HAVE_LIBURING */
>   
>   static int tmpfs_protected_symlinks_idmapped_mounts(const struct vfstest_info *info)
>   {
> @@ -272,7 +272,7 @@ static const struct test_struct t_tmpfs[] = {
>   	{ tmpfs_hardlink_crossing_idmapped_mounts,				T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs cross idmapped mount hardlink",								},
>   	{ tmpfs_hardlink_from_idmapped_mount,					T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs hardlinks from idmapped mounts",								},
>   	{ tmpfs_hardlink_from_idmapped_mount_in_userns,				T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs hardlinks from idmapped mounts in user namespace",						},
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   	{ tmpfs_io_uring_idmapped,						T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs io_uring from idmapped mounts",								      },
>   	{ tmpfs_io_uring_idmapped_userns,					T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs io_uring from idmapped mounts in user namespace",					      },
>   	{ tmpfs_io_uring_idmapped_unmapped,					T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs io_uring from idmapped mounts with unmapped ids",					      },
> diff --git a/src/vfs/utils.c b/src/vfs/utils.c
> index 0ab5de15..c1c7951c 100644
> --- a/src/vfs/utils.c
> +++ b/src/vfs/utils.c
> @@ -502,7 +502,7 @@ out:
>   	return fret;
>   }
>   
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   int io_uring_openat_with_creds(struct io_uring *ring, int dfd, const char *path,
>   			       int cred_id, bool with_link, int *ret_cqe)
>   {
> @@ -555,7 +555,7 @@ int io_uring_openat_with_creds(struct io_uring *ring, int dfd, const char *path,
>   out:
>   	return ret;
>   }
> -#endif /* HAVE_LIBURING_H */
> +#endif /* HAVE_LIBURING */
>   
>   /* caps_up - raise all permitted caps */
>   int caps_up(void)
> diff --git a/src/vfs/utils.h b/src/vfs/utils.h
> index 872fd96f..c086885a 100644
> --- a/src/vfs/utils.h
> +++ b/src/vfs/utils.h
> @@ -25,7 +25,7 @@
>   #include <sys/capability.h>
>   #endif
>   
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   #include <liburing.h>
>   #endif
>   
> @@ -349,11 +349,11 @@ static inline bool switch_fsids(uid_t fsuid, gid_t fsgid)
>   	return true;
>   }
>   
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   extern int io_uring_openat_with_creds(struct io_uring *ring, int dfd,
>   				      const char *path, int cred_id,
>   				      bool with_link, int *ret_cqe);
> -#endif /* HAVE_LIBURING_H */
> +#endif /* HAVE_LIBURING */
>   
>   extern int chown_r(int fd, const char *path, uid_t uid, gid_t gid);
>   extern int rm_r(int fd, const char *path);
> diff --git a/src/vfs/vfstest.c b/src/vfs/vfstest.c
> index f842117d..e0c897bb 100644
> --- a/src/vfs/vfstest.c
> +++ b/src/vfs/vfstest.c
> @@ -1222,7 +1222,7 @@ out:
>   	return fret;
>   }
>   
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   static int io_uring(const struct vfstest_info *info)
>   {
>   	int fret = -1;
> @@ -1495,7 +1495,7 @@ out_unmap:
>   
>   	return fret;
>   }
> -#endif /* HAVE_LIBURING_H */
> +#endif /* HAVE_LIBURING */
>   
>   /* The following tests are concerned with setgid inheritance. These can be
>    * filesystem type specific. For xfs, if a new file or directory or node is
> @@ -2349,7 +2349,7 @@ static const struct option longopts[] = {
>   static const struct test_struct t_basic[] = {
>   	{ fscaps,							T_REQUIRE_USERNS,	"fscaps on regular mounts",									},
>   	{ hardlink_crossing_mounts,					0,			"cross mount hardlink",										},
> -#ifdef HAVE_LIBURING_H
> +#ifdef HAVE_LIBURING
>   	{ io_uring,							0,			"io_uring",											},
>   	{ io_uring_userns,						T_REQUIRE_USERNS,	"io_uring in user namespace",									},
>   #endif


Looks good. This can be integrated independent of the 2/2.

Reviewed-by: Anand Jain <anand.jain@oracle.com>

Thx.


      parent reply	other threads:[~2025-01-06  2:44 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-19 14:55 [PATCH v3 1/2] configure: use pkg-config to find liburing Mark Harmstone
2024-12-19 14:55 ` [PATCH v3 2/2] btrfs: add test for encoded reads Mark Harmstone
2025-01-03 16:13   ` Josef Bacik
2025-01-06  2:25     ` Anand Jain
2025-01-06 12:22       ` Mark Harmstone
2025-01-03 16:13 ` [PATCH v3 1/2] configure: use pkg-config to find liburing Josef Bacik
2025-01-06  2:44 ` Anand Jain [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2051b2a4-b9a8-4f09-b2e0-d3ed1d79e919@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=Johannes.Thumschirn@wdc.com \
    --cc=fstests@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=maharmstone@fb.com \
    --cc=neelx@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox