)]}'
{
  "commit": "ca250b1b3d711936d7dae9e97871f2261347f82d",
  "tree": "5abb078bf8afb07b5ca0a5dc67d82fe712b4110c",
  "parents": [
    "1e7acbb7bc1ae7c1c62fd1310b3176a820225056"
  ],
  "author": {
    "name": "Dave Chinner",
    "email": "dchinner@redhat.com",
    "time": "Fri Nov 02 11:38:41 2012 +1100"
  },
  "committer": {
    "name": "Ben Myers",
    "email": "bpm@sgi.com",
    "time": "Thu Nov 08 11:09:44 2012 -0600"
  },
  "message": "xfs: invalidate allocbt blocks moved to the free list\n\nWhen we free a block from the alloc btree tree, we move it to the\nfreelist held in the AGFL and mark it busy in the busy extent tree.\nThis typically happens when we merge btree blocks.\n\nOnce the transaction is committed and checkpointed, the block can\nremain on the free list for an indefinite amount of time.  Now, this\nisn\u0027t the end of the world at this point - if the free list is\nshortened, the buffer is invalidated in the transaction that moves\nit back to free space. If the buffer is allocated as metadata from\nthe free list, then all the modifications getted logged, and we have\nno issues, either. And if it gets allocated as userdata direct from\nthe freelist, it gets invalidated and so will never get written.\n\nHowever, during the time it sits on the free list, pressure on the\nlog can cause the AIL to be pushed and the buffer that covers the\nblock gets pushed for write. IOWs, we end up writing a freed\nmetadata block to disk. Again, this isn\u0027t the end of the world\nbecause we know from the above we are only writing to free space.\n\nThe problem, however, is for validation callbacks. If the block was\non old btree root block, then the level of the block is going to be\nhigher than the current tree root, and so will fail validation.\nThere may be other inconsistencies in the block as well, and\ncurrently we don\u0027t care because the block is in free space. Shutting\ndown the filesystem because a freed block doesn\u0027t pass write\nvalidation, OTOH, is rather unfriendly.\n\nSo, make sure we always invalidate buffers as they move from the\nfree space trees to the free list so that we guarantee they never\nget written to disk while on the free list.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Phil White \u003cpwhite@sgi.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f1647caace8fe66eeda2bd51cf5e679028d7b50e",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_alloc_btree.c",
      "new_id": "f7876c6d616553d222295624a20f4c168c4c021d",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_alloc_btree.c"
    }
  ]
}
