]> sourceware.org Git - lvm2.git/commitdiff
Detect failing fifo
authorZdenek Kabelac <zkabelac@redhat.com>
Wed, 15 Feb 2012 13:56:47 +0000 (13:56 +0000)
committerZdenek Kabelac <zkabelac@redhat.com>
Wed, 15 Feb 2012 13:56:47 +0000 (13:56 +0000)
If the fifo died because of dmeventd restart - do not wait for 20s
in select  - it will not get better and return error immediately.

WHATS_NEW_DM
daemons/dmeventd/libdevmapper-event.c

index 27d8972d475d756c4b7a6dfa432909fe71c34ced..de2709183a5134ff1a77a056ceba0fdd9682fc49 100644 (file)
@@ -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.
index c85ef880cdcfe75d9145ff425964e397eb921002..dd95aae9c05ea861c493cbaa6eb9b4a20e77d7df 100644 (file)
@@ -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.");
This page took 0.037913 seconds and 5 git commands to generate.