)]}'
{
  "log": [
    {
      "commit": "42933bac11e811f02200c944d8562a15f8ec4ff0",
      "tree": "fcdd9afe56eb0e746565ddd1f92f22d36678b843",
      "parents": [
        "2b9accbee563f535046ff2cd382d0acaa92e130c",
        "25985edcedea6396277003854657b5f3cb31a628"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6\n\n* \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6:\n  Fix common misspellings\n"
    },
    {
      "commit": "d0de4dc584ec6aa3b26fffea320a8457827768fc",
      "tree": "6895419a694ba323c6b18cdb6aa2714892b6f481",
      "parents": [
        "623dda65b6f71e6474f3f156dbed2acf6ff43584"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Apr 05 17:20:50 2011 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 05 15:27:14 2011 -0700"
      },
      "message": "inotify: fix double free/corruption of stuct user\n\nOn an error path in inotify_init1 a normal user can trigger a double\nfree of struct user.  This is a regression introduced by a2ae4cc9a16e\n(\"inotify: stop kernel memory leak on file creation failure\").\n\nWe fix this by making sure that if a group exists the user reference is\ndropped when the group is cleaned up.  We should not explictly drop the\nreference on error and also drop the reference when the group is cleaned\nup.\n\nThe new lifetime rules are that an inotify group lives from\ninotify_new_group to the last fsnotify_put_group.  Since the struct user\nand inotify_devs are directly tied to this lifetime they are only\nchanged/updated in those two locations.  We get rid of all special\ncasing of struct user or user-\u003einotify_devs.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nCc: stable@kernel.org (2.6.37 and up)\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "ae0e47f02aaedbfdd5e4bec73f79b714d758223d",
      "tree": "348f99385f42a2f698bddb4ced3e6c472e5d68cc",
      "parents": [
        "ddf12286951aee1e7763112cf26629de3fabe6ae"
      ],
      "author": {
        "name": "Justin P. Mattock",
        "email": "justinmattock@gmail.com",
        "time": "Tue Mar 01 15:06:02 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Mar 01 15:47:58 2011 +0100"
      },
      "message": "Remove one to many n\u0027s in a word\n\nSigned-off-by: Justin P. Mattock \u003cjustinmattock@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "a2ae4cc9a16e211c8a128ba10d22a85431f093ab",
      "tree": "9de9f2c95163bf53b44413de542f5be528ff302f",
      "parents": [
        "09e5f14e57c70f9d357862bb56e57026c51092a1"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Nov 23 18:18:37 2010 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 16:14:22 2010 -0500"
      },
      "message": "inotify: stop kernel memory leak on file creation failure\n\nIf inotify_init is unable to allocate a new file for the new inotify\ngroup we leak the new group.  This patch drops the reference on the\ngroup on file allocation failure.\n\nReported-by: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\ncc: stable@kernel.org\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "b29866aab8489487f11cc4506590ac31bdbae22a",
      "tree": "814ff82fd2067dfa75a69284a38f3ae26ee692fe",
      "parents": [
        "e1c048ba786789afdc66f32d8394bb5a0014bbba"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:21:58 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:22:15 2010 -0400"
      },
      "message": "fsnotify: rename FS_IN_ISDIR to FS_ISDIR\n\nThe _IN_ in the naming is reserved for flags only used by inotify.  Since I\nam about to use this flag for fanotify rename it to be generic like the\nrest.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "6038f373a3dc1f1c26496e60b6c40b164716f07e",
      "tree": "a0d3bbd026eea41b9fc36b8c722cbaf56cd9f825",
      "parents": [
        "1ec5584e3edf9c4bf2c88c846534d19cf986ba11"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Sun Aug 15 18:52:59 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Fri Oct 15 15:53:27 2010 +0200"
      },
      "message": "llseek: automatically add .llseek fop\n\nAll file_operations should get a .llseek operation so we can make\nnonseekable_open the default for future file operations without a\n.llseek pointer.\n\nThe three cases that we can automatically detect are no_llseek, seq_lseek\nand default_llseek. For cases where we can we can automatically prove that\nthe file offset is always ignored, we use noop_llseek, which maintains\nthe current behavior of not returning an error from a seek.\n\nNew drivers should normally not use noop_llseek but instead use no_llseek\nand call nonseekable_open at open time.  Existing drivers can be converted\nto do the same when the maintainer knows for certain that no user code\nrelies on calling seek on the device file.\n\nThe generated code is often incorrectly indented and right now contains\ncomments that clarify for each added line why a specific variant was\nchosen. In the version that gets submitted upstream, the comments will\nbe gone and I will manually fix the indentation, because there does not\nseem to be a way to do that using coccinelle.\n\nSome amount of new code is currently sitting in linux-next that should get\nthe same modifications, which I will do at the end of the merge window.\n\nMany thanks to Julia Lawall for helping me learn to write a semantic\npatch that does all this.\n\n\u003d\u003d\u003d\u003d\u003d begin semantic patch \u003d\u003d\u003d\u003d\u003d\n// This adds an llseek\u003d method to all file operations,\n// as a preparation for making no_llseek the default.\n//\n// The rules are\n// - use no_llseek explicitly if we do nonseekable_open\n// - use seq_lseek for sequential files\n// - use default_llseek if we know we access f_pos\n// - use noop_llseek if we know we don\u0027t access f_pos,\n//   but we still want to allow users to call lseek\n//\n@ open1 exists @\nidentifier nested_open;\n@@\nnested_open(...)\n{\n\u003c+...\nnonseekable_open(...)\n...+\u003e\n}\n\n@ open exists@\nidentifier open_f;\nidentifier i, f;\nidentifier open1.nested_open;\n@@\nint open_f(struct inode *i, struct file *f)\n{\n\u003c+...\n(\nnonseekable_open(...)\n|\nnested_open(...)\n)\n...+\u003e\n}\n\n@ read disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n   *off \u003d E\n|\n   *off +\u003d E\n|\n   func(..., off, ...)\n|\n   E \u003d *off\n)\n...+\u003e\n}\n\n@ read_no_fpos disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ write @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n  *off \u003d E\n|\n  *off +\u003d E\n|\n  func(..., off, ...)\n|\n  E \u003d *off\n)\n...+\u003e\n}\n\n@ write_no_fpos @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ fops0 @\nidentifier fops;\n@@\nstruct file_operations fops \u003d {\n ...\n};\n\n@ has_llseek depends on fops0 @\nidentifier fops0.fops;\nidentifier llseek_f;\n@@\nstruct file_operations fops \u003d {\n...\n .llseek \u003d llseek_f,\n...\n};\n\n@ has_read depends on fops0 @\nidentifier fops0.fops;\nidentifier read_f;\n@@\nstruct file_operations fops \u003d {\n...\n .read \u003d read_f,\n...\n};\n\n@ has_write depends on fops0 @\nidentifier fops0.fops;\nidentifier write_f;\n@@\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n...\n};\n\n@ has_open depends on fops0 @\nidentifier fops0.fops;\nidentifier open_f;\n@@\nstruct file_operations fops \u003d {\n...\n .open \u003d open_f,\n...\n};\n\n// use no_llseek if we call nonseekable_open\n////////////////////////////////////////////\n@ nonseekable1 depends on !has_llseek \u0026\u0026 has_open @\nidentifier fops0.fops;\nidentifier nso ~\u003d \"nonseekable_open\";\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d nso, ...\n+.llseek \u003d no_llseek, /* nonseekable */\n};\n\n@ nonseekable2 depends on !has_llseek @\nidentifier fops0.fops;\nidentifier open.open_f;\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d open_f, ...\n+.llseek \u003d no_llseek, /* open uses nonseekable */\n};\n\n// use seq_lseek for sequential files\n/////////////////////////////////////\n@ seq depends on !has_llseek @\nidentifier fops0.fops;\nidentifier sr ~\u003d \"seq_read\";\n@@\nstruct file_operations fops \u003d {\n...  .read \u003d sr, ...\n+.llseek \u003d seq_lseek, /* we have seq_read */\n};\n\n// use default_llseek if there is a readdir\n///////////////////////////////////////////\n@ fops1 depends on !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier readdir_e;\n@@\n// any other fop is used that changes pos\nstruct file_operations fops \u003d {\n... .readdir \u003d readdir_e, ...\n+.llseek \u003d default_llseek, /* readdir is present */\n};\n\n// use default_llseek if at least one of read/write touches f_pos\n/////////////////////////////////////////////////////////////////\n@ fops2 depends on !fops1 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read.read_f;\n@@\n// read fops use offset\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d default_llseek, /* read accesses f_pos */\n};\n\n@ fops3 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+\t.llseek \u003d default_llseek, /* write accesses f_pos */\n};\n\n// Use noop_llseek if neither read nor write accesses f_pos\n///////////////////////////////////////////////////////////\n\n@ fops4 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !fops3 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\nidentifier write_no_fpos.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n .read \u003d read_f,\n...\n+.llseek \u003d noop_llseek, /* read and write both use no f_pos */\n};\n\n@ depends on has_write \u0026\u0026 !has_read \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write_no_fpos.write_f;\n@@\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+.llseek \u003d noop_llseek, /* write uses no f_pos */\n};\n\n@ depends on has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\n@@\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d noop_llseek, /* read uses no f_pos */\n};\n\n@ depends on !has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\n@@\nstruct file_operations fops \u003d {\n...\n+.llseek \u003d noop_llseek, /* no read or write fn */\n};\n\u003d\u003d\u003d\u003d\u003d End semantic patch \u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Julia Lawall \u003cjulia@diku.dk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "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": "1968f5eed54ce47bde488fd9a450912e4a2d7138",
      "tree": "bcf13b98fda519c240e89cae3de95fc7d9ece715",
      "parents": [
        "ce8f76fb7320297ccbe7c950fd9a2d727dd6a5a0"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:39 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:55 2010 -0400"
      },
      "message": "fanotify: use both marks when possible\n\nfanotify currently, when given a vfsmount_mark will look up (if it exists)\nthe corresponding inode mark.  This patch drops that lookup and uses the\nmark provided.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "ce8f76fb7320297ccbe7c950fd9a2d727dd6a5a0",
      "tree": "fb870e9564bfef438e46ba3c39be2999e246b179",
      "parents": [
        "613a807fe7c793ceb7d6f059773527a5a6c84a96"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:39 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:54 2010 -0400"
      },
      "message": "fsnotify: pass both the vfsmount mark and inode mark\n\nshould_send_event() and handle_event() will both need to look up the inode\nevent if they get a vfsmount event.  Lets just pass both at the same time\nsince we have them both after walking the lists in lockstep.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "43709a288ed03aa0e2979ab63dd089b3889645c4",
      "tree": "71717ebf944c099af5ab8ea339889665d4b9ef67",
      "parents": [
        "03930979afa63e079e9aefd4d3dd429240711027"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:39 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:54 2010 -0400"
      },
      "message": "fsnotify: remove group-\u003emask\n\ngroup-\u003emask is now useless.  It was originally a shortcut for fsnotify to\nsave on performance.  These checks are now redundant, so we remove them.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "2612abb51b11ffd2d75c472b11178115f5808909",
      "tree": "5657a07a347984cc1f34117d7ef88af73ea12b60",
      "parents": [
        "0215054f377ce5ac4ffc27b26b13b3f10e6410e6"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:39 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 10:18:53 2010 -0400"
      },
      "message": "fsnotify: cleanup should_send_event\n\nThe change to use srcu and walk the object list rather than the global\nfsnotify_group list means that should_send_event is no longer needed for a\nnumber of groups and can be simplified for others.  Do that.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "7f6b6117e1803777fcf48fe31bd236a7fbf740db",
      "tree": "e86b8bd3a16155447a215a758960092021006311",
      "parents": [
        "3a9b16b407f10b2a771bcae13fb5791e527d6bcf"
      ],
      "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:52 2010 -0400"
      },
      "message": "inotify: use the mark in handler functions\n\ninotify now gets a mark in the should_send_event and handle_event\nfunctions.  Rather than look up the mark themselves inotify should just use\nthe mark it was handed.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "3a9b16b407f10b2a771bcae13fb5791e527d6bcf",
      "tree": "0d88cac61bd6d3f5028eb0c9a45e7af9fbd24311",
      "parents": [
        "8778abb9a88fc4a74d8776ffaadf7214cf33c61e"
      ],
      "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:52 2010 -0400"
      },
      "message": "fsnotify: send fsnotify_mark to groups in event handling functions\n\nWith the change of fsnotify to use srcu walking the marks list instead of\nwalking the global groups list we now know the mark in question.  The code can\nsend the mark to the group\u0027s handling functions and the groups won\u0027t have to\nfind those marks themselves.\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": "44b350fc23e36e95c8e042b7ded66217ea2b9d72",
      "tree": "590975f1e8690e5555f7c8b45f26ec7fddccddb8",
      "parents": [
        "f874e1ac21d7708464dc656a10312542c54719f1"
      ],
      "author": {
        "name": "Jerome Marchand",
        "email": "jmarchan@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:49 2010 -0400"
      },
      "message": "inotify: Fix mask checks\n\nThe mask checks in inotify_update_existing_watch() and\ninotify_new_watch() are useless because inotify_arg_to_mask() sets\nFS_IN_IGNORED and FS_EVENT_ON_CHILD bits anyway.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "f874e1ac21d7708464dc656a10312542c54719f1",
      "tree": "be47a1f5333208647e016f1861eaf21fb963478b",
      "parents": [
        "8c1934c8d70b22ca8333b216aec6c7d09fdbd6a6"
      ],
      "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:49 2010 -0400"
      },
      "message": "inotify: force inotify and fsnotify use same bits\n\ninotify uses bits called IN_* and fsnotify uses bits called FS_*.  These\nneed to line up.  This patch adds build time checks to make sure noone can\nchange these bits so they are not the same.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "8c1934c8d70b22ca8333b216aec6c7d09fdbd6a6",
      "tree": "25fffb46e0b1594aa692ed10e755b6ae041022bc",
      "parents": [
        "611da04f7a31b2208e838be55a42c7a1310ae321"
      ],
      "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:49 2010 -0400"
      },
      "message": "inotify: allow users to request not to recieve events on unlinked children\n\nAn inotify watch on a directory will send events for children even if those\nchildren have been unlinked.  This patch add a new inotify flag IN_EXCL_UNLINK\nwhich allows a watch to specificy they don\u0027t care about unlinked children.\nThis should fix performance problems seen by tasks which add a watch to\n/tmp and then are overrun with events when other processes are reading and\nwriting to unlinked files they created in /tmp.\n\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d16296\n\nRequested-by: Matthias Clasen \u003cmclasen@redhat.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "611da04f7a31b2208e838be55a42c7a1310ae321",
      "tree": "f72cdd659943dbd92eb401de00bab2b21a1eab67",
      "parents": [
        "ff311008ab8d2f2cfdbbefd407d1b05acc8164b2"
      ],
      "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:49 2010 -0400"
      },
      "message": "inotify: send IN_UNMOUNT events\n\nSince the .31 or so notify rewrite inotify has not sent events about\ninodes which are unmounted.  This patch restores those events.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "ff311008ab8d2f2cfdbbefd407d1b05acc8164b2",
      "tree": "f6d21c7c5834cd2f84b4ed1281bbaa057c46187c",
      "parents": [
        "e4e047a22058f48544b16728e0f15a3fc12bb0cf"
      ],
      "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:48 2010 -0400"
      },
      "message": "inotify: fix inotify oneshot support\n\nDuring the large inotify rewrite to fsnotify I completely dropped support\nfor IN_ONESHOT.  Reimplement that support.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "0a24887afacefbe2c44e0eee4150b43959a60665",
      "tree": "3d703177948eb345379b93751d343d798c6e33cf",
      "parents": [
        "fb1cfb88c8597d847553f39efc2bbd41c72c5f50"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Fri May 14 15:35:21 2010 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:59:02 2010 -0400"
      },
      "message": "inotify_user.c: make local symbol static\n\nThe symbol inotify_max_user_watches is not used outside this\nfile and should be static.\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nCc: John McCutchan \u003cjohn@johnmccutchan.com\u003e\nCc: Robert Love \u003crlove@rlove.org\u003e\nCc: Eric Paris \u003ceparis@parisplace.org\u003e\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": "90b1e7a57880fb66437ab7db39e1e65ca0372822",
      "tree": "61b7195c84d9dfd057ed3dcb07c5fc831db6a3a9",
      "parents": [
        "33d3dfff451a2ab6fe2f6aaabed9b24e91aad109"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:33 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:59 2010 -0400"
      },
      "message": "fsnotify: allow marks to not pin inodes in core\n\ninotify marks must pin inodes in core.  dnotify doesn\u0027t technically need to\nsince they are closed when the directory is closed.  fanotify also need to\npin inodes in core as it works today.  But the next step is to introduce\nthe concept of \u0027ignored masks\u0027 which is actually a mask of events for an\ninode of no interest.  I claim that these should be liberally sent to the\nkernel and should not pin the inode in core.  If the inode is brought back\nin the listener will get an event it may have thought excluded, but this is\nnot a serious situation and one any listener should deal with.\n\nThis patch lays the ground work for non-pinning inode marks by using lazy\ninode pinning.  We do not pin a mark until it has a non-zero mask entry.  If a\nlistener new sets a mask we never pin the inode.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "5444e2981c31d0ed7465475e451b8437084337e5",
      "tree": "66b6d84b7aab886b44a3467a139d258d9aba09df",
      "parents": [
        "32c3263221bd63316815286dccacdc7abfd7f3c4"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:27 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:57 2010 -0400"
      },
      "message": "fsnotify: split generic and inode specific mark code\n\ncurrently all marking is done by functions in inode-mark.c.  Some of this\nis pretty generic and should be instead done in a generic function and we\nshould only put the inode specific code in inode-mark.c\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "35566087099c3ff8901d65ee98af56347ee66e5a",
      "tree": "e4e56bcf787e5f100fa1ea0138c417e1203b10ae",
      "parents": [
        "ef5e2b785fb3216269e6d0656d38ec286b98dbe5"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:25 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:54 2010 -0400"
      },
      "message": "fsnotify: take inode-\u003ei_lock inside fsnotify_find_mark_entry()\n\nAll callers to fsnotify_find_mark_entry() except one take and\nrelease inode-\u003ei_lock around the call.  Take the lock inside\nfsnotify_find_mark_entry() instead.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "000285deb99a5e0636fdd3c6a2483a5d039ee2c2",
      "tree": "45b13f2253265703a540bdd99685f4f56ac8e21b",
      "parents": [
        "841bdc10f573aa010dd5818d35a5690b7d9f73ce"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:24 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:54 2010 -0400"
      },
      "message": "inotify: rename mark_entry to just mark\n\nrename anything in inotify that deals with mark_entry to just be mark.  It\nmakes a lot more sense.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "d07754412f9cdc2f4a99318d5ee81ace6715ea99",
      "tree": "f62902ad420de023c0fad931d9508903a9f42e3b",
      "parents": [
        "e61ce86737b4d60521e4e71f9892fe4bdcfb688b"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "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: rename fsnotify_find_mark_entry to fsnotify_find_mark\n\nthe _entry portion of fsnotify functions is useless.  Drop it.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "e61ce86737b4d60521e4e71f9892fe4bdcfb688b",
      "tree": "a1aba411504ac028d4ead6f28ca05bd024c74142",
      "parents": [
        "72acc854427948efed7a83da27f7dc3239ac9afc"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "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: rename fsnotify_mark_entry to just fsnotify_mark\n\nThe name is long and it serves no real purpose.  So rename\nfsnotify_mark_entry to just fsnotify_mark.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "2823e04de4f1a49087b58ff2bb8f61361ffd9321",
      "tree": "0467ddf513cfb9ec76f3fe498bdc9b5084008c84",
      "parents": [
        "3a9fb89f4cd04c23e16397befba92efb5d989b74"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:23 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:52 2010 -0400"
      },
      "message": "fsnotify: put inode specific fields in an fsnotify_mark in a union\n\nThe addition of marks on vfs mounts will be simplified if the inode\nspecific parts of a mark and the vfsmnt specific parts of a mark are\nactually in a union so naming can be easy.  This patch just implements the\ninode struct and the union.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "3a9fb89f4cd04c23e16397befba92efb5d989b74",
      "tree": "f60b48c8cf488ad8952601ccbc6192b5f86ec900",
      "parents": [
        "7131485a93679ff9a543b74df280cfd119eb03ca"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:23 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:52 2010 -0400"
      },
      "message": "fsnotify: include vfsmount in should_send_event when appropriate\n\nTo ensure that a group will not duplicate events when it receives it based\non the vfsmount and the inode should_send_event test we should distinguish\nthose two cases.  We pass a vfsmount to this function so groups can make\ntheir own determinations.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "0d2e2a1d00d7d23e5bd9bb0935cde7c3d5835c56",
      "tree": "1c6bbbcbb143a364838d6749aa086af3c019f965",
      "parents": [
        "220d14df0dc587c06b97762829a41157c9375b94"
      ],
      "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:51 2010 -0400"
      },
      "message": "fsnotify: drop mask argument from fsnotify_alloc_group\n\nNothing uses the mask argument to fsnotify_alloc_group.  This patch drops\nthat argument.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "ffab83402f01555a5fa32efb48a4dd0ce8d12ef5",
      "tree": "4e02fa7422becb56e6ed4b8721f8b0fb3a867d44",
      "parents": [
        "cd7752ce7cac5184ca35aecebffafae9662570bc"
      ],
      "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: fsnotify_obtain_group should be fsnotify_alloc_group\n\nfsnotify_obtain_group was intended to be able to find an already existing\ngroup.  Nothing uses that functionality.  This just renames it to\nfsnotify_alloc_group so it is clear what it is doing.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "74be0cc82835aecad332a29896b0f212ba893403",
      "tree": "eaae59c73ba52ff8cab8ee845e989d9877603f4c",
      "parents": [
        "cac69dad32899c6f4c66bb4f9baf69b0d3c7d3d1"
      ],
      "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: remove group_num altogether\n\nThe original fsnotify interface has a group-num which was intended to be\nable to find a group after it was added.  I no longer think this is a\nnecessary thing to do and so we remove the group_num.\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": "8112e2d6a7356e8c3ff1f7f3c86f375ed0305705",
      "tree": "953926dd3596c0ac87d7407960d0987b765a8239",
      "parents": [
        "7b0a04fbfb35650941af87728d4891515b4fc179"
      ],
      "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:31 2010 -0400"
      },
      "message": "fsnotify: include data in should_send calls\n\nfanotify is going to need to look at file-\u003eprivate_data to know if an event\nshould be sent or not.  This passes the data (which might be a file,\ndentry, inode, or none) to the should_send function calls so fanotify can\nget that information when available\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "7b0a04fbfb35650941af87728d4891515b4fc179",
      "tree": "48d85a11a8d3c283db3eb9f91ac4fb97bb2beafe",
      "parents": [
        "d7f0ce4e436b6109527c51b0efe0deff53d215f7"
      ],
      "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:31 2010 -0400"
      },
      "message": "fsnotify: provide the data type to should_send_event\n\nfanotify is only interested in event types which contain enough information\nto open the original file in the context of the fanotify listener.  Since\nfanotify may not want to send events if that data isn\u0027t present we pass\nthe data type to the should_send_event function call so fanotify can express\nits lack of interest.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "d7f0ce4e436b6109527c51b0efe0deff53d215f7",
      "tree": "b3c78a9c8b97ecf0dad28776dc38d47e88483731",
      "parents": [
        "2dfc1cae4c42b93b831b2417540df2b895ab7108"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 22 23:16:33 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:31 2010 -0400"
      },
      "message": "inotify: do not spam console without limit\n\ninotify was supposed to have a dmesg printk ratelimitor which would cause\ninotify to only emit one message per boot.  The static bool was never set\nso it kept firing messages.  This patch correctly limits warnings in multiple\nplaces.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "2dfc1cae4c42b93b831b2417540df2b895ab7108",
      "tree": "e07a0075964fd2cb9210b302114255e16ab1d4c0",
      "parents": [
        "7050c48826d5adb2210bddfb6a67aa13bbe984ed"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 20:30:52 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:31 2010 -0400"
      },
      "message": "inotify: remove inotify in kernel interface\n\nnothing uses inotify in the kernel, drop it!\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "7050c48826d5adb2210bddfb6a67aa13bbe984ed",
      "tree": "21a2f73a9953f1125aea81e02ef547afbe33661a",
      "parents": [
        "6f3a539e3bd8ed2eafa532443723d56896153a00"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 20:27:10 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:20 2010 -0400"
      },
      "message": "inotify: do not reuse watch descriptors\n\nPrior to 2.6.31 inotify would not reuse watch descriptors until all of\nthem had been used at least once.  After the rewrite inotify would reuse\nwatch descriptors.  The selinux utility \u0027restorecond\u0027 was found to have\nproblems when watch descriptors were reused.  This patch reverts to the\npre inotify rewrite behavior to not reuse watch descriptors.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "31ddd3268dcb6c1d70e9930a83be43bf86e4bf17",
      "tree": "a9ee0ac61f73e7dd6883d4466a56b79fe3e6e38b",
      "parents": [
        "b4277d3dd5a7400c1ea7fd4e7d64bda8899f84f5"
      ],
      "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": "inotify: use container_of instead of casting\n\ninotify_free_mark casts directly from an fsnotify_mark_entry to an\ninotify_inode_mark_entry.  This works, but should use container_of instead\nfor future proofing.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "40554c3dae83bd892b7fbfaa2ea9de739cbcf065",
      "tree": "7b9d4951734af9d819a900ff08f23c797a5c1b5c",
      "parents": [
        "9e1c74321d87a8b079f04d89e750b39a43365e1f"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 20:12:05 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:17 2010 -0400"
      },
      "message": "fsnotify: allow addition of duplicate fsnotify marks\n\nThis patch allows a task to add a second fsnotify mark to an inode for the\nsame group.  This mark will be added to the end of the inode\u0027s list and\nthis will never be found by the stand fsnotify_find_mark() function.   This\nis useful if a user wants to add a new mark before removing the old one.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "b7ba83715317007962ee318587de92f14e9c3aaa",
      "tree": "8964c554566ddcd0b73c266b95461dab1547aaf0",
      "parents": [
        "fc0f5ac8fe693d1b05f5a928cc48135d1c8b7f2e"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 20:12:04 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:16 2010 -0400"
      },
      "message": "inotify: simplify the inotify idr handling\n\nThis patch moves all of the idr editing operations into their own idr\nfunctions.  It makes it easier to prove locking correctness and to to\nunderstand the code flow.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "1712ac8fda7d8bc4dc921f5777b7423aacad7263",
      "tree": "1493bc7166ace04d9ac2f4d5383eaab1d43e17c4",
      "parents": [
        "b20bd1a5e78af267dc4b6e1ffed48d5d776302c5"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 22 15:22:31 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:14 2010 -0400"
      },
      "message": "Saner locking around deactivate_super()\n\nMake sure that s_umount is acquired *before* we drop the final\nactive reference; we still have the fast path (atomic_dec_unless)\nand we have gotten rid of the window between the moment when\ns_active hits zero and s_umount is acquired.  Which simplifies\nthe living hell out of grab_super() and inotify pin_to_kill()\nstuff.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b20bd1a5e78af267dc4b6e1ffed48d5d776302c5",
      "tree": "d50982ee42500712d9add489435d4455580b9cac",
      "parents": [
        "389b8be6ef419397e4f176652927ebad6ebb4b77"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 22 08:53:19 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:14 2010 -0400"
      },
      "message": "get rid of S_BIAS\n\nuse atomic_inc_not_zero(\u0026sb-\u003es_active) instead of playing games with\nchecking -\u003es_count \u003e S_BIAS\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4fc4c3ce0dc1096cbd0daa3fe8f6905cbec2b87e",
      "tree": "40a48fe2eabbab01133047ee5055ab8f853deac4",
      "parents": [
        "97b2073ff04814a7f2fef5fe0e82bb008cad7d8e",
        "b3b38d842fa367d862b83e7670af4e0fd6a80fc0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 14 11:49:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 14 11:49:42 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.infradead.org/users/eparis/notify\n\n* \u0027for-linus\u0027 of git://git.infradead.org/users/eparis/notify:\n  inotify: don\u0027t leak user struct on inotify release\n  inotify: race use after free/double free in inotify inode marks\n  inotify: clean up the inotify_add_watch out path\n  Inotify: undefined reference to `anon_inode_getfd\u0027\n\nManual merge to remove duplicate \"select ANON_INODES\" from Kconfig file\n"
    },
    {
      "commit": "b3b38d842fa367d862b83e7670af4e0fd6a80fc0",
      "tree": "db803231178ae41f21240017a3119dea3a4d3589",
      "parents": [
        "e08733446e72b983fed850fc5d8bd21b386feb29"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@openvz.org",
        "time": "Wed May 12 15:34:07 2010 -0700"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri May 14 11:53:36 2010 -0400"
      },
      "message": "inotify: don\u0027t leak user struct on inotify release\n\ninotify_new_group() receives a get_uid-ed user_struct and saves the\nreference on group-\u003einotify_data.user.  The problem is that free_uid() is\nnever called on it.\n\nIssue seem to be introduced by 63c882a0 (inotify: reimplement inotify\nusing fsnotify) after 2.6.30.\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nEric Paris \u003ceparis@parisplace.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "e08733446e72b983fed850fc5d8bd21b386feb29",
      "tree": "6b169001ff9faa82577341fbfa4cbcd9ccf00663",
      "parents": [
        "3dbc6fb6a3c8a7dc164ae330ab024a3fe65ae53e"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue May 11 17:17:40 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri May 14 11:52:57 2010 -0400"
      },
      "message": "inotify: race use after free/double free in inotify inode marks\n\nThere is a race in the inotify add/rm watch code.  A task can find and\nremove a mark which doesn\u0027t have all of it\u0027s references.  This can\nresult in a use after free/double free situation.\n\nTask A\t\t\t\t\tTask B\n------------\t\t\t\t-----------\ninotify_new_watch()\n allocate a mark (refcnt \u003d\u003d 1)\n add it to the idr\n\t\t\t\t\tinotify_rm_watch()\n\t\t\t\t\t inotify_remove_from_idr()\n\t\t\t\t\t  fsnotify_put_mark()\n\t\t\t\t\t      refcnt hits 0, free\n take reference because we are on idr\n [at this point it is a use after free]\n [time goes on]\n refcnt may hit 0 again, double free\n\nThe fix is to take the reference BEFORE the object can be found in the\nidr.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nCc: \u003cstable@kernel.org\u003e\n"
    },
    {
      "commit": "3dbc6fb6a3c8a7dc164ae330ab024a3fe65ae53e",
      "tree": "b04e140c78e644b18f7aa6ce31d59245dc39f0c0",
      "parents": [
        "e7b702b1a8f2a6961367da903217e669be0f099f"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue May 11 17:16:23 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri May 14 11:51:07 2010 -0400"
      },
      "message": "inotify: clean up the inotify_add_watch out path\n\ninotify_add_watch explictly frees the unused inode mark, but it can just\nuse the generic code.  Just do that.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "e7b702b1a8f2a6961367da903217e669be0f099f",
      "tree": "bd2a49f1fec1035256fe90e120fe878fdfa2ac12",
      "parents": [
        "cea0d767c29669bf89f86e4aee46ef462d2ebae8"
      ],
      "author": {
        "name": "Russell King",
        "email": "rmk@arm.linux.org.uk",
        "time": "Sun Apr 18 21:25:11 2010 +0100"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed May 12 11:03:40 2010 -0400"
      },
      "message": "Inotify: undefined reference to `anon_inode_getfd\u0027\n\nFix:\n\nfs/built-in.o: In function `sys_inotify_init1\u0027:\nsummary.c:(.text+0x347a4): undefined reference to `anon_inode_getfd\u0027\n\nfound by kautobuild with arms bcmring_defconfig, which ends up with\nINOTIFY_USER enabled (through the \u0027default y\u0027) but leaves ANON_INODES\nunset.  However, inotify_user.c uses anon_inode_getfd().\n\nSigned-off-by: Russell King \u003crmk+kernel@arm.linux.org.uk\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "12b1b321689cf92236fb216472744e39419fab30",
      "tree": "16505df17a901583b3c1ab28b5cb7e9b573d8809",
      "parents": [
        "8f2adb7cab81fc4984ddfe3a1efd1b62d52bead8"
      ],
      "author": {
        "name": "Ralf Baechle",
        "email": "ralf@linux-mips.org",
        "time": "Mon Mar 08 20:51:03 2010 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 30 10:14:56 2010 -0700"
      },
      "message": "Inotify: Fix build failure in inotify user support\n\nCONFIG_INOTIFY_USER defined but CONFIG_ANON_INODES undefined will result\nin the following build failure:\n\n    LD      vmlinux\n  fs/built-in.o: In function \u0027sys_inotify_init1\u0027:\n  (.text.sys_inotify_init1+0x22c): undefined reference to \u0027anon_inode_getfd\u0027\n  fs/built-in.o: In function `sys_inotify_init1\u0027:\n  (.text.sys_inotify_init1+0x22c): relocation truncated to fit: R_MIPS_26 against \u0027anon_inode_getfd\u0027\n  make[2]: *** [vmlinux] Error 1\n  make[1]: *** [sub-make] Error 2\n  make: *** [all] Error 2\n\nSigned-off-by: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c44dcc56d2b5c79ba3063d20f76e5347e2e418f6",
      "tree": "98fbf5a5032ba0d567696cb8c152be342329bfc0",
      "parents": [
        "cccc6bba3f771ef29b33e4f79e70ebc3dba245b0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Feb 11 02:24:46 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Feb 19 03:35:12 2010 -0500"
      },
      "message": "switch inotify_user to anon_inode\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "976ae32be45a736acd49215a7e4771ff91f161c3",
      "tree": "c7baae0475304ef84c8f918e67b087cf7f4388a5",
      "parents": [
        "9e572cc9877ee6c43af60778f6b8d5ba0692d935"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Jan 15 12:12:25 2010 -0500"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 15 14:49:23 2010 -0800"
      },
      "message": "inotify: only warn once for inotify problems\n\ninotify will WARN() if it finds that the idr and the fsnotify internals\nsomehow got out of sync.  It was only supposed to do this once but due\nto this stupid bug it would warn every single time a problem was\ndetected.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9e572cc9877ee6c43af60778f6b8d5ba0692d935",
      "tree": "381c6152ffe3eee6cc34aaa3389836d54cb8b863",
      "parents": [
        "61c39bb354a1f791ba6f562b766a72e508a036ee"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Jan 15 12:12:24 2010 -0500"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 15 14:49:23 2010 -0800"
      },
      "message": "inotify: do not reuse watch descriptors\n\nSince commit 7e790dd5fc937bc8d2400c30a05e32a9e9eef276 (\"inotify: fix\nerror paths in inotify_update_watch\") inotify changed the manor in which\nit gave watch descriptors back to userspace.  Previous to this commit\ninotify acted like the following:\n\n  inotify_add_watch(X, Y, Z) \u003d 1\n  inotify_rm_watch(X, 1);\n  inotify_add_watch(X, Y, Z) \u003d 2\n\nbut after this patch inotify would return watch descriptors like so:\n\n  inotify_add_watch(X, Y, Z) \u003d 1\n  inotify_rm_watch(X, 1);\n  inotify_add_watch(X, Y, Z) \u003d 1\n\nwhich I saw as equivalent to opening an fd where\n\n  open(file) \u003d 1;\n  close(1);\n  open(file) \u003d 1;\n\nseemed perfectly reasonable.  The issue is that quite a bit of userspace\napparently relies on the behavior in which watch descriptors will not be\nquickly reused.  KDE relies on it, I know some selinux packages rely on\nit, and I have heard complaints from other random sources such as debian\nbug 558981.\n\nAlthough the man page implies what we do is ok, we broke userspace so\nthis patch almost reverts us to the old behavior.  It is still slightly\nracey and I have patches that would fix that, but they are rather large\nand this will fix it for all real world cases.  The race is as follows:\n\n - task1 creates a watch and blocks in idr_new_watch() before it updates\n   the hint.\n - task2 creates a watch and updates the hint.\n - task1 updates the hint with it\u0027s older wd\n - task removes the watch created by task2\n - task adds a new watch and will reuse the wd originally given to task2\n\nit requires moving some locking around the hint (last_wd) but this should\nsolve it for the real world and be -stable safe.\n\nAs a side effect this patch papers over a bug in the lib/idr code which\nis causing a large number WARN\u0027s to pop on people\u0027s system and many\nreports in kerneloops.org.  I\u0027m working on the root cause of that idr\nbug seperately but this should make inotify immune to that issue.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2c48b9c45579a9b5e3e74694eebf3d2451f3dbd3",
      "tree": "cecbf786ae0650368a8136bdd90910e05d9b95c3",
      "parents": [
        "a95161aaa801c18c52b2e7cf3d6b4b141c00a20a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Aug 09 00:52:35 2009 +0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 16 12:16:42 2009 -0500"
      },
      "message": "switch alloc_file() to passing struct path\n\n... and have the caller grab both mnt and dentry; kill\nleak in infiniband, while we are at it.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "825f9692fbe417b9fb529477056ba72022847038",
      "tree": "be3b8a22940f00e9d620d188814d5adc63e8108e",
      "parents": [
        "4b42af81f0d7f95dff320f47d99c201925f406f5"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 05 18:35:21 2009 +0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 16 12:16:40 2009 -0500"
      },
      "message": "switched inotify_init1() to alloc_file()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4ef58d4e2ad1fa2a3e5bbf41af2284671fca8cf8",
      "tree": "856ba96302a36014736747e8464f80eeb827bbdd",
      "parents": [
        "f6c4c8195b5e7878823caa1181be404d9e86d369",
        "d014d043869cdc591f3a33243d3481fa4479c2d0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 09 19:43:33 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 09 19:43:33 2009 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (42 commits)\n  tree-wide: fix misspelling of \"definition\" in comments\n  reiserfs: fix misspelling of \"journaled\"\n  doc: Fix a typo in slub.txt.\n  inotify: remove superfluous return code check\n  hdlc: spelling fix in find_pvc() comment\n  doc: fix regulator docs cut-and-pasteism\n  mtd: Fix comment in Kconfig\n  doc: Fix IRQ chip docs\n  tree-wide: fix assorted typos all over the place\n  drivers/ata/libata-sff.c: comment spelling fixes\n  fix typos/grammos in Documentation/edac.txt\n  sysctl: add missing comments\n  fs/debugfs/inode.c: fix comment typos\n  sgivwfb: Make use of ARRAY_SIZE.\n  sky2: fix sky2_link_down copy/paste comment error\n  tree-wide: fix typos \"couter\" -\u003e \"counter\"\n  tree-wide: fix typos \"offest\" -\u003e \"offset\"\n  fix kerneldoc for set_irq_msi()\n  spidev: fix double \"of of\" in comment\n  comment typo fix: sybsystem -\u003e subsystem\n  ...\n"
    },
    {
      "commit": "336e8683b9a8921049d0e6bb0ca5e18160828ec6",
      "tree": "53d921024a3cc62615cca5b5c54934ebfc70db7c",
      "parents": [
        "870571a2ef6fb2d6306673b4376fec93d441e013"
      ],
      "author": {
        "name": "Giuseppe Scrivano",
        "email": "gscrivano@gnu.org",
        "time": "Thu Dec 03 17:01:41 2009 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Dec 04 15:39:58 2009 +0100"
      },
      "message": "inotify: remove superfluous return code check\n\nSigned-off-by: Giuseppe Scrivano \u003cgscrivano@gnu.org\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "6d4561110a3e9fa742aeec6717248a491dfb1878",
      "tree": "689e2abf19940416ce597ba56ed31026ff59bd21",
      "parents": [
        "86926d0096279b9739ceeff40f68d3c33b9119a9"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Nov 16 03:11:48 2009 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Wed Nov 18 08:37:40 2009 -0800"
      },
      "message": "sysctl: Drop \u0026 in front of every proc_handler.\n\nFor consistency drop \u0026 in front of every proc_handler.  Explicity\ntaking the address is unnecessary and it prevents optimizations\nlike stubbing the proc_handlers to NULL.\n\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "ab09203e302b6e526f6930f3e460064b0f253ae9",
      "tree": "bc95bfaba78ba30613d57c676eca42818b8a3293",
      "parents": [
        "2bc4657c15e4a33d9a192579c7627a397dbcbebc"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu Nov 05 14:25:10 2009 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu Nov 12 02:04:55 2009 -0800"
      },
      "message": "sysctl fs: Remove dead binary sysctl support\n\nNow that sys_sysctl is a generic wrapper around /proc/sys  .ctl_name\nand .strategy members of sysctl tables are dead code.  Remove them.\n\nCc: Jan Harkes \u003cjaharkes@cs.cmu.edu\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "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": "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": "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": "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": "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": "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"
    }
  ]
}
