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