)]}'
{
  "commit": "d18e9008c377dc6a6d2166a6840bf3a23a5867fd",
  "tree": "6bbb29aea7e931b603bd4cea3cc74a0eda7b6379",
  "parents": [
    "54ef487241e863a6046536ac5b1fcd5d7cde86e5"
  ],
  "author": {
    "name": "Miklos Szeredi",
    "email": "mszeredi@suse.cz",
    "time": "Tue Jun 05 15:10:17 2012 +0200"
  },
  "committer": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Sat Jul 14 16:33:04 2012 +0400"
  },
  "message": "vfs: add i_op-\u003eatomic_open()\n\nAdd a new inode operation which is called on the last component of an open.\nUsing this the filesystem can look up, possibly create and open the file in one\natomic operation.  If it cannot perform this (e.g. the file type turned out to\nbe wrong) it may signal this by returning NULL instead of an open struct file\npointer.\n\ni_op-\u003eatomic_open() is only called if the last component is negative or needs\nlookup.  Handling cached positive dentries here doesn\u0027t add much value: these\ncan be opened using f_op-\u003eopen().  If the cached file turns out to be invalid,\nthe open can be retried, this time using -\u003eatomic_open() with a fresh dentry.\n\nFor now leave the old way of using open intents in lookup and revalidate in\nplace.  This will be removed once all the users are converted.\n\nDavid Howells noticed that if -\u003eatomic_open() opens the file but does not create\nit, handle_truncate() will be called on it even if it is not a regular file.\nFix this by checking the file type in this case too.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8e2da1e06e3b2371eb82ef07105e63ad97d224b6",
      "old_mode": 33188,
      "old_path": "Documentation/filesystems/Locking",
      "new_id": "8157488c34638bba9d3cacfb001cda74855ae52e",
      "new_mode": 33188,
      "new_path": "Documentation/filesystems/Locking"
    },
    {
      "type": "modify",
      "old_id": "efd23f4817044ac9d55932bd9476d309a02918dc",
      "old_mode": 33188,
      "old_path": "Documentation/filesystems/vfs.txt",
      "new_id": "beb6e691f70a7cc95625590fcc8834767bc52f13",
      "new_mode": 33188,
      "new_path": "Documentation/filesystems/vfs.txt"
    },
    {
      "type": "modify",
      "old_id": "d2a23ff61b40225a1531f937ff16b3ac5da83c82",
      "old_mode": 33188,
      "old_path": "fs/internal.h",
      "new_id": "70067775df2e4e23ca7c274bef82b454ee92110b",
      "new_mode": 33188,
      "new_path": "fs/internal.h"
    },
    {
      "type": "modify",
      "old_id": "ccb0eb17f528e0b40d09a6c125347937a39dd33a",
      "old_mode": 33188,
      "old_path": "fs/namei.c",
      "new_id": "9e11ae83bff6b5259600b156608d27ec9253c4ad",
      "new_mode": 33188,
      "new_path": "fs/namei.c"
    },
    {
      "type": "modify",
      "old_id": "1540632d8387fe98a51d0193201346acb18ae70e",
      "old_mode": 33188,
      "old_path": "fs/open.c",
      "new_id": "13bece4f36a4f50af624778a7e57a85c8f20e943",
      "new_mode": 33188,
      "new_path": "fs/open.c"
    },
    {
      "type": "modify",
      "old_id": "f06db6bd5a74ec09ae63eba03774cde395975a72",
      "old_mode": 33188,
      "old_path": "include/linux/fs.h",
      "new_id": "0314635cf833ab3e3e6a2a16bda0504716a9f783",
      "new_mode": 33188,
      "new_path": "include/linux/fs.h"
    }
  ]
}
