)]}'
{
  "log": [
    {
      "commit": "945526846a84c00adac1efd1c6befdaa77039623",
      "tree": "36a3ca9188af8d1154af8684f541f3abbf2cd3c7",
      "parents": [
        "3de0ef4f2067da58fa5126d821a56dcb98cdb565"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Oct 15 00:13:23 2009 +0200"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Oct 20 18:02:33 2009 -0400"
      },
      "message": "dnotify: ignore FS_EVENT_ON_CHILD\n\nMask off FS_EVENT_ON_CHILD in dnotify_handle_event().  Otherwise, when there\nis more than one watch on a directory and dnotify_should_send_event()\nsucceeds, events with FS_EVENT_ON_CHILD set will trigger all watches and cause\nspurious events.\n\nThis case was overlooked in commit e42e2773.\n\n\t#define _GNU_SOURCE\n\n\t#include \u003cstdio.h\u003e\n\t#include \u003cstdlib.h\u003e\n\t#include \u003cunistd.h\u003e\n\t#include \u003csignal.h\u003e\n\t#include \u003csys/types.h\u003e\n\t#include \u003csys/stat.h\u003e\n\t#include \u003cfcntl.h\u003e\n\t#include \u003cstring.h\u003e\n\n\tstatic void create_event(int s, siginfo_t* si, void* p)\n\t{\n\t\tprintf(\"create\\n\");\n\t}\n\n\tstatic void delete_event(int s, siginfo_t* si, void* p)\n\t{\n\t\tprintf(\"delete\\n\");\n\t}\n\n\tint main (void) {\n\t\tstruct sigaction action;\n\t\tchar *tmpdir, *file;\n\t\tint fd1, fd2;\n\n\t\tsigemptyset (\u0026action.sa_mask);\n\t\taction.sa_flags \u003d SA_SIGINFO;\n\n\t\taction.sa_sigaction \u003d create_event;\n\t\tsigaction (SIGRTMIN + 0, \u0026action, NULL);\n\n\t\taction.sa_sigaction \u003d delete_event;\n\t\tsigaction (SIGRTMIN + 1, \u0026action, NULL);\n\n\t#\tdefine TMPDIR \"/tmp/test.XXXXXX\"\n\t\ttmpdir \u003d malloc(strlen(TMPDIR) + 1);\n\t\tstrcpy(tmpdir, TMPDIR);\n\t\tmkdtemp(tmpdir);\n\n\t#\tdefine TMPFILE \"/file\"\n\t\tfile \u003d malloc(strlen(tmpdir) + strlen(TMPFILE) + 1);\n\t\tsprintf(file, \"%s/%s\", tmpdir, TMPFILE);\n\n\t\tfd1 \u003d open (tmpdir, O_RDONLY);\n\t\tfcntl(fd1, F_SETSIG, SIGRTMIN);\n\t\tfcntl(fd1, F_NOTIFY, DN_MULTISHOT | DN_CREATE);\n\n\t\tfd2 \u003d open (tmpdir, O_RDONLY);\n\t\tfcntl(fd2, F_SETSIG, SIGRTMIN + 1);\n\t\tfcntl(fd2, F_NOTIFY, DN_MULTISHOT | DN_DELETE);\n\n\t\tif (fork()) {\n\t\t\t/* This triggers a create event */\n\t\t\tcreat(file, 0600);\n\t\t\t/* This triggers a create and delete event (!) */\n\t\t\tunlink(file);\n\t\t} else {\n\t\t\tsleep(1);\n\t\t\trmdir(tmpdir);\n\t\t}\n\n\t\treturn 0;\n\t}\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "3de0ef4f2067da58fa5126d821a56dcb98cdb565",
      "tree": "d88103aaf3e5ed019afef5b11d4241ecf3eb1cea",
      "parents": [
        "cdc321ff0af78e818c97d4787f62bf52bdf9db2a"
      ],
      "author": {
        "name": "Wei Yongjun",
        "email": "yjwei@cn.fujitsu.com",
        "time": "Wed Oct 14 20:54:03 2009 +0800"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Sun Oct 18 15:49:38 2009 -0400"
      },
      "message": "inotify: fix coalesce duplicate events into a single event in special case\n\nIf we do rename a dir entry, like this:\n\n  rename(\"/tmp/ino7UrgoJ.rename1\", \"/tmp/ino7UrgoJ.rename2\")\n  rename(\"/tmp/ino7UrgoJ.rename2\", \"/tmp/ino7UrgoJ\")\n\nThe duplicate events should be coalesced into a single event. But those two\nevents do not be coalesced into a single event, due to some bad check in\nevent_compare(). It can not match the two NULL inodes as the same event.\n\nSigned-off-by: Wei Yongjun \u003cyjwei@cn.fujitsu.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "9f0d793b52eb2266359661369ef6303838904855",
      "tree": "c884f59a4ad9ce50b033710d47894bc96c214a6c",
      "parents": [
        "2fdc246aaf9a7fa088451ad2a72e9119b5f7f029"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Sep 11 13:03:19 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Sun Oct 18 15:49:38 2009 -0400"
      },
      "message": "fsnotify: do not set group for a mark before it is on the i_list\n\nfsnotify_add_mark is supposed to add a mark to the g_list and i_list and to\nset the group and inode for the mark.  fsnotify_destroy_mark_by_entry uses\nthe fact that -\u003egroup !\u003d NULL to know if this group should be destroyed or\nif it\u0027s already been done.\n\nBut fsnotify_add_mark sets the group and inode before it actually adds the\nmark to the i_list and g_list.  This can result in a race in inotify, it\nrequires 3 threads.\n\nsys_inotify_add_watch(\"file\")\tsys_inotify_add_watch(\"file\")\tsys_inotify_rm_watch([a])\ninotify_update_watch()\ninotify_new_watch()\ninotify_add_to_idr()\n   ^--- returns wd \u003d [a]\n\t\t\t\tinotfiy_update_watch()\n\t\t\t\tinotify_new_watch()\n\t\t\t\tinotify_add_to_idr()\n\t\t\t\tfsnotify_add_mark()\n\t\t\t\t   ^--- returns wd \u003d [b]\n\t\t\t\treturns to userspace;\n\t\t\t\t\t\t\t\tinotify_idr_find([a])\n\t\t\t\t\t\t\t\t   ^--- gives us the pointer from task 1\nfsnotify_add_mark()\n   ^--- this is going to set the mark-\u003egroup and mark-\u003einode fields, but will\nreturn -EEXIST because of the race with [b].\n\t\t\t\t\t\t\t\tfsnotify_destroy_mark()\n\t\t\t\t\t\t\t\t   ^--- since -\u003egroup !\u003d NULL we call back\n\t\t\t\t\t\t\t\t\tinto inotify_freeing_mark() which calls\n\t\t\t\t\t\t\t\tinotify_remove_from_idr([a])\n\nsince fsnotify_add_mark() failed we call:\ninotify_remove_from_idr([a])     \u003c------WHOOPS it\u0027s not in the idr, this could\n\t\t\t\t\thave been any entry added later!\n\nThe fix is to make sure we don\u0027t set mark-\u003egroup until we are sure the mark is\non the inode and fsnotify_add_mark will return success.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "750a8870fe4016ef3091fc97e084d58c613c2cc7",
      "tree": "7a33b8edb176465959abe9bd67a21a4498d93b6a",
      "parents": [
        "83cb10f0ef3c96162be92339ccf8c0c9c9f2d13e"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Aug 28 12:50:47 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Aug 28 12:51:14 2009 -0400"
      },
      "message": "inotify: update the group mask on mark addition\n\nSeperating the addition and update of marks in inotify resulted in a\nregression in that inotify never gets events.  The inotify group mask is\nalways 0.  This mask should be updated any time a new mark is added.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "83cb10f0ef3c96162be92339ccf8c0c9c9f2d13e",
      "tree": "e83f71fde279bc4ed80db945b55603f653aa08e1",
      "parents": [
        "b962e7312ae87006aed6f68ceee94bdf8db08338"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Aug 28 11:57:55 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Aug 28 11:57:55 2009 -0400"
      },
      "message": "inotify: fix length reporting and size checking\n\n0db501bd0610ee0c0 introduced a regresion in that it now sends a nul\nterminator but the length accounting when checking for space or\nreporting to userspace did not take this into account.  This corrects\nall of the rounding logic.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "b962e7312ae87006aed6f68ceee94bdf8db08338",
      "tree": "5d74244d31f510d346afbe80fea3285ccb8504d8",
      "parents": [
        "326ba5010a5429a5a528b268b36a5900d4ab0eba"
      ],
      "author": {
        "name": "Brian Rogers",
        "email": "brian@xyzw.org",
        "time": "Fri Aug 28 10:00:05 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Aug 28 10:03:06 2009 -0400"
      },
      "message": "inotify: do not send a block of zeros when no pathname is available\n\nWhen an event has no pathname, there\u0027s no need to pad it with a null byte and\ntherefore generate an inotify_event sized block of zeros. This fixes a\nregression introduced by commit 0db501bd0610ee0c0aca84d927f90bcccd09e2bd where\nmy system wouldn\u0027t finish booting because some process was being confused by\nthis.\n\nSigned-off-by: Brian Rogers \u003cbrian@xyzw.org\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "0db501bd0610ee0c0aca84d927f90bcccd09e2bd",
      "tree": "108756b2460edff75bb7bc6c778e1a2c0ff50167",
      "parents": [
        "dead537dd8a1c9495322c1d6f7c780697f474af0"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu Aug 27 03:20:04 2009 -0700"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Aug 27 08:02:10 2009 -0400"
      },
      "message": "inotify: Ensure we alwasy write the terminating NULL.\n\nBefore the rewrite copy_event_to_user always wrote a terqminating \u0027\\0\u0027\nbyte to user space after the filename.  Since the rewrite that\nterminating byte was skipped if your filename is exactly a multiple of\nevent_size.  Ouch!\n\nSo add one byte to name_size before we round up and use clear_user to\nset userspace to zero like /dev/zero does instead of copying the\nstrange nul_inotify_event.  I can\u0027t quite convince myself len_to_zero\nwill never exceed 16 and even if it doesn\u0027t clear_user should be more\nefficient and a more accurate reflection of what the code is trying to\ndo.\n\nSigned-off-by: Eric W. Biederman \u003cebiederm@aristanetworks.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "dead537dd8a1c9495322c1d6f7c780697f474af0",
      "tree": "5263cf56e792cfc5ddf37748d2868fce9866af68",
      "parents": [
        "cf4374267fbe966e8e4e7db68f5dc7b267439780"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Mon Aug 24 16:03:35 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Aug 27 08:02:04 2009 -0400"
      },
      "message": "inotify: fix locking around inotify watching in the idr\n\nThe are races around the idr storage of inotify watches.  It\u0027s possible\nthat a watch could be found from sys_inotify_rm_watch() in the idr, but it\ncould be removed from the idr before that code does it\u0027s removal.  Move the\nlocking and the refcnt\u0027ing so that these have to happen atomically.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "cf4374267fbe966e8e4e7db68f5dc7b267439780",
      "tree": "60871fa44df49a8581e2afb06f493e768a058b86",
      "parents": [
        "52cef7555adf5ca09b3b7283097466759120d901"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Mon Aug 24 16:03:35 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Aug 27 08:02:04 2009 -0400"
      },
      "message": "inotify: do not BUG on idr entries at inotify destruction\n\nIf an inotify watch is left in the idr when an fsnotify group is destroyed\nthis will lead to a BUG.  This is not a dangerous situation and really\nindicates a programming bug and leak of memory.  This patch changes it to\nuse a WARN and a printk rather than killing people\u0027s boxes.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "52cef7555adf5ca09b3b7283097466759120d901",
      "tree": "641ddd087f6effe88fad2e3c0b5d744e9d71fdda",
      "parents": [
        "1e23502cc57cef33455ac7cb9111e3c6d991a894"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Mon Aug 24 16:03:35 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Aug 27 08:02:04 2009 -0400"
      },
      "message": "inotify: seperate new watch creation updating existing watches\n\nThere is nothing known wrong with the inotify watch addition/modification\nbut this patch seperates the two code paths to make them each easy to\nverify as correct.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "08e53fcb0db34baca3db84a457b6d67faabee4c6",
      "tree": "c9c112a0aa290895a416b5bfc3f58aa328bc74e8",
      "parents": [
        "cd94c8bbef8d4b796a7ed4c551355a334604fd36"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Sun Aug 16 21:51:55 2009 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 17 13:37:37 2009 -0700"
      },
      "message": "inotify: start watch descriptor count at 1\n\nThe inotify_add_watch man page specifies that inotify_add_watch() will\nreturn a non-negative integer.  However, historically the inotify\nwatches started at 1, not at 0.\n\nTurns out that the inotifywait program provided by the inotify-tools\npackage doesn\u0027t properly handle a 0 watch descriptor.  In 7e790dd5 we\nchanged from starting at 1 to starting at 0.  This patch starts at 1,\njust like in previous kernels, but also just like in previous kernels\nit\u0027s possible for it to wrap back to 0.  This preserves the kernel\nfunctionality exactly like it was before the patch (neither method broke\nthe spec)\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cd94c8bbef8d4b796a7ed4c551355a334604fd36",
      "tree": "ac448f253eb01a7fd1872daa15938b5d72fee796",
      "parents": [
        "eef3a116be11d35396efb2a8cc7345fd3221e294"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Sun Aug 16 21:51:49 2009 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 17 13:37:37 2009 -0700"
      },
      "message": "inotify: tail drop inotify q_overflow events\n\nIn f44aebcc the tail drop logic of events with no file backing\n(q_overflow and in_ignored) was reversed so IN_IGNORED events would\nnever be tail dropped.  This now means that Q_OVERFLOW events are NOT\ntail dropped.  The fix is to not tail drop IN_IGNORED, but to tail drop\nQ_OVERFLOW.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "eef3a116be11d35396efb2a8cc7345fd3221e294",
      "tree": "2a5d0b36dd5985f29eac43f51b03e610e40b7c9b",
      "parents": [
        "0f66f96d21b4bbff49baaa337546e687d7c58e87"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Sun Aug 16 21:51:44 2009 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 17 13:37:37 2009 -0700"
      },
      "message": "notify: unused event private race\n\ninotify decides if private data it passed to get added to an event was\nused by checking list_empty().  But it\u0027s possible that the event may\nhave been dequeued and the private event removed so it would look empty.\n\nThe fix is to use the return code from fsnotify_add_notify_event rather\nthan looking at the list.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f44aebcc566d1d6275f7191867b9633dc11de2ee",
      "tree": "a5faaf5ca8e1360f359ee22ad29582992596c3e6",
      "parents": [
        "c05594b62125c528d93af3a78229793aae36df7f"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 15 15:49:52 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 21 15:26:27 2009 -0400"
      },
      "message": "inotify: use GFP_NOFS under potential memory pressure\n\ninotify can have a watchs removed under filesystem reclaim.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[ INFO: inconsistent lock state ]\n2.6.31-rc2 #16\n---------------------------------\ninconsistent {IN-RECLAIM_FS-W} -\u003e {RECLAIM_FS-ON-W} usage.\nkhubd/217 [HC0[0]:SC0[0]:HE1:SE1] takes:\n (iprune_mutex){+.+.?.}, at: [\u003cc10ba899\u003e] invalidate_inodes+0x20/0xe3\n{IN-RECLAIM_FS-W} state was registered at:\n  [\u003cc10536ab\u003e] __lock_acquire+0x2c9/0xac4\n  [\u003cc1053f45\u003e] lock_acquire+0x9f/0xc2\n  [\u003cc1308872\u003e] __mutex_lock_common+0x2d/0x323\n  [\u003cc1308c00\u003e] mutex_lock_nested+0x2e/0x36\n  [\u003cc10ba6ff\u003e] shrink_icache_memory+0x38/0x1b2\n  [\u003cc108bfb6\u003e] shrink_slab+0xe2/0x13c\n  [\u003cc108c3e1\u003e] kswapd+0x3d1/0x55d\n  [\u003cc10449b5\u003e] kthread+0x66/0x6b\n  [\u003cc1003fdf\u003e] kernel_thread_helper+0x7/0x10\n  [\u003cffffffff\u003e] 0xffffffff\n\nTwo things are needed to fix this.  First we need a method to tell\nfsnotify_create_event() to use GFP_NOFS and second we need to stop using\none global IN_IGNORED event and allocate them one at a time.  This solves\ncurrent issues with multiple IN_IGNORED on a queue having tail drop\nproblems and simplifies the allocations since we don\u0027t have to worry about\ntwo tasks opperating on the IGNORED event concurrently.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "c05594b62125c528d93af3a78229793aae36df7f",
      "tree": "2e9b2ba0ea63d3587cb3c6dc7d72e7a202aade52",
      "parents": [
        "4a148ba988988b9c400ad0f2cbccc155289b954b"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Mon Jul 13 15:56:55 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 21 15:26:26 2009 -0400"
      },
      "message": "fsnotify: fix inotify tail drop check with path entries\n\nfsnotify drops new events when they are the same as the tail event on the\nqueue to be sent to userspace.  The problem is that if the event comes with\na path we forget to break out of the switch statement and fall into the\ncode path which matches on events that do not have any type of file backed\ninformation (things like IN_UNMOUNT and IN_Q_OVERFLOW).  The problem is\nthat this code thinks all such events should be dropped.  Fix is to add a\nbreak.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "4a148ba988988b9c400ad0f2cbccc155289b954b",
      "tree": "e80e3cd0d182721038b1d83a55cbde828c98cb09",
      "parents": [
        "520dc2a526fd681337883b6ff1ddcf7c23b1b063"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Mon Jul 13 15:56:55 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 21 15:26:26 2009 -0400"
      },
      "message": "inotify: check filename before dropping repeat events\n\ninotify drops events if the last event on the queue is the same as the\ncurrent event.  But it does 2 things wrong.  First it is comparing old-\u003einode\nwith new-\u003einode.  But after an event if put on the queue the -\u003einode is no\nlonger allowed to be used.  It\u0027s possible between the last event and this new\nevent the inode could be reused and we would falsely match the inode\u0027s memory\naddress between two differing events.\n\nThe second problem is that when a file is removed fsnotify is passed the\nnegative dentry for the removed object rather than the postive dentry from\nimmediately before the removal.  This mean the (broken) inotify tail drop code\nwas matching the NULL -\u003einode of differing events.\n\nThe fix is to check the file name which is stored with events when doing the\ntail drop instead of wrongly checking the address of the stored -\u003einode.\n\nReported-by: Scott James Remnant \u003cscott@ubuntu.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "520dc2a526fd681337883b6ff1ddcf7c23b1b063",
      "tree": "a6346bbd0b405d1a377aaaf5f1f69a5f662f814a",
      "parents": [
        "7e790dd5fc937bc8d2400c30a05e32a9e9eef276"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Mon Jul 13 15:56:54 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 21 15:26:26 2009 -0400"
      },
      "message": "fsnotify: use def_bool in kconfig instead of letting the user choose\n\nfsnotify doens\u0027t give the user anything.  If someone chooses inotify or\ndnotify it should build fsnotify, if they don\u0027t select one it shouldn\u0027t be\nbuilt.  This patch changes fsnotify to be a def_bool\u003dn and makes everything\nelse select it.  Also fixes the issue people complained about on lwn where\ngdm hung because they didn\u0027t have inotify and they didn\u0027t get the inotify\nbuild option.....\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "7e790dd5fc937bc8d2400c30a05e32a9e9eef276",
      "tree": "a593a3120eb8dfbf3febdf18b6d530376b593859",
      "parents": [
        "75fe2b26394c59c8e16bd7b76f4be5d048103ad1"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 07 10:28:24 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 21 15:26:26 2009 -0400"
      },
      "message": "inotify: fix error paths in inotify_update_watch\n\ninotify_update_watch could leave things in a horrid state on a number of\nerror paths.  We could try to remove idr entries that didn\u0027t exist, we\ncould send an IN_IGNORED to userspace for watches that don\u0027t exist, and a\nbit of other stupidity.  Clean these up by doing the idr addition before we\nput the mark on the inode since we can clean that up on error and getting\noff the inode\u0027s mark list is hard.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "75fe2b26394c59c8e16bd7b76f4be5d048103ad1",
      "tree": "0f2a6c59dd1c6eddc497b9c7363298e949c0768a",
      "parents": [
        "5549f7cdf84c02939fd368d0842aa2f472bb6e98"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 07 10:28:23 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 21 15:26:26 2009 -0400"
      },
      "message": "inotify: do not leak inode marks in inotify_add_watch\n\ninotify_add_watch had a couple of problems.  The biggest being that if\ninotify_add_watch was called on the same inode twice (to update or change the\nevent mask) a refence was taken on the original inode mark by\nfsnotify_find_mark_entry but was not being dropped at the end of the\ninotify_add_watch call.  Thus if inotify_rm_watch was called although the mark\nwas removed from the inode, the refcnt wouldn\u0027t hit zero and we would leak\nmemory.\n\nReported-by: Catalin Marinas \u003ccatalin.marinas@arm.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "5549f7cdf84c02939fd368d0842aa2f472bb6e98",
      "tree": "ca921e8ce50067a4d034eefbf686551215e8504e",
      "parents": [
        "aea1f7964ae6cba5eb419a958956deb9016b3341"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 07 10:28:23 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jul 21 15:26:26 2009 -0400"
      },
      "message": "inotify: drop user watch count when a watch is removed\n\nThe inotify rewrite forgot to drop the inotify watch use cound when a watch\nwas removed.  This means that a single inotify fd can only ever register a\nmaximum of /proc/sys/fs/max_user_watches even if some of those had been\nfreed.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "bdae997f44535ac4ebe1e055ffe59eeee946f453",
      "tree": "ee17363d16d584551729ce99a4ac5a77ee8b13fa",
      "parents": [
        "d960eea974f5e500c0dcb95a934239cc1f481cfd"
      ],
      "author": {
        "name": "Keith Packard",
        "email": "keithp@keithp.com",
        "time": "Wed Jul 01 21:56:38 2009 -0700"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jul 02 08:23:00 2009 -0400"
      },
      "message": "fs/notify/inotify: decrement user inotify count on close\n\nThe per-user inotify_devs value is incremented each time a new file is\nallocated, but never decremented. This led to inotify_init failing after a\nlimited number of calls.\n\nSigned-off-by: Keith Packard \u003ckeithp@keithp.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "528da3e9e237059a84a2625e942811cf824a6efd",
      "tree": "7d3de6d5468d6835a4d81bfa1e717100dc7b71bf",
      "parents": [
        "0732f87761dbe417cb6e084b712d07e879e876ef"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Jun 12 16:04:26 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Jun 19 12:42:48 2009 -0400"
      },
      "message": "inotify: inotify_destroy_mark_entry could get called twice\n\ninotify_destroy_mark_entry could get called twice for the same mark since it\nis called directly in inotify_rm_watch and when the mark is being destroyed for\nanother reason.  As an example assume that the file being watched was just\ndeleted so inotify_destroy_mark_entry would get called from the path\nfsnotify_inoderemove() -\u003e fsnotify_destroy_marks_by_inode() -\u003e\nfsnotify_destroy_mark_entry() -\u003e inotify_destroy_mark_entry().  If this\nhappened at the same time as userspace tried to remove a watch via\ninotify_rm_watch we could attempt to remove the mark from the idr twice and\ncould thus double dec the ref cnt and potentially could be in a use after\nfree/double free situation.  The fix is to have inotify_rm_watch use the\ngeneric recursive safe fsnotify_destroy_mark_by_entry() so we are sure the\ninotify_destroy_mark_entry() function can only be called one.\n\nThis patch also renames the function to inotify_ingored_remove_idr() so it is\nclear what is actually going on in the function.\n\nHopefully this fixes:\n[   20.342058] idr_remove called for id\u003d20 which is not allocated.\n[   20.348000] Pid: 1860, comm: udevd Not tainted 2.6.30-tip #1077\n[   20.353933] Call Trace:\n[   20.356410]  [\u003cffffffff811a82b7\u003e] idr_remove+0x115/0x18f\n[   20.361737]  [\u003cffffffff8134259d\u003e] ? _spin_lock+0x6d/0x75\n[   20.367061]  [\u003cffffffff8111640a\u003e] ? inotify_destroy_mark_entry+0xa3/0xcf\n[   20.373771]  [\u003cffffffff8111641e\u003e] inotify_destroy_mark_entry+0xb7/0xcf\n[   20.380306]  [\u003cffffffff81115913\u003e] inotify_freeing_mark+0xe/0x10\n[   20.386238]  [\u003cffffffff8111410d\u003e] fsnotify_destroy_mark_by_entry+0x143/0x170\n[   20.393293]  [\u003cffffffff811163a3\u003e] inotify_destroy_mark_entry+0x3c/0xcf\n[   20.399829]  [\u003cffffffff811164d1\u003e] sys_inotify_rm_watch+0x9b/0xc6\n[   20.405850]  [\u003cffffffff8100bcdb\u003e] system_call_fastpath+0x16/0x1b\n\nReported-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nTested-by: Peter Ziljlstra \u003cpeterz@infradead.org\u003e\n"
    },
    {
      "commit": "a092ee20fd33d2df0990dcbf2235afc181612818",
      "tree": "c172839ce60bcc55e770e6707694842301e3ed6b",
      "parents": [
        "e42e27736de80045f925564ea27a1d32957219e7"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 11:09:48 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:55 2009 -0400"
      },
      "message": "fsnotify: allow groups to set freeing_mark to null\n\nMost fsnotify listeners (all but inotify) do not care about marks being\nfreed.  Allow groups to set freeing_mark to null and do not call any\nfunction if it is set that way.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "e42e27736de80045f925564ea27a1d32957219e7",
      "tree": "cae8a5bc81f02c7563625e30f5f0d05357dc3701",
      "parents": [
        "ce61856bd2aadb064f595e5c0444376a2b117c41"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 11:09:47 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:54 2009 -0400"
      },
      "message": "inotify/dnotify: should_send_event shouldn\u0027t match on FS_EVENT_ON_CHILD\n\ninotify and dnotify will both indicate that they want any event which came\nfrom a child inode.  The fix is to mask off FS_EVENT_ON_CHILD when deciding\nif inotify or dnotify is interested in a given event.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "ce61856bd2aadb064f595e5c0444376a2b117c41",
      "tree": "4a438d07fbce1acbb3970b631211aaf445f2e41b",
      "parents": [
        "5ac697b793a3c45005c568df692518da6e690390"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 11:09:47 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:54 2009 -0400"
      },
      "message": "dnotify: do not bother to lock entry-\u003elock when reading mask\n\nentry-\u003elock is needed to make sure entry-\u003emask does not change while\nmanipulating it.  In dnotify_should_send_event() we don\u0027t care if we get an\nold or a new mask value out of this entry so there is no point it taking\nthe lock.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "5ac697b793a3c45005c568df692518da6e690390",
      "tree": "9481b421be4a67f91eb4a6f790e02cb555035cc9",
      "parents": [
        "ff52cc2158b32b3b979ca7802b1fd7c70f36e13c"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 11:09:47 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:54 2009 -0400"
      },
      "message": "dnotify: do not use ?true:false when assigning to a bool\n\ndnotify_should send event assigned a bool using ?true:false when computing\na bit operation.  This is poitless and the bool type does this for us.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "63c882a05416e18de6fb59f7dd6da48f3bbe8273",
      "tree": "b09cca0e3a996690c8965d9281cb1f386edd657b",
      "parents": [
        "164bc6195139047faaf5ada1278332e99494803b"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:02:01 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:54 2009 -0400"
      },
      "message": "inotify: reimplement inotify using fsnotify\n\nReimplement inotify_user using fsnotify.  This should be feature for feature\nexactly the same as the original inotify_user.  This does not make any changes\nto the in kernel inotify feature used by audit.  Those patches (and the eventual\nremoval of in kernel inotify) will come after the new inotify_user proves to be\nworking correctly.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "164bc6195139047faaf5ada1278332e99494803b",
      "tree": "fdc0e31f9dc15796a4777ed917533091797b8b69",
      "parents": [
        "1ef5f13c6c8acd3fd10db9f1743f3b4cf30a4abb"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:58 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:54 2009 -0400"
      },
      "message": "fsnotify: handle filesystem unmounts with fsnotify marks\n\nWhen an fs is unmounted with an fsnotify mark entry attached to one of its\ninodes we need to destroy that mark entry and we also (like inotify) send\nan unmount event.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "1ef5f13c6c8acd3fd10db9f1743f3b4cf30a4abb",
      "tree": "b42f8aa8f74e598e47c114fc5141a8566a92d859",
      "parents": [
        "e4aff117368cfdd3567ee41844d216d079b55173"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:54 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:54 2009 -0400"
      },
      "message": "fsnotify: fsnotify marks on inodes pin them in core\n\nThis patch pins any inodes with an fsnotify mark in core.  The idea is that\nas soon as the mark is removed from the inode-\u003efsnotify_mark_entries list\nthe inode will be iput.  In reality is doesn\u0027t quite work exactly this way.\nThe igrab will happen when the mark is added to an inode, but the iput will\nhappen when the inode pointer is NULL\u0027d inside the mark.\n\nIt\u0027s possible that 2 racing things will try to remove the mark from\ndifferent directions.  One may try to remove the mark because of an\nexplicit request and one might try to remove it because the inode was\ndeleted.  It\u0027s possible that the removal because of inode deletion will\nremove the mark from the inode\u0027s list, but the removal by explicit request\nwill actually set entry-\u003einode \u003d\u003d NULL; and call the iput.  This is safe.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "e4aff117368cfdd3567ee41844d216d079b55173",
      "tree": "c467bc38edc7ba3154bbf6875dca635b855e1c8c",
      "parents": [
        "47882c6f51e8ef41fbbe2bbb746a1ea3228dd7ca"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:50 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:54 2009 -0400"
      },
      "message": "fsnotify: allow groups to add private data to events\n\ninotify needs per group information attached to events.  This patch allows\ngroups to attach private information and implements a callback so that\ninformation can be freed when an event is being destroyed.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "47882c6f51e8ef41fbbe2bbb746a1ea3228dd7ca",
      "tree": "d3dd3e8d0e4d3e3793f32107077839f787e35fcd",
      "parents": [
        "62ffe5dfba056f7ba81d710fee9f28c58a42fdd6"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:47 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:54 2009 -0400"
      },
      "message": "fsnotify: add correlations between events\n\nAs part of the standard inotify events it includes a correlation cookie\nbetween two dentry move operations.  This patch includes the same behaviour\nin fsnotify events.  It is needed so that inotify userspace can be\nimplemented on top of fsnotify.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "62ffe5dfba056f7ba81d710fee9f28c58a42fdd6",
      "tree": "ac0d4afc641bdc8ff76779545fde9c6ae539bdaf",
      "parents": [
        "a2d8bc6cb4a3024661baf877242f123787d0c054"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:43 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:53 2009 -0400"
      },
      "message": "fsnotify: include pathnames with entries when possible\n\nWhen inotify wants to send events to a directory about a child it includes\nthe name of the original file.  This patch collects that filename and makes\nit available for notification.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "a2d8bc6cb4a3024661baf877242f123787d0c054",
      "tree": "4ff3f93877a8992d5383c14fb6012ab9b1954660",
      "parents": [
        "3c5119c05d624f95f4967d16b38c9624b816bdb9"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:37 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:53 2009 -0400"
      },
      "message": "fsnotify: generic notification queue and waitq\n\ninotify needs to do asyc notification in which event information is stored\non a queue until the listener is ready to receive it.  This patch\nimplements a generic notification queue for inotify (and later fanotify) to\nstore events to be sent at a later time.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "3c5119c05d624f95f4967d16b38c9624b816bdb9",
      "tree": "0b5f66106aea38e52adf62958762b0a975607322",
      "parents": [
        "c28f7e56e9d95fb531dc3be8df2e7f52bee76d21"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:33 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:53 2009 -0400"
      },
      "message": "dnotify: reimplement dnotify using fsnotify\n\nReimplement dnotify using fsnotify.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "c28f7e56e9d95fb531dc3be8df2e7f52bee76d21",
      "tree": "efce13ed8c4f5b312ef0b77950489d52ef5a039a",
      "parents": [
        "3be25f49b9d6a97eae9bcb96d3292072b7658bd8"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:29 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:53 2009 -0400"
      },
      "message": "fsnotify: parent event notification\n\ninotify and dnotify both use a similar parent notification mechanism.  We\nadd a generic parent notification mechanism to fsnotify for both of these\nto use.  This new machanism also adds the dentry flag optimization which\nexists for inotify to dnotify.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "3be25f49b9d6a97eae9bcb96d3292072b7658bd8",
      "tree": "36f7d96481a47a6bde3c2f961346e940698111e0",
      "parents": [
        "90586523eb4b349806887c62ee70685a49415124"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:26 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:53 2009 -0400"
      },
      "message": "fsnotify: add marks to inodes so groups can interpret how to handle those inodes\n\nThis patch creates a way for fsnotify groups to attach marks to inodes.\nThese marks have little meaning to the generic fsnotify infrastructure\nand thus their meaning should be interpreted by the group that attached\nthem to the inode\u0027s list.\n\ndnotify and inotify  will make use of these markings to indicate which\ninodes are of interest to their respective groups.  But this implementation\nhas the useful property that in the future other listeners could actually\nuse the marks for the exact opposite reason, aka to indicate which inodes\nit had NO interest in.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "90586523eb4b349806887c62ee70685a49415124",
      "tree": "2ba6da637f897bbb2309b141b81801e4151d87b0",
      "parents": [
        "c9059598ea8981d02356eead3188bf7fa4d717b8"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 21 17:01:20 2009 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Jun 11 14:57:52 2009 -0400"
      },
      "message": "fsnotify: unified filesystem notification backend\n\nfsnotify is a backend for filesystem notification.  fsnotify does\nnot provide any userspace interface but does provide the basis\nneeded for other notification schemes such as dnotify.  fsnotify\ncan be extended to be the backend for inotify or the upcoming\nfanotify.  fsnotify provides a mechanism for \"groups\" to register for\nsome set of filesystem events and to then deliver those events to\nthose groups for processing.\n\nfsnotify has a number of benefits, the first being actually shrinking the size\nof an inode.  Before fsnotify to support both dnotify and inotify an inode had\n\n        unsigned long           i_dnotify_mask; /* Directory notify events */\n        struct dnotify_struct   *i_dnotify; /* for directory notifications */\n        struct list_head        inotify_watches; /* watches on this inode */\n        struct mutex            inotify_mutex;  /* protects the watches list\n\nBut with fsnotify this same functionallity (and more) is done with just\n\n        __u32                   i_fsnotify_mask; /* all events for this inode */\n        struct hlist_head       i_fsnotify_mark_entries; /* marks on this inode */\n\nThat\u0027s right, inotify, dnotify, and fanotify all in 64 bits.  We used that\nmuch space just in inotify_watches alone, before this patch set.\n\nfsnotify object lifetime and locking is MUCH better than what we have today.\ninotify locking is incredibly complex.  See 8f7b0ba1c8539 as an example of\nwhat\u0027s been busted since inception.  inotify needs to know internal semantics\nof superblock destruction and unmounting to function.  The inode pinning and\nvfs contortions are horrible.\n\nno fsnotify implementers do allocation under locks.  This means things like\nf04b30de3 which (due to an overabundance of caution) changes GFP_KERNEL to\nGFP_NOFS can be reverted.  There are no longer any allocation rules when using\nor implementing your own fsnotify listener.\n\nfsnotify paves the way for fanotify.  In brief fanotify is a notification\nmechanism that delivers the lisener both an \u0027event\u0027 and an open file descriptor\nto the object in question.  This means that fanotify is pathname agnostic.\nSome on lkml may not care for the original companies or users that pushed for\nTALPA, but fanotify was designed with flexibility and input for other users in\nmind.  The readahead group expressed interest in fanotify as it could be used\nto profile disk access on boot without breaking the audit system.  The desktop\nsearch groups have also expressed interest in fanotify as it solves a number\nof the race conditions and problems present with managing inotify when more\nthan a limited number of specific files are of interest.  fanotify can provide\nfor a userspace access control system which makes it a clean interface for AV\nvendors to hook without trying to do binary patching on the syscall table,\nLSM, and everywhere else they do their things today.  With this patch series\nfanotify can be implemented in less than 1200 lines of easy to review code.\nAlmost all of which is the socket based user interface.\n\nThis patch series builds fsnotify to the point that it can implement\ndnotify and inotify_user.  Patches exist and will be sent soon after\nacceptance to finish the in kernel inotify conversion (audit) and implement\nfanotify.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "381a80e6df396eaabef2c00f85974a4579ac1c70",
      "tree": "431f7f11302c3e41e1c93c76afd4e116d2464bfd",
      "parents": [
        "fd1e6c1df5c396961509daac2b456852edf982df"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed May 06 16:02:50 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 06 16:36:09 2009 -0700"
      },
      "message": "inotify: use GFP_NOFS in kernel_event() to work around a lockdep false-positive\n\nThere is what we believe to be a false positive reported by lockdep.\n\ninotify_inode_queue_event() \u003d\u003e take inotify_mutex \u003d\u003e kernel_event() \u003d\u003e\nkmalloc() \u003d\u003e SLOB \u003d\u003e alloc_pages_node() \u003d\u003e page reclaim \u003d\u003e slab reclaim \u003d\u003e\ndcache reclaim \u003d\u003e inotify_inode_is_dead \u003d\u003e take inotify_mutex \u003d\u003e deadlock\n\nThe plan is to fix this via lockdep annotation, but that is proving to be\nquite involved.\n\nThe patch flips the allocation over to GFP_NFS to shut the warning up, for\nthe 2.6.30 release.\n\nHopefully we will fix this for real in 2.6.31.  I\u0027ll queue a patch in -mm\nto switch it back to GFP_KERNEL so we don\u0027t forget.\n\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  [ INFO: inconsistent lock state ]\n  2.6.30-rc2-next-20090417 #203\n  ---------------------------------\n  inconsistent {RECLAIM_FS-ON-W} -\u003e {IN-RECLAIM_FS-W} usage.\n  kswapd0/380 [HC0[0]:SC0[0]:HE1:SE1] takes:\n   (\u0026inode-\u003einotify_mutex){+.+.?.}, at: [\u003cffffffff8112f1b5\u003e] inotify_inode_is_dead+0x35/0xb0\n  {RECLAIM_FS-ON-W} state was registered at:\n    [\u003cffffffff81079188\u003e] mark_held_locks+0x68/0x90\n    [\u003cffffffff810792a5\u003e] lockdep_trace_alloc+0xf5/0x100\n    [\u003cffffffff810f5261\u003e] __kmalloc_node+0x31/0x1e0\n    [\u003cffffffff81130652\u003e] kernel_event+0xe2/0x190\n    [\u003cffffffff81130826\u003e] inotify_dev_queue_event+0x126/0x230\n    [\u003cffffffff8112f096\u003e] inotify_inode_queue_event+0xc6/0x110\n    [\u003cffffffff8110444d\u003e] vfs_create+0xcd/0x140\n    [\u003cffffffff8110825d\u003e] do_filp_open+0x88d/0xa20\n    [\u003cffffffff810f6b68\u003e] do_sys_open+0x98/0x140\n    [\u003cffffffff810f6c50\u003e] sys_open+0x20/0x30\n    [\u003cffffffff8100c272\u003e] system_call_fastpath+0x16/0x1b\n    [\u003cffffffffffffffff\u003e] 0xffffffffffffffff\n  irq event stamp: 690455\n  hardirqs last  enabled at (690455): [\u003cffffffff81564fe4\u003e] _spin_unlock_irqrestore+0x44/0x80\n  hardirqs last disabled at (690454): [\u003cffffffff81565372\u003e] _spin_lock_irqsave+0x32/0xa0\n  softirqs last  enabled at (690178): [\u003cffffffff81052282\u003e] __do_softirq+0x202/0x220\n  softirqs last disabled at (690157): [\u003cffffffff8100d50c\u003e] call_softirq+0x1c/0x50\n\n  other info that might help us debug this:\n  2 locks held by kswapd0/380:\n   #0:  (shrinker_rwsem){++++..}, at: [\u003cffffffff810d0bd7\u003e] shrink_slab+0x37/0x180\n   #1:  (\u0026type-\u003es_umount_key#17){++++..}, at: [\u003cffffffff8110cfbf\u003e] shrink_dcache_memory+0x11f/0x1e0\n\n  stack backtrace:\n  Pid: 380, comm: kswapd0 Not tainted 2.6.30-rc2-next-20090417 #203\n  Call Trace:\n   [\u003cffffffff810789ef\u003e] print_usage_bug+0x19f/0x200\n   [\u003cffffffff81018bff\u003e] ? save_stack_trace+0x2f/0x50\n   [\u003cffffffff81078f0b\u003e] mark_lock+0x4bb/0x6d0\n   [\u003cffffffff810799e0\u003e] ? check_usage_forwards+0x0/0xc0\n   [\u003cffffffff8107b142\u003e] __lock_acquire+0xc62/0x1ae0\n   [\u003cffffffff810f478c\u003e] ? slob_free+0x10c/0x370\n   [\u003cffffffff8107c0a1\u003e] lock_acquire+0xe1/0x120\n   [\u003cffffffff8112f1b5\u003e] ? inotify_inode_is_dead+0x35/0xb0\n   [\u003cffffffff81562d43\u003e] mutex_lock_nested+0x63/0x420\n   [\u003cffffffff8112f1b5\u003e] ? inotify_inode_is_dead+0x35/0xb0\n   [\u003cffffffff8112f1b5\u003e] ? inotify_inode_is_dead+0x35/0xb0\n   [\u003cffffffff81012fe9\u003e] ? sched_clock+0x9/0x10\n   [\u003cffffffff81077165\u003e] ? lock_release_holdtime+0x35/0x1c0\n   [\u003cffffffff8112f1b5\u003e] inotify_inode_is_dead+0x35/0xb0\n   [\u003cffffffff8110c9dc\u003e] dentry_iput+0xbc/0xe0\n   [\u003cffffffff8110cb23\u003e] d_kill+0x33/0x60\n   [\u003cffffffff8110ce23\u003e] __shrink_dcache_sb+0x2d3/0x350\n   [\u003cffffffff8110cffa\u003e] shrink_dcache_memory+0x15a/0x1e0\n   [\u003cffffffff810d0cc5\u003e] shrink_slab+0x125/0x180\n   [\u003cffffffff810d1540\u003e] kswapd+0x560/0x7a0\n   [\u003cffffffff810ce160\u003e] ? isolate_pages_global+0x0/0x2c0\n   [\u003cffffffff81065a30\u003e] ? autoremove_wake_function+0x0/0x40\n   [\u003cffffffff8107953d\u003e] ? trace_hardirqs_on+0xd/0x10\n   [\u003cffffffff810d0fe0\u003e] ? kswapd+0x0/0x7a0\n   [\u003cffffffff8106555b\u003e] kthread+0x5b/0xa0\n   [\u003cffffffff8100d40a\u003e] child_rip+0xa/0x20\n   [\u003cffffffff8100cdd0\u003e] ? restore_args+0x0/0x30\n   [\u003cffffffff81065500\u003e] ? kthread+0x0/0xa0\n   [\u003cffffffff8100d400\u003e] ? child_rip+0x0/0x20\n\n[eparis@redhat.com: fix audit too]\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aabb8fdb41128705fd1627f56fdd571e45fdbcdb",
      "tree": "bae6e9abf167cf20b9a2d3e5c38520d3f17b777d",
      "parents": [
        "1bd7903560f1f713e85188a5aaf4d2428b6c8b50"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Wed Mar 11 13:17:36 2009 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 27 14:44:05 2009 -0400"
      },
      "message": "fs: avoid I_NEW inodes\n\nTo be on the safe side, it should be less fragile to exclude I_NEW inodes\nfrom inode list scans by default (unless there is an important reason to\nhave them).\n\nNormally they will get excluded (eg.  by zero refcount or writecount etc),\nhowever it is a bit fragile for list walkers to know exactly what parts of\nthe inode state is set up and valid to test when in I_NEW.  So along these\nlines, move I_NEW checks upward as well (sometimes taking I_FREEING etc\nchecks with them too -- this shouldn\u0027t be a problem should it?)\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f04b30de3c82528f1ab4c58b3dd4c975f5341901",
      "tree": "1d3410190d93a72c0a98961704086ba17c21d326",
      "parents": [
        "be50344e604f956891fc0013f1ba78823a758124"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 18 14:48:43 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 18 15:37:56 2009 -0800"
      },
      "message": "inotify: fix GFP_KERNEL related deadlock\n\nEnhanced lockdep coverage of __GFP_NOFS turned up this new lockdep\nassert:\n\n[ 1093.677775]\n[ 1093.677781] \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[ 1093.680031] [ INFO: inconsistent lock state ]\n[ 1093.680031] 2.6.29-rc5-tip-01504-gb49eca1-dirty #1\n[ 1093.680031] ---------------------------------\n[ 1093.680031] inconsistent {RECLAIM_FS-ON-W} -\u003e {IN-RECLAIM_FS-W} usage.\n[ 1093.680031] kswapd0/308 [HC0[0]:SC0[0]:HE1:SE1] takes:\n[ 1093.680031]  (\u0026inode-\u003einotify_mutex){+.+.?.}, at: [\u003cc0205942\u003e] inotify_inode_is_dead+0x20/0x80\n[ 1093.680031] {RECLAIM_FS-ON-W} state was registered at:\n[ 1093.680031]   [\u003cc01696b9\u003e] mark_held_locks+0x43/0x5b\n[ 1093.680031]   [\u003cc016baa4\u003e] lockdep_trace_alloc+0x6c/0x6e\n[ 1093.680031]   [\u003cc01cf8b0\u003e] kmem_cache_alloc+0x20/0x150\n[ 1093.680031]   [\u003cc040d0ec\u003e] idr_pre_get+0x27/0x6c\n[ 1093.680031]   [\u003cc02056e3\u003e] inotify_handle_get_wd+0x25/0xad\n[ 1093.680031]   [\u003cc0205f43\u003e] inotify_add_watch+0x7a/0x129\n[ 1093.680031]   [\u003cc020679e\u003e] sys_inotify_add_watch+0x20f/0x250\n[ 1093.680031]   [\u003cc010389e\u003e] sysenter_do_call+0x12/0x35\n[ 1093.680031]   [\u003cffffffff\u003e] 0xffffffff\n[ 1093.680031] irq event stamp: 60417\n[ 1093.680031] hardirqs last  enabled at (60417): [\u003cc018d5f5\u003e] call_rcu+0x53/0x59\n[ 1093.680031] hardirqs last disabled at (60416): [\u003cc018d5b9\u003e] call_rcu+0x17/0x59\n[ 1093.680031] softirqs last  enabled at (59656): [\u003cc0146229\u003e] __do_softirq+0x157/0x16b\n[ 1093.680031] softirqs last disabled at (59651): [\u003cc0106293\u003e] do_softirq+0x74/0x15d\n[ 1093.680031]\n[ 1093.680031] other info that might help us debug this:\n[ 1093.680031] 2 locks held by kswapd0/308:\n[ 1093.680031]  #0:  (shrinker_rwsem){++++..}, at: [\u003cc01b0502\u003e] shrink_slab+0x36/0x189\n[ 1093.680031]  #1:  (\u0026type-\u003es_umount_key#4){+++++.}, at: [\u003cc01e6d77\u003e] shrink_dcache_memory+0x110/0x1fb\n[ 1093.680031]\n[ 1093.680031] stack backtrace:\n[ 1093.680031] Pid: 308, comm: kswapd0 Not tainted 2.6.29-rc5-tip-01504-gb49eca1-dirty #1\n[ 1093.680031] Call Trace:\n[ 1093.680031]  [\u003cc016947a\u003e] valid_state+0x12a/0x13d\n[ 1093.680031]  [\u003cc016954e\u003e] mark_lock+0xc1/0x1e9\n[ 1093.680031]  [\u003cc016a5b4\u003e] ? check_usage_forwards+0x0/0x3f\n[ 1093.680031]  [\u003cc016ab74\u003e] __lock_acquire+0x2c6/0xac8\n[ 1093.680031]  [\u003cc01688d9\u003e] ? register_lock_class+0x17/0x228\n[ 1093.680031]  [\u003cc016b3d3\u003e] lock_acquire+0x5d/0x7a\n[ 1093.680031]  [\u003cc0205942\u003e] ? inotify_inode_is_dead+0x20/0x80\n[ 1093.680031]  [\u003cc08824c4\u003e] __mutex_lock_common+0x3a/0x4cb\n[ 1093.680031]  [\u003cc0205942\u003e] ? inotify_inode_is_dead+0x20/0x80\n[ 1093.680031]  [\u003cc08829ed\u003e] mutex_lock_nested+0x2e/0x36\n[ 1093.680031]  [\u003cc0205942\u003e] ? inotify_inode_is_dead+0x20/0x80\n[ 1093.680031]  [\u003cc0205942\u003e] inotify_inode_is_dead+0x20/0x80\n[ 1093.680031]  [\u003cc01e6672\u003e] dentry_iput+0x90/0xc2\n[ 1093.680031]  [\u003cc01e67a3\u003e] d_kill+0x21/0x45\n[ 1093.680031]  [\u003cc01e6a46\u003e] __shrink_dcache_sb+0x27f/0x355\n[ 1093.680031]  [\u003cc01e6dc5\u003e] shrink_dcache_memory+0x15e/0x1fb\n[ 1093.680031]  [\u003cc01b05ed\u003e] shrink_slab+0x121/0x189\n[ 1093.680031]  [\u003cc01b0d12\u003e] kswapd+0x39f/0x561\n[ 1093.680031]  [\u003cc01ae499\u003e] ? isolate_pages_global+0x0/0x233\n[ 1093.680031]  [\u003cc0157eae\u003e] ? autoremove_wake_function+0x0/0x43\n[ 1093.680031]  [\u003cc01b0973\u003e] ? kswapd+0x0/0x561\n[ 1093.680031]  [\u003cc0157daf\u003e] kthread+0x41/0x82\n[ 1093.680031]  [\u003cc0157d6e\u003e] ? kthread+0x0/0x82\n[ 1093.680031]  [\u003cc01043ab\u003e] kernel_thread_helper+0x7/0x10\n\ninotify_handle_get_wd() does idr_pre_get() which does a\nkmem_cache_alloc() without __GFP_FS - and is hence deadlockable under\nextreme MM pressure.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: MinChan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3632dee2f8b8a9720329f29eeaa4ec4669a3aff8",
      "tree": "602fc5cc96145472210a4254680d539c81cb02e7",
      "parents": [
        "aeb565dfc3ac4c8b47c5049085b4c7bfb2c7d5d7"
      ],
      "author": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Thu Jan 22 15:29:45 2009 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 26 10:08:05 2009 -0800"
      },
      "message": "inotify: clean up inotify_read and fix locking problems\n\nIf userspace supplies an invalid pointer to a read() of an inotify\ninstance, the inotify device\u0027s event list mutex is unlocked twice.\nThis causes an unbalance which effectively leaves the data structure\nunprotected, and we can trigger oopses by accessing the inotify\ninstance from different tasks concurrently.\n\nThe best fix (contributed largely by Linus) is a total rewrite\nof the function in question:\n\nOn Thu, Jan 22, 2009 at 7:05 AM, Linus Torvalds wrote:\n\u003e The thing to notice is that:\n\u003e\n\u003e  - locking is done in just one place, and there is no question about it\n\u003e   not having an unlock.\n\u003e\n\u003e  - that whole double-while(1)-loop thing is gone.\n\u003e\n\u003e  - use multiple functions to make nesting and error handling sane\n\u003e\n\u003e  - do error testing after doing the things you always need to do, ie do\n\u003e   this:\n\u003e\n\u003e        mutex_lock(..)\n\u003e        ret \u003d function_call();\n\u003e        mutex_unlock(..)\n\u003e\n\u003e        .. test ret here ..\n\u003e\n\u003e   instead of doing conditional exits with unlocking or freeing.\n\u003e\n\u003e So if the code is written in this way, it may still be buggy, but at least\n\u003e it\u0027s not buggy because of subtle \"forgot to unlock\" or \"forgot to free\"\n\u003e issues.\n\u003e\n\u003e This _always_ unlocks if it locked, and it always frees if it got a\n\u003e non-error kevent.\n\nCc: John McCutchan \u003cttb@tentacle.dhs.org\u003e\nCc: Robert Love \u003crlove@google.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2e4d0924eb0c403ce4014fa139d1d61bf2c44fee",
      "tree": "58249b615c3a7a77154d4c9d006ea9acd04bbef9",
      "parents": [
        "938bb9f5e840eddbf54e4f62f6c5ba9b3ae12c9d"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:31 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:30 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 29\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "938bb9f5e840eddbf54e4f62f6c5ba9b3ae12c9d",
      "tree": "a25324159ed8cc96b97a4d39aaf228bbd07e3824",
      "parents": [
        "1e7bfb2134dfec37ce04fb3a4ca89299e892d10c"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:30 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:30 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 28\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "4ae8978cf92a96257cd8998a49e781be83571d64",
      "tree": "5c5e2719c17093309b4e22bfbf4deb7bd3e91ac8",
      "parents": [
        "2f1169e2dc0c70e213f79ada88a10912cc2fbe94"
      ],
      "author": {
        "name": "Michael Kerrisk",
        "email": "mtk.manpages@googlemail.com",
        "time": "Mon Jan 05 07:19:16 2009 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 05 11:54:29 2009 -0500"
      },
      "message": "inotify: fix type errors in interfaces\n\nThe problems lie in the types used for some inotify interfaces, both at the kernel level and at the glibc level. This mail addresses the kernel problem. I will follow up with some suggestions for glibc changes.\n\nFor the sys_inotify_rm_watch() interface, the type of the \u0027wd\u0027 argument is\ncurrently \u0027u32\u0027, it should be \u0027__s32\u0027 .  That is Robert\u0027s suggestion, and\nis consistent with the other declarations of watch descriptors in the\nkernel source, in particular, the inotify_event structure in\ninclude/linux/inotify.h:\n\nstruct inotify_event {\n        __s32           wd;             /* watch descriptor */\n        __u32           mask;           /* watch mask */\n        __u32           cookie;         /* cookie to synchronize two events */\n        __u32           len;            /* length (including nulls) of name */\n        char            name[0];        /* stub for possible name */\n};\n\nThe patch makes the changes needed for inotify_rm_watch().\n\nSigned-off-by: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCc: Robert Love \u003crlove@google.com\u003e\nCc: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\nCc: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "272eb01485dda98e3b8910c7c1a53d597616b0a0",
      "tree": "6a1dcd34c1dd668b465c166c2d6d2596924eff5f",
      "parents": [
        "c2acf7b90821785fe812cc0aa05148e5a1f84204"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Dec 17 13:59:41 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 31 18:07:43 2008 -0500"
      },
      "message": "filesystem notification: create fs/notify to contain all fs notification\n\nCreating a generic filesystem notification interface, fsnotify, which will be\nused by inotify, dnotify, and eventually fanotify is really starting to\nclutter the fs directory.  This patch simply moves inotify and dnotify into\nfs/notify/inotify and fs/notify/dnotify respectively to make both current fs/\nand future notification tidier.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ]
}
