about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-07-16 23:05:43 +0000
committerEric Wong <normalperson@yhbt.net>2013-07-16 23:23:28 +0000
commit2869d2bf7a24a0b42bde738589221def0289ce54 (patch)
tree094015c875eee4f286d28cb9eb88abc813fbd75f
parent800bb2057ce8559eede740816be06cf60d959f39 (diff)
downloadcmogstored-2869d2bf7a24a0b42bde738589221def0289ce54.tar.gz
Willy Tarreau cherry-picked the relevant fix into 2.6.32 longterm
stable tree

ref:
commit 1c137a47bbdd6e86298627e04f547afd7f35d523
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
-rw-r--r--queue_epoll.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/queue_epoll.c b/queue_epoll.c
index c704ebb..4112377 100644
--- a/queue_epoll.c
+++ b/queue_epoll.c
@@ -54,6 +54,14 @@ __attribute__((constructor)) static void epoll_ctl_mod_buggy_detect(void)
         /* TODO: whitelist vendor kernels as fixes are backported */
         if (version <= 2)
                 epoll_ctl_mod_buggy = true;
+
+        /* 2.6.32.61 is OK */
+        if (version == 2 && patchlevel == 6 && sublevel == 32) {
+                rc = sscanf(buf.release, "%u.%u.%u.%u",
+                            &version, &patchlevel, &sublevel, &extra);
+                epoll_ctl_mod_buggy = (rc == 4) && (extra < 61);
+        }
+
         if (version != 3)
                 return;