mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-16 03:25:10 +03:00
Log cookie values when incrementing/decrementing to give clues about races.
This commit is contained in:
parent
c9ff339c23
commit
32b7009196
@ -1240,6 +1240,7 @@ static int _get_cookie_sem(uint32_t cookie, int *semid)
|
|||||||
static int _udev_notify_sem_inc(uint32_t cookie, int semid)
|
static int _udev_notify_sem_inc(uint32_t cookie, int semid)
|
||||||
{
|
{
|
||||||
struct sembuf sb = {0, 1, 0};
|
struct sembuf sb = {0, 1, 0};
|
||||||
|
int val;
|
||||||
|
|
||||||
if (semop(semid, &sb, 1) < 0) {
|
if (semop(semid, &sb, 1) < 0) {
|
||||||
log_error("semid %d: semop failed for cookie 0x%" PRIx32 ": %s",
|
log_error("semid %d: semop failed for cookie 0x%" PRIx32 ": %s",
|
||||||
@ -1247,8 +1248,15 @@ static int _udev_notify_sem_inc(uint32_t cookie, int semid)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_debug("Udev cookie 0x%" PRIx32 " (semid %d) incremented",
|
if ((val = semctl(semid, 0, GETVAL)) < 0) {
|
||||||
cookie, semid);
|
log_error("semid %d: sem_ctl GETVAL failed for "
|
||||||
|
"cookie 0x%" PRIx32 ": %s",
|
||||||
|
semid, cookie, strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_debug("Udev cookie 0x%" PRIx32 " (semid %d) incremented to %d",
|
||||||
|
cookie, semid, val);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1256,6 +1264,14 @@ static int _udev_notify_sem_inc(uint32_t cookie, int semid)
|
|||||||
static int _udev_notify_sem_dec(uint32_t cookie, int semid)
|
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;
|
||||||
|
|
||||||
|
if ((val = semctl(semid, 0, GETVAL)) < 0) {
|
||||||
|
log_error("semid %d: sem_ctl GETVAL failed for "
|
||||||
|
"cookie 0x%" PRIx32 ": %s",
|
||||||
|
semid, cookie, strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (semop(semid, &sb, 1) < 0) {
|
if (semop(semid, &sb, 1) < 0) {
|
||||||
switch (errno) {
|
switch (errno) {
|
||||||
@ -1274,8 +1290,8 @@ static int _udev_notify_sem_dec(uint32_t cookie, int semid)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_debug("Udev cookie 0x%" PRIx32 " (semid %d) decremented",
|
log_debug("Udev cookie 0x%" PRIx32 " (semid %d) decremented to %d",
|
||||||
cookie, semid);
|
cookie, semid, val - 1);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1299,6 +1315,7 @@ static int _udev_notify_sem_create(uint32_t *cookie, int *semid)
|
|||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
int gen_semid;
|
int gen_semid;
|
||||||
|
int val;
|
||||||
uint16_t base_cookie;
|
uint16_t base_cookie;
|
||||||
uint32_t gen_cookie;
|
uint32_t gen_cookie;
|
||||||
union semun sem_arg;
|
union semun sem_arg;
|
||||||
@ -1359,8 +1376,15 @@ static int _udev_notify_sem_create(uint32_t *cookie, int *semid)
|
|||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_debug("Udev cookie 0x%" PRIx32 " (semid %d) incremented",
|
if ((val = semctl(gen_semid, 0, GETVAL)) < 0) {
|
||||||
gen_cookie, gen_semid);
|
log_error("semid %d: sem_ctl GETVAL failed for "
|
||||||
|
"cookie 0x%" PRIx32 ": %s",
|
||||||
|
gen_semid, gen_cookie, strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_debug("Udev cookie 0x%" PRIx32 " (semid %d) incremented to %d",
|
||||||
|
gen_cookie, gen_semid, val);
|
||||||
|
|
||||||
if (close(fd))
|
if (close(fd))
|
||||||
stack;
|
stack;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user