)]}'
{
  "commit": "e4c6f8bed01f9f9a5c607bd689bf67e7b8a36bd8",
  "tree": "d344bc7b6f89f7066c7e35ddff8c4a4b56904a36",
  "parents": [
    "659098141d02eb8e3545be8969d262e02d2f3f98"
  ],
  "author": {
    "name": "Eric Sandeen",
    "email": "sandeen@sandeen.net",
    "time": "Wed Jul 29 15:02:16 2009 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Wed Jul 29 19:10:35 2009 -0700"
  },
  "message": "hugetlbfs: fix i_blocks accounting\n\nAs reported in Red Hat bz #509671, i_blocks for files on hugetlbfs get\naccounting wrong when doing something like:\n\n   $ \u003e foo\n   $ date  \u003e foo\n   date: write error: Invalid argument\n   $ /usr/bin/stat foo\n     File: `foo\u0027\n     Size: 0          Blocks: 18446744073709547520 IO Block: 2097152 regular\n...\n\nThis is because hugetlb_unreserve_pages() is unconditionally removing\nblocks_per_huge_page(h) on each call rather than using the freed amount.\nIf there were 0 blocks, it goes negative, resulting in the above.\n\nThis is a regression from commit a5516438959d90b071ff0a484ce4f3f523dc3152\n(\"hugetlb: modular state for hugetlb page size\")\n\nwhich did:\n\n-\tinode-\u003ei_blocks -\u003d BLOCKS_PER_HUGEPAGE * freed;\n+\tinode-\u003ei_blocks -\u003d blocks_per_huge_page(h);\n\nso just put back the freed multiplier, and it\u0027s all happy again.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nAcked-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: \u003cstable@kernel.org\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": "d0351e31f474aa15a275c303b2f797e5d437c226",
      "old_mode": 33188,
      "old_path": "mm/hugetlb.c",
      "new_id": "cafdcee154e8dba53fbc15806b623a2fb131376e",
      "new_mode": 33188,
      "new_path": "mm/hugetlb.c"
    }
  ]
}
