)]}'
{
  "log": [
    {
      "commit": "2069601b3f0ea38170d4b509b89f3ca0a373bdc1",
      "tree": "647002d4c3814bd3d95d16ef7edef1757de8554f",
      "parents": [
        "ad41a1e0cab07c5125456e8d38e5b1ab148d04aa"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 14:23:04 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 14:23:04 2010 -0700"
      },
      "message": "Revert \"fsnotify: store struct file not struct path\"\n\nThis reverts commit 3bcf3860a4ff9bbc522820b4b765e65e4deceb3e (and the\naccompanying commit c1e5c954020e \"vfs/fsnotify: fsnotify_close can delay\nthe final work in fput\" that was a horribly ugly hack to make it work at\nall).\n\nThe \u0027struct file\u0027 approach not only causes that disgusting hack, it\nsomehow breaks pulseaudio, probably due to some other subtlety with\nf_count handling.\n\nFix up various conflicts due to later fsnotify work.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c1e5c954020e123d30b4abf4038ce501861bcf9f",
      "tree": "e8c9071ae4f37464e114fab79deea4716857f7ad",
      "parents": [
        "3bcf3860a4ff9bbc522820b4b765e65e4deceb3e"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:38 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:51 2010 -0400"
      },
      "message": "vfs/fsnotify: fsnotify_close can delay the final work in fput\n\nfanotify almost works like so:\n\nuser context calls fsnotify_* function with a struct file.\n   fsnotify takes a reference on the struct path\nuser context goes about it\u0027s buissiness\n\nat some later point in time the fsnotify listener gets the struct path\n   fanotify listener calls dentry_open() to create a file which userspace can deal with\n      listener drops the reference on the struct path\nat some later point the listener calls close() on it\u0027s new file\n\nWith the switch from struct path to struct file this presents a problem for\nfput() and fsnotify_close().  fsnotify_close() is called when the filp has\nalready reached 0 and __fput() wants to do it\u0027s cleanup.\n\nThe solution presented here is a bit odd.  If an event is created from a\nstruct file we take a reference on the file.  We check however if the f_count\nwas already 0 and if so we take an EXTRA reference EVEN THOUGH IT WAS ZERO.\nIn __fput() (where we know the f_count hit 0 once) we check if the f_count is\nnon-zero and if so we drop that \u0027extra\u0027 ref and return without destroying the\nfile.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "3bcf3860a4ff9bbc522820b4b765e65e4deceb3e",
      "tree": "1e235af133559062c6fdee840ff9698f1dee26a6",
      "parents": [
        "f70ab54cc6c3907b0727ba332b3976f80f3846d0"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:37 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:51 2010 -0400"
      },
      "message": "fsnotify: store struct file not struct path\n\nAl explains that calling dentry_open() with a mnt/dentry pair is only\ngarunteed to be safe if they are already used in an open struct file.  To\nmake sure this is the case don\u0027t store and use a struct path in fsnotify,\nalways use a struct file.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "f70ab54cc6c3907b0727ba332b3976f80f3846d0",
      "tree": "2a22097325a668a0d08d4ea3354d0e6c95fddd86",
      "parents": [
        "5ba08e2eeb06355f66ed62ae97bb87d145973a9a"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:37 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:50 2010 -0400"
      },
      "message": "fsnotify: fsnotify_add_notify_event should return an event\n\nRather than the horrific void ** argument and such just to pass the\nfanotify_merge event back to the caller of fsnotify_add_notify_event() have\nthose things return an event if it was different than the event suggusted to\nbe added.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "5ba08e2eeb06355f66ed62ae97bb87d145973a9a",
      "tree": "4d0b26a125c8805234e0ebb58101bf1c5a75e61e",
      "parents": [
        "80af2588676483ac4e998b5092e9d008dab3ab62"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:37 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:50 2010 -0400"
      },
      "message": "fsnotify: add pr_debug throughout\n\nIt can be hard to debug fsnotify since there are so few printks.  Use\npr_debug to allow for dynamic debugging.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "59b0df211bd9699d7e0d01fcf9345a149f75b033",
      "tree": "0f6e8bebfa090aa5c1d91d9efc5c2b04aeeed05c",
      "parents": [
        "43ed7e16a8b47059d7f6ff67ba76f383a2421de3"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Mon Feb 08 12:53:52 2010 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:59:01 2010 -0400"
      },
      "message": "fsnotify: use unsigned char * for dentry-\u003ed_name.name\n\nfsnotify was using char * when it passed around the d_name.name string\ninternally but it is actually an unsigned char *.  This patch switches\nfsnotify to use unsigned and should silence some pointer signess warnings\nwhich have popped out of xfs.  I do not add -Wpointer-sign to the fsnotify\ncode as there are still issues with kstrdup and strlen which would pop\nout needless warnings.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "6e5f77b32e9097a8a68a8d453799676cacf70cad",
      "tree": "2a0211ecd5d79648e74fdf9f851a0669c5e4cc8a",
      "parents": [
        "cb2d429faf2cae62d3c51e28099a181d5fe8c244"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:34 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:59:01 2010 -0400"
      },
      "message": "fsnotify: intoduce a notification merge argument\n\nEach group can define their own notification (and secondary_q) merge\nfunction.  Inotify does tail drop, fanotify does matching and drop which\ncan actually allocate a completely new event.  But for fanotify to properly\ndeal with permissions events it needs to know the new event which was\nultimately added to the notification queue.  This patch just implements a\nvoid ** argument which is passed to the merge function.  fanotify can use\nthis field to pass the new event back to higher layers.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nfor fanotify to properly deal with permissions events\n"
    },
    {
      "commit": "32c3263221bd63316815286dccacdc7abfd7f3c4",
      "tree": "9dad12d5b966cf42d7506e10fb2e3c8d955415d3",
      "parents": [
        "22aa425dec9e47051624714ae283eb2b6a473013"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:27 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:56 2010 -0400"
      },
      "message": "fanotify: Add pids to events\n\nPass the process identifiers of the triggering processes to fanotify\nlisteners: this information is useful for event filtering and logging.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "72acc854427948efed7a83da27f7dc3239ac9afc",
      "tree": "69a8f479a644701a52abe07d7bf2751cdf4cc159",
      "parents": [
        "098cf2fc77ee190c92bf9d08d69a13305f2487ec"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:24 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:53 2010 -0400"
      },
      "message": "fsnotify: kill FSNOTIFY_EVENT_FILE\n\nSome fsnotify operations send a struct file.  This is more information than\nwe technically need.  We instead send a struct path in all cases instead of\nsometimes a path and sometimes a file.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "cac69dad32899c6f4c66bb4f9baf69b0d3c7d3d1",
      "tree": "326019945bfe57024b4e55dd0aa031cdb4413e30",
      "parents": [
        "1201a5361b9bd6512ae01e6f2b7aa79d458cafb1"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:22 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:50 2010 -0400"
      },
      "message": "fsnotify: lock annotation for event replacement\n\nfsnotify_replace_event need to lock both the old and the new event.  This\ncauses lockdep to get all pissed off since it dosn\u0027t know this is safe.\nIt\u0027s safe in this case since the new event is impossible to be reached from\nother places in the kernel.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "1201a5361b9bd6512ae01e6f2b7aa79d458cafb1",
      "tree": "bfbb10b38b6b32b773a43cc371b5d31a9ce3fe51",
      "parents": [
        "b4e4e1407312ae5a267ed7d716e6d4e7120a8430"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:22 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:49 2010 -0400"
      },
      "message": "fsnotify: replace an event on a list\n\nfanotify would like to clone events already on its notification list, make\nchanges to the new event, and then replace the old event on the list with\nthe new event.  This patch implements the replace functionality of that\nprocess.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "b4e4e1407312ae5a267ed7d716e6d4e7120a8430",
      "tree": "2953d8885e3224955f1a5aca7c129709b26a059d",
      "parents": [
        "74766bbfa99adf8cb8119df6121851edba21c9d9"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:21 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:49 2010 -0400"
      },
      "message": "fsnotify: clone existing events\n\nfsnotify_clone_event will take an event, clone it, and return the cloned\nevent to the caller.  Since events may be in use by multiple fsnotify\ngroups simultaneously certain event entries (such as the mask) cannot be\nchanged after the event was created.  Since fanotify would like to merge\nevents happening on the same file it needs a new clean event to work with\nso it can change any fields it wishes.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "74766bbfa99adf8cb8119df6121851edba21c9d9",
      "tree": "724dbee0d1e7794401e2d3bdd3c17fd2ce3e4635",
      "parents": [
        "28c60e37f874dcbb93c4afc839ba5e4911c4f4bc"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:21 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:49 2010 -0400"
      },
      "message": "fsnotify: per group notification queue merge types\n\ninotify only wishes to merge a new event with the last event on the\nnotification fifo.  fanotify is willing to merge any events including by\nmeans of bitwise OR masks of multiple events together.  This patch moves\nthe inotify event merging logic out of the generic fsnotify notification.c\nand into the inotify code.  This allows each use of fsnotify to provide\ntheir own merge functionality.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "6f3a539e3bd8ed2eafa532443723d56896153a00",
      "tree": "73c85129825daf947c32c2e1f6e9e97ed674b108",
      "parents": [
        "f0553af054d31f48a75fddd3ef8beb5c39715019"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 20:12:07 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:20 2010 -0400"
      },
      "message": "fsnotify: use kmem_cache_zalloc to simplify event initialization\n\nfsnotify event initialization is done entry by entry with almost everything\nset to either 0 or NULL.  Use kmem_cache_zalloc and only initialize things\nthat need non-zero initialization.  Also means we don\u0027t have to change\ninitialization entries based on the config options.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "b4277d3dd5a7400c1ea7fd4e7d64bda8899f84f5",
      "tree": "6b309bd5d5362292dded47af3ecf739c509892b1",
      "parents": [
        "1a3aedbce416dfdbd5d5ac14a0edbcf21a62ee50"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 20:12:06 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:19 2010 -0400"
      },
      "message": "fsnotify: use fsnotify_create_event to allocate the q_overflow event\n\nCurrently fsnotify defines a static fsnotify event which is sent when a\ngroup overflows its allotted queue length.  This patch just allocates that\nevent from the event cache rather than defining it statically.  There is no\nknown reason that the current implementation is wrong, but this makes sure the\nevent is initialized and created like any other.\n\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": "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": "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": "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"
    }
  ]
}
