)]}'
{
  "commit": "ba0a6c9f6fceed11c6a99e8326f0477fe383e6b5",
  "tree": "5c9967735f19b7b3332de90cae2cdd6c4457d30c",
  "parents": [
    "06f1631a1671bce2d59d58cb1debdf23e1803ebf"
  ],
  "author": {
    "name": "Peter Zijlstra",
    "email": "a.p.zijlstra@chello.nl",
    "time": "Wed Sep 23 15:57:03 2009 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Thu Sep 24 07:21:01 2009 -0700"
  },
  "message": "fcntl: add F_[SG]ETOWN_EX\n\nIn order to direct the SIGIO signal to a particular thread of a\nmulti-threaded application we cannot, like suggested by the manpage, put a\nTID into the regular fcntl(F_SETOWN) call.  It will still be send to the\nwhole process of which that thread is part.\n\nSince people do want to properly direct SIGIO we introduce F_SETOWN_EX.\n\nThe need to direct SIGIO comes from self-monitoring profiling such as with\nperf-counters.  Perf-counters uses SIGIO to notify that new sample data is\navailable.  If the signal is delivered to the same task that generated the\nnew sample it can augment that data by inspecting the task\u0027s user-space\nstate right after it returns from the kernel.  This is esp.  convenient\nfor interpreted or virtual machine driven environments.\n\nBoth F_SETOWN_EX and F_GETOWN_EX take a pointer to a struct f_owner_ex\nas argument:\n\nstruct f_owner_ex {\n\tint   type;\n\tpid_t pid;\n};\n\nWhere type is one of F_OWNER_TID, F_OWNER_PID or F_OWNER_GID.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nTested-by: stephane eranian \u003ceranian@googlemail.com\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "25da0017ec87fb2dd675257d7d16a68cc5f89aff",
      "old_mode": 33188,
      "old_path": "arch/alpha/include/asm/fcntl.h",
      "new_id": "e42823e954aa30a6693e3799749927b111b0a133",
      "new_mode": 33188,
      "new_path": "arch/alpha/include/asm/fcntl.h"
    },
    {
      "type": "modify",
      "old_id": "1e1c824764ee1f0202c9012090e06f532eb75e42",
      "old_mode": 33188,
      "old_path": "arch/parisc/include/asm/fcntl.h",
      "new_id": "5f39d5597cedea76f43c3470bcb9998c9dd07b12",
      "new_mode": 33188,
      "new_path": "arch/parisc/include/asm/fcntl.h"
    },
    {
      "type": "modify",
      "old_id": "50a9889932625503f5a91b1cc0a77b6debb23e43",
      "old_mode": 33188,
      "old_path": "fs/fcntl.c",
      "new_id": "fc089f2f7f56ccbbd5662eb63e2ec9832d768004",
      "new_mode": 33188,
      "new_path": "fs/fcntl.c"
    },
    {
      "type": "modify",
      "old_id": "4d3e48373e74eee4ce2881bc56442c7ef59409c3",
      "old_mode": 33188,
      "old_path": "include/asm-generic/fcntl.h",
      "new_id": "0c3dd8603927ac2d20394a8e531d82eb963dfc34",
      "new_mode": 33188,
      "new_path": "include/asm-generic/fcntl.h"
    }
  ]
}
