#acl PaulHowarth:read,write,admin,revert,delete All:read === 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: * [[CPAN:39898|CPAN RT#39898]]: Inconsistent results from `adddir` * [[CPAN:44106|CPAN RT#44106]]: Typos in documentation * [[CPAN:76174|CPAN RT#76174]]: Handle file names with trailing spaces * 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:76147|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 `` header file uses the `__u64` type without pulling in `` to define it, so I tweaked the `configure` script to check for `` 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 # include # ifdef FS_IOC_FIEMAP # include 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 +#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 `define`d 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 `#include`s ``, 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 [[http://www.spinics.net/lists/ceph-devel/msg05616.html|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 }}} . 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 ----