)]}'
{
  "log": [
    {
      "commit": "c63181e6b6df89176b3984c6977bb5ec03d0df23",
      "tree": "2e6056a7d85e8df9dbf95e6fa4291f76a714c7c8",
      "parents": [
        "52ba1621de1479ce7e52b6d167860462e483313c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 02:35:16 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:12 2012 -0500"
      },
      "message": "vfs: move fsnotify junk to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\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": "4b7bd364700d9ac8372eff48832062b936d0793b",
      "tree": "0dbf78c95456a0b02d07fcd473281f04a87e266d",
      "parents": [
        "c0d8768af260e2cbb4bf659ae6094a262c86b085",
        "90a8a73c06cc32b609a880d48449d7083327e11a"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n\nConflicts:\n\tMAINTAINERS\n\tarch/arm/mach-omap2/pm24xx.c\n\tdrivers/scsi/bfa/bfa_fcpim.c\n\nNeeded to update to apply fixes for which the old branch was too\noutdated.\n"
    },
    {
      "commit": "7d13162332f2b67a941d18cee20f1c0413e020de",
      "tree": "a9e40f802579e750fbf75e025e9cee7c760ca558",
      "parents": [
        "62731fa0c893515dc6cbc3e0a2879a92793c735f"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 15:27:57 2010 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Dec 15 13:58:18 2010 -0500"
      },
      "message": "fanotify: fill in the metadata_len field on struct fanotify_event_metadata\n\nThe fanotify_event_metadata now has a field which is supposed to\nindicate the length of the metadata portion of the event.  Fill in that\nfield as well.\n\nBased-in-part-on-patch-by: Alexey Zaytsev \u003calexey.zaytsev@gmail.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "fdbf3ceeb659f0b3c0e8dd79b331b7ac05910f1e",
      "tree": "72ed0abad8e550cfa54d83c677d3a9baba28f110",
      "parents": [
        "e9a3854fd4ff3907e6c200a3980e19365ee695e9"
      ],
      "author": {
        "name": "Lino Sanfilippo",
        "email": "LinoSanfilippo@gmx.de",
        "time": "Wed Nov 24 18:26:04 2010 +0100"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 16:14:24 2010 -0500"
      },
      "message": "fanotify: Dont try to open a file descriptor for the overflow event\n\nWe should not try to open a file descriptor for the overflow event since this\nwill always fail.\n\nSigned-off-by: Lino Sanfilippo \u003cLinoSanfilippo@gmx.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "26379198937fcc9bbe7be76be695d06df8334eaa",
      "tree": "47be9bc5b202f5f5e1a94a08966d362787bb06ea",
      "parents": [
        "a2ae4cc9a16e211c8a128ba10d22a85431f093ab"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Nov 23 23:48:26 2010 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 16:14:23 2010 -0500"
      },
      "message": "fanotify: do not leak user reference on allocation failure\n\nIf fanotify_init is unable to allocate a new fsnotify group it will\nreturn but will not drop its reference on the associated user struct.\nDrop that reference on error.\n\nReported-by: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "09e5f14e57c70f9d357862bb56e57026c51092a1",
      "tree": "e6e9c38a15e4ea562dcb0ac600ae37831dd16b49",
      "parents": [
        "1734dee4e3a296cb72b4819fc2e7ef2440737dff"
      ],
      "author": {
        "name": "Lino Sanfilippo",
        "email": "LinoSanfilippo@gmx.de",
        "time": "Fri Nov 19 10:58:07 2010 +0100"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 16:14:22 2010 -0500"
      },
      "message": "fanotify: on group destroy allow all waiters to bypass permission check\n\nWhen fanotify_release() is called, there may still be processes waiting for\naccess permission. Currently only processes for which an event has already been\nqueued into the groups access list will be woken up.  Processes for which no\nevent has been queued will continue to sleep and thus cause a deadlock when\nfsnotify_put_group() is called.\nFurthermore there is a race allowing further processes to be waiting on the\naccess wait queue after wake_up (if they arrive before clear_marks_by_group()\nis called).\nThis patch corrects this by setting a flag to inform processes that the group\nis about to be destroyed and thus not to wait for access permission.\n\n[additional changelog from eparis]\nLets think about the 4 relevant code paths from the PoV of the\n\u0027operator\u0027 \u0027listener\u0027 \u0027responder\u0027 and \u0027closer\u0027.  Where operator is the\nprocess doing an action (like open/read) which could require permission.\nListener is the task (or in this case thread) slated with reading from\nthe fanotify file descriptor.  The \u0027responder\u0027 is the thread responsible\nfor responding to access requests.  \u0027Closer\u0027 is the thread attempting to\nclose the fanotify file descriptor.\n\nThe \u0027operator\u0027 is going to end up in:\nfanotify_handle_event()\n  get_response_from_access()\n    (THIS BLOCKS WAITING ON USERSPACE)\n\nThe \u0027listener\u0027 interesting code path\nfanotify_read()\n  copy_event_to_user()\n    prepare_for_access_response()\n      (THIS CREATES AN fanotify_response_event)\n\nThe \u0027responder\u0027 code path:\nfanotify_write()\n  process_access_response()\n    (REMOVE A fanotify_response_event, SET RESPONSE, WAKE UP \u0027operator\u0027)\n\nThe \u0027closer\u0027:\nfanotify_release()\n  (SUPPOSED TO CLEAN UP THE REST OF THIS MESS)\n\nWhat we have today is that in the closer we remove all of the\nfanotify_response_events and set a bit so no more response events are\never created in prepare_for_access_response().\n\nThe bug is that we never wake all of the operators up and tell them to\nmove along.  You fix that in fanotify_get_response_from_access().  You\nalso fix other operators which haven\u0027t gotten there yet.  So I agree\nthat\u0027s a good fix.\n[/additional changelog from eparis]\n\n[remove additional changes to minimize patch size]\n[move initialization so it was inside CONFIG_FANOTIFY_PERMISSION]\n\nSigned-off-by: Lino Sanfilippo \u003cLinoSanfilippo@gmx.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "1734dee4e3a296cb72b4819fc2e7ef2440737dff",
      "tree": "1923b47c601a521ebe5989b1878cd4d1f17d2b20",
      "parents": [
        "fa218ab98c31eeacd12b89501e6b99d146ea56cc"
      ],
      "author": {
        "name": "Lino Sanfilippo",
        "email": "LinoSanfilippo@gmx.de",
        "time": "Mon Nov 22 18:46:33 2010 +0100"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 16:14:21 2010 -0500"
      },
      "message": "fanotify: Dont allow a mask of 0 if setting or removing a mark\n\nIn mark_remove_from_mask() we destroy marks that have their event mask cleared.\nThus we should not allow the creation of those marks in the first place.\nWith this patch we check if the mask given from user is 0 in case of FAN_MARK_ADD.\nIf so we return an error. Same for FAN_MARK_REMOVE since this does not have any\neffect.\n\nSigned-off-by: Lino Sanfilippo \u003cLinoSanfilippo@gmx.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "fa218ab98c31eeacd12b89501e6b99d146ea56cc",
      "tree": "789e0f922fbb30844a89a4aaf707c01991c74ea3",
      "parents": [
        "b1085ba80cd2784400a7beec3fda5099198ed01c"
      ],
      "author": {
        "name": "Lino Sanfilippo",
        "email": "LinoSanfilippo@gmx.de",
        "time": "Tue Nov 09 18:18:16 2010 +0100"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 16:14:21 2010 -0500"
      },
      "message": "fanotify: correct broken ref counting in case adding a mark failed\n\nIf adding a mount or inode mark failed fanotify_free_mark() is called explicitly.\nBut at this time the mark has already been put into the destroy list of the\nfsnotify_mark kernel thread. If the thread is too slow it will try to decrease\nthe reference of a mark, that has already been freed by fanotify_free_mark().\n(If its fast enough it will only decrease the marks ref counter from 2 to 1 - note\nthat the counter has been increased to 2 in add_mark() - which has practically no\neffect.)\n\nThis patch fixes the ref counting by not calling free_mark() explicitly, but\ndecreasing the ref counter and rely on the fsnotify_mark thread to cleanup in\ncase adding the mark has failed.\n\nSigned-off-by: Lino Sanfilippo \u003cLinoSanfilippo@gmx.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "ecf6f5e7d68471b08603f7c20143ac236602364f",
      "tree": "fb6fc404022d4674c2cb8e9a31f98a719a316e14",
      "parents": [
        "e8a7e48bb248a1196484d3f8afa53bded2b24e71"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Mon Nov 08 18:08:14 2010 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 16:14:17 2010 -0500"
      },
      "message": "fanotify: deny permissions when no event was sent\n\nIf no event was sent to userspace we cannot expect userspace to respond to\npermissions requests.  Today such requests just hang forever. This patch will\ndeny any permissions event which was unable to be sent to userspace.\n\nReported-by: Tvrtko Ursulin \u003ctvrtko.ursulin@sophos.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "6aaccece1c483f189f76f1282b3984ff4c7ecb0a",
      "tree": "ac90b7d0f4dcc22b7231330184fc9b4ca7222932",
      "parents": [
        "bf01ca1b35ff26a4c16c22b9ce7554f0d3a45ba7"
      ],
      "author": {
        "name": "Michael Witten",
        "email": "mfwitten@gmail.com",
        "time": "Mon Nov 01 17:50:12 2010 +0000"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Nov 01 15:17:29 2010 -0400"
      },
      "message": "Kconfig: typo: and -\u003e an\n\nSigned-off-by: Michael Witten \u003cmfwitten@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "1a5cea7215f7c6bd3c960d7b44e864f3a73d1ad4",
      "tree": "d8bdd846e5ef83c1707eaf9e9040705d80869260",
      "parents": [
        "d8c0fca68da25ca3df534dfb12ce628675c828e4"
      ],
      "author": {
        "name": "Lino Sanfilippo",
        "email": "LinoSanfilippo@gmx.de",
        "time": "Fri Oct 29 12:06:42 2010 +0200"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Sat Oct 30 14:07:35 2010 -0400"
      },
      "message": "make fanotify_read() restartable across signals\n\n    In fanotify_read() return -ERESTARTSYS instead of -EINTR to\n    make read() restartable across signals (BSD semantic).\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "19ba54f4645f8c5edae4b08919a37a409b8793aa",
      "tree": "83328233533ef33861fcc0617dd9ca68a981c92f",
      "parents": [
        "50e4a98914de13c6f38f50fd1afa06e2c18b3cf7"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Oct 28 17:21:59 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:22:16 2010 -0400"
      },
      "message": "fs/notify/fanotify/fanotify_user.c: fix warnings\n\nfs/notify/fanotify/fanotify_user.c: In function \u0027fanotify_release\u0027:\nfs/notify/fanotify/fanotify_user.c:375: warning: unused variable \u0027lre\u0027\nfs/notify/fanotify/fanotify_user.c:375: warning: unused variable \u0027re\u0027\n\nthis is really ugly.\n\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "192ca4d1941228e69c1fbeebab317725407e6e65",
      "tree": "cff474f312a41b5ab4fbbf72a558675f377e1808",
      "parents": [
        "8fcd65280abc4699510f1853ede31f43e8a3783a"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:21:59 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:22:16 2010 -0400"
      },
      "message": "fanotify: do not recalculate the mask if the ignored mask changed\n\nIf fanotify sets a new bit in the ignored mask it will cause the generic\nfsnotify layer to recalculate the real mask.  This is stupid since we\ndidn\u0027t change that part.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "8fcd65280abc4699510f1853ede31f43e8a3783a",
      "tree": "9ef20b7c3ee0a4130d88922d7d4115beaa0c9dc0",
      "parents": [
        "b29866aab8489487f11cc4506590ac31bdbae22a"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:21:59 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:22:16 2010 -0400"
      },
      "message": "fanotify: ignore events on directories unless specifically requested\n\nfanotify has a very limited number of events it sends on directories.  The\nusefulness of these events is yet to be seen and still we send them.  This\nis particularly painful for mount marks where one might receive many of\nthese useless events.  As such this patch will drop events on IS_DIR()\ninodes unless they were explictly requested with FAN_ON_DIR.\n\nThis means that a mark on a directory without FAN_EVENT_ON_CHILD or\nFAN_ON_DIR is meaningless and will result in no events ever (although it\nwill still be allowed since detecting it is hard)\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "e1c048ba786789afdc66f32d8394bb5a0014bbba",
      "tree": "03a8ca0e2ca11d40f175442338ab6c75d772940c",
      "parents": [
        "4afeff8505cb8a38e36c1ef2bd3447c4b8f87367"
      ],
      "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": "fanotify: do not send events for irregular files\n\nfanotify_should_send_event has a test to see if an object is a file or\ndirectory and does not send an event otherwise.  The problem is that the\ntest is actually checking if the object with a mark is a file or directory,\nnot if the object the event happened on is a file or directory.  We should\ncheck the latter.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "4afeff8505cb8a38e36c1ef2bd3447c4b8f87367",
      "tree": "50a80d8773698813e4e9d9f9112079c09d493c48",
      "parents": [
        "ac7e22dcfafd04c842a02057afd6541c1d613ef9"
      ],
      "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": "fanotify: limit number of listeners per user\n\nfanotify currently has no limit on the number of listeners a given user can\nhave open.  This patch limits the total number of listeners per user to\n128.  This is the same as the inotify default limit.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "ac7e22dcfafd04c842a02057afd6541c1d613ef9",
      "tree": "54e84b0596d9915f29e56e6b6a8d8370771202c5",
      "parents": [
        "e7099d8a5a34d2876908a9fab4952dabdcfc5909"
      ],
      "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": "fanotify: allow userspace to override max marks\n\nSome fanotify groups, especially those like AV scanners, will need to place\nlots of marks, particularly ignore marks.  Since ignore marks do not pin\ninodes in cache and are cleared if the inode is removed from core (usually\nunder memory pressure) we expose an interface for listeners, with\nCAP_SYS_ADMIN, to override the maximum number of marks and be allowed to\nset and \u0027unlimited\u0027 number of marks.  Programs which make use of this\nfeature will be able to OOM a machine.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "e7099d8a5a34d2876908a9fab4952dabdcfc5909",
      "tree": "34f62d8ae23c4c115a0b615cd13e9ae7ddd28b42",
      "parents": [
        "5dd03f55fd2f21916ce248bb2e68bbfb39d94fe5"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:21:57 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:22:14 2010 -0400"
      },
      "message": "fanotify: limit the number of marks in a single fanotify group\n\nThere is currently no limit on the number of marks a given fanotify group\ncan have.  Since fanotify is gated on CAP_SYS_ADMIN this was not seen as\na serious DoS threat.  This patch implements a default of 8192, the same as\ninotify to work towards removing the CAP_SYS_ADMIN gating and eliminating\nthe default DoS\u0027able status.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "5dd03f55fd2f21916ce248bb2e68bbfb39d94fe5",
      "tree": "3d4446ce07126b9983849a41670542c69bb400bd",
      "parents": [
        "2529a0df0f64dab1f60ae08e038b89c53a6b4c02"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:21:57 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:22:14 2010 -0400"
      },
      "message": "fanotify: allow userspace to override max queue depth\n\nfanotify has a defualt max queue depth.  This patch allows processes which\nexplicitly request it to have an \u0027unlimited\u0027 queue depth.  These processes\nneed to be very careful to make sure they cannot fall far enough behind\nthat they OOM the box.  Thus this flag is gated on CAP_SYS_ADMIN.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "2529a0df0f64dab1f60ae08e038b89c53a6b4c02",
      "tree": "59f73938d84b78b535c91282677054d1f3dd1697",
      "parents": [
        "5322a59f14e4cae5f878b9c0c5612d403c230d7f"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:21:57 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:22:14 2010 -0400"
      },
      "message": "fsnotify: implement a default maximum queue depth\n\nCurrently fanotify has no maximum queue depth.  Since fanotify is\nCAP_SYS_ADMIN only this does not pose a normal user DoS issue, but it\ncertianly is possible that an fanotify listener which can\u0027t keep up could\nOOM the box.  This patch implements a default 16k depth.  This is the same\ndefault depth used by inotify, but given fanotify\u0027s better queue merging in\nmany situations this queue will contain many additional useful events by\ncomparison.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "5322a59f14e4cae5f878b9c0c5612d403c230d7f",
      "tree": "5090861d8e7df0b69f342c527390007e8c3f68e9",
      "parents": [
        "bbf2aba50f6ed7c8dd53623fa1437b539928ac39"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:21:57 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:22:14 2010 -0400"
      },
      "message": "fanotify: ignore fanotify ignore marks if open writers\n\nfanotify will clear ignore marks if a task changes the contents of an\ninode.  The problem is with the races around when userspace finishes\nchecking a file and when that result is actually attached to the inode.\nThis race was described as such:\n\nConsider the following scenario with hostile processes A and B, and\nvictim process C:\n1. Process A opens new file for writing. File check request is generated.\n2. File check is performed in userspace. Check result is \"file has no malware\".\n3. The \"permit\" response is delivered to kernel space.\n4. File ignored mark set.\n5. Process A writes dummy bytes to the file. File ignored flags are cleared.\n6. Process B opens the same file for reading. File check request is generated.\n7. File check is performed in userspace. Check result is \"file has no malware\".\n8. Process A writes malware bytes to the file. There is no cached response yet.\n9. The \"permit\" response is delivered to kernel space and is cached in fanotify.\n10. File ignored mark set.\n11. Now any process C will be permitted to open the malware file.\nThere is a race between steps 8 and 10\n\nWhile fanotify makes no strong guarantees about systems with hostile\nprocesses there is no reason we cannot harden against this race.  We do\nthat by simply ignoring any ignore marks if the inode has open writers (aka\ni_writecount \u003e 0).  (We actually do not ignore ignore marks if the\nFAN_MARK_SURV_MODIFY flag is set)\n\nReported-by: Vasily Novikov \u003cvasily.novikov@kaspersky.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "4231a23530a30e86eb32fbe869bbef1b3e54d5aa",
      "tree": "bb268ea2e6cb50e8ea46e1f5a536ae0f0afb4e06",
      "parents": [
        "6ad2d4e3e97ee4bfde0b45e8dfe37911330fc4aa"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:21:56 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Oct 28 17:22:13 2010 -0400"
      },
      "message": "fanotify: implement fanotify listener ordering\n\nThe fanotify listeners needs to be able to specify what types of operations\nthey are going to perform so they can be ordered appropriately between other\nlisteners doing other types of operations.  They need this to be able to make\nsure that things like hierarchichal storage managers will get access to inodes\nbefore processes which need the data.  This patch defines 3 possible uses\nwhich groups must indicate in the fanotify_init() flags.\n\nFAN_CLASS_PRE_CONTENT\nFAN_CLASS_CONTENT\nFAN_CLASS_NOTIF\n\nGroups will receive notification in that order.  The order between 2 groups in\nthe same class is undeterministic.\n\nFAN_CLASS_PRE_CONTENT is intended to be used by listeners which need access to\nthe inode before they are certain that the inode contains it\u0027s final data.  A\nhierarchical storage manager should choose to use this class.\n\nFAN_CLASS_CONTENT is intended to be used by listeners which need access to the\ninode after it contains its intended contents.  This would be the appropriate\nlevel for an AV solution or document control system.\n\nFAN_CLASS_NOTIF is intended for normal async notification about access, much the\nsame as inotify and dnotify.  Syncronous permissions events are not permitted\nat this class.\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": "a2f13ad0ba5d94b9768c28469b45ca1e81a2b895",
      "tree": "3c9bd63cb165bbb4427399b3e87deb74911cd97d",
      "parents": [
        "0fb85621df4f9f7c663c6c77c302e821a832c95e"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Tue Aug 24 12:58:54 2010 +0200"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Aug 27 19:59:42 2010 -0400"
      },
      "message": "fanotify: Return EPERM when a process is not privileged\n\nThe appropriate error code when privileged operations are denied is\nEPERM, not EACCES.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003cparis@paris.rdu.redhat.com\u003e\n"
    },
    {
      "commit": "ff8d6e983185ce19fa92bb836eb52b589957be65",
      "tree": "6b5a8514376d16a7fa1636d0469b47a13086adf7",
      "parents": [
        "2eebf582c9b3106abb9c33f4fc0a347fb9391037"
      ],
      "author": {
        "name": "Tvrtko Ursulin",
        "email": "tvrtko.ursulin@sophos.com",
        "time": "Fri Aug 20 10:24:18 2010 +0100"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Sun Aug 22 20:30:12 2010 -0400"
      },
      "message": "fanotify: drop duplicate pr_debug statement\n\nThis reminded me... you have two pr_debugs in fanotify_should_send_event\nwhich output redundant information. Maybe you intended it like that so\nit is selectable how much log spam you want, or if not you may want to\napply this patch.\n\nSigned-off-by: Tvrtko Ursulin \u003ctvrtko.ursulin@sophos.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "2eebf582c9b3106abb9c33f4fc0a347fb9391037",
      "tree": "0fab23d7e456713815890fc01a148132b9b857f8",
      "parents": [
        "84e1ab4d875922c034db7f4f814ac445a20a14bd"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Aug 18 12:25:50 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Sun Aug 22 20:28:16 2010 -0400"
      },
      "message": "fanotify: flush outstanding perm requests on group destroy\n\nWhen an fanotify listener is closing it may cause a deadlock between the\nlistener and the original task doing an fs operation.  If the original task\nis waiting for a permissions response it will be holding the srcu lock.  The\nlistener cannot clean up and exit until after that srcu lock is syncronized.\nThus deadlock.  The fix introduced here is to stop accepting new permissions\nevents when a listener is shutting down and to grant permission for all\noutstanding events.  Thus the original task will eventually release the srcu\nlock and the listener can complete shutdown.\n\nReported-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nCc: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\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": "0215054f377ce5ac4ffc27b26b13b3f10e6410e6",
      "tree": "a736317ce8ad2aa1d272a482179f8c0ddc062ae7",
      "parents": [
        "4cd76a47924cd966799402d0f2bba356cde5c1b3"
      ],
      "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:53 2010 -0400"
      },
      "message": "fanotify: use the mark in handler functions\n\nfanotify now gets a mark in the should_send_event and handle_event\nfunctions.  Rather than look up the mark themselves fanotify 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": "80af2588676483ac4e998b5092e9d008dab3ab62",
      "tree": "6bff012a185f55b27f601e50b2f2ad53e9fc9f63",
      "parents": [
        "20dee624ca40db227aa70cb3f44d2d6cb4fdbab4"
      ],
      "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": "fanotify: groups can specify their f_flags for new fd\n\nCurrently fanotify fds opened for thier listeners are done with f_flags\nequal to O_RDONLY | O_LARGEFILE.  This patch instead takes f_flags from the\nfanotify_init syscall and uses those when opening files in the context of\nthe listener.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "e4e047a22058f48544b16728e0f15a3fc12bb0cf",
      "tree": "89278b999107ea537ff4d1d6e129035b0edec1ec",
      "parents": [
        "08ae89380a8210a9965d04083e1de78cb8bca4b1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu May 20 01:36:28 2010 +1000"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:59:03 2010 -0400"
      },
      "message": "fsnotify: update gfp/slab.h includes\n\nImplicit slab.h inclusion via percpu.h is about to go away.  Make sure\ngfp.h or slab.h is included as necessary.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "08ae89380a8210a9965d04083e1de78cb8bca4b1",
      "tree": "95ef9493b5a6152e7c683d2d5a8531844530f0f7",
      "parents": [
        "269ed32a9ce00132b9372e9c00014532e054d6b2"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 27 09:41:40 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:59:03 2010 -0400"
      },
      "message": "fanotify: drop the useless priority argument\n\nThe priority argument in fanotify is useless.  Kill it.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "269ed32a9ce00132b9372e9c00014532e054d6b2",
      "tree": "8a5870e0ce17d92c9437c3e79c2ff535652b9de2",
      "parents": [
        "0a24887afacefbe2c44e0eee4150b43959a60665"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu May 27 09:29:37 2010 -0400"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:59:03 2010 -0400"
      },
      "message": "fanotify: default Kconfig to n\n\nfanotify has default to y in linux-next since it\u0027s inception but default to\nn in the final push to Linus.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "8860f060e473dce1a0873d92105d536f72b05908",
      "tree": "38f3d1f49a921ba28fec88d1046acbf2207bd831",
      "parents": [
        "b2d879096ac799722e6017ee82c0586f0d101c9c"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Dec 23 00:10:25 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:59:02 2010 -0400"
      },
      "message": "fanotify: do not return 0 in a void function\n\nremove_access_response() is supposed to have a void return, but was\nreturning 0;\n\nReported-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "b2d879096ac799722e6017ee82c0586f0d101c9c",
      "tree": "3628e99772d2bf51ce736a775a056bffaae44e8c",
      "parents": [
        "9e66e4233db9c7e31e9ee706be2c9ddd54cf99b3"
      ],
      "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:02 2010 -0400"
      },
      "message": "fanotify: userspace interface for permission responses\n\nfanotify groups need to respond to events which include permissions types.\nTo do so groups will send a response using write() on the fanotify_fd they\nhave open.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "9e66e4233db9c7e31e9ee706be2c9ddd54cf99b3",
      "tree": "9d778b358fb6e5f02fb2cf634c2163f34982b7dd",
      "parents": [
        "c4ec54b40d33f8016fea970a383cc584dd0e6019"
      ],
      "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:02 2010 -0400"
      },
      "message": "fanotify: permissions and blocking\n\nThis is the backend work needed for fanotify to support the new\nFS_OPEN_PERM and FS_ACCESS_PERM fsnotify events.  This is done using the\nnew fsnotify secondary queue.  No userspace interface is provided actually\nrespond to or request these events.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "43ed7e16a8b47059d7f6ff67ba76f383a2421de3",
      "tree": "be4efb3c2241572ab3954b86e287c9e7d58a5e7e",
      "parents": [
        "6e5f77b32e9097a8a68a8d453799676cacf70cad"
      ],
      "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": "fanotify: use merge argument to determine actual event added to queue\n\nfanotify needs to know the actual event added to queues so it can be\ncorrectly checked for return values from userspace.  To do this we need to\npass that information from the merger code back to the main even handling\nroutine.  Currently that information is unused, but it will be.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "6e5f77b32e9097a8a68a8d453799676cacf70cad",
      "tree": "2a0211ecd5d79648e74fdf9f851a0669c5e4cc8a",
      "parents": [
        "cb2d429faf2cae62d3c51e28099a181d5fe8c244"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:34 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:59:01 2010 -0400"
      },
      "message": "fsnotify: intoduce a notification merge argument\n\nEach group can define their own notification (and secondary_q) merge\nfunction.  Inotify does tail drop, fanotify does matching and drop which\ncan actually allocate a completely new event.  But for fanotify to properly\ndeal with permissions events it needs to know the new event which was\nultimately added to the notification queue.  This patch just implements a\nvoid ** argument which is passed to the merge function.  fanotify can use\nthis field to pass the new event back to higher layers.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nfor fanotify to properly deal with permissions events\n"
    },
    {
      "commit": "cb2d429faf2cae62d3c51e28099a181d5fe8c244",
      "tree": "401bc8d85e7228f868775269e6d97c3150f9a3a7",
      "parents": [
        "4d92604cc90aa18bbbe0f6e23b7a9fdb612836d3"
      ],
      "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: add group priorities\n\nThis introduces an ordering to fsnotify groups.  With purely asynchronous\nnotification based \"things\" implementing fsnotify (inotify, dnotify) ordering\nisn\u0027t particularly important.  But if people want to use fsnotify for the\nbasis of sycronous notification or blocking notification ordering becomes\nimportant.\n\neg. A Hierarchical Storage Management listener would need to get its event\nbefore an AV scanner could get its event (since the HSM would need to\nbring the data in for the AV scanner to scan.)  Typically asynchronous notification\nwould want to run after the AV scanner made any relevant access decisions\nso as to not send notification about an event that was denied.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "4d92604cc90aa18bbbe0f6e23b7a9fdb612836d3",
      "tree": "c04b26fb38a8524fa5e204cb9e40870afa9823f9",
      "parents": [
        "c9778a98e7440fb73e0d27b8155a688663a0d493"
      ],
      "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:00 2010 -0400"
      },
      "message": "fanotify: clear all fanotify marks\n\nfanotify listeners may want to clear all marks.  They may want to do this\nto destroy all of their inode marks which have nothing but ignores.\nRealistically this is useful for av vendors who update policy and want to\nclear all of their cached allows.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "c9778a98e7440fb73e0d27b8155a688663a0d493",
      "tree": "838acd5f9438661015c32211d487ef618807a798",
      "parents": [
        "c908370fc1ac27fd7e1fc0f34c693047b26564ce"
      ],
      "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:59:00 2010 -0400"
      },
      "message": "fanotify: allow ignored_masks to survive modify\n\nSome users may want to truely ignore an inode even if it has been modified.\nSay you are wanting a mount which contains a log file and you really don\u0027t\nwant any notification about that file.  This patch allows the listener to\ndo that.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "b9e4e3bd0495fea9e8f8e712889c9cd8ffa43c94",
      "tree": "914a16f5098cf0ee3e01e6d47e6c7c9bf3613899",
      "parents": [
        "32a4df13b88afef2a7d869bb7586a7beba90961f"
      ],
      "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:59:00 2010 -0400"
      },
      "message": "fanotify: allow users to set an ignored_mask\n\nChange the sys_fanotify_mark() system call so users can set ignored_masks\non inodes.  Remember, if a user new sets a real mask, and only sets ignored\nmasks, the ignore will never be pinned in memory.  Thus ignored_masks can\nbe lost under memory pressure and the user may again get events they\npreviously thought were ignored.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "32a4df13b88afef2a7d869bb7586a7beba90961f",
      "tree": "851f113874bd627725f2596750bb6437d9b228f1",
      "parents": [
        "33af5e32e0bb73c704b5e156f4411cdb53e6cc59"
      ],
      "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:59:00 2010 -0400"
      },
      "message": "fanotify: ignored_mask to ignore events\n\nWhen fanotify receives an event it will check event-\u003emask \u0026 ~ignored_mask.\nIf no bits are left the event will not be sent.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\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": "33d3dfff451a2ab6fe2f6aaabed9b24e91aad109",
      "tree": "a947ac296cdd30035ef1901fcd99f87756479f07",
      "parents": [
        "88380fe66e0ac22529f5426ab27d67da00ed2628"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:29 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:59 2010 -0400"
      },
      "message": "fanotify: remove outgoing function checks in fanotify.h\n\nA number of validity checks on outgoing data are done in static inlines but\nare only used in one place.  Instead just do them where they are used for\nreadability.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "88380fe66e0ac22529f5426ab27d67da00ed2628",
      "tree": "2585cd0b8407263628696476be7aa4f5b7d24a1b",
      "parents": [
        "f3640192c0a177506ec08ab07ed3178b912574da"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:29 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:59 2010 -0400"
      },
      "message": "fanotify: remove fanotify.h declarations\n\nfanotify_mark_validate functions are all needlessly declared in headers as\nstatic inlines.  Instead just do the checks where they are needed for code\nreadability.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "f3640192c0a177506ec08ab07ed3178b912574da",
      "tree": "cbea6c5163a02b154b7077238c3e056e79bfe668",
      "parents": [
        "eac8e9e80ccbd30801b7b76a2ee4c6c5a681e53c"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:29 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:59 2010 -0400"
      },
      "message": "fanotify: split fanotify_remove_mark\n\nsplit fanotify_remove_mark into fanotify_remove_inode_mark and\nfanotify_remove_vfsmount_mark.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "eac8e9e80ccbd30801b7b76a2ee4c6c5a681e53c",
      "tree": "c88fd90edfcf388d03d369c141683c4086b819dc",
      "parents": [
        "0ff21db9fcc39042b814dad8a4b7508710a75235"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:29 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:59 2010 -0400"
      },
      "message": "fanotify: rename FAN_MARK_ON_VFSMOUNT to FAN_MARK_MOUNT\n\nthe term \u0027vfsmount\u0027 isn\u0027t sensicle to userspace.  instead call is \u0027mount.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "0ff21db9fcc39042b814dad8a4b7508710a75235",
      "tree": "a650b240f64893f86626b8b4a4b694446190aa3a",
      "parents": [
        "90dd201d1ab064512078a77762a793e0bf5f3040"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:29 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:59 2010 -0400"
      },
      "message": "fanotify: hooks the fanotify_mark syscall to the vfsmount code\n\nCreate a new fanotify_mark flag which indicates we should attach the mark\nto the vfsmount holding the object referenced by dfd and pathname rather\nthan the inode itself.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "90dd201d1ab064512078a77762a793e0bf5f3040",
      "tree": "23da2eabf9d2b5182ef831bf043189b5a1c1b371",
      "parents": [
        "52202dfbd9107787dc68a2019cc7be4e79f52e5c"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:28 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:58 2010 -0400"
      },
      "message": "fanotify: remove fanotify_add_mark\n\nfanotify_add_mark now does nothing useful anymore, drop it.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "52202dfbd9107787dc68a2019cc7be4e79f52e5c",
      "tree": "58643c1d6b9d7cb3f1b5648396cd8aabd8ee5ef8",
      "parents": [
        "912ee3946c5e57de0d05baf3b60b65ce6bf3ff96"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:28 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:58 2010 -0400"
      },
      "message": "fanotify: do not return pointer from fanotify_add_*_mark\n\nNo need to return the mark from fanotify_add_*_mark to fanotify_add_mark\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "912ee3946c5e57de0d05baf3b60b65ce6bf3ff96",
      "tree": "e6b9c6f4ab5f513e088159a2aa759e3f225559e7",
      "parents": [
        "088b09b0ac7a866a35962eeaea5d5607bd1840b7"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:28 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:58 2010 -0400"
      },
      "message": "fanotify: do not call fanotify_update_object_mask in fanotify_add_mark\n\nRecalculate masks in fanotify_add_mark, don\u0027t use\nfanotify_update_object_mask.  This gets us one step closers to readable\ncode.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "088b09b0ac7a866a35962eeaea5d5607bd1840b7",
      "tree": "9028cacd5ef98f34abeaa8fb68289745e0aaba20",
      "parents": [
        "c6223f464927cab9f4b10169b78c51d84228faf8"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:28 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:58 2010 -0400"
      },
      "message": "fanotify: do not call fanotify_update_object_mask in fanotify_remove_mark\n\nRecalculate masks in fanotify_remove_mark, don\u0027t use\nfanotify_update_object_mask.  This gets us one step closers to readable\ncode.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "c6223f464927cab9f4b10169b78c51d84228faf8",
      "tree": "464c653708f753a4969658929eaf223d938cd30b",
      "parents": [
        "88826276dcaf4cef9cc7c2695ff15c6d20d4a74d"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:28 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:58 2010 -0400"
      },
      "message": "fanotify: remove fanotify_update_mark\n\nfanotify_update_mark() doesn\u0027t do much useful;  remove it.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "88826276dcaf4cef9cc7c2695ff15c6d20d4a74d",
      "tree": "bb90774f639a1b69546e8f0504a8e9c76582de94",
      "parents": [
        "1c529063a3e4c15eaae28db31326a7aaab7091b5"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:28 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:57 2010 -0400"
      },
      "message": "fanotify: infrastructure to add an remove marks on vfsmounts\n\ninfrastructure work to add and remove marks on vfsmounts.  This should get\nevery set up except wiring the functions to the syscalls.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "1c529063a3e4c15eaae28db31326a7aaab7091b5",
      "tree": "100a27418becd6c23eeb1b7c4426fea006d6bfd6",
      "parents": [
        "ca9c726eea013394d1e846331b117effb21ead83"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:28 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:57 2010 -0400"
      },
      "message": "fanotify: should_send_event needs to handle vfsmounts\n\ncurrently should_send_event in fanotify only cares about marks on inodes.\nThis patch extends that interface to indicate that it cares about events\nthat happened on vfsmounts.\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": "32c3263221bd63316815286dccacdc7abfd7f3c4",
      "tree": "9dad12d5b966cf42d7506e10fb2e3c8d955415d3",
      "parents": [
        "22aa425dec9e47051624714ae283eb2b6a473013"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:27 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:56 2010 -0400"
      },
      "message": "fanotify: Add pids to events\n\nPass the process identifiers of the triggering processes to fanotify\nlisteners: this information is useful for event filtering and logging.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "22aa425dec9e47051624714ae283eb2b6a473013",
      "tree": "6412e7241a30f3ce151ff29314d3a39190b8dae7",
      "parents": [
        "9bbfc964b89009d0cadcec7027afc92ee742e95e"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@suse.de",
        "time": "Thu Dec 17 21:24:26 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:56 2010 -0400"
      },
      "message": "fanotify: create_fd cleanup\n\nCode cleanup which does the fd creation work seperately from the userspace\nmetadata creation.  It fits better with the other code.\n\nSigned-off-by: Andreas Gruenbacher \u003cagruen@suse.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "9bbfc964b89009d0cadcec7027afc92ee742e95e",
      "tree": "9dceb71cd3d744ec2c295edbb2542adf9b8d803f",
      "parents": [
        "ef601a9cfd21fe9ce57e0ee3f4a31552ffb96366"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Thu Dec 17 21:24:26 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:56 2010 -0400"
      },
      "message": "fanotify: CONFIG_HAVE_SYSCALL_WRAPPERS for sys_fanotify_mark\n\nPlease note that you need the patch below in addition, otherwise the\nsyscall wrapper stuff won\u0027t work on those 32 bit architectures which enable\nthe wrappers.\n\nWhen enabled the syscall wrapper defines always take long parameters and then\ncast them to whatever is needed. This approach doesn\u0027t work for the 32 bit\ncase where the original syscall takes a long long parameter, since we would\nlose the upper 32 bits.\nSo syscalls with 64 bit arguments are special cases wrt to syscall wrappers\nand enp up in the ugliness below (see also sys_fallocate). In addition these\nspecial cased syscall wrappers have the drawback that ftrace syscall tracing\ndoesn\u0027t work on them, since they don\u0027t get defined by using the usual macros.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "ef601a9cfd21fe9ce57e0ee3f4a31552ffb96366",
      "tree": "6b268bba6e0bb4ef09f634519a13233c10cb2a5a",
      "parents": [
        "a1014f102322398e67524b68b3300acf384e6c1f"
      ],
      "author": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Thu Dec 17 21:24:26 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:56 2010 -0400"
      },
      "message": "fanotify: select ANON_INODES.\n\nfanotify references anon_inode_getfd(), which is only available with\nANON_INODES enabled. Presently this bails out with the following:\n\n  LD      vmlinux\nfs/built-in.o: In function `sys_fanotify_init\u0027:\n(.text+0x26d1c): undefined reference to `anon_inode_getfd\u0027\nmake: *** [vmlinux] Error 1\n\nwhich is trivially corrected by adding an ANON_INODES select.\n\nSigned-off-by: Paul Mundt \u003clethal@linux-sh.org\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "a1014f102322398e67524b68b3300acf384e6c1f",
      "tree": "2d9d82e6a3d84bae796e4aedfd8be3409be6a4c3",
      "parents": [
        "2a3edf86040a7e15684525a2aadc29f532c51325"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:26 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:56 2010 -0400"
      },
      "message": "fanotify: send events using read\n\nSend events to userspace by reading the file descriptor from fanotify_init().\nOne will get blocks of data which look like:\n\nstruct fanotify_event_metadata {\n\t__u32 event_len;\n\t__u32 vers;\n\t__s32 fd;\n\t__u64 mask;\n\t__s64 pid;\n\t__u64 cookie;\n} __attribute__ ((packed));\n\nSimple code to retrieve and deal with events is below\n\n\twhile ((len \u003d read(fan_fd, buf, sizeof(buf))) \u003e 0) {\n\t\tstruct fanotify_event_metadata *metadata;\n\n\t\tmetadata \u003d (void *)buf;\n\t\twhile(FAN_EVENT_OK(metadata, len)) {\n\t\t\t[PROCESS HERE!!]\n\t\t\tif (metadata-\u003efd \u003e\u003d 0 \u0026\u0026 close(metadata-\u003efd) !\u003d 0)\n\t\t\t\tgoto fail;\n\t\t\tmetadata \u003d FAN_EVENT_NEXT(metadata, len);\n\t\t}\n\t}\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "2a3edf86040a7e15684525a2aadc29f532c51325",
      "tree": "cf0a5436139125d054fe46b75d5388c914b22c21",
      "parents": [
        "bbaa4168b2d2d8cc674e6d35806e8426aef464b8"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:26 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:56 2010 -0400"
      },
      "message": "fanotify: fanotify_mark syscall implementation\n\nNAME\n\tfanotify_mark - add, remove, or modify an fanotify mark on a\nfilesystem object\n\nSYNOPSIS\n\tint fanotify_mark(int fanotify_fd, unsigned int flags, u64 mask,\n\t\t\t  int dfd, const char *pathname)\n\nDESCRIPTION\n\tfanotify_mark() is used to add remove or modify a mark on a filesystem\n\tobject.  Marks are used to indicate that the fanotify group is\n\tinterested in events which occur on that object.  At this point in\n\ttime marks may only be added to files and directories.\n\n\tfanotify_fd must be a file descriptor returned by fanotify_init()\n\n\tThe flags field must contain exactly one of the following:\n\n\tFAN_MARK_ADD - or the bits in mask and ignored mask into the mark\n\tFAN_MARK_REMOVE - bitwise remove the bits in mask and ignored mark\n\t\tfrom the mark\n\n\tThe following values can be OR\u0027d into the flags field:\n\n\tFAN_MARK_DONT_FOLLOW - same meaning as O_NOFOLLOW as described in open(2)\n\tFAN_MARK_ONLYDIR - same meaning as O_DIRECTORY as described in open(2)\n\n\tdfd may be any of the following:\n\tAT_FDCWD: the object will be lookup up based on pathname similar\n\t\tto open(2)\n\n\tfile descriptor of a directory: if pathname is not NULL the\n\t\tobject to modify will be lookup up similar to openat(2)\n\n\tfile descriptor of the final object: if pathname is NULL the\n\t\tobject to modify will be the object referenced by dfd\n\n\tThe mask is the bitwise OR of the set of events of interest such as:\n\tFAN_ACCESS\t\t- object was accessed (read)\n\tFAN_MODIFY\t\t- object was modified (write)\n\tFAN_CLOSE_WRITE\t\t- object was writable and was closed\n\tFAN_CLOSE_NOWRITE\t- object was read only and was closed\n\tFAN_OPEN\t\t- object was opened\n\tFAN_EVENT_ON_CHILD\t- interested in objected that happen to\n\t\t\t\t  children.  Only relavent when the object\n\t\t\t\t  is a directory\n\tFAN_Q_OVERFLOW\t\t- event queue overflowed (not implemented)\n\nRETURN VALUE\n\tOn success, this system call returns 0. On error, -1 is\n\treturned, and errno is set to indicate the error.\n\nERRORS\n\tEINVAL An invalid value was specified in flags.\n\n\tEINVAL An invalid value was specified in mask.\n\n\tEINVAL An invalid value was specified in ignored_mask.\n\n\tEINVAL fanotify_fd is not a file descriptor as returned by\n\tfanotify_init()\n\n\tEBADF fanotify_fd is not a valid file descriptor\n\n\tEBADF dfd is not a valid file descriptor and path is NULL.\n\n\tENOTDIR dfd is not a directory and path is not NULL\n\n\tEACCESS no search permissions on some part of the path\n\n\tENENT file not found\n\n\tENOMEM Insufficient kernel memory is available.\n\nCONFORMING TO\n\tThese system calls are Linux-specific.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "bbaa4168b2d2d8cc674e6d35806e8426aef464b8",
      "tree": "de2a601befc44628fc19766a3081bf2e3b73da7a",
      "parents": [
        "52c923dd079df49f58016a9e56df184b132611d6"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:26 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:55 2010 -0400"
      },
      "message": "fanotify: sys_fanotify_mark declartion\n\nThis patch simply declares the new sys_fanotify_mark syscall\n\nint fanotify_mark(int fanotify_fd, unsigned int flags, u64_mask,\n\t\t  int dfd const char *pathname)\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "52c923dd079df49f58016a9e56df184b132611d6",
      "tree": "29263174337bd3c2b99a7c9452e8e0708635432b",
      "parents": [
        "11637e4b7dc098e9a863f0a619d55ebc60f5949e"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:26 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:55 2010 -0400"
      },
      "message": "fanotify: fanotify_init syscall implementation\n\nNAME\n\tfanotify_init - initialize an fanotify group\n\nSYNOPSIS\n\tint fanotify_init(unsigned int flags, unsigned int event_f_flags, int priority);\n\nDESCRIPTION\n\tfanotify_init() initializes a new fanotify instance and returns a file\n\tdescriptor associated with the new fanotify event queue.\n\n\tThe following values can be OR\u0027d into the flags field:\n\n\tFAN_NONBLOCK Set the O_NONBLOCK file status flag on the new open file description.\n\t\tUsing this flag saves extra calls to fcntl(2) to achieve the same\n\t\tresult.\n\n\tFAN_CLOEXEC Set the close-on-exec (FD_CLOEXEC) flag on the new file descriptor.\n\t\tSee the description of the O_CLOEXEC flag in open(2) for reasons why\n\t\tthis may be useful.\n\n\tThe event_f_flags argument is unused and must be set to 0\n\n\tThe priority argument is unused and must be set to 0\n\nRETURN VALUE\n\tOn success, this system call return a new file descriptor. On error, -1 is\n\treturned, and errno is set to indicate the error.\n\nERRORS\n\tEINVAL An invalid value was specified in flags.\n\n\tEINVAL A non-zero valid was passed in event_f_flags or in priority\n\n\tENFILE The system limit on the total number of file descriptors has been reached.\n\n\tENOMEM Insufficient kernel memory is available.\n\nCONFORMING TO\n\tThese system calls are Linux-specific.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "11637e4b7dc098e9a863f0a619d55ebc60f5949e",
      "tree": "a32682575f35dfb2bf5dc0012e488b939e56d388",
      "parents": [
        "9dced01a0939f3e952eca8c21427ceec1f473dcf"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:25 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:55 2010 -0400"
      },
      "message": "fanotify: fanotify_init syscall declaration\n\nThis patch defines a new syscall fanotify_init() of the form:\n\nint sys_fanotify_init(unsigned int flags, unsigned int event_f_flags,\n\t\t      unsigned int priority)\n\nThis syscall is used to create and fanotify group.  This is very similar to\nthe inotify_init() syscall.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "9dced01a0939f3e952eca8c21427ceec1f473dcf",
      "tree": "10eab41808fd16d7db9b6737bccf30fb53eb4faa",
      "parents": [
        "a12a7dd3284f5644326af1ea53b35030f205dd29"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:25 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:55 2010 -0400"
      },
      "message": "fanotify: do not clone on merge unless needed\n\nCurrently if 2 events are going to be merged on the notication queue with\ndifferent masks the second event will be cloned and will replace the first\nevent.  However if this notification queue is the only place referencing\nthe event in question there is no reason not to just update the event in\nplace.  We can tell this if the event-\u003erefcnt \u003d\u003d 1.  Since we hold a\nreference for each queue this event is on we know that when refcnt \u003d\u003d 1\nthis is the only queue.  The other concern is that it might be about to be\nadded to a new queue, but this can\u0027t be the case since fsnotify holds a\nreference on the event until it is finished adding it to queues.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "a12a7dd3284f5644326af1ea53b35030f205dd29",
      "tree": "a43423deb6e7111c6c39d65a6ac74152cd9e0b31",
      "parents": [
        "767cd46c332d1360cdbe46ef18d80c3ade06fdc1"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Dec 17 21:24:25 2009 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Jul 28 09:58:55 2010 -0400"
      },
      "message": "fanotify: merge notification events with different masks\n\nInstead of just merging fanotify events if they are exactly the same, merge\nnotification events with different masks.  To do this we have to clone the\nold event, update the mask in the new event with the new merged mask, and\nput the new event in place of the old event.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "767cd46c332d1360cdbe46ef18d80c3ade06fdc1",
      "tree": "e3868f28587ca44efd10b30aa4230ff54d09f567",
      "parents": [
        "ff0b16a9850e8a240ad59e10b0a1291a8fcf7cbc"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "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": "fanotify:drop notification if they exist in the outgoing queue\n\nfanotify listeners get an open file descriptor to the object in question so\nthe ordering of operations is not as important as in other notification\nsystems.  inotify will drop events if the last event in the event FIFO is\nthe same as the current event.  This patch will drop fanotify events if\nthey are the same as another event anywhere in the event FIFO.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "ff0b16a9850e8a240ad59e10b0a1291a8fcf7cbc",
      "tree": "fe6fad578cfb2b8528828d4f77e5494542a1fb34",
      "parents": [
        "12ed2e36c98aec6c41559222e311f4aa15d254b6"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "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": "fanotify: fscking all notification system\n\nfanotify is a novel file notification system which bases notification on\ngiving userspace both an event type (open, close, read, write) and an open\nfile descriptor to the object in question.  This should address a number of\nraces and problems with other notification systems like inotify and dnotify\nand should allow the future implementation of blocking or access controlled\nnotification.  These are useful for on access scanners or hierachical storage\nmanagement schemes.\n\nThis patch just implements the basics of the fsnotify functions.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    }
  ]
}
