Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

    PaulHowarth/Blog/2012-04-07

Saturday 7th April 2012

Fedora Project

  • Updated perl-Digest-MD5-File to 0.08 in F-15, F-16, F-17, Rawhide, EPEL-5 and EPEL-6:

  • Updated perl-IO-AIO to 4.14 in F-17 and Rawhide:

    • Fix stat structure usage on windows, which caused bogus stat results

    • (libeio) make readahead emulation behave more like actual readahead by never failing

    • New request aio_seek

    • New request aio_fiemap

    • Auto-generate the #ifdef/#define 0 blocks for symbols we export

  • Updated perl-IO-Socket-SSL to 1.64 in Rawhide:

    • Ignore die from within eval to make tests more stable on Win32 (CPAN RT#76147)

    • Clarify some behaviour regarding hostname verification

Local Packages

  • Updated perl-IO-AIO to 4.14 as per the Fedora version; this went without problems except on EL-5, where it failed to compile:

  • gcc -c   -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic   -DVERSION=\"4.14\" -DXS_VERSION=\"4.14\" -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE"   AIO.c
    In file included from AIO.xs:9:
    schmorp.h: In function 's_epipe_signal':
    schmorp.h:450: warning: ignoring return value of 'write', declared with attribute warn_unused_result
    schmorp.h: In function 's_epipe_drain':
    schmorp.h:463: warning: ignoring return value of 'read', declared with attribute warn_unused_result
    In file included from AIO.xs:27:
    /usr/include/linux/fiemap.h: At top level:
    /usr/include/linux/fiemap.h:15: error: expected specifier-qualifier-list before '__u64'
    /usr/include/linux/fiemap.h:26: error: expected specifier-qualifier-list before '__u64'
  • The problem there was that EL-5's <linux/fiemap.h> header file uses the __u64 type without pulling in <linux/types.h> to define it, so I tweaked the configure script to check for <linux/types.h> and used it:

  • diff -up IO-AIO-4.14/AIO.xs.orig IO-AIO-4.14/AIO.xs
    --- IO-AIO-4.14/AIO.xs.orig     2012-04-07 01:49:49.000000000 +0100
    +++ IO-AIO-4.14/AIO.xs  2012-04-07 21:17:08.055812147 +0100
    @@ -22,6 +22,7 @@
     #endif
    
     #if __linux__
    +# include <linux/types.h>
     # include <linux/fs.h>
     # ifdef FS_IOC_FIEMAP
     #  include <linux/fiemap.h>
    diff -up IO-AIO-4.14/configure.ac.orig IO-AIO-4.14/configure.ac
    --- IO-AIO-4.14/configure.ac.orig       2012-04-06 10:57:56.000000000 +0100
    +++ IO-AIO-4.14/configure.ac    2012-04-07 21:17:08.066812142 +0100
    @@ -5,7 +5,12 @@ AC_CONFIG_HEADERS([libeio/config.h])
    
     AC_PROG_CC
    
    -AC_CHECK_HEADERS([linux/fs.h linux/fiemap.h])
    +AC_CHECK_HEADERS([linux/fs.h linux/types.h])
    +AC_CHECK_HEADERS([linux/fiemap.h], [], [],
    +[#ifdef HAVE_LINUX_TYPES_H
    +#include <linux/types.h>
    +#endif
    +])
    
     m4_include([libeio/libeio.m4])
  • I sent that fix upstream and it (or something like it) will be included in subsequent releases.
  • However, it still didn't build:
  • gcc -c   -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic   -DVERSION=\"4.14\" -DXS_VERSION=\"4.14\" -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE"   AIO.c
    In file included from AIO.xs:9:
    schmorp.h: In function 's_epipe_signal':
    schmorp.h:450: warning: ignoring return value of 'write', declared with attribute warn_unused_result
    schmorp.h: In function 's_epipe_drain':
    schmorp.h:463: warning: ignoring return value of 'read', declared with attribute warn_unused_result
    In file included from AIO.xs:127:
    libeio/eio.c: In function 'etp_start_thread':
    libeio/eio.c:577: warning: left-hand operand of comma expression has no effect
    In file included from AIO.xs:127:
    libeio/eio.c:1078:19: error: #if with no expression
  • This one was somewhat more difficult to track down. The line with the error was:
  • #if HAVE_FALLOCATE
  • Looking though the code, it was clear that the HAVE_FALLOCATE macro was either defined to 1 or left undefined, neither of which should have caused the error; this bit of code had also not changed from the previous version, which did compile OK. It turned out that this file now #includes <linux/fs.h>, and in RHEL-5, that includes these lines of code:

  • /* public flags for file_system_type */
    #define FS_REQUIRES_DEV 1 
    #define FS_BINARY_MOUNTDATA 2
    #define HAVE_FALLOCATE
    #define FS_HAS_FALLOCATE 4    /* Safe to check for ->fallocate */
    #define FS_HAS_FIEMAP  8      /* Safe to check for ->fiemap */
    #define FS_HAS_FREEZE 16      /* Safe to check for ->freeze_fs etc */
    #define FS_HAS_TRYTOFREE 32   /* Safe to check for ->bdev_try_to_free... */
    #define FS_HAS_GETRESV 64     /* Safe to check for ->get_reserved_space */
    #define FS_HAS_IODONE2 128    /* dio->io_done is type dio_iodone2_t */
    #define FS_REVAL_DOT    16384   /* Check the paths ".", ".." for staleness */
    #define FS_RENAME_DOES_D_MOVE   32768   /* FS will handle d_move()
                                             * during rename() internally.
                                             */
  • So there was the empty definition of HAVE_FALLOCATE that was causing the problem, and I wasn't the first person to come across this issue. I patched the IO::AIO code to use the symbol HAVE_LINUX_FALLOCATE instead of HAVE_FALLOCATE and that fixed the problem:

  • diff -up IO-AIO-4.14/libeio/eio.c.orig IO-AIO-4.14/libeio/eio.c
    --- IO-AIO-4.14/libeio/eio.c.orig       2012-04-02 18:53:19.000000000 +0100
    +++ IO-AIO-4.14/libeio/eio.c    2012-04-07 21:17:08.076812137 +0100
    @@ -1075,7 +1075,7 @@ eio__sync_file_range (int fd, off_t offs
     static int
     eio__fallocate (int fd, int mode, off_t offset, size_t len)
     {
    -#if HAVE_FALLOCATE
    +#if HAVE_LINUX_FALLOCATE
       return fallocate (fd, mode, offset, len);
     #else
       errno = ENOSYS;
    diff -up IO-AIO-4.14/libeio/libeio.m4.orig IO-AIO-4.14/libeio/libeio.m4
    --- IO-AIO-4.14/libeio/libeio.m4.orig   2011-07-24 06:46:26.000000000 +0100
    +++ IO-AIO-4.14/libeio/libeio.m4        2012-04-07 21:17:54.640785066 +0100
    @@ -136,7 +136,7 @@ int main (void)
        return 0;
     }
     ],ac_cv_fallocate=yes,ac_cv_fallocate=no)])
    -test $ac_cv_fallocate = yes && AC_DEFINE(HAVE_FALLOCATE, 1, fallocate(2) is available)
    +test $ac_cv_fallocate = yes && AC_DEFINE(HAVE_LINUX_FALLOCATE, 1, fallocate(2) is available)
    
     AC_CACHE_CHECK(for sys_syncfs, ac_cv_sys_syncfs, [AC_LINK_IFELSE([
     #include <unistd.h>
  • I sent that fix upstream too but Marc insists that that's a Red Hat bug that needs fixing; I can try raising a bug on that but I don't hold out much hope of it getting fixed, and certainly not any time soon, so it seems I'll be carrying this patch for a while.
  • Updated perl-IO-Socket-SSL to 1.64 as per the Fedora version

  • Rebuilt sendmail for libdb 5.3 in Rawhide


Recent