1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

libdm: do not fail if GETVAL semctl fails for udev sync inc and dec

While performing udev sync semaphore's inc/dec operation, we use the
result from GETVAL semctl just to print a debug message with current
value of that sempahore, nothing else.

If the GETVAL fails for whetever reason while the actual inc/dec
completes successfully, just log a warning message about the GETVAL
(and print the debug messages without the actual semaphore value)
and return success for the inc/dec operation as a whole.
This commit is contained in:
Peter Rajnoha 2024-08-12 14:31:19 +02:00
parent f7f08ba881
commit 1e48599193
No known key found for this signature in database
GPG Key ID: E776664036DF84AB
2 changed files with 32 additions and 30 deletions

View File

@ -2443,14 +2443,14 @@ static int _udev_notify_sem_inc(uint32_t cookie, int semid)
} }
if ((val = semctl(semid, 0, GETVAL)) < 0) { if ((val = semctl(semid, 0, GETVAL)) < 0) {
log_error("cookie inc: semid %d: sem_ctl GETVAL failed for " log_warn("cookie inc: semid %d: sem_ctl GETVAL failed for "
"cookie 0x%" PRIx32 ": %s", "cookie 0x%" PRIx32 ": %s",
semid, cookie, strerror(errno)); semid, cookie, strerror(errno));
return 0; log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) incremented.",
} cookie, semid);
} else
log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) incremented to %d", log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) incremented to %d",
cookie, semid, val); cookie, semid, val);
return 1; return 1;
} }
@ -2460,12 +2460,10 @@ static int _udev_notify_sem_dec(uint32_t cookie, int semid)
struct sembuf sb = {0, -1, IPC_NOWAIT}; struct sembuf sb = {0, -1, IPC_NOWAIT};
int val; int val;
if ((val = semctl(semid, 0, GETVAL)) < 0) { if ((val = semctl(semid, 0, GETVAL)) < 0)
log_error("cookie dec: semid %d: sem_ctl GETVAL failed for " log_warn("cookie dec: semid %d: sem_ctl GETVAL failed for "
"cookie 0x%" PRIx32 ": %s", "cookie 0x%" PRIx32 ": %s",
semid, cookie, strerror(errno)); semid, cookie, strerror(errno));
return 0;
}
if (semop(semid, &sb, 1) < 0) { if (semop(semid, &sb, 1) < 0) {
switch (errno) { switch (errno) {
@ -2484,9 +2482,12 @@ static int _udev_notify_sem_dec(uint32_t cookie, int semid)
return 0; return 0;
} }
log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) decremented to %d", if (val < 0)
cookie, semid, val - 1); log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) decremented.",
cookie, semid);
else
log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) decremented to %d",
cookie, semid, val - 1);
return 1; return 1;
} }

View File

@ -2442,14 +2442,14 @@ static int _udev_notify_sem_inc(uint32_t cookie, int semid)
} }
if ((val = semctl(semid, 0, GETVAL)) < 0) { if ((val = semctl(semid, 0, GETVAL)) < 0) {
log_error("cookie inc: semid %d: sem_ctl GETVAL failed for " log_warn("cookie inc: semid %d: sem_ctl GETVAL failed for "
"cookie 0x%" PRIx32 ": %s", "cookie 0x%" PRIx32 ": %s",
semid, cookie, strerror(errno)); semid, cookie, strerror(errno));
return 0; log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) incremented.",
} cookie, semid);
} else
log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) incremented to %d", log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) incremented to %d",
cookie, semid, val); cookie, semid, val);
return 1; return 1;
} }
@ -2459,12 +2459,10 @@ static int _udev_notify_sem_dec(uint32_t cookie, int semid)
struct sembuf sb = {0, -1, IPC_NOWAIT}; struct sembuf sb = {0, -1, IPC_NOWAIT};
int val; int val;
if ((val = semctl(semid, 0, GETVAL)) < 0) { if ((val = semctl(semid, 0, GETVAL)) < 0)
log_error("cookie dec: semid %d: sem_ctl GETVAL failed for " log_warn("cookie dec: semid %d: sem_ctl GETVAL failed for "
"cookie 0x%" PRIx32 ": %s", "cookie 0x%" PRIx32 ": %s",
semid, cookie, strerror(errno)); semid, cookie, strerror(errno));
return 0;
}
if (semop(semid, &sb, 1) < 0) { if (semop(semid, &sb, 1) < 0) {
switch (errno) { switch (errno) {
@ -2483,9 +2481,12 @@ static int _udev_notify_sem_dec(uint32_t cookie, int semid)
return 0; return 0;
} }
log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) decremented to %d", if (val < 0)
cookie, semid, val - 1); log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) decremented.",
cookie, semid);
else
log_debug_activation("Udev cookie 0x%" PRIx32 " (semid %d) decremented to %d",
cookie, semid, val - 1);
return 1; return 1;
} }