Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libqb for openSUSE:Factory checked in at 2022-01-15 21:45:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libqb (Old) and /work/SRC/openSUSE:Factory/.libqb.new.1892 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libqb" Sat Jan 15 21:45:08 2022 rev:33 rq:946348 version:2.0.4+20211112.a2691b9 Changes: -------- --- /work/SRC/openSUSE:Factory/libqb/libqb.changes 2021-12-02 22:30:43.090561277 +0100 +++ /work/SRC/openSUSE:Factory/.libqb.new.1892/libqb.changes 2022-01-15 21:45:14.429615382 +0100 @@ -1,0 +2,6 @@ +Fri Jan 14 08:06:10 UTC 2022 - Yan Gao <[email protected]> + +- Retry if posix_fallocate is interrupted with EINTR (#453) (gh#ClusterLabs/libqb#451, bsc#1193737, bsc#1193912) + * bsc#1193737-0001-Retry-if-posix_fallocate-is-interrupted-with-EINTR-4.patch + +------------------------------------------------------------------- @@ -89 +95 @@ -- IPC: server: avoid temporary channel priority loss, up to deadlock-worth (rh#1718773) +- IPC: server: avoid temporary channel priority loss, up to deadlock-worth (gh#ClusterLabs/libqb#352, rh#1718773, bsc#1188212) New: ---- bsc#1193737-0001-Retry-if-posix_fallocate-is-interrupted-with-EINTR-4.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libqb.spec ++++++ --- /var/tmp/diff_new_pack.7SzA9Q/_old 2022-01-15 21:45:15.977616201 +0100 +++ /var/tmp/diff_new_pack.7SzA9Q/_new 2022-01-15 21:45:15.981616204 +0100 @@ -1,7 +1,7 @@ # # spec file for package libqb # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -29,6 +29,7 @@ URL: https://github.com/ClusterLabs/libqb Source0: %{name}-%{version}.tar.xz Source1: baselibs.conf +Patch1: bsc#1193737-0001-Retry-if-posix_fallocate-is-interrupted-with-EINTR-4.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: autoconf @@ -75,6 +76,7 @@ %prep %setup -q -n %{name}-%{version} +%patch1 -p1 %build if [ ! -f .tarball-version ]; then ++++++ bsc#1193737-0001-Retry-if-posix_fallocate-is-interrupted-with-EINTR-4.patch ++++++ >From 176eae8f13278a5a3dab3699b84e1dc9a8d4ae11 Mon Sep 17 00:00:00 2001 From: Jakub Jankowski <[email protected]> Date: Fri, 14 Jan 2022 08:57:25 +0100 Subject: [PATCH] Retry if posix_fallocate is interrupted with EINTR (#453) Every now and then Pacemaker reports errors: (pcmk__new_client) debug: New IPC client 3efdbecf-c2d9-44bc-b4a6-9bcd48021ba1 for PID 27492 with uid 0 and gid 0 (handle_new_connection) debug: IPC credentials authenticated (/dev/shm/qb-7271-27492-12-hfPbKY/qb) (qb_ipcs_shm_connect) debug: connecting to client [27492] (qb_rb_open_2) debug: shm size:524301; real_size:528384; rb->word_size:132096 (qb_rb_open_2) debug: shm size:524301; real_size:528384; rb->word_size:132096 (qb_sys_mmap_file_open) error: couldn't allocate file /dev/shm/qb-7271-27492-12-hfPbKY/qb-event-cib_rw-data: Interrupted system call (4) (qb_rb_open_2) error: couldn't create file for mmap (qb_ipcs_shm_rb_open) error: qb_rb_open:/dev/shm/qb-7271-27492-12-hfPbKY/qb-event-cib_rw: Interrupted system call (4) (qb_rb_close_helper) debug: Free'ing ringbuffer: /dev/shm/qb-7271-27492-12-hfPbKY/qb-response-cib_rw-header (qb_rb_close_helper) debug: Free'ing ringbuffer: /dev/shm/qb-7271-27492-12-hfPbKY/qb-request-cib_rw-header (qb_ipcs_shm_connect) error: shm connection FAILED: Interrupted system call (4) (handle_new_connection) error: Error in connection setup (/dev/shm/qb-7271-27492-12-hfPbKY/qb): Interrupted system call (4) While it probably might be addressed in Pacemaker code, a simple retry loop in case posix_fallocate(3) returns EINTR seems to be a decent workaround. Fixes: #451 Signed-off-by: Jakub Jankowski <[email protected]> Reviewed-by: Christine Caulfield <[email protected]> --- lib/unix.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/unix.c b/lib/unix.c index 2fb53d0..b631cbf 100644 --- a/lib/unix.c +++ b/lib/unix.c @@ -81,6 +81,9 @@ qb_sys_mmap_file_open(char *path, const char *file, size_t bytes, int32_t i; #endif char *is_absolute = strchr(file, '/'); +#ifdef HAVE_POSIX_FALLOCATE + int32_t fallocate_retry = 5; +#endif if (is_absolute) { (void)strlcpy(path, file, PATH_MAX); @@ -121,12 +124,22 @@ qb_sys_mmap_file_open(char *path, const char *file, size_t bytes, } #endif #ifdef HAVE_POSIX_FALLOCATE - if ((res = posix_fallocate(fd, 0, bytes)) != 0) { - errno = res; - res = -1 * res; - qb_util_perror(LOG_ERR, "couldn't allocate file %s", path); - goto unlink_exit; - } + /* posix_fallocate(3) can be interrupted by a signal, + so retry few times before giving up */ + do { + fallocate_retry--; + res = posix_fallocate(fd, 0, bytes); + if (res == EINTR) { + qb_util_log(LOG_DEBUG, "got EINTR trying to allocate file %s, retrying...", path); + continue; + } else if (res != 0) { + errno = res; + res = -1 * res; + qb_util_perror(LOG_ERR, "couldn't allocate file %s", path); + goto unlink_exit; + } + break; + } while (fallocate_retry > 0); #else if (file_flags & O_CREAT) { long page_size = sysconf(_SC_PAGESIZE); -- 2.31.1
