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

Reply via email to