diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM index 27d8972d4..de2709183 100644 --- a/WHATS_NEW_DM +++ b/WHATS_NEW_DM @@ -1,5 +1,6 @@ Version 1.02.71 - ==================================== + Detect failing fifo and skip 20s retry communication period. Add DM_DEFAULT_NAME_MANGLING_MODE env. variable to override configured value. Add dm_lib_init to automatically initialise device-mapper library on load. Replace any '\' char with '\\' in table specification on input. diff --git a/daemons/dmeventd/libdevmapper-event.c b/daemons/dmeventd/libdevmapper-event.c index c85ef880c..dd95aae9c 100644 --- a/daemons/dmeventd/libdevmapper-event.c +++ b/daemons/dmeventd/libdevmapper-event.c @@ -232,6 +232,7 @@ static int _daemon_read(struct dm_event_fifos *fifos, size_t size = 2 * sizeof(uint32_t); /* status + size */ uint32_t *header = alloca(size); char *buf = (char *)header; + struct stat fstatbuf; while (bytes < size) { for (i = 0, ret = 0; (i < 20) && (ret < 1); i++) { @@ -245,6 +246,13 @@ static int _daemon_read(struct dm_event_fifos *fifos, log_error("Unable to read from event server"); return 0; } + /* Check whether fifo is still alive */ + if ((ret == 0) && + fstat(fifos->server + 1, &fstatbuf) && + (errno == EBADF)) { + log_error("Fifo fd is bad for event server."); + return 0; + } } if (ret < 1) { log_error("Unable to read from event server.");