)]}'
{
  "commit": "bd9b51e79cb0b8bc00a7e0076a4a8963ca4a797c",
  "tree": "bee3cc60bfbe1d7f837826bf495c0cf92747404b",
  "parents": [
    "1f55a6ec940fb45e3edaa52b6e9fc40cf8e18dcb"
  ],
  "author": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Tue Nov 18 23:38:21 2014 -0500"
  },
  "committer": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Wed Dec 10 21:32:15 2014 -0500"
  },
  "message": "make default -\u003ei_fop have -\u003eopen() fail with ENXIO\n\nAs it is, default -\u003ei_fop has NULL -\u003eopen() (along with all other methods).\nThe only case where it matters is reopening (via procfs symlink) a file that\ndidn\u0027t get its -\u003ef_op from -\u003ei_fop - anything else will have -\u003ei_fop assigned\nto something sane (default would fail on read/write/ioctl/etc.).\n\n\tUnfortunately, such case exists - alloc_file() users, especially\nanon_get_file() ones.  There we have tons of opened files of very different\nkinds sharing the same inode.  As the result, attempt to reopen those via\nprocfs succeeds and you get a descriptor you can\u0027t do anything with.\n\n\tMoreover, in case of sockets we set -\u003ei_fop that will only be used\non such reopen attempts - and put a failing -\u003eopen() into it to make sure\nthose do not succeed.\n\n\tIt would be simpler to put such -\u003eopen() into default -\u003ei_fop and leave\nit unchanged both for anon inode (as we do anyway) and for socket ones.  Result:\n\t* everything going through do_dentry_open() works as it used to\n\t* sock_no_open() kludge is gone\n\t* attempts to reopen anon-inode files fail as they really ought to\n\t* ditto for aio_private_file()\n\t* ditto for perfmon - this one actually tried to imitate sock_no_open()\ntrick, but failed to set -\u003ei_fop, so in the current tree reopens succeed and\nyield completely useless descriptor.  Intent clearly had been to fail with\n-ENXIO on such reopens; now it actually does.\n\t* everything else that used alloc_file() keeps working - it has -\u003ei_fop\nset for its inodes anyway\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5845ffea67c307c047aa49b1548bbf18eab395f3",
      "old_mode": 33188,
      "old_path": "arch/ia64/kernel/perfmon.c",
      "new_id": "ac4528f5acd1bb6d9a1cef3c20938df56784ac2b",
      "new_mode": 33188,
      "new_path": "arch/ia64/kernel/perfmon.c"
    },
    {
      "type": "modify",
      "old_id": "26753ba7b6d656473f17158a1c04064fcb6bffdd",
      "old_mode": 33188,
      "old_path": "fs/inode.c",
      "new_id": "5b83ef7fc8d527f385e275425c1e40aac25cde07",
      "new_mode": 33188,
      "new_path": "fs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "2beddc284bc205cf8d6bae580d21c9f6da0bb012",
      "old_mode": 33188,
      "old_path": "include/linux/fs.h",
      "new_id": "b37beaf7a3a563febb68a17800a3073616eeccdd",
      "new_mode": 33188,
      "new_path": "include/linux/fs.h"
    },
    {
      "type": "modify",
      "old_id": "7ed1970074b07bfcf0803f468f62efba7a9018ac",
      "old_mode": 33188,
      "old_path": "net/Makefile",
      "new_id": "1f6c3e4b36d5225f2f3d88ed4cbd1299702eb79f",
      "new_mode": 33188,
      "new_path": "net/Makefile"
    },
    {
      "type": "delete",
      "old_id": "b1a73fda9c12ed4225f13b3b9ce4051950510025",
      "old_mode": 33188,
      "old_path": "net/nonet.c",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "fe20c319a0bb37dd475b7a8a32dccd57ac4e15d9",
      "old_mode": 33188,
      "old_path": "net/socket.c",
      "new_id": "850f6c3833421cc9cd5f478b81694ec3705cf0c7",
      "new_mode": 33188,
      "new_path": "net/socket.c"
    }
  ]
}
