)]}'
{
  "log": [
    {
      "commit": "a93d2f1744206827ccf416e2cdc5018aa503314e",
      "tree": "c4c9daf16536d8d58db275617e19898f6c5bdbd7",
      "parents": [
        "af507ae8a0512a83728b17d8f8c5fa1561669f50"
      ],
      "author": {
        "name": "Changli Gao",
        "email": "xiaosuo@gmail.com",
        "time": "Fri May 07 14:33:26 2010 +0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue May 11 17:43:58 2010 +0200"
      },
      "message": "sched, wait: Use wrapper functions\n\nepoll should not touch flags in wait_queue_t. This patch introduces a new\nfunction __add_wait_queue_exclusive(), for the users, who use wait queue as a\nLIFO queue.\n\n__add_wait_queue_tail_exclusive() is introduced too instead of\nadd_wait_queue_exclusive_locked(). remove_wait_queue_locked() is removed, as\nit is a duplicate of __remove_wait_queue(), disliked by users, and with less\nusers.\n\nSigned-off-by: Changli Gao \u003cxiaosuo@gmail.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: \u003ccontainers@lists.linux-foundation.org\u003e\nLKML-Reference: \u003c1273214006-2979-1-git-send-email-xiaosuo@gmail.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "628ff7c1d8d8466a5ad8078bd0206a130f8b8a51",
      "tree": "cc7ab0c90849be38e200fc6ff6a3a09e3caf0405",
      "parents": [
        "ed2617585f39dd12fae38c657bba68b9779ea10d"
      ],
      "author": {
        "name": "Roland Dreier",
        "email": "rdreier@cisco.com",
        "time": "Fri Dec 18 09:41:24 2009 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 22 12:27:34 2009 -0500"
      },
      "message": "anonfd: Allow making anon files read-only\n\nIt seems a couple places such as arch/ia64/kernel/perfmon.c and\ndrivers/infiniband/core/uverbs_main.c could use anon_inode_getfile()\ninstead of a private pseudo-fs + alloc_file(), if only there were a way\nto get a read-only file.  So provide this by having anon_inode_getfile()\ncreate a read-only file if we pass O_RDONLY in flags.\n\nSigned-off-by: Roland Dreier \u003crolandd@cisco.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6d4561110a3e9fa742aeec6717248a491dfb1878",
      "tree": "689e2abf19940416ce597ba56ed31026ff59bd21",
      "parents": [
        "86926d0096279b9739ceeff40f68d3c33b9119a9"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Nov 16 03:11:48 2009 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Wed Nov 18 08:37:40 2009 -0800"
      },
      "message": "sysctl: Drop \u0026 in front of every proc_handler.\n\nFor consistency drop \u0026 in front of every proc_handler.  Explicity\ntaking the address is unnecessary and it prevents optimizations\nlike stubbing the proc_handlers to NULL.\n\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "ab09203e302b6e526f6930f3e460064b0f253ae9",
      "tree": "bc95bfaba78ba30613d57c676eca42818b8a3293",
      "parents": [
        "2bc4657c15e4a33d9a192579c7627a397dbcbebc"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu Nov 05 14:25:10 2009 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu Nov 12 02:04:55 2009 -0800"
      },
      "message": "sysctl fs: Remove dead binary sysctl support\n\nNow that sys_sysctl is a generic wrapper around /proc/sys  .ctl_name\nand .strategy members of sysctl tables are dead code.  Remove them.\n\nCc: Jan Harkes \u003cjaharkes@cs.cmu.edu\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "3fe4a975d662f11037cb710f8b4b158a3e38f9c0",
      "tree": "07986fcbf75f9a85c177aa3e7a2472e9833e4565",
      "parents": [
        "36025a812eebb34a478cfc1d3a538472591498b0"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Wed Jun 17 16:25:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:41 2009 -0700"
      },
      "message": "epoll: fix nested calls support\n\nThis fixes a regression in 2.6.30.\n\nI unfortunately accepted a patch time ago, to drop the \"current\" usage\nfrom possible IRQ context, w/out proper thought over it.  The patch\nswitched to using the CPU id by bounding the nested call callback with a\nget_cpu()/put_cpu().\n\nUnfortunately the ep_call_nested() function can be called with a callback\nthat grabs sleepy locks (from own f_op-\u003epoll()), that results in epic\nfails.  The following patch uses the proper \"context\" depending on the\npath where it is called, and on the kind of callback.\n\nThis has been reported by Stefan Richter, that has also verified the patch\nis his previously failing environment.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nReported-by: Stefan Richter \u003cstefanr@s5r6.in-berlin.de\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bfe3891a5f5d3b78146a45f40e435d14f5ae39dd",
      "tree": "96e55f37ddf575c20f98bcdfa0902eacdab89978",
      "parents": [
        "ee1ef82c7e6d073f881952348960bbc639687482"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue May 12 13:19:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 12 14:11:35 2009 -0700"
      },
      "message": "epoll: fix size check in epoll_create()\n\nFix a size check WRT the manual pages.  This was inadvertently broken by\ncommit 9fe5ad9c8cef9ad5873d8ee55d1cf00d9b607df0 (\"flag parameters\nadd-on: remove epoll_create size param\").\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: \u003cHiroyuki.Mach@gmail.com\u003e\nCc: rohit verma \u003crohit.170309@gmail.com\u003e\nCc: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2dfa4eeab0fc7e8633974f2770945311b31eedf6",
      "tree": "de372dc3955bb8ab2dec1b50f4292f367fa4e22f",
      "parents": [
        "37e5540b3c9d838eb20f2ca8ea2eb8072271e403"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue Mar 31 15:24:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:20 2009 -0700"
      },
      "message": "epoll keyed wakeups: teach epoll about hints coming with the wakeup key\n\nUse the events hint now sent by some devices, to avoid unnecessary wakeups\nfor events that are of no interest for the caller.  This code handles both\ndevices that are sending keyed events, and the ones that are not (and\nevent the ones that sometimes send events, and sometimes don\u0027t).\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Alan Cox \u003calan@lxorguk.ukuu.org.uk\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: William Lee Irwin III \u003cwli@movementarian.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4f0989dbfa8d18dd17c32120aac1eb3e906a62a2",
      "tree": "8b81c45c23ff2a598ed67c5732dfb0ca69693aa0",
      "parents": [
        "e057e15ff66a620eda4c407486cbb8f8fbb7d878"
      ],
      "author": {
        "name": "Tony Battersby",
        "email": "tonyb@cybernetics.com",
        "time": "Tue Mar 31 15:24:16 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:20 2009 -0700"
      },
      "message": "epoll: use real type instead of void *\n\neventpoll.c uses void * in one place for no obvious reason; change it to\nuse the real type instead.\n\nSigned-off-by: Tony Battersby \u003ctonyb@cybernetics.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e057e15ff66a620eda4c407486cbb8f8fbb7d878",
      "tree": "aa9e15c13ce5882ca0f0b442eec71d99fec8a4ff",
      "parents": [
        "d1bc90dd5d037079f96b3327f943eb6ae8ef7491"
      ],
      "author": {
        "name": "Tony Battersby",
        "email": "tonyb@cybernetics.com",
        "time": "Tue Mar 31 15:24:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:19 2009 -0700"
      },
      "message": "epoll: clean up ep_modify\n\nep_modify() doesn\u0027t need to set event.data from within the ep-\u003elock\nspinlock as the comment suggests.  The only place event.data is used is\nep_send_events_proc(), and this is protected by ep-\u003emtx instead of\nep-\u003elock.  Also update the comment for mutex_lock() at the top of\nep_scan_ready_list(), which mentions epoll_ctl(EPOLL_CTL_DEL) but not\nepoll_ctl(EPOLL_CTL_MOD).\n\nep_modify() can also use spin_lock_irq() instead of spin_lock_irqsave().\n\nSigned-off-by: Tony Battersby \u003ctonyb@cybernetics.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d1bc90dd5d037079f96b3327f943eb6ae8ef7491",
      "tree": "0380bd32cee23815b214d81a12b618140c544799",
      "parents": [
        "d0305882825784e74f68a56eee6c3a812a99f235"
      ],
      "author": {
        "name": "Tony Battersby",
        "email": "tonyb@cybernetics.com",
        "time": "Tue Mar 31 15:24:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:19 2009 -0700"
      },
      "message": "epoll: remove unnecessary xchg\n\nxchg in ep_unregister_pollwait() is unnecessary because it is protected by\neither epmutex or ep-\u003emtx (the same protection as ep_remove()).\n\nIf xchg was necessary, it would be insufficient to protect against\nproblems: if multiple concurrent calls to ep_unregister_pollwait() were\npossible then a second caller that returns without doing anything because\nnwait \u003d\u003d 0 could return before the waitqueues are removed by the first\ncaller, which looks like it could lead to problematic races with\nep_poll_callback().\n\nSo remove xchg and add comments about the locking.\n\nSigned-off-by: Tony Battersby \u003ctonyb@cybernetics.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d0305882825784e74f68a56eee6c3a812a99f235",
      "tree": "a4dcfea753279e1f8f4e7cc8256a8f5c195341ce",
      "parents": [
        "abff55cee1039b5a3b96f7a5eb6e65b9f247a274"
      ],
      "author": {
        "name": "Tony Battersby",
        "email": "tonyb@cybernetics.com",
        "time": "Tue Mar 31 15:24:14 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:19 2009 -0700"
      },
      "message": "epoll: remember the event if epoll_wait returns -EFAULT\n\nIf epoll_wait returns -EFAULT, the event that was being returned when the\nfault was encountered will be forgotten.  This is not a big deal since\nEFAULT will happen only if a buggy userspace program passes in a bad\naddress, in which case what happens later usually doesn\u0027t matter.\nHowever, it is easy to remember the event for later, and this patch makes\na simple change to do that.\n\nSigned-off-by: Tony Battersby \u003ctonyb@cybernetics.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "abff55cee1039b5a3b96f7a5eb6e65b9f247a274",
      "tree": "dfbcc71256c2129d2e0ee3e077461103338b9591",
      "parents": [
        "bb57c3edcd2fc51d95914c39448f36e43af9d6af"
      ],
      "author": {
        "name": "Tony Battersby",
        "email": "tonyb@cybernetics.com",
        "time": "Tue Mar 31 15:24:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:19 2009 -0700"
      },
      "message": "epoll: don\u0027t use current in irq context\n\nep_call_nested() (formerly ep_poll_safewake()) uses \"current\" (without\ndereferencing it) to detect callback recursion, but it may be called from\nirq context where the use of current is generally discouraged.  It would\nbe better to use get_cpu() and put_cpu() to detect the callback recursion.\n\nSigned-off-by: Tony Battersby \u003ctonyb@cybernetics.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bb57c3edcd2fc51d95914c39448f36e43af9d6af",
      "tree": "8d38edcdc5ef1f2694c3607829952f04ce266292",
      "parents": [
        "296e236e96dddef351a1809c0d414bcddfcf3800"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue Mar 31 15:24:12 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:19 2009 -0700"
      },
      "message": "epoll: remove debugging code\n\nRemove debugging code from epoll.  There\u0027s no need for it to be included\ninto mainline code.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "296e236e96dddef351a1809c0d414bcddfcf3800",
      "tree": "279d6eb3f0114a49897cd4bbc0eaf43fffd46c6e",
      "parents": [
        "5071f97ec6d74f006072de0ce89b67c8792fe5a1"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue Mar 31 15:24:11 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:19 2009 -0700"
      },
      "message": "epoll: fix epoll\u0027s own poll (update)\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Pavel Pisa \u003cpisa@cmp.felk.cvut.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5071f97ec6d74f006072de0ce89b67c8792fe5a1",
      "tree": "cb20ebd79c6c146c73d321b4558f8176a0cf06c9",
      "parents": [
        "3cdbbeebb77348176bd6a03fd86e11bc281c529e"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue Mar 31 15:24:10 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:18 2009 -0700"
      },
      "message": "epoll: fix epoll\u0027s own poll\n\nFix a bug inside the epoll\u0027s f_op-\u003epoll() code, that returns POLLIN even\nthough there are no actual ready monitored fds.  The bug shows up if you\nadd an epoll fd inside another fd container (poll, select, epoll).\n\nThe problem is that callback-based wake ups used by epoll does not carry\n(patches will follow, to fix this) any information about the events that\nactually happened.  So the callback code, since it can\u0027t call the file*\n-\u003epoll() inside the callback, chains the file* into a ready-list.\n\nSo, suppose you added an fd with EPOLLOUT only, and some data shows up on\nthe fd, the file* mapped by the fd will be added into the ready-list (via\nwakeup callback).  During normal epoll_wait() use, this condition is\nsorted out at the time we\u0027re actually able to call the file*\u0027s\nf_op-\u003epoll().\n\nInside the old epoll\u0027s f_op-\u003epoll() though, only a quick check\n!list_empty(ready-list) was performed, and this could have led to\nreporting POLLIN even though no ready fds would show up at a following\nepoll_wait().  In order to correctly report the ready status for an epoll\nfd, the ready-list must be checked to see if any really available fd+event\nwould be ready in a following epoll_wait().\n\nOperation (calling f_op-\u003epoll() from inside f_op-\u003epoll()) that, like wake\nups, must be handled with care because of the fact that epoll fds can be\nadded to other epoll fds.\n\nTest code:\n\n/*\n *  epoll_test by Davide Libenzi (Simple code to test epoll internals)\n *  Copyright (C) 2008  Davide Libenzi\n *\n *  This program is free software; you can redistribute it and/or modify\n *  it under the terms of the GNU General Public License as published by\n *  the Free Software Foundation; either version 2 of the License, or\n *  (at your option) any later version.\n *\n *  This program is distributed in the hope that it will be useful,\n *  but WITHOUT ANY WARRANTY; without even the implied warranty of\n *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *  GNU General Public License for more details.\n *\n *  You should have received a copy of the GNU General Public License\n *  along with this program; if not, write to the Free Software\n *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n *\n *  Davide Libenzi \u003cdavidel@xmailserver.org\u003e\n *\n */\n\n#include \u003csys/types.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003cstdio.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cstring.h\u003e\n#include \u003cerrno.h\u003e\n#include \u003csignal.h\u003e\n#include \u003climits.h\u003e\n#include \u003cpoll.h\u003e\n#include \u003csys/epoll.h\u003e\n#include \u003csys/wait.h\u003e\n\n#define EPWAIT_TIMEO\t(1 * 1000)\n#ifndef POLLRDHUP\n#define POLLRDHUP 0x2000\n#endif\n\n#define EPOLL_MAX_CHAIN\t100L\n\n#define EPOLL_TF_LOOP (1 \u003c\u003c 0)\n\nstruct epoll_test_cfg {\n\tlong size;\n\tlong flags;\n};\n\nstatic int xepoll_create(int n) {\n\tint epfd;\n\n\tif ((epfd \u003d epoll_create(n)) \u003d\u003d -1) {\n\t\tperror(\"epoll_create\");\n\t\texit(2);\n\t}\n\n\treturn epfd;\n}\n\nstatic void xepoll_ctl(int epfd, int cmd, int fd, struct epoll_event *evt) {\n\tif (epoll_ctl(epfd, cmd, fd, evt) \u003c 0) {\n\t\tperror(\"epoll_ctl\");\n\t\texit(3);\n\t}\n}\n\nstatic void xpipe(int *fds) {\n\tif (pipe(fds)) {\n\t\tperror(\"pipe\");\n\t\texit(4);\n\t}\n}\n\nstatic pid_t xfork(void) {\n\tpid_t pid;\n\n\tif ((pid \u003d fork()) \u003d\u003d (pid_t) -1) {\n\t\tperror(\"pipe\");\n\t\texit(5);\n\t}\n\n\treturn pid;\n}\n\nstatic int run_forked_proc(int (*proc)(void *), void *data) {\n\tint status;\n\tpid_t pid;\n\n\tif ((pid \u003d xfork()) \u003d\u003d 0)\n\t\texit((*proc)(data));\n\tif (waitpid(pid, \u0026status, 0) !\u003d pid) {\n\t\tperror(\"waitpid\");\n\t\treturn -1;\n\t}\n\n\treturn WIFEXITED(status) ? WEXITSTATUS(status): -2;\n}\n\nstatic int check_events(int fd, int timeo) {\n\tstruct pollfd pfd;\n\n\tfprintf(stdout, \"Checking events for fd %d\\n\", fd);\n\tmemset(\u0026pfd, 0, sizeof(pfd));\n\tpfd.fd \u003d fd;\n\tpfd.events \u003d POLLIN | POLLOUT;\n\tif (poll(\u0026pfd, 1, timeo) \u003c 0) {\n\t\tperror(\"poll()\");\n\t\treturn 0;\n\t}\n\tif (pfd.revents \u0026 POLLIN)\n\t\tfprintf(stdout, \"\\tPOLLIN\\n\");\n\tif (pfd.revents \u0026 POLLOUT)\n\t\tfprintf(stdout, \"\\tPOLLOUT\\n\");\n\tif (pfd.revents \u0026 POLLERR)\n\t\tfprintf(stdout, \"\\tPOLLERR\\n\");\n\tif (pfd.revents \u0026 POLLHUP)\n\t\tfprintf(stdout, \"\\tPOLLHUP\\n\");\n\tif (pfd.revents \u0026 POLLRDHUP)\n\t\tfprintf(stdout, \"\\tPOLLRDHUP\\n\");\n\n\treturn pfd.revents;\n}\n\nstatic int epoll_test_tty(void *data) {\n\tint epfd, ifd \u003d fileno(stdin), res;\n\tstruct epoll_event evt;\n\n\tif (check_events(ifd, 0) !\u003d POLLOUT) {\n\t\tfprintf(stderr, \"Something is cooking on STDIN (%d)\\n\", ifd);\n\t\treturn 1;\n\t}\n\tepfd \u003d xepoll_create(1);\n\tfprintf(stdout, \"Created epoll fd (%d)\\n\", epfd);\n\tmemset(\u0026evt, 0, sizeof(evt));\n\tevt.events \u003d EPOLLIN;\n\txepoll_ctl(epfd, EPOLL_CTL_ADD, ifd, \u0026evt);\n\tif (check_events(epfd, 0) \u0026 POLLIN) {\n\t\tres \u003d epoll_wait(epfd, \u0026evt, 1, 0);\n\t\tif (res \u003d\u003d 0) {\n\t\t\tfprintf(stderr, \"Epoll fd (%d) is ready when it shouldn\u0027t!\\n\",\n\t\t\t\tepfd);\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\treturn 0;\n}\n\nstatic int epoll_wakeup_chain(void *data) {\n\tstruct epoll_test_cfg *tcfg \u003d data;\n\tint i, res, epfd, bfd, nfd, pfds[2];\n\tpid_t pid;\n\tstruct epoll_event evt;\n\n\tmemset(\u0026evt, 0, sizeof(evt));\n\tevt.events \u003d EPOLLIN;\n\n\tepfd \u003d bfd \u003d xepoll_create(1);\n\n\tfor (i \u003d 0; i \u003c tcfg-\u003esize; i++) {\n\t\tnfd \u003d xepoll_create(1);\n\t\txepoll_ctl(bfd, EPOLL_CTL_ADD, nfd, \u0026evt);\n\t\tbfd \u003d nfd;\n\t}\n\txpipe(pfds);\n\tif (tcfg-\u003eflags \u0026 EPOLL_TF_LOOP)\n\t{\n\t\txepoll_ctl(bfd, EPOLL_CTL_ADD, epfd, \u0026evt);\n\t\t/*\n\t\t * If we\u0027re testing for loop, we want that the wakeup\n\t\t * triggered by the write to the pipe done in the child\n\t\t * process, triggers a fake event. So we add the pipe\n\t\t * read size with EPOLLOUT events. This will trigger\n\t\t * an addition to the ready-list, but no real events\n\t\t * will be there. The the epoll kernel code will proceed\n\t\t * in calling f_op-\u003epoll() of the epfd, triggering the\n\t\t * loop we want to test.\n\t\t */\n\t\tevt.events \u003d EPOLLOUT;\n\t}\n\txepoll_ctl(bfd, EPOLL_CTL_ADD, pfds[0], \u0026evt);\n\n\t/*\n\t * The pipe write must come after the poll(2) call inside\n\t * check_events(). This tests the nested wakeup code in\n\t * fs/eventpoll.c:ep_poll_safewake()\n\t * By having the check_events() (hence poll(2)) happens first,\n\t * we have poll wait queue filled up, and the write(2) in the\n\t * child will trigger the wakeup chain.\n\t */\n\tif ((pid \u003d xfork()) \u003d\u003d 0) {\n\t\tsleep(1);\n\t\twrite(pfds[1], \"w\", 1);\n\t\texit(0);\n\t}\n\n\tres \u003d check_events(epfd, 2000) \u0026 POLLIN;\n\n\tif (waitpid(pid, NULL, 0) !\u003d pid) {\n\t\tperror(\"waitpid\");\n\t\treturn -1;\n\t}\n\n\treturn res;\n}\n\nstatic int epoll_poll_chain(void *data) {\n\tstruct epoll_test_cfg *tcfg \u003d data;\n\tint i, res, epfd, bfd, nfd, pfds[2];\n\tpid_t pid;\n\tstruct epoll_event evt;\n\n\tmemset(\u0026evt, 0, sizeof(evt));\n\tevt.events \u003d EPOLLIN;\n\n\tepfd \u003d bfd \u003d xepoll_create(1);\n\n\tfor (i \u003d 0; i \u003c tcfg-\u003esize; i++) {\n\t\tnfd \u003d xepoll_create(1);\n\t\txepoll_ctl(bfd, EPOLL_CTL_ADD, nfd, \u0026evt);\n\t\tbfd \u003d nfd;\n\t}\n\txpipe(pfds);\n\tif (tcfg-\u003eflags \u0026 EPOLL_TF_LOOP)\n\t{\n\t\txepoll_ctl(bfd, EPOLL_CTL_ADD, epfd, \u0026evt);\n\t\t/*\n\t\t * If we\u0027re testing for loop, we want that the wakeup\n\t\t * triggered by the write to the pipe done in the child\n\t\t * process, triggers a fake event. So we add the pipe\n\t\t * read size with EPOLLOUT events. This will trigger\n\t\t * an addition to the ready-list, but no real events\n\t\t * will be there. The the epoll kernel code will proceed\n\t\t * in calling f_op-\u003epoll() of the epfd, triggering the\n\t\t * loop we want to test.\n\t\t */\n\t\tevt.events \u003d EPOLLOUT;\n\t}\n\txepoll_ctl(bfd, EPOLL_CTL_ADD, pfds[0], \u0026evt);\n\n\t/*\n\t * The pipe write mush come before the poll(2) call inside\n\t * check_events(). This tests the nested f_op-\u003epoll calls code in\n\t * fs/eventpoll.c:ep_eventpoll_poll()\n\t * By having the pipe write(2) happen first, we make the kernel\n\t * epoll code to load the ready lists, and the following poll(2)\n\t * done inside check_events() will test nested poll code in\n\t * ep_eventpoll_poll().\n\t */\n\tif ((pid \u003d xfork()) \u003d\u003d 0) {\n\t\twrite(pfds[1], \"w\", 1);\n\t\texit(0);\n\t}\n\tsleep(1);\n\tres \u003d check_events(epfd, 1000) \u0026 POLLIN;\n\n\tif (waitpid(pid, NULL, 0) !\u003d pid) {\n\t\tperror(\"waitpid\");\n\t\treturn -1;\n\t}\n\n\treturn res;\n}\n\nint main(int ac, char **av) {\n\tint error;\n\tstruct epoll_test_cfg tcfg;\n\n\tfprintf(stdout, \"\\n********** Testing TTY events\\n\");\n\terror \u003d run_forked_proc(epoll_test_tty, NULL);\n\tfprintf(stdout, error \u003d\u003d 0 ?\n\t\t\"********** OK\\n\": \"********** FAIL (%d)\\n\", error);\n\n\ttcfg.size \u003d 3;\n\ttcfg.flags \u003d 0;\n\tfprintf(stdout, \"\\n********** Testing short wakeup chain\\n\");\n\terror \u003d run_forked_proc(epoll_wakeup_chain, \u0026tcfg);\n\tfprintf(stdout, error \u003d\u003d POLLIN ?\n\t\t\"********** OK\\n\": \"********** FAIL (%d)\\n\", error);\n\n\ttcfg.size \u003d EPOLL_MAX_CHAIN;\n\ttcfg.flags \u003d 0;\n\tfprintf(stdout, \"\\n********** Testing long wakeup chain (HOLD ON)\\n\");\n\terror \u003d run_forked_proc(epoll_wakeup_chain, \u0026tcfg);\n\tfprintf(stdout, error \u003d\u003d 0 ?\n\t\t\"********** OK\\n\": \"********** FAIL (%d)\\n\", error);\n\n\ttcfg.size \u003d 3;\n\ttcfg.flags \u003d 0;\n\tfprintf(stdout, \"\\n********** Testing short poll chain\\n\");\n\terror \u003d run_forked_proc(epoll_poll_chain, \u0026tcfg);\n\tfprintf(stdout, error \u003d\u003d POLLIN ?\n\t\t\"********** OK\\n\": \"********** FAIL (%d)\\n\", error);\n\n\ttcfg.size \u003d EPOLL_MAX_CHAIN;\n\ttcfg.flags \u003d 0;\n\tfprintf(stdout, \"\\n********** Testing long poll chain (HOLD ON)\\n\");\n\terror \u003d run_forked_proc(epoll_poll_chain, \u0026tcfg);\n\tfprintf(stdout, error \u003d\u003d 0 ?\n\t\t\"********** OK\\n\": \"********** FAIL (%d)\\n\", error);\n\n\ttcfg.size \u003d 3;\n\ttcfg.flags \u003d EPOLL_TF_LOOP;\n\tfprintf(stdout, \"\\n********** Testing loopy wakeup chain (HOLD ON)\\n\");\n\terror \u003d run_forked_proc(epoll_wakeup_chain, \u0026tcfg);\n\tfprintf(stdout, error \u003d\u003d 0 ?\n\t\t\"********** OK\\n\": \"********** FAIL (%d)\\n\", error);\n\n\ttcfg.size \u003d 3;\n\ttcfg.flags \u003d EPOLL_TF_LOOP;\n\tfprintf(stdout, \"\\n********** Testing loopy poll chain (HOLD ON)\\n\");\n\terror \u003d run_forked_proc(epoll_poll_chain, \u0026tcfg);\n\tfprintf(stdout, error \u003d\u003d 0 ?\n\t\t\"********** OK\\n\": \"********** FAIL (%d)\\n\", error);\n\n\treturn 0;\n}\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Pavel Pisa \u003cpisa@cmp.felk.cvut.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "684999149002dd046269666a390458e0acb38280",
      "tree": "b12ea4a953ba2bd90428092e7f35a222a4109510",
      "parents": [
        "041b62374c7fedc11a8a1eeda2868612d3d1436c"
      ],
      "author": {
        "name": "Jonathan Corbet",
        "email": "corbet@lwn.net",
        "time": "Fri Feb 06 13:52:43 2009 -0700"
      },
      "committer": {
        "name": "Jonathan Corbet",
        "email": "corbet@lwn.net",
        "time": "Mon Mar 16 08:32:27 2009 -0600"
      },
      "message": "Rename struct file-\u003ef_ep_lock\n\nThis lock moves out of the CONFIG_EPOLL ifdef and becomes f_lock.  For now,\nepoll remains the only user, but a future patch will use it to protect\nf_flags as well.\n\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jonathan Corbet \u003ccorbet@lwn.net\u003e\n"
    },
    {
      "commit": "9df04e1f25effde823a600e755b51475d438f56b",
      "tree": "57a207adf5e4bfb010000724dc1482e421933be4",
      "parents": [
        "3095eb87bb36ae880608fe3fc46cfd59ced1f319"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Thu Jan 29 14:25:26 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 29 18:04:45 2009 -0800"
      },
      "message": "epoll: drop max_user_instances and rely only on max_user_watches\n\nLinus suggested to put limits where the money is, and max_user_watches\nalready does that w/out the need of max_user_instances.  That has the\nadvantage to mitigate the potential DoS while allowing pretty generous\ndefault behavior.\n\nAllowing top 4% of low memory (per user) to be allocated in epoll watches,\nwe have:\n\nLOMEM    MAX_WATCHES (per user)\n512MB    ~178000\n1GB      ~356000\n2GB      ~712000\n\nA box with 512MB of lomem, will meet some challenge in hitting 180K\nwatches, socket buffers math teaches us.  No more max_user_instances\nlimits then.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCc: Bron Gondwana \u003cbrong@fastmail.fm\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5a8a82b1d306a325d899b67715618413657efda4",
      "tree": "ac599eb041a3cdcbbb3ba0a67ff2f14e251371f5",
      "parents": [
        "3e0fa65f8ba4fd24b3dcfaf14d5b15eaab0fdc61"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:25 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:28 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 23\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "7ef9964e6d1b911b78709f144000aacadd0ebc21",
      "tree": "30667d0a2f8e53973ff48d2c02df48bbc6fe74aa",
      "parents": [
        "b7d271df873c5121a4ca1c70dea126b5920ec2f1"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Mon Dec 01 13:13:55 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 01 19:55:24 2008 -0800"
      },
      "message": "epoll: introduce resource usage limits\n\nIt has been thought that the per-user file descriptors limit would also\nlimit the resources that a normal user can request via the epoll\ninterface.  Vegard Nossum reported a very simple program (a modified\nversion attached) that can make a normal user to request a pretty large\namount of kernel memory, well within the its maximum number of fds.  To\nsolve such problem, default limits are now imposed, and /proc based\nconfiguration has been introduced.  A new directory has been created,\nnamed /proc/sys/fs/epoll/ and inside there, there are two configuration\npoints:\n\n  max_user_instances \u003d Maximum number of devices - per user\n\n  max_user_watches   \u003d Maximum number of \"watched\" fds - per user\n\nThe current default for \"max_user_watches\" limits the memory used by epoll\nto store \"watches\", to 1/32 of the amount of the low RAM.  As example, a\n256MB 32bit machine, will have \"max_user_watches\" set to roughly 90000.\nThat should be enough to not break existing heavy epoll users.  The\ndefault value for \"max_user_instances\" is set to 128, that should be\nenough too.\n\nThis also changes the userspace, because a new error code can now come out\nfrom EPOLL_CTL_ADD (-ENOSPC).  The EMFILE from epoll_create() was already\nlisted, so that should be ok.\n\n[akpm@linux-foundation.org: use get_current_user()]\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@gmail.com\u003e\nCc: \u003cstable@kernel.org\u003e\nCc: Cyrill Gorcunov \u003cgorcunov@gmail.com\u003e\nReported-by: Vegard Nossum \u003cvegardno@ifi.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9ce209d64d820a6d5ed6b952e2c0f917faad6031",
      "tree": "817c5bd01e6666c8269d29d3d8292b5e75ea7fb3",
      "parents": [
        "4d36a9e65d4966b433b2f3424d9457468bc80e00"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Fri Oct 17 16:17:40 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 26 12:09:49 2008 -0700"
      },
      "message": "epoll: avoid double-inserts in case of EFAULT\n\nIn commit f337b9c58332bdecde965b436e47ea4c94d30da0 (\"epoll: drop\nunnecessary test\") Thomas found that there is an unnecessary (always\ntrue) test in ep_send_events().  The callback never inserts into\n-\u003erdllink while the send loop is performed, and also does the\n~EP_PRIVATE_BITS test.  Given we\u0027re holding the mutex during this time,\nthe conditions tested inside the loop are always true.\n\nHOWEVER.\n\nThe test \"!ep_is_linked(\u0026epi-\u003erdllink)\" wasn\u0027t there because we insert\ninto -\u003erdllink, but because the send-events loop might terminate before\nthe whole list is scanned (-EFAULT).\n\nIn such cases, when the loop terminates early, and when a (leftover)\nfile received an event while we\u0027re performing the lockless loop, we need\nsuch test to avoid to double insert the epoll items.  The list_splice()\ndone a few steps below, will correctly re-insert the ones that were left\non \"txlist\".\n\nThis should fix the kenrel.org bugzilla entry 11831.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f337b9c58332bdecde965b436e47ea4c94d30da0",
      "tree": "0b630e4cd2cc19f29d56716162defa301f82bf65",
      "parents": [
        "8b6e47ad062e6ac993fb80256344fc499c1e827b"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Wed Oct 15 22:01:56 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:21:32 2008 -0700"
      },
      "message": "epoll: drop unnecessary test\n\nThomas found that there is an unnecessary (always true) test in\nep_send_events().  The callback never inserts into -\u003erdllink while the\nsend loop is performed, and also does the ~EP_PRIVATE_BITS test.  Given\nwe\u0027re holding the mutex during this time, the conditions tested inside the\nloop are always true.  This patch drops the test done inside the\nre-insertion loop.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "523723bb5032f291272f9732713713b9b82ccfe0",
      "tree": "115afcf1a051bbfb24fba3f416efbd20065198fc",
      "parents": [
        "98b0da43079740ecd07197dacd9720d54bb4dce0"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Aug 12 15:09:01 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 12 16:07:30 2008 -0700"
      },
      "message": "fs/eventpoll.c: fix sys_epoll_create1() comment\n\nThe `size\u0027 argument was removed.\n\nReported-by:  Geert Uytterhoeven \u003cgeert@linux-m68k.org\u003e\nCc: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9fe5ad9c8cef9ad5873d8ee55d1cf00d9b607df0",
      "tree": "49fb04cf552192e566d2aa6e18f40585230cba5a",
      "parents": [
        "e38b36f325153eaadd1c2a7abc5762079233e540"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Jul 23 21:29:43 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:29 2008 -0700"
      },
      "message": "flag parameters add-on: remove epoll_create size param\n\nRemove the size parameter from the new epoll_create syscall and renames the\nsyscall itself.  The updated test program follows.\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n#include \u003cfcntl.h\u003e\n#include \u003cstdio.h\u003e\n#include \u003ctime.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003csys/syscall.h\u003e\n\n#ifndef __NR_epoll_create2\n# ifdef __x86_64__\n#  define __NR_epoll_create2 291\n# elif defined __i386__\n#  define __NR_epoll_create2 329\n# else\n#  error \"need __NR_epoll_create2\"\n# endif\n#endif\n\n#define EPOLL_CLOEXEC O_CLOEXEC\n\nint\nmain (void)\n{\n  int fd \u003d syscall (__NR_epoll_create2, 0);\n  if (fd \u003d\u003d -1)\n    {\n      puts (\"epoll_create2(0) failed\");\n      return 1;\n    }\n  int coe \u003d fcntl (fd, F_GETFD);\n  if (coe \u003d\u003d -1)\n    {\n      puts (\"fcntl failed\");\n      return 1;\n    }\n  if (coe \u0026 FD_CLOEXEC)\n    {\n      puts (\"epoll_create2(0) set close-on-exec flag\");\n      return 1;\n    }\n  close (fd);\n\n  fd \u003d syscall (__NR_epoll_create2, EPOLL_CLOEXEC);\n  if (fd \u003d\u003d -1)\n    {\n      puts (\"epoll_create2(EPOLL_CLOEXEC) failed\");\n      return 1;\n    }\n  coe \u003d fcntl (fd, F_GETFD);\n  if (coe \u003d\u003d -1)\n    {\n      puts (\"fcntl failed\");\n      return 1;\n    }\n  if ((coe \u0026 FD_CLOEXEC) \u003d\u003d 0)\n    {\n      puts (\"epoll_create2(EPOLL_CLOEXEC) set close-on-exec flag\");\n      return 1;\n    }\n  close (fd);\n\n  puts (\"OK\");\n\n  return 0;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e38b36f325153eaadd1c2a7abc5762079233e540",
      "tree": "92cfc9855e41c5328d91456f5e373c00ecb8d383",
      "parents": [
        "510df2dd482496083e1c3b1a8c9b6afd5fa4c7d7"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Jul 23 21:29:42 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:29 2008 -0700"
      },
      "message": "flag parameters: check magic constants\n\nThis patch adds test that ensure the boundary conditions for the various\nconstants introduced in the previous patches is met.  No code is generated.\n\n[akpm@linux-foundation.org: fix alpha]\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a0998b50c3f0b8fdd265c63e0032f86ebe377dbf",
      "tree": "9132ecb7ef925374edabcaeea44e0287eb5043f4",
      "parents": [
        "11fcb6c14676023d0bd437841f5dcd670e7990a0"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Jul 23 21:29:27 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:28 2008 -0700"
      },
      "message": "flag parameters: epoll_create\n\nThis patch adds the new epoll_create2 syscall.  It extends the old epoll_create\nsyscall by one parameter which is meant to hold a flag value.  In this\npatch the only flag support is EPOLL_CLOEXEC which causes the close-on-exec\nflag for the returned file descriptor to be set.\n\nA new name EPOLL_CLOEXEC is introduced which in this implementation must\nhave the same value as O_CLOEXEC.\n\nThe following test must be adjusted for architectures other than x86 and\nx86-64 and in case the syscall numbers changed.\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n#include \u003cfcntl.h\u003e\n#include \u003cstdio.h\u003e\n#include \u003ctime.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003csys/syscall.h\u003e\n\n#ifndef __NR_epoll_create2\n# ifdef __x86_64__\n#  define __NR_epoll_create2 291\n# elif defined __i386__\n#  define __NR_epoll_create2 329\n# else\n#  error \"need __NR_epoll_create2\"\n# endif\n#endif\n\n#define EPOLL_CLOEXEC O_CLOEXEC\n\nint\nmain (void)\n{\n  int fd \u003d syscall (__NR_epoll_create2, 1, 0);\n  if (fd \u003d\u003d -1)\n    {\n      puts (\"epoll_create2(0) failed\");\n      return 1;\n    }\n  int coe \u003d fcntl (fd, F_GETFD);\n  if (coe \u003d\u003d -1)\n    {\n      puts (\"fcntl failed\");\n      return 1;\n    }\n  if (coe \u0026 FD_CLOEXEC)\n    {\n      puts (\"epoll_create2(0) set close-on-exec flag\");\n      return 1;\n    }\n  close (fd);\n\n  fd \u003d syscall (__NR_epoll_create2, 1, EPOLL_CLOEXEC);\n  if (fd \u003d\u003d -1)\n    {\n      puts (\"epoll_create2(EPOLL_CLOEXEC) failed\");\n      return 1;\n    }\n  coe \u003d fcntl (fd, F_GETFD);\n  if (coe \u003d\u003d -1)\n    {\n      puts (\"fcntl failed\");\n      return 1;\n    }\n  if ((coe \u0026 FD_CLOEXEC) \u003d\u003d 0)\n    {\n      puts (\"epoll_create2(EPOLL_CLOEXEC) set close-on-exec flag\");\n      return 1;\n    }\n  close (fd);\n\n  puts (\"OK\");\n\n  return 0;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7d9dbca34240ebb6ff88d8a29c6c7bffd098f0c1",
      "tree": "7e3226a4d885f5e4444fbe01a08c51b0b33b2cc7",
      "parents": [
        "c019bbc612f6633ede7ed67725cbf68de45ae8a4"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Jul 23 21:29:22 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:27 2008 -0700"
      },
      "message": "flag parameters: anon_inode_getfd extension\n\nThis patch just extends the anon_inode_getfd interface to take an additional\nparameter with a flag value.  The flag value is passed on to\nget_unused_fd_flags in anticipation for a use with the O_CLOEXEC flag.\n\nNo actual semantic changes here, the changed callers all pass 0 for now.\n\n[akpm@linux-foundation.org: KVM fix]\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2030a42cecd4dd1985a2ab03e25f3cd6106a5ca8",
      "tree": "7cb4710c3f7a4e034a20890f0df99bc42f9bbcee",
      "parents": [
        "9f3acc3140444a900ab280de942291959f0f615d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Feb 23 06:46:49 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 01 13:08:50 2008 -0400"
      },
      "message": "[PATCH] sanitize anon_inode_getfd()\n\na) none of the callers even looks at inode or file returned by anon_inode_getfd()\nb) any caller that would try to look at those would be racy, since by the time\nit returns we might have raced with close() from another thread and that\nfile would be pining for fjords.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f3de272b821accbc8387211977c2de4f38468d05",
      "tree": "775b5b3db5a09176447d4e62e04077b63640a4d7",
      "parents": [
        "49eaeb4bc4c901c327ee259c7768be20fd020a30"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Wed Apr 30 00:53:09 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:37 2008 -0700"
      },
      "message": "signals: use HAVE_SET_RESTORE_SIGMASK\n\nChange all the #ifdef TIF_RESTORE_SIGMASK conditionals in non-arch code to\n#ifdef HAVE_SET_RESTORE_SIGMASK.  If arch code defines it first, the generic\nset_restore_sigmask() using TIF_RESTORE_SIGMASK is not defined.\n\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e4c22c71144c1b2e22c257ec6cf08ccb5be1165",
      "tree": "0a41fb405ab60654f70ead9698d5ce414a066c37",
      "parents": [
        "80fe728d593e3a048a56610de932919f7d6d968a"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Wed Apr 30 00:53:06 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:37 2008 -0700"
      },
      "message": "signals: add set_restore_sigmask\n\nThis adds the set_restore_sigmask() inline in \u003clinux/thread_info.h\u003e and\nreplaces every set_thread_flag(TIF_RESTORE_SIGMASK) with a call to it.  No\nchange, but abstracts the details of the flag protocol from all the calls.\n\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cdac75e6f2fec9abc21d0abb4e5d80720eeebb10",
      "tree": "0962ee591a96d5ebbd8e572b4aa05fe725754eb2",
      "parents": [
        "b781ecb6a379f155568ef7093e38c6c1d857fe53"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue Apr 29 00:58:34 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 29 08:05:59 2008 -0700"
      },
      "message": "epoll: avoid kmemcheck warning\n\nEpoll calls rb_set_parent(n, n) to initialize the rb-tree node, but\nrb_set_parent() accesses node\u0027s pointer in its code.  This creates a\nwarning in kmemcheck (reported by Vegard Nossum) about an uninitialized\nmemory access.  The warning is harmless since the following rb-tree node\ninsert is going to overwrite the node data.  In any case I think it\u0027s\nbetter to not have that happening at all, and fix it by simplifying the\ncode to get rid of a few lines that became superfluous after the previous\nepoll changes.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0ccf831cbee94df9c5006dd46248c0f07847dd7c",
      "tree": "4de8d53c51dc4aff80f35a95cdd185229f0df79e",
      "parents": [
        "96cf49a2c13e8dcf442abaadf6645f6a1fb3ae92"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Mon Feb 04 22:27:20 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Feb 05 09:44:07 2008 -0800"
      },
      "message": "lockdep: annotate epoll\n\nOn Sat, 2008-01-05 at 13:35 -0800, Davide Libenzi wrote:\n\n\u003e I remember I talked with Arjan about this time ago. Basically, since 1)\n\u003e you can drop an epoll fd inside another epoll fd 2) callback-based wakeups\n\u003e are used, you can see a wake_up() from inside another wake_up(), but they\n\u003e will never refer to the same lock instance.\n\u003e Think about:\n\u003e\n\u003e \tdfd \u003d socket(...);\n\u003e \tefd1 \u003d epoll_create();\n\u003e \tefd2 \u003d epoll_create();\n\u003e \tepoll_ctl(efd1, EPOLL_CTL_ADD, dfd, ...);\n\u003e \tepoll_ctl(efd2, EPOLL_CTL_ADD, efd1, ...);\n\u003e\n\u003e When a packet arrives to the device underneath \"dfd\", the net code will\n\u003e issue a wake_up() on its poll wake list. Epoll (efd1) has installed a\n\u003e callback wakeup entry on that queue, and the wake_up() performed by the\n\u003e \"dfd\" net code will end up in ep_poll_callback(). At this point epoll\n\u003e (efd1) notices that it may have some event ready, so it needs to wake up\n\u003e the waiters on its poll wait list (efd2). So it calls ep_poll_safewake()\n\u003e that ends up in another wake_up(), after having checked about the\n\u003e recursion constraints. That are, no more than EP_MAX_POLLWAKE_NESTS, to\n\u003e avoid stack blasting. Never hit the same queue, to avoid loops like:\n\u003e\n\u003e \tepoll_ctl(efd2, EPOLL_CTL_ADD, efd1, ...);\n\u003e \tepoll_ctl(efd3, EPOLL_CTL_ADD, efd2, ...);\n\u003e \tepoll_ctl(efd4, EPOLL_CTL_ADD, efd3, ...);\n\u003e \tepoll_ctl(efd1, EPOLL_CTL_ADD, efd4, ...);\n\u003e\n\u003e The code \"if (tncur-\u003ewq \u003d\u003d wq || ...\" prevents re-entering the same\n\u003e queue/lock.\n\nSince the epoll code is very careful to not nest same instance locks\nallow the recursion.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nTested-by: Stefan Richter \u003cstefanr@s5r6.in-berlin.de\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4a6e9e2ce822c9f597b3036887f6cf5fa3a79375",
      "tree": "b0659479debfe0824022665e399b552bb4bb2415",
      "parents": [
        "ceaeee6ad6c2a24bf37d9f426414cf3007432352"
      ],
      "author": {
        "name": "Matthew Wilcox",
        "email": "matthew@wil.cx",
        "time": "Thu Aug 30 16:10:22 2007 -0400"
      },
      "committer": {
        "name": "Matthew Wilcox",
        "email": "willy@linux.intel.com",
        "time": "Thu Dec 06 17:07:16 2007 -0500"
      },
      "message": "Use wake_up_locked() in eventpoll\n\nReplace the uses of __wake_up_locked with wake_up_locked\n\nSigned-off-by: Matthew Wilcox \u003cmatthew@wil.cx\u003e\n"
    },
    {
      "commit": "b70c394099851c1398e9fd0fd64cf13ef2d093a1",
      "tree": "f030f8eed8ea257765f18f43dc3200dad054d3ea",
      "parents": [
        "cfdaf9e5f95993264b5aee7cbb9dd16977bc11ed"
      ],
      "author": {
        "name": "Matthias Kaehlcke",
        "email": "matthias.kaehlcke@gmail.com",
        "time": "Thu Oct 18 23:39:56 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:38 2007 -0700"
      },
      "message": "fs/eventpoll.c: use list_for_each_entry() instead of list_for_each()\n\nfs/eventpoll.c: use list_for_each_entry() instead of list_for_each()\nin ep_poll_safewake()\n\nSigned-off-by: Matthias Kaehlcke \u003cmatthias.kaehlcke@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c80544dc0b87bb65038355e7aafdc30be16b26ab",
      "tree": "176349304bec88a9de16e650c9919462e0dd453c",
      "parents": [
        "0e9663ee452ffce0d429656ebbcfe69417a30e92"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@linux-foundation.org",
        "time": "Thu Oct 18 03:07:05 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Oct 18 14:37:31 2007 -0700"
      },
      "message": "sparse pointer use of zero as null\n\nGet rid of sparse related warnings from places that use integer as NULL\npointer.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Stephen Hemminger \u003cshemminger@linux-foundation.org\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Jeff Garzik \u003cjeff@garzik.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Ian Kent \u003craven@themaw.net\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Stephen Smalley \u003csds@tycho.nsa.gov\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "20c2df83d25c6a95affe6157a4c9cac4cf5ffaac",
      "tree": "415c4453d2b17a50abe7a3e515177e1fa337bd67",
      "parents": [
        "64fb98fc40738ae1a98bcea9ca3145b89fb71524"
      ],
      "author": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Fri Jul 20 10:11:58 2007 +0900"
      },
      "committer": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Fri Jul 20 10:11:58 2007 +0900"
      },
      "message": "mm: Remove slab destructors from kmem_cache_create().\n\nSlab destructors were no longer supported after Christoph\u0027s\nc59def9f222d44bb7e2f0a559f2906191a0862d7 change. They\u0027ve been\nBUGs for both slab and slub, and slob never supported them\neither.\n\nThis rips out support for the dtor pointer from kmem_cache_create()\ncompletely and fixes up every single callsite in the kernel (there were\nabout 224, not including the slab allocator definitions themselves,\nor the documentation references).\n\nSigned-off-by: Paul Mundt \u003clethal@linux-sh.org\u003e\n"
    },
    {
      "commit": "f0ee9aabb0520adea5937855a9575c08a97b16e7",
      "tree": "9dd47c449b3de44302bc023f64d14c1fe18266b4",
      "parents": [
        "67647d0fb8bc03609d045a9cce85f7ef6d763036"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue May 15 01:40:57 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 15 08:54:00 2007 -0700"
      },
      "message": "epoll: move kfree inside ep_free\n\nMove the kfree() call inside the ep_free() function.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "67647d0fb8bc03609d045a9cce85f7ef6d763036",
      "tree": "d5d7361799b17daca0ce12a0164469a00d7acbbe",
      "parents": [
        "c7ea76302547f81e4583d0d7c52a1c37c6747f5d"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue May 15 01:40:52 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 15 08:54:00 2007 -0700"
      },
      "message": "epoll: fix some comments\n\nFixes some epoll code comments.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c7ea76302547f81e4583d0d7c52a1c37c6747f5d",
      "tree": "96dc2002a93a99cd3d43f1c1ca0e825a95f6448d",
      "parents": [
        "d47de16c7221968d3eab899d7540efa5ba77af5a"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue May 15 01:40:47 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 15 08:53:59 2007 -0700"
      },
      "message": "epoll locks changes and cleanups\n\nChanges the rwlock to a spinlock, and drops the use-count variable.\nOperations are always bound by the mutex now, so the use-count is no more\nneeded.  For the same reason, the rwlock can become a simple spinlock.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d47de16c7221968d3eab899d7540efa5ba77af5a",
      "tree": "289c3dc8e4b3121a9a4b1846ae9acbd355b4b541",
      "parents": [
        "faa8b6c3c2e1454175609167a25ae525d075f045"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue May 15 01:40:41 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 15 08:53:59 2007 -0700"
      },
      "message": "fix epoll single pass code and add wait-exclusive flag\n\nFixes the epoll single pass code.  During the unlocked event delivery (to\nuserspace) code, the poll callback can re-issue new events, and we must\nreceive them correctly.  Since we loop in a lockless fashion, we want to be\nO(nready), and we don\u0027t want to flash on/off the spinlock for every event, we\nhave the poll callback to use a secondary list to queue events while we\u0027re\ninside the event delivery loop.  The rw_semaphore has been turned into a\nmutex.  This patch also adds the wait-exclusive flag, as suggested by Davi\nArnaut.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7699acd1341c63fdbcfc56994fb2989ec59d2a43",
      "tree": "ccb434eca7111edc906a96a59b299fdba6d47f12",
      "parents": [
        "cea69241870e55638156a026814551d6c575fd7f"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Thu May 10 22:23:23 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri May 11 08:29:37 2007 -0700"
      },
      "message": "epoll cleanups: epoll remove static pre-declarations and akpm-ize the code\n\nRe-arrange epoll code to avoid static functions pre-declarations, and apply\nakpm-filter on it.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cea69241870e55638156a026814551d6c575fd7f",
      "tree": "50954e635d67092260f898d5f601997643bd5a63",
      "parents": [
        "da66f7cb0f69ab27dbf5b9d0b85c4b97716c44d1"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Thu May 10 22:23:22 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri May 11 08:29:37 2007 -0700"
      },
      "message": "epoll cleanups: epoll no module\n\nEpoll is either compiled it, or not (if EMBEDDED). Remove the module code\nand use fs_initcall().\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "da66f7cb0f69ab27dbf5b9d0b85c4b97716c44d1",
      "tree": "3d2dc033eb92d18f8b2debe2fd472d6f3a7b6b9f",
      "parents": [
        "9c3060bedd84144653a2ad7bea32389f65598d40"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Thu May 10 22:23:21 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri May 11 08:29:37 2007 -0700"
      },
      "message": "epoll: use anonymous inodes\n\nCut out lots of code from epoll, by reusing the anonymous inode source\npatch (fs/anon_inodes.c).\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b5e618181a927210f8be1d3d2249d31904ba358d",
      "tree": "731f1ae4ff1ba56d402bb329182b7d935bb439a1",
      "parents": [
        "db9c02fa8bd50eb104781a9f78cae923d8da1e74"
      ],
      "author": {
        "name": "Pavel Emelianov",
        "email": "xemul@sw.ru",
        "time": "Tue May 08 00:30:19 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:11 2007 -0700"
      },
      "message": "Introduce a handy list_first_entry macro\n\nThere are many places in the kernel where the construction like\n\n   foo \u003d list_entry(head-\u003enext, struct foo_struct, list);\n\nare used.\nThe code might look more descriptive and neat if using the macro\n\n   list_first_entry(head, type, member) \\\n             list_entry((head)-\u003enext, type, member)\n\nHere is the macro itself and the examples of its usage in the generic code.\n If it will turn out to be useful, I can prepare the set of patches to\ninject in into arch-specific code, drivers, networking, etc.\n\nSigned-off-by: Pavel Emelianov \u003cxemul@openvz.org\u003e\nSigned-off-by: Kirill Korotaev \u003cdev@openvz.org\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: John McCutchan \u003cttb@tentacle.dhs.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e63340ae6b6205fef26b40a75673d1c9c0c8bb90",
      "tree": "8d3212705515edec73c3936bb9e23c71d34a7b41",
      "parents": [
        "04c9167f91e309c9c4ea982992aa08e83b2eb42e"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Tue May 08 00:28:08 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:07 2007 -0700"
      },
      "message": "header cleaning: don\u0027t include smp_lock.h when not used\n\nRemove includes of \u003clinux/smp_lock.h\u003e where it is not used/needed.\nSuggested by Al Viro.\n\nBuilds cleanly on x86_64, i386, alpha, ia64, powerpc, sparc,\nsparc64, and arm (all 59 defconfigs).\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6192bd536f96c6a0d969081bc71ae24f9319bfdc",
      "tree": "07056ed061df4070d22198b5b6692d102aeacc00",
      "parents": [
        "44171df8e944f0bc8f7fa3f6d080f3e671431989"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue May 08 00:25:41 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:01 2007 -0700"
      },
      "message": "epoll: optimizations and cleanups\n\nEpoll is doing multiple passes over the ready set at the moment, because of\nthe constraints over the f_op-\u003epoll() call.  Looking at the code again, I\nnoticed that we already hold the epoll semaphore in read, and this\n(together with other locking conditions that hold while doing an\nepoll_wait()) can lead to a smarter way [1] to \"ship\" events to userspace\n(in a single pass).\n\nThis is a stress application that can be used to test the new code.  It\nspwans multiple thread and call epoll_wait() and epoll_ctl() from many\nthreads.  Stress tested on my dual Opteron 254 w/out any problems.\n\nhttp://www.xmailserver.org/totalmess.c\n\nThis is not a benchmark, just something that tries to stress and exploit\npossible problems with the new code.\nAlso, I made a stupid micro-benchmark:\n\nhttp://www.xmailserver.org/epwbench.c\n\n[1] Considering that epoll must be thread-safe, there are five ways we can\n    be hit during an epoll_wait() transfer loop (ep_send_events()):\n\n    1) The epoll fd going away and calling ep_free\n       This just can\u0027t happen, since we did an fget() in sys_epoll_wait\n\n    2) An epoll_ctl(EPOLL_CTL_DEL)\n       This can\u0027t happen because epoll_ctl() gets ep-\u003esem in write, and\n       we\u0027re holding it in read during ep_send_events()\n\n    3) An fd stored inside the epoll fd going away\n       This can\u0027t happen because in eventpoll_release_file() we get\n       ep-\u003esem in write, and we\u0027re holding it in read during\n       ep_send_events()\n\n    4) Another epoll_wait() happening on another thread\n       They both can be inside ep_send_events() at the same time, we get\n       (splice) the ready-list under the spinlock, so each one will get\n       its own ready list. Note that an fd cannot be at the same time\n       inside more than one ready list, because ep_poll_callback() will\n       not re-queue it if it sees it already linked:\n\n       if (ep_is_linked(\u0026epi-\u003erdllink))\n                goto is_linked;\n\n       Another case that can happen, is two concurrent epoll_wait(),\n       coming in with a userspace event buffer of size, say, ten.\n       Suppose there are 50 event ready in the list. The first\n       epoll_wait() will \"steal\" the whole list, while the second, seeing\n       no events, will go to sleep. But at the end of ep_send_events() in\n       the first epoll_wait(), we will re-inject surplus ready fds, and we\n       will trigger the proper wake_up to the second epoll_wait().\n\n    5) ep_poll_callback() hitting us asyncronously\n       This is the tricky part. As I said above, the ep_is_linked() test\n       done inside ep_poll_callback(), will guarantee us that until the\n       item will result linked to a list, ep_poll_callback() will not try\n       to re-queue it again (read, write data on any of its members). When\n       we do a list_del() in ep_send_events(), the item will still satisfy\n       the ep_is_linked() test (whatever data is written in prev/next,\n       it\u0027ll never be its own pointer), so ep_poll_callback() will still\n       leave us alone. It\u0027s only after the eventual smp_mb()+INIT_LIST_HEAD(\u0026epi-\u003erdllink)\n       that it\u0027ll become visible to ep_poll_callback(), but at the point\n       we\u0027re already past it.\n\n[akpm@osdl.org: 80 cols]\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0f7fc9e4d03987fe29f6dd4aa67e4c56eb7ecb05",
      "tree": "51763269e44eb9bf4d0f8c529577489902850cf9",
      "parents": [
        "b65d34fd465f19fbe2f32f2205a9a06ca7c2bdeb"
      ],
      "author": {
        "name": "Josef \"Jeff\" Sipek",
        "email": "jsipek@cs.sunysb.edu",
        "time": "Fri Dec 08 02:36:35 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:28:41 2006 -0800"
      },
      "message": "[PATCH] VFS: change struct file to use struct path\n\nThis patch changes struct file to use struct path instead of having\nindependent pointers to struct dentry and struct vfsmount, and converts all\nusers of f_{dentry,vfsmnt} in fs/ to use f_path.{dentry,mnt}.\n\nAdditionally, it adds two #define\u0027s to make the transition easier for users of\nthe f_dentry and f_vfsmnt.\n\nSigned-off-by: Josef \"Jeff\" Sipek \u003cjsipek@cs.sunysb.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e18b890bb0881bbab6f4f1a6cd20d9c60d66b003",
      "tree": "4828be07e1c24781c264b42c5a75bcd968223c3f",
      "parents": [
        "441e143e95f5aa1e04026cb0aa71c801ba53982f"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Dec 06 20:33:20 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:25 2006 -0800"
      },
      "message": "[PATCH] slab: remove kmem_cache_t\n\nReplace all uses of kmem_cache_t with struct kmem_cache.\n\nThe patch was generated using the following script:\n\n\t#!/bin/sh\n\t#\n\t# Replace one string by another in all the kernel sources.\n\t#\n\n\tset -e\n\n\tfor file in `find * -name \"*.c\" -o -name \"*.h\"|xargs grep -l $1`; do\n\t\tquilt add $file\n\t\tsed -e \"1,\\$s/$1/$2/g\" $file \u003e/tmp/$$\n\t\tmv /tmp/$$ $file\n\t\tquilt refresh\n\tdone\n\nThe script was run like this\n\n\tsh replace kmem_cache_t \"struct kmem_cache\"\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e94b1766097d53e6f3ccfb36c8baa562ffeda3fc",
      "tree": "93fa0a8ab84976d4e89c50768ca8b8878d642a0d",
      "parents": [
        "54e6ecb23951b195d02433a741c7f7cb0b796c78"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Dec 06 20:33:17 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:24 2006 -0800"
      },
      "message": "[PATCH] slab: remove SLAB_KERNEL\n\nSLAB_KERNEL is an alias of GFP_KERNEL.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b611967de4dc5c52049676c4369dcac622a7cdfe",
      "tree": "8c19038c8bbaa4851dcb99bed33707deaf5170d1",
      "parents": [
        "0f836e5fecf59d0d0353e9af11fd14a32a3001ae"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Wed Oct 11 01:21:44 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 11 11:14:21 2006 -0700"
      },
      "message": "[PATCH] epoll_pwait()\n\nImplement the epoll_pwait system call, that extend the event wait mechanism\nwith the same logic ppoll and pselect do.  The definition of epoll_pwait\nis:\n\nint epoll_pwait(int epfd, struct epoll_event *events, int maxevents,\n                 int timeout, const sigset_t *sigmask, size_t sigsetsize);\n\nThe difference between the vanilla epoll_wait and epoll_pwait is that the\nlatter allows the caller to specify a signal mask to be set while waiting\nfor events.  Hence epoll_pwait will wait until either one monitored event,\nor an unmasked signal happen.  If sigmask is NULL, the epoll_pwait system\ncall will act exactly like epoll_wait.  For the POSIX definition of\npselect, information is available here:\n\nhttp://www.opengroup.org/onlinepubs/009695399/functions/select.html\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nCc: Michael Kerrisk \u003cmtk-manpages@gmx.net\u003e\nCc: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "c3b6571384024be31e8b3442c0e7c3b127110d9b",
      "tree": "24281e244579d97eb944d7b48e0036f27db4fe3c",
      "parents": [
        "e1ca66d1b990b23e7753c729332c0ada61f4f38d"
      ],
      "author": {
        "name": "Jeff Garzik",
        "email": "jeff@garzik.org",
        "time": "Tue Oct 03 01:13:52 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:03:41 2006 -0700"
      },
      "message": "[PATCH] fs/eventpoll: error handling micro-cleanup\n\nWhile reviewing the \u0027may be used uninitialized\u0027 bogus gcc warnings, I\nnoticed that an error code assignment was only needed if an error had\nactually occured.\n\nSigned-off-by: Jeff Garzik \u003cjeff@garzik.org\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ba52de123d454b57369f291348266d86f4b35070",
      "tree": "3973f3f3c853b5857b6b64a027cadd4fe954e3b9",
      "parents": [
        "577c4eb09d1034d0739e3135fd2cff50588024be"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 27 01:50:49 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 27 08:26:18 2006 -0700"
      },
      "message": "[PATCH] inode-diet: Eliminate i_blksize from the inode structure\n\nThis eliminates the i_blksize field from struct inode.  Filesystems that want\nto provide a per-inode st_blksize can do so by providing their own getattr\nroutine instead of using the generic_fillattr() function.\n\nNote that some filesystems were providing pretty much random (and incorrect)\nvalues for i_blksize.\n\n[bunk@stusta.de: cleanup]\n[akpm@osdl.org: generic_fillattr() fix]\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "45f17e0c2ae05c133a348452690de0e5fa863293",
      "tree": "4c00cf9666bd0293165d5afa13753120e8329621",
      "parents": [
        "e88d78f6ba50d773096e26ca3f5c2464853c682d"
      ],
      "author": {
        "name": "Masoud Asgharifard Sharbiani",
        "email": "masouds@google.com",
        "time": "Sun Aug 27 01:23:48 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Aug 27 11:01:31 2006 -0700"
      },
      "message": "[PATCH] eventpoll.c compile fix\n\nFix two compile failures in eventpoll.c code which would happen if\nDEBUG_EPOLL is bigger than zero.\n\nSigned-off-by: Masoud Sharbiani \u003cmasouds@google.com\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "36c8b586896f60cb91a4fd526233190b34316baf",
      "tree": "003246e1e676de33703daa979b3e3109ca202a89",
      "parents": [
        "48f24c4da1ee7f3f22289cb85e8b8a73e4df4db5"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jul 03 00:25:41 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jul 03 15:27:11 2006 -0700"
      },
      "message": "[PATCH] sched: cleanup, remove task_t, convert to struct task_struct\n\ncleanup: remove task_t and convert all the uses to struct task_struct. I\nintroduced it for the scheduler anno and it was a mistake.\n\nConversion was mostly scripted, the result was reviewed and all\nsecondary whitespace and style impact (if any) was fixed up by hand.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3419b23a919698f75944d3e0d97eb1d9c51e4bb6",
      "tree": "e1b4b6aad754c6a40137c0a563d823074501da2d",
      "parents": [
        "4ad3bcf3146aa12f41262bb5dd1d9f1778e085b1"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Sun Jun 25 05:48:14 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jun 25 10:01:13 2006 -0700"
      },
      "message": "[PATCH] epoll: use unlocked wqueue operations\n\nA few days ago Arjan signaled a lockdep red flag on epoll locks, and\nprecisely between the epoll\u0027s device structure lock (-\u003elock) and the wait\nqueue head lock (-\u003elock).\n\nLike I explained in another email, and directly to Arjan, this can\u0027t happen\nin reality because of the explicit check at eventpoll.c:592, that does not\nallow to drop an epoll fd inside the same epoll fd.  Since lockdep is\nworking on per-structure locks, it will never be able to know of policies\nenforced in other parts of the code.\n\nIt was decided time ago of having the ability to drop epoll fds inside\nother epoll fds, that triggers a very trick wakeup operations (due to\npossibly reentrant callback-driven wakeups) handled by the\nep_poll_safewake() function.  While looking again at the code though, I\nnoticed that all the operations done on the epoll\u0027s main structure wait\nqueue head (-\u003ewq) are already protected by the epoll lock (-\u003elock), so that\nlocked-style functions can be used to manipulate the -\u003ewq member.  This\nmakes both a lock-acquire save, and lockdep happy.\n\nRunning totalmess on my dual opteron for a while did not reveal any problem\nso far:\n\nhttp://www.xmailserver.org/totalmess.c\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "454e2398be9b9fa30433fccc548db34d19aa9958",
      "tree": "1f61cb0c3716a33b661cfc8977e9beeb480a322c",
      "parents": [
        "1ad5544098a69d7dc1fa508cbb17e13a7a952fd8"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jun 23 02:02:57 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:42:45 2006 -0700"
      },
      "message": "[PATCH] VFS: Permit filesystem to override root dentry on mount\n\nExtend the get_sb() filesystem operation to take an extra argument that\npermits the VFS to pass in the target vfsmount that defines the mountpoint.\n\nThe filesystem is then required to manually set the superblock and root dentry\npointers.  For most filesystems, this should be done with simple_set_mnt()\nwhich will set the superblock pointer and then set the root dentry to the\nsuperblock\u0027s s_root (as per the old default behaviour).\n\nThe get_sb() op now returns an integer as there\u0027s now no need to return the\nsuperblock pointer.\n\nThis patch permits a superblock to be implicitly shared amongst several mount\npoints, such as can be done with NFS to avoid potential inode aliasing.  In\nsuch a case, simple_set_mnt() would not be called, and instead the mnt_root\nand mnt_sb would be set directly.\n\nThe patch also makes the following changes:\n\n (*) the get_sb_*() convenience functions in the core kernel now take a vfsmount\n     pointer argument and return an integer, so most filesystems have to change\n     very little.\n\n (*) If one of the convenience function is not used, then get_sb() should\n     normally call simple_set_mnt() to instantiate the vfsmount. This will\n     always return 0, and so can be tail-called from get_sb().\n\n (*) generic_shutdown_super() now calls shrink_dcache_sb() to clean up the\n     dcache upon superblock destruction rather than shrink_dcache_anon().\n\n     This is required because the superblock may now have multiple trees that\n     aren\u0027t actually bound to s_root, but that still need to be cleaned up. The\n     currently called functions assume that the whole tree is rooted at s_root,\n     and that anonymous dentries are not the roots of trees which results in\n     dentries being left unculled.\n\n     However, with the way NFS superblock sharing are currently set to be\n     implemented, these assumptions are violated: the root of the filesystem is\n     simply a dummy dentry and inode (the real inode for \u0027/\u0027 may well be\n     inaccessible), and all the vfsmounts are rooted on anonymous[*] dentries\n     with child trees.\n\n     [*] Anonymous until discovered from another tree.\n\n (*) The documentation has been adjusted, including the additional bit of\n     changing ext2_* into foo_* in the documentation.\n\n[akpm@osdl.org: convert ipath_fs, do other stuff]\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Nathan Scott \u003cnathans@sgi.com\u003e\nCc: Roland Dreier \u003crolandd@cisco.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "c569882b2e70a0c4eac99acdb39b493549041ba1",
      "tree": "2c405fa9d5c0bc29a1b7edc1bd92cb3db749a8d2",
      "parents": [
        "fed306f2baa170220b0299198a39c6be2a91bf19"
      ],
      "author": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Fri Apr 21 13:17:24 2006 +0100"
      },
      "committer": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Fri Apr 21 13:17:24 2006 +0100"
      },
      "message": "[RBTREE] Update eventpoll.c to use rb_parent() accessor macro.\n\nSigned-off-by: David Woodhouse \u003cdwmw2@infradead.org\u003e\n"
    },
    {
      "commit": "2395140ee2bffe38b1c8a59318f62882b797f5e6",
      "tree": "b8e8f6d6db2f1aa417bb32b8a5a376d0c0a478b2",
      "parents": [
        "0f6c840d774d669baf4727c0499ab0674826429f"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Mon Apr 10 22:54:12 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Apr 11 06:18:42 2006 -0700"
      },
      "message": "[PATCH] uniform POLLRDHUP handling between epoll and poll/select\n\nAs reported by Michael Kerrisk, POLLRDHUP handling was not consistent\nbetween epoll and poll/select, since in epoll it was unmaskeable.  This\npatch brings uniformity in POLLRDHUP handling.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk-manpages@gmx.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4b6f5d20b04dcbc3d888555522b90ba6d36c4106",
      "tree": "420f271eaef7d3def7d4433b151c3cb6d7a54770",
      "parents": [
        "99ac48f54a91d02140c497edc31dc57d4bc5c85d"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@infradead.org",
        "time": "Tue Mar 28 01:56:42 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Mar 28 09:16:06 2006 -0800"
      },
      "message": "[PATCH] Make most file operations structs in fs/ const\n\nThis is a conversion to make the various file_operations structs in fs/\nconst.  Basically a regexp job, with a few manual fixups\n\nThe goal is both to increase correctness (harder to accidentally write to\nshared datastructures) and reducing the false sharing of cachelines with\nthings that get dirty in .data (while .rodata is nicely read only and thus\ncache clean)\n\nSigned-off-by: Arjan van de Ven \u003carjan@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "fa3536cc144c1298f2ed9416c33f3b77fa2cd37a",
      "tree": "5484541319b86ae7dac0def4db7925f7cc7008e7",
      "parents": [
        "878a9f30d7b13015f3aa4534d7877d985f150183"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Sun Mar 26 01:37:24 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Mar 26 08:56:56 2006 -0800"
      },
      "message": "[PATCH] Use __read_mostly on some hot fs variables\n\nI discovered on oprofile hunting on a SMP platform that dentry lookups were\nslowed down because d_hash_mask, d_hash_shift and dentry_hashtable were in\na cache line that contained inodes_stat.  So each time inodes_stats is\nchanged by a cpu, other cpus have to refill their cache line.\n\nThis patch moves some variables to the __read_mostly section, in order to\navoid false sharing.  RCU dentry lookups can go full speed.\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f348d70a324e15afc701a494f32ec468abb7d1eb",
      "tree": "a4cb43429f7f08a6621c581bd99e4a03198e8c67",
      "parents": [
        "501f2499b897ca4be68b1acc7a4bc8cf66f5fd24"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Sat Mar 25 03:07:39 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Mar 25 08:22:56 2006 -0800"
      },
      "message": "[PATCH] POLLRDHUP/EPOLLRDHUP handling for half-closed devices notifications\n\nImplement the half-closed devices notifiation, by adding a new POLLRDHUP\n(and its alias EPOLLRDHUP) bit to the existing poll/select sets.  Since the\nexisting POLLHUP handling, that does not report correctly half-closed\ndevices, was feared to be changed, this implementation leaves the current\nPOLLHUP reporting unchanged and simply add a new bit that is set in the few\nplaces where it makes sense.  The same thing was discussed and conceptually\nagreed quite some time ago:\n\nhttp://lkml.org/lkml/2003/7/12/116\n\nSince this new event bit is added to the existing Linux poll infrastruture,\neven the existing poll/select system calls will be able to use it.  As far\nas the existing POLLHUP handling, the patch leaves it as is.  The\npollrdhup-2.6.16.rc5-0.10.diff defines the POLLRDHUP for all the existing\narchs and sets the bit in the six relevant files.  The other attached diff\nis the simple change required to sys/epoll.h to add the EPOLLRDHUP\ndefinition.\n\nThere is \"a stupid program\" to test POLLRDHUP delivery here:\n\n http://www.xmailserver.org/pollrdhup-test.c\n\nIt tests poll(2), but since the delivery is same epoll(2) will work equally.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Michael Kerrisk \u003cmtk-manpages@gmx.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5a6b7951bfcca7f45f44269ea87417c74558daf8",
      "tree": "f9cc8b3f89c89802e81b37d77c6f698e373bfe51",
      "parents": [
        "0b2fcfdb8b4e7e379192f24ea2203163ddf5df1d"
      ],
      "author": {
        "name": "Benjamin LaHaise",
        "email": "bcrl@linux.intel.com",
        "time": "Thu Mar 23 03:01:03 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Mar 23 07:38:17 2006 -0800"
      },
      "message": "[PATCH] get_empty_filp tweaks, inline epoll_init_file()\n\nEliminate a handful of cache references by keeping current in a register\ninstead of reloading (helps x86) and avoiding the overhead of a function\ncall.  Inlining eventpoll_init_file() saves 24 bytes.  Also reorder file\ninitialization to make writes occur more sequentially.\n\nSigned-off-by: Benjamin LaHaise \u003cbcrl@linux.intel.com\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "144efe3e3e5ad57af549bf800fa4560d7c74e9fe",
      "tree": "332dd6364fe5122f489ab4352817f11737e7a258",
      "parents": [
        "70522e121a521aa09bd0f4e62e1aa68708b798e1"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@infradead.org",
        "time": "Thu Mar 23 03:00:32 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Mar 23 07:38:12 2006 -0800"
      },
      "message": "[PATCH] sem2mutex: eventpoll\n\nSemaphore to mutex conversion.\n\nThe conversion was generated via scripts, and the result was validated\nautomatically via a script as well.\n\nSigned-off-by: Arjan van de Ven \u003carjan@infradead.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e3306dd5f7eb2e699f36a4a313fca4b48b18d5e1",
      "tree": "2b9a02d3b5b4fdd421267ff7c925222a5caddb79",
      "parents": [
        "f2d613799af915da1fd78463ba8ec5086a0d6f92"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue Sep 27 21:45:33 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 28 07:46:41 2005 -0700"
      },
      "message": "[PATCH] epoll: handle timeout overflow\n\nHandle the timeout upper boundary for epoll.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "53d2be79d5981b7efc8c5ec1169613bba95bde20",
      "tree": "0827b66ad3ffb70f0e7503c3db3b01d6d7a1037b",
      "parents": [
        "dda8577fb5a00507e5aea737833190a10516b257"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Fri Sep 16 19:28:06 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Sep 17 11:50:02 2005 -0700"
      },
      "message": "[PATCH] epoll: fix delayed initialization bug\n\nAl found a potential problem in epoll_create(), where the\nfile-\u003eprivate_data member was set after fd_install().  This is obviously\nwrong since another thread might do a close() on that fd# before we set the\nfile-\u003eprivate_data member.  This goes over 2.6.13 and passes a few basic\ntests I\u0027ve done here.\n\n(akpm: snuck in a kzalloc() cleanup too)\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b030a4dd609e167da7f73c2d1fa5af864a0aea17",
      "tree": "543d65bcf9b0de3c69c8882e9eb6d8eae6556af8",
      "parents": [
        "46c271bedd2c8444b1d05bc44928beec0c07debc"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Thu Jun 23 00:10:03 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:30 2005 -0700"
      },
      "message": "[PATCH] Remove eventpoll macro obfuscation\n\nThis patch gets rid of some macro obfuscation from fs/eventpoll.c by\nremoving slab allocator wrappers and converting macros to static inline\nfunctions.\n\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "75c96f85845a6707b0f9916cb263cb3584f7d48f",
      "tree": "45a64d1c9bb71d7093db3a11e0f21465c2e3dec6",
      "parents": [
        "5e198d94dd0c3ec7f6138229e2e412c2c6268c38"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Thu May 05 16:16:09 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu May 05 16:36:47 2005 -0700"
      },
      "message": "[PATCH] make some things static\n\nThis patch makes some needlessly global identifiers static.\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nAcked-by: Arjan van de Ven \u003carjanv@infradead.org\u003e\nAcked-by: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
