Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP4:Update
libqb
bsc#1193737-0001-Retry-if-posix_fallocate-is-in...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bsc#1193737-0001-Retry-if-posix_fallocate-is-interrupted-with-EINTR-4.patch of Package libqb
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor