)]}'
{
  "commit": "ccf7c23fc129e75ef60e6f59f60a485b7a056598",
  "tree": "957539e31ee2a7155bbf9bb085ec1cb1d3432d3a",
  "parents": [
    "df806158b0f6eb24247773b4a19b8b59d7217e59"
  ],
  "author": {
    "name": "Dave Chinner",
    "email": "dchinner@redhat.com",
    "time": "Thu May 20 23:19:42 2010 +1000"
  },
  "committer": {
    "name": "Alex Elder",
    "email": "aelder@sgi.com",
    "time": "Mon May 24 10:41:22 2010 -0500"
  },
  "message": "xfs: Ensure inode allocation buffers are fully replayed\n\nWith delayed logging, we can get inode allocation buffers in the\nsame transaction inode unlink buffers. We don\u0027t currently mark inode\nallocation buffers in the log, so inode unlink buffers take\nprecedence over allocation buffers.\n\nThe result is that when they are combined into the same checkpoint,\nonly the unlinked inode chain fields are replayed, resulting in\nuninitialised inode buffers being detected when the next inode\nmodification is replayed.\n\nTo fix this, we need to ensure that we do not set the inode buffer\nflag in the buffer log item format flags if the inode allocation has\nnot already hit the log. To avoid requiring a change to log\nrecovery, we really need to make this a modification that relies\nonly on in-memory sate.\n\nWe can do this by checking during buffer log formatting (while the\nCIL cannot be flushed) if we are still in the same sequence when we\ncommit the unlink transaction as the inode allocation transaction.\nIf we are, then we do not add the inode buffer flag to the buffer\nlog format item flags. This means the entire buffer will be\nreplayed, not just the unlinked fields. We do this while\nCIL flusheѕ are locked out to ensure that we don\u0027t race with the\nsequence numbers changing and hence fail to put the inode buffer\nflag in the buffer format flags when we really need to.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bcbb66150838e17afbbf9176dc1a513febabb6a7",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_buf_item.c",
      "new_id": "02a80984aa05f13189f4c99f186f1f098fa02e3d",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_buf_item.c"
    },
    {
      "type": "modify",
      "old_id": "8cbb82b1d95c7e76e6ac925c60bcf98eb6eceedd",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_buf_item.h",
      "new_id": "f20bb472d582f1e5b711c1593958b3593ad2167c",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_buf_item.h"
    },
    {
      "type": "modify",
      "old_id": "4a0c57432e8fa5099270f6ce255775f2f1ae0df6",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_log.h",
      "new_id": "04c78e642cc83b237ed0c5d6258f82e0ccdcad26",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_log.h"
    },
    {
      "type": "modify",
      "old_id": "9b21f80f31ce70d44d566c2efa8d75b6d2abe358",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_log_cil.c",
      "new_id": "bb17cc044bf37c994dbf877292ecaf36aa3842fb",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_log_cil.c"
    },
    {
      "type": "modify",
      "old_id": "b1ea20c66b3e3cadedc2ce60384a23c9510f5de9",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_trans.h",
      "new_id": "8c69e7824f68439d01d0b27009f961dbd8e0c947",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_trans.h"
    },
    {
      "type": "modify",
      "old_id": "3390c3e7441b7ce0058c1a3f87dddbd410f0fd0e",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_trans_buf.c",
      "new_id": "63d81a22f4fd60c6d6abc93538c37e6480c8fd3b",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_trans_buf.c"
    }
  ]
}
