1
0
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:
Alasdair Kergon 2011-07-08 15:34:47 +00:00
parent c9ff339c23
commit 32b7009196

View File

@ -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;