)]}'
{
  "log": [
    {
      "commit": "62731fa0c893515dc6cbc3e0a2879a92793c735f",
      "tree": "91de7e43e38a105dfe2e5cc085cac38de149ebea",
      "parents": [
        "fdbf3ceeb659f0b3c0e8dd79b331b7ac05910f1e"
      ],
      "author": {
        "name": "Alexey Zaytsev",
        "email": "alexey.zaytsev@gmail.com",
        "time": "Mon Nov 22 00:33:03 2010 +0000"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Wed Dec 15 13:56:33 2010 -0500"
      },
      "message": "fanotify: split version into version and metadata_len\n\nTo implement per event type optional headers we are interested in\nknowing how long the metadata structure is.  This patch slits the __u32\nversion field into a __u8 version and a __u16 metadata_len field (with\n__u8 left over).  This should allow for backwards compat ABI.\n\nSigned-off-by: Alexey Zaytsev \u003calexey.zaytsev@gmail.com\u003e\n[rewrote descrtion and changed object sizes and ordering - eparis]\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "e9a3854fd4ff3907e6c200a3980e19365ee695e9",
      "tree": "277f689ce362ad24bb1b5a9423567358a89c2cfd",
      "parents": [
        "26379198937fcc9bbe7be76be695d06df8334eaa"
      ],
      "author": {
        "name": "Lino Sanfilippo",
        "email": "LinoSanfilippo@gmx.de",
        "time": "Wed Nov 24 18:22:09 2010 +0100"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 16:14:23 2010 -0500"
      },
      "message": "fanotify: Introduce FAN_NOFD\n\nFAN_NOFD is used in fanotify events that do not provide an open file\ndescriptor (like the overflow_event).\n\nSigned-off-by: Lino Sanfilippo \u003cLinoSanfilippo@gmx.de\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "88d60c32765716289abeb362c44adf6c35c6824c",
      "tree": "87c7f9296cfee7ba16145b70ebc7e11106f72e42",
      "parents": [
        "ecf6f5e7d68471b08603f7c20143ac236602364f"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Mon Nov 08 18:19:22 2010 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Dec 07 16:14:20 2010 -0500"
      },
      "message": "fanotify: remove packed from access response message\n\nSince fanotify has decided to be careful about alignment and packing\nrather than rely on __attribute__((packed)) for multiarch support.\nSince this attribute isn\u0027t doing anything on fanotify_response we just\ndrop it.  This does not break API/ABI.\n\nSuggested-by: Tvrtko Ursulin \u003ctvrtko.ursulin@sophos.com\u003e\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "50e4a98914de13c6f38f50fd1afa06e2c18b3cf7",
      "tree": "dd32623120d20530c05ec0e2d8b63037a4b4b994",
      "parents": [
        "192ca4d1941228e69c1fbeebab317725407e6e65"
      ],
      "author": {
        "name": "Stefan Hajnoczi",
        "email": "stefanha@linux.vnet.ibm.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: Fix FAN_CLOSE comments\n\nThe comments for FAN_CLOSE_WRITE and FAN_CLOSE_NOWRITE do not match\nFS_CLOSE_WRITE and FS_CLOSE_NOWRITE, respectively.  WRITE is for\nwritable files while NOWRITE is for non-writable files.\n\nSigned-off-by: Stefan Hajnoczi \u003cstefanha@linux.vnet.ibm.com\u003e\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": "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": "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": "bbf2aba50f6ed7c8dd53623fa1437b539928ac39",
      "tree": "c9ab9560cf9ad139ac3e70c57ce4a450574616c0",
      "parents": [
        "52420392c81c8712f555e6bcd116d8bd214ce43a"
      ],
      "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 flush all marks\n\nfanotify is supposed to be able to flush all marks.  This is mostly useful\nfor the AV community to flush all cached decisions on a security policy\nchange.  This functionality has existed in the kernel but wasn\u0027t correctly\nexposed to userspace.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "2868201965419b9011f3f07fd80e765181343cb1",
      "tree": "73cf2f58121c05367a3fc79380b0e28a127fe9fe",
      "parents": [
        "4231a23530a30e86eb32fbe869bbef1b3e54d5aa"
      ],
      "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: use __aligned_u64 in fanotify userspace metadata\n\nCurrently the userspace struct exposed by fanotify uses\n__attribute__((packed)) to make sure that alignment works on multiarch\nplatforms.  Since this causes a severe performance penalty on some\nplatforms we are going to switch to using explicit alignment notation on\nthe 64bit values so we don\u0027t have to use \u0027packed\u0027\n\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": "0fb85621df4f9f7c663c6c77c302e821a832c95e",
      "tree": "b5bcb8e79ad6197ba161dbf9687755bb281b83aa",
      "parents": [
        "ff8d6e983185ce19fa92bb836eb52b589957be65"
      ],
      "author": {
        "name": "Tvrtko Ursulin",
        "email": "tvrtko.ursulin@sophos.com",
        "time": "Fri Aug 20 10:02:15 2010 +0100"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Aug 27 19:54:09 2010 -0400"
      },
      "message": "fanotify: resize pid and reorder structure\n\nresize pid and reorder the fanotify_event_metadata so it is naturally\naligned and we can work towards dropping the packed attributed\n\nSigned-off-by: Tvrtko Ursulin \u003ctvrtko.ursulin@sophos.com\u003e\nCc: Andreas Dilger \u003cadilger@dilger.ca\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": "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": "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": "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": "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": "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": "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": "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": "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"
    }
  ]
}
