)]}'
{
  "commit": "b9ea25152e56365ce149b9a39637cd7a16eec556",
  "tree": "e8ab83d71a0bea5330d38e77e948170c0054d2a3",
  "parents": [
    "ca0984caa8235762dc4e22c1c47ae6719dcc4064"
  ],
  "author": {
    "name": "Konstantin Khlebnikov",
    "email": "khlebnikov@yandex-team.ru",
    "time": "Tue Apr 14 15:45:27 2015 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Tue Apr 14 16:49:01 2015 -0700"
  },
  "message": "page_writeback: clean up mess around cancel_dirty_page()\n\nThis patch replaces cancel_dirty_page() with a helper function\naccount_page_cleaned() which only updates counters.  It\u0027s called from\ntruncate_complete_page() and from try_to_free_buffers() (hack for ext3).\nPage is locked in both cases, page-lock protects against concurrent\ndirtiers: see commit 2d6d7f982846 (\"mm: protect set_page_dirty() from\nongoing truncation\").\n\nDelete_from_page_cache() shouldn\u0027t be called for dirty pages, they must\nbe handled by caller (either written or truncated).  This patch treats\nfinal dirty accounting fixup at the end of __delete_from_page_cache() as\na debug check and adds WARN_ON_ONCE() around it.  If something removes\ndirty pages without proper handling that might be a bug and unwritten\ndata might be lost.\n\nHugetlbfs has no dirty pages accounting, ClearPageDirty() is enough\nhere.\n\ncancel_dirty_page() in nfs_wb_page_cancel() is redundant.  This is\nhelper for nfs_invalidate_page() and it\u0027s called only in case complete\ninvalidation.\n\nThe mess was started in v2.6.20 after commits 46d2277c796f (\"Clean up\nand make try_to_free_buffers() not race with dirty pages\") and\n3e67c0987d75 (\"truncate: clear page dirtiness before running\ntry_to_free_buffers()\") first was reverted right in v2.6.20 in commit\necdfc9787fe5 (\"Resurrect \u0027try_to_free_buffers()\u0027 VM hackery\"), second in\nv2.6.25 commit a2b345642f53 (\"Fix dirty page accounting leak with ext3\ndata\u003djournal\").\n\nCustom fixes were introduced between these points.  NFS in v2.6.23, commit\n1b3b4a1a2deb (\"NFS: Fix a write request leak in nfs_invalidate_page()\").\nKludge in __delete_from_page_cache() in v2.6.24, commit 3a6927906f1b (\"Do\ndirty page accounting when removing a page from the page cache\").  Since\nv2.6.25 all of them are redundant.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@yandex-team.ru\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jan Kara \u003cjack@suse.cz\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": "a260e99a4447ee8b45e6c0f33c9ef18712c41220",
      "old_mode": 33188,
      "old_path": "drivers/staging/lustre/lustre/include/linux/lustre_patchless_compat.h",
      "new_id": "d72605864b0a66adecf278a21a3ae8efc9c9255c",
      "new_mode": 33188,
      "new_path": "drivers/staging/lustre/lustre/include/linux/lustre_patchless_compat.h"
    },
    {
      "type": "modify",
      "old_id": "20805db2c98774a8cbe3242d37c63f370149f1a9",
      "old_mode": 33188,
      "old_path": "fs/buffer.c",
      "new_id": "c7a5602d01eed200912d3a90ca4ac6780209cb6f",
      "new_mode": 33188,
      "new_path": "fs/buffer.c"
    },
    {
      "type": "modify",
      "old_id": "c274aca8e8dc231cb4473b964bc3315058910968",
      "old_mode": 33188,
      "old_path": "fs/hugetlbfs/inode.c",
      "new_id": "db76cec3ce21268bbeffcb45c479bfadf7c33e73",
      "new_mode": 33188,
      "new_path": "fs/hugetlbfs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "849ed784d6ac1fc6b923c32278e089f87575b8db",
      "old_mode": 33188,
      "old_path": "fs/nfs/write.c",
      "new_id": "759931088094940069eecaf4605af0d9f6742581",
      "new_mode": 33188,
      "new_path": "fs/nfs/write.c"
    },
    {
      "type": "modify",
      "old_id": "cccbbba12b9d474d18c6cea81923c98f2fbbb33f",
      "old_mode": 33188,
      "old_path": "include/linux/mm.h",
      "new_id": "6571dd78e984e64db0311d747093f696aa4079ce",
      "new_mode": 33188,
      "new_path": "include/linux/mm.h"
    },
    {
      "type": "modify",
      "old_id": "5ed7bdaf22d54c273460877f0fb9303376b4622c",
      "old_mode": 33188,
      "old_path": "include/linux/page-flags.h",
      "new_id": "c851ff92d5b34d7ecce5d78b381e98fc4e2ee8c2",
      "new_mode": 33188,
      "new_path": "include/linux/page-flags.h"
    },
    {
      "type": "modify",
      "old_id": "ad7242043bdb8b74872e536b61d01ca05a1de6b3",
      "old_mode": 33188,
      "old_path": "mm/filemap.c",
      "new_id": "434dba317400f89ebcf5df3216ecb6af4696bcb8",
      "new_mode": 33188,
      "new_path": "mm/filemap.c"
    },
    {
      "type": "modify",
      "old_id": "644bcb665773f6e53f50fe6599429595b506f0c5",
      "old_mode": 33188,
      "old_path": "mm/page-writeback.c",
      "new_id": "0372411f38fc516dd64cd6432cce29ee613facf4",
      "new_mode": 33188,
      "new_path": "mm/page-writeback.c"
    },
    {
      "type": "modify",
      "old_id": "ddec5a5966d74a90c1e88b53d260e119b0a5f097",
      "old_mode": 33188,
      "old_path": "mm/truncate.c",
      "new_id": "7a9d8a3cb143fce1268f9e9a6e3af8576a0986cc",
      "new_mode": 33188,
      "new_path": "mm/truncate.c"
    }
  ]
}
