]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdstat.c
main: factor out code to parse layout for raid10 and faulty.
[thirdparty/mdadm.git] / mdstat.c
index 00714b485905be156fb33ce2d009b02171cd8154..8de51cf755fa0e718f321d54c3714abd92f04cd9 100644 (file)
--- a/mdstat.c
+++ b/mdstat.c
@@ -280,7 +280,18 @@ void mdstat_wait_fd(int fd, const sigset_t *sigmask)
        FD_ZERO(&rfds);
        if (mdstat_fd >= 0)
                FD_SET(mdstat_fd, &fds);
-       FD_SET(fd, &rfds);
+       if (fd >= 0) {
+               struct stat stb;
+               fstat(fd, &stb);
+               if ((stb.st_mode & S_IFMT) == S_IFREG)
+                       /* Must be a /proc or /sys fd, so expect
+                        * POLLPRI
+                        * i.e. an 'exceptional' event.
+                        */
+                       FD_SET(fd, &fds);
+               else
+                       FD_SET(fd, &rfds);
+       }
        if (mdstat_fd > maxfd)
                maxfd = mdstat_fd;