Accepting request 946348 from network:ha-clustering:Factory
- 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 - IPC: server: avoid temporary channel priority loss, up to deadlock-worth (gh#ClusterLabs/libqb#352, rh#1718773, bsc#1188212) (forwarded request 946347 from yan_gao) OBS-URL: https://build.opensuse.org/request/show/946348 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqb?expand=0&rev=33
This commit is contained in:
commit
69aa06fa5e
@ -0,0 +1,78 @@
|
|||||||
|
From 176eae8f13278a5a3dab3699b84e1dc9a8d4ae11 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jakub Jankowski <shasta@toxcorp.com>
|
||||||
|
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 <shasta@toxcorp.com>
|
||||||
|
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
|
||||||
|
---
|
||||||
|
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
|
||||||
|
|
@ -1,3 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jan 14 08:06:10 UTC 2022 - Yan Gao <ygao@suse.com>
|
||||||
|
|
||||||
|
- 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
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Nov 25 15:05:06 UTC 2021 - Dominique Leuenberger <dimstar@opensuse.org>
|
Thu Nov 25 15:05:06 UTC 2021 - Dominique Leuenberger <dimstar@opensuse.org>
|
||||||
|
|
||||||
@ -86,7 +92,7 @@ Mon May 04 11:17:51 UTC 2020 - Yan Gao <ygao@suse.com>
|
|||||||
- log: Set errno when qb_log_target_alloc() fails
|
- log: Set errno when qb_log_target_alloc() fails
|
||||||
- ipc: Remove kqueue EOF log message
|
- ipc: Remove kqueue EOF log message
|
||||||
- ipc: fix force-filesystem-sockets
|
- ipc: fix force-filesystem-sockets
|
||||||
- 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)
|
||||||
- ipc: Use mkdtemp for more secure IPC files
|
- ipc: Use mkdtemp for more secure IPC files
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package libqb
|
# 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
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -29,6 +29,7 @@ Group: Development/Libraries/C and C++
|
|||||||
URL: https://github.com/ClusterLabs/libqb
|
URL: https://github.com/ClusterLabs/libqb
|
||||||
Source0: %{name}-%{version}.tar.xz
|
Source0: %{name}-%{version}.tar.xz
|
||||||
Source1: baselibs.conf
|
Source1: baselibs.conf
|
||||||
|
Patch1: bsc#1193737-0001-Retry-if-posix_fallocate-is-interrupted-with-EINTR-4.patch
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
@ -75,6 +76,7 @@ features. It provides logging, tracing, IPC, and polling.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}-%{version}
|
%setup -q -n %{name}-%{version}
|
||||||
|
%patch1 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
if [ ! -f .tarball-version ]; then
|
if [ ! -f .tarball-version ]; then
|
||||||
|
Loading…
Reference in New Issue
Block a user