Bug#893557: thin-provisioning-tools: FTBFS with glibc 2.17
Steve Langasek
steve.langasek at canonical.com
Mon Mar 19 21:42:16 UTC 2018
Control: tags -1 - patch
Control: severity -1 serious
On Mon, Mar 19, 2018 at 02:19:40PM -0700, Steve Langasek wrote:
> Package: thin-provisioning-tools
> Version: 0.7.4-2
> Severity: important
> Tags: patch
> User: ubuntu-devel at lists.ubuntu.com
> Usertags: origin-ubuntu bionic ubuntu-patch
> Hi Bastian,
> In Ubuntu, thin-provisioning-tools 0.7.4-2 fails to build on ppc64el with an
> ICE in the compiler while building the test suite. An strace implies that
> this is because your LD_PRELOAD wrapper has interposed open(), but not
> openat().
> If I extend the wrapper as in the attached patch to cover openat(), the
> package now builds.
> This build failure is probably not reproducible yet in Debian, but I expect
> it will be once Debian moves to glibc 2.17.
Hmm, sorry, several corrections:
- the correct glibc version number in 2.27, not 2.17.
- Debian also has 2.27 now, so the build failure probably is reproducible in
Debian.
- I managed to accidentally create and test this patch against
thin-provisioning-tools 0.6.1-4 only, the last version that successfully
built in Ubuntu. The patch solves the build failure there... but does not
solve the build failure in 0.7.4, for reasons that currently elude me.
> I briefly looked at whether your custom LD_PRELOAD wrapper could be replaced
> with libeatmydata, but I see that libeatmydata only handles O_SYNC and
> O_DSYNC, not O_DIRECT. Do you think it would make sense to ask libeatmydata
> to filter O_DIRECT as well, to reduce the need for maintaining this separate
> .so?
>
> --
> Steve Langasek Give me a lever long enough and a Free OS
> Debian Developer to set it on, and I can move the world.
> Ubuntu Developer http://www.debian.org/
> slangasek at ubuntu.com vorlon at debian.org
> diff -Nru thin-provisioning-tools-0.7.4/debian/control thin-provisioning-tools-0.7.4/debian/control
> --- thin-provisioning-tools-0.7.4/debian/control 2017-11-01 14:50:39.000000000 -0700
> +++ thin-provisioning-tools-0.7.4/debian/control 2018-03-19 14:10:28.000000000 -0700
> @@ -1,8 +1,7 @@
> Source: thin-provisioning-tools
> Section: admin
> Priority: optional
> -Maintainer: Ubuntu Developers <ubuntu-devel-discuss at lists.ubuntu.com>
> -XSBC-Original-Maintainer: Debian LVM Team <pkg-lvm-maintainers at lists.alioth.debian.org>
> +Maintainer: Debian LVM Team <pkg-lvm-maintainers at lists.alioth.debian.org>
> Uploaders: Bastian Blank <waldi at debian.org>
> Build-Depends:
> debhelper (>= 9),
> diff -Nru thin-provisioning-tools-0.7.4/debian/unit-tests/preload.c thin-provisioning-tools-0.7.4/debian/unit-tests/preload.c
> --- thin-provisioning-tools-0.7.4/debian/unit-tests/preload.c 2017-11-01 14:50:39.000000000 -0700
> +++ thin-provisioning-tools-0.7.4/debian/unit-tests/preload.c 2018-03-19 14:10:17.000000000 -0700
> @@ -4,13 +4,17 @@
> #include <stdarg.h>
> #include <stdlib.h>
>
> -static int (*orig_open)(const char *pathname, int flags, int mode);
> +static int (*orig_open)(const char *pathname, int flags, mode_t mode);
> +static int (*orig_openat)(int dirfd, const char *pathname, int flags, mode_t mode);
>
> __attribute__((constructor))
> static void constructor() {
> orig_open = dlsym(RTLD_NEXT, "open");
> if (!orig_open)
> abort();
> + orig_openat = dlsym(RTLD_NEXT, "openat");
> + if (!orig_openat)
> + abort();
> }
>
> int open(const char *file, int oflag, ...) {
> @@ -51,3 +55,34 @@
> int __open64_2(const char *file, int oflag) {
> return orig_open(file, (oflag & ~O_DIRECT) | O_LARGEFILE, 0);
> }
> +
> +int openat(int dirfd, const char *file, int oflag, ...) {
> + int mode = 0;
> +
> + oflag &= ~O_DIRECT;
> +
> + if (oflag & O_CREAT) {
> + va_list arg;
> + va_start(arg, oflag);
> + mode = va_arg(arg, int);
> + va_end(arg);
> + }
> +
> + return orig_openat(dirfd, file, oflag, mode);
> +}
> +
> +int openat64(int dirfd, const char *file, int oflag, ...) {
> + int mode = 0;
> +
> + oflag |= O_LARGEFILE;
> + oflag &= ~O_DIRECT;
> +
> + if (oflag & O_CREAT) {
> + va_list arg;
> + va_start(arg, oflag);
> + mode = va_arg(arg, int);
> + va_end(arg);
> + }
> +
> + return orig_openat(dirfd, file, oflag, mode);
> +}
--
Steve Langasek Give me a lever long enough and a Free OS
Debian Developer to set it on, and I can move the world.
Ubuntu Developer http://www.debian.org/
slangasek at ubuntu.com vorlon at debian.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-lvm-maintainers/attachments/20180319/370853fe/attachment.sig>
More information about the pkg-lvm-maintainers
mailing list