)]}'
{
  "commit": "18e9e5104fcd9a973ffe3eed3816c87f2a1b6cd2",
  "tree": "635369c866fcb384223618c878e0b4c317790634",
  "parents": [
    "e1e46bf1866317d4f86f66bf18d3f07317d9f9ee"
  ],
  "author": {
    "name": "Josef Bacik",
    "email": "josef@redhat.com",
    "time": "Tue Mar 23 10:34:56 2010 -0400"
  },
  "committer": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Fri May 21 18:31:18 2010 -0400"
  },
  "message": "Introduce freeze_super and thaw_super for the fsfreeze ioctl\n\nCurrently the way we do freezing is by passing sb\u003es_bdev to freeze_bdev and then\nletting it do all the work.  But freezing is more of an fs thing, and doesn\u0027t\nreally have much to do with the bdev at all, all the work gets done with the\nsuper.  In btrfs we do not populate s_bdev, since we can have multiple bdev\u0027s\nfor one fs and setting s_bdev makes removing devices from a pool kind of tricky.\nThis means that freezing a btrfs filesystem fails, which causes us to corrupt\nwith things like tux-on-ice which use the fsfreeze mechanism.  So instead of\npopulating sb-\u003es_bdev with a random bdev in our pool, I\u0027ve broken the actual fs\nfreezing stuff into freeze_super and thaw_super.  These just take the\nsuper_block that we\u0027re freezing and does the appropriate work.  It\u0027s basically\njust copy and pasted from freeze_bdev.  I\u0027ve then converted freeze_bdev over to\nuse the new super helpers.  I\u0027ve tested this with ext4 and btrfs and verified\neverything continues to work the same as before.\n\nThe only new gotcha is multiple calls to the fsfreeze ioctl will return EBUSY if\nthe fs is already frozen.  I thought this was a better solution than adding a\nfreeze counter to the super_block, but if everybody hates this idea I\u0027m open to\nsuggestions.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "39cb6591d37d3c97dabf03baabed4e8b620d42a8",
      "old_mode": 33188,
      "old_path": "fs/block_dev.c",
      "new_id": "1aba036dcabfee5d795ce958a2895d093a695cb4",
      "new_mode": 33188,
      "new_path": "fs/block_dev.c"
    },
    {
      "type": "modify",
      "old_id": "7faefb4da93915be59bfe6a8ab2a9b37014b9b52",
      "old_mode": 33188,
      "old_path": "fs/ioctl.c",
      "new_id": "2d140a713861badfb1c9b936c683805dab30853a",
      "new_mode": 33188,
      "new_path": "fs/ioctl.c"
    },
    {
      "type": "modify",
      "old_id": "c248ac6a1a21e5792d7b3edc47adf9914794d5dc",
      "old_mode": 33188,
      "old_path": "fs/super.c",
      "new_id": "89afca5055ab513db1bf7ae1821e282a5be25836",
      "new_mode": 33188,
      "new_path": "fs/super.c"
    },
    {
      "type": "modify",
      "old_id": "eeb04ba17b63e3e5340697a3d7d68afe2ba347fa",
      "old_mode": 33188,
      "old_path": "include/linux/fs.h",
      "new_id": "d51256bc6328fdbd7c9759385d80a7ef7f7ad73e",
      "new_mode": 33188,
      "new_path": "include/linux/fs.h"
    }
  ]
}
