)]}'
{
  "commit": "aaa4059bc2dca7fa816624a28db1958c3a22df9b",
  "tree": "8ae1d5458e2f68f96b033f10dae216847c32d4d2",
  "parents": [
    "e812cb5226af32aec91bcbaa8365bd7f921b6ebb"
  ],
  "author": {
    "name": "Jan Kara",
    "email": "jack@suse.cz",
    "time": "Sun Oct 30 15:00:16 2005 -0800"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Sun Oct 30 17:37:17 2005 -0800"
  },
  "message": "[PATCH] ext3: Fix unmapped buffers in transaction\u0027s lists\n\nFix the problem (BUG 4964) with unmapped buffers in transaction\u0027s\nt_sync_data list.  The problem is we need to call filesystem\u0027s own\ninvalidatepage() from block_write_full_page().\n\nblock_write_full_page() must call filesystem\u0027s invalidatepage().  Otherwise\nfollowing nasty race can happen:\n\n   proc 1                                        proc 2\n   ------                                        ------\n- write some new data to \u0027offset\u0027\n  \u003d\u003e bh gets to the transactions data list\n                                              - starts truncate\n                                                \u003d\u003e i_size set to new size\n- mpage_writepages()\n  - ext3_ordered_writepage() to \u0027offset\u0027\n    - block_write_full_page()\n      - page-\u003eindex \u003e end_index+1\n        - block_invalidatepage()\n          - discard_buffer()\n            - clear_buffer_mapped()\n\n- commit triggers and finds unmapped buffer - BOOM!\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2066e4cb700ca9671fc0b92b8cc5b87703ee915d",
      "old_mode": 33188,
      "old_path": "fs/buffer.c",
      "new_id": "75cac9ada0264e9e3a3351a0c552785288227126",
      "new_mode": 33188,
      "new_path": "fs/buffer.c"
    },
    {
      "type": "modify",
      "old_id": "c937d6e65502e168cd08fe3fbe1bd713637f9953",
      "old_mode": 33188,
      "old_path": "include/linux/buffer_head.h",
      "new_id": "1db061bb6b08d6278e6eaea43a2493e58bb8165e",
      "new_mode": 33188,
      "new_path": "include/linux/buffer_head.h"
    },
    {
      "type": "modify",
      "old_id": "60c8764bfac2e20ff8f6f4420b0b8391e7dfa26d",
      "old_mode": 33188,
      "old_path": "mm/truncate.c",
      "new_id": "29c18f68dc35cd9b1cc17ee6e5f21bf05d3658e7",
      "new_mode": 33188,
      "new_path": "mm/truncate.c"
    }
  ]
}
