)]}'
{
  "commit": "d3fec424b23c47686efcf3f2004c3f1c1cee4d9c",
  "tree": "ffad3cf369d35e85fca9a340347eea09caa53ff3",
  "parents": [
    "b50731732f926d6c49fd0724616a7344c31cd5cf"
  ],
  "author": {
    "name": "Jan Harkes",
    "email": "jaharkes@cs.cmu.edu",
    "time": "Sat Jul 21 04:37:26 2007 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@woody.linux-foundation.org",
    "time": "Sat Jul 21 17:49:14 2007 -0700"
  },
  "message": "coda: remove CODA_STORE/CODA_RELEASE upcalls\n\nThis is an variation on the patch sent by Christoph Hellwig which kills\nfile_count abuse by the Coda kernel module by moving the coda_flush\nfunctionality into coda_release.  However part of reason we were using the\ncoda_flush callback was to allow Coda to pass errors that occur during\nwriteback from the userspace cache manager back to close().\n\nAs Al Viro explained on linux-fsdevel, it is impossible to guarantee that\nsuch errors can in fact be returned back to the caller.  There are many\ncases where the last reference to a file is not released by the close\nsystem call and it is also impossible to pick some close as a \u0027last-close\u0027\nand delay it until all other references have been destroyed.\n\nThe CODA_STORE/CODA_RELEASE upcall combination is clearly a broken design,\nand it is better to remove it completely.\n\nSigned-off-by: Jan Harkes \u003cjaharkes@cs.cmu.edu\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Al Viro \u003cviro@ftp.linux.org.uk\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": "8e61236abf4a7e2eb650480628aa2ab9fa1cc46c",
      "old_mode": 33188,
      "old_path": "fs/coda/dir.c",
      "new_id": "f89ff083079ba5b8fd1595f233c3c9b949d472de",
      "new_mode": 33188,
      "new_path": "fs/coda/dir.c"
    },
    {
      "type": "modify",
      "old_id": "7594962604c21051bc1d48a154f701678f191144",
      "old_mode": 33188,
      "old_path": "fs/coda/file.c",
      "new_id": "29137ff3ca67c155ac2da3d9328258700369195e",
      "new_mode": 33188,
      "new_path": "fs/coda/file.c"
    },
    {
      "type": "modify",
      "old_id": "cd561d2e90b05723dfd611ae6604ca2a895695cf",
      "old_mode": 33188,
      "old_path": "fs/coda/upcall.c",
      "new_id": "cdb4c07a78700a93e34739a4aadddda96bfce8cc",
      "new_mode": 33188,
      "new_path": "fs/coda/upcall.c"
    },
    {
      "type": "modify",
      "old_id": "c4079b403e9e3e0a2c1d9f7fa9e0a5962caa14f6",
      "old_mode": 33188,
      "old_path": "include/linux/coda_linux.h",
      "new_id": "1c47a34aa79442f738bebf25f01756ddaceb586d",
      "new_mode": 33188,
      "new_path": "include/linux/coda_linux.h"
    },
    {
      "type": "modify",
      "old_id": "aa8f454b3b77095df06f7ffb383cd6d3a63cfda8",
      "old_mode": 33188,
      "old_path": "include/linux/coda_psdev.h",
      "new_id": "07ae8f846055a5b9004d30fec723ffd18b4d3bc0",
      "new_mode": 33188,
      "new_path": "include/linux/coda_psdev.h"
    }
  ]
}
