)]}'
{
  "log": [
    {
      "commit": "105a048a4f35f7a74c7cc20b36dd83658b6ec232",
      "tree": "043b1110cda0042ba35d8aae59382bb094d0af3f",
      "parents": [
        "00b9b0af5887fed54e899e3b7f5c2ccf5e739def",
        "9aeead73782c4b8e2a91def36dbf95db28605c95"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 10:43:44 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 10:43:44 2010 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (27 commits)\n  Btrfs: add more error checking to btrfs_dirty_inode\n  Btrfs: allow unaligned DIO\n  Btrfs: drop verbose enospc printk\n  Btrfs: Fix block generation verification race\n  Btrfs: fix preallocation and nodatacow checks in O_DIRECT\n  Btrfs: avoid ENOSPC errors in btrfs_dirty_inode\n  Btrfs: move O_DIRECT space reservation to btrfs_direct_IO\n  Btrfs: rework O_DIRECT enospc handling\n  Btrfs: use async helpers for DIO write checksumming\n  Btrfs: don\u0027t walk around with task-\u003estate !\u003d TASK_RUNNING\n  Btrfs: do aio_write instead of write\n  Btrfs: add basic DIO read/write support\n  direct-io: do not merge logically non-contiguous requests\n  direct-io: add a hook for the fs to provide its own submit_bio function\n  fs: allow short direct-io reads to be completed via buffered IO\n  Btrfs: Metadata ENOSPC handling for balance\n  Btrfs: Pre-allocate space for data relocation\n  Btrfs: Metadata ENOSPC handling for tree log\n  Btrfs: Metadata reservation for orphan inodes\n  Btrfs: Introduce global metadata reservation\n  ...\n"
    },
    {
      "commit": "9aeead73782c4b8e2a91def36dbf95db28605c95",
      "tree": "7dc2cc6f382ec72715c87ac17ff20e7c0649e4b8",
      "parents": [
        "5a5f79b57069c5691f5b6fd8381fdf487f548ae5"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 27 10:23:00 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 27 10:23:00 2010 -0400"
      },
      "message": "Btrfs: add more error checking to btrfs_dirty_inode\n\nThe ENOSPC code will now return ENOSPC to btrfs_start_transaction.\nbtrfs_dirty_inode needs to check for this and error out appropriately.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5a5f79b57069c5691f5b6fd8381fdf487f548ae5",
      "tree": "d101b4025a2b23c5e258b04714907f4266c3b2df",
      "parents": [
        "933b585f70d524f1b6f0f6867bedb11d3dd82d3b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 21:33:37 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 21:35:35 2010 -0400"
      },
      "message": "Btrfs: allow unaligned DIO\n\nIn order to support DIO that isn\u0027t aligned to the filesystem blocksize,\nwe fall back to buffered for any unaligned DIOs.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "46bfbb5c0740c200d2b66afcbd1f9d64ab320940",
      "tree": "3ec1523f7da103a79f71fc5f486596307a4eeb54",
      "parents": [
        "94b604429a6cd94ddc128fa2772c57209bb1318f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 11:04:10 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 21:34:45 2010 -0400"
      },
      "message": "Btrfs: fix preallocation and nodatacow checks in O_DIRECT\n\nThe O_DIRECT code wasn\u0027t checking for multiple references\non preallocated or nodatacow extents.  This means it\nwasn\u0027t honoring snapshots properly.\n\nThe fix here is to add an explicit check for multiple references\nThis also fixes the math for selecting the correct disk block,\nmaking sure not to go past the end of the extent.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "94b604429a6cd94ddc128fa2772c57209bb1318f",
      "tree": "700c5b9cb431bde48f07813224e6a5165a9d6540",
      "parents": [
        "3f7c579c41a3d20af76fd6ff1f6b949edf105fd1"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 11:02:00 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 11:02:00 2010 -0400"
      },
      "message": "Btrfs: avoid ENOSPC errors in btrfs_dirty_inode\n\nbtrfs_dirty_inode tries to sneak in without much waiting or\nspace reservation, mostly for performance reasons.  This\nusually works well but can cause problems when there are\nmany many writers.\n\nWhen btrfs_update_inode fails with ENOSPC, we fallback\nto a slower btrfs_start_transaction call that will reserve\nsome space.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3f7c579c41a3d20af76fd6ff1f6b949edf105fd1",
      "tree": "374d50346763fb37299f5de93f48901596f21e59",
      "parents": [
        "4845e44ffdb26be9b25610664228e8ecaf949a0d"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 10:59:53 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 10:59:53 2010 -0400"
      },
      "message": "Btrfs: move O_DIRECT space reservation to btrfs_direct_IO\n\nThis moves the delalloc space reservation done for O_DIRECT\ninto btrfs_direct_IO.  This way we don\u0027t leak reserved space\nif the generic O_DIRECT write code errors out before it\ncalls into btrfs_direct_IO.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4845e44ffdb26be9b25610664228e8ecaf949a0d",
      "tree": "8852e175b6b02a36df6b47c54d574f3365ddb34f",
      "parents": [
        "eaf25d933e64c2bf3c79b83e8820404f36fdfc52"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 20:56:50 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 21:52:08 2010 -0400"
      },
      "message": "Btrfs: rework O_DIRECT enospc handling\n\nThis changes O_DIRECT write code to mark extents as delalloc\nwhile it is processing them.  Yan Zheng has reworked the\nenospc accounting based on tracking delalloc extents and\nthis makes it much easier to track enospc in the O_DIRECT code.\n\nThere are a few space cases with the O_DIRECT code though,\nit only sets the EXTENT_DELALLOC bits, instead of doing\nEXTENT_DELALLOC | EXTENT_DIRTY | EXTENT_UPTODATE, because\nwe don\u0027t want to mess with clearing the dirty and uptodate\nbits when things go wrong.  This is important because there\nare no pages in the page cache, so any extent state structs\nthat we put in the tree won\u0027t get freed by releasepage.  We have\nto clear them ourselves as the DIO ends.\n\nWith this commit, we reserve space at in btrfs_file_aio_write,\nand then as each btrfs_direct_IO call progresses it sets\nEXTENT_DELALLOC on the range.\n\nbtrfs_get_blocks_direct is responsible for clearing the delalloc\nat the same time it drops the extent lock.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "eaf25d933e64c2bf3c79b83e8820404f36fdfc52",
      "tree": "649dc862fcc9a243bdc925db34da618b25a275fc",
      "parents": [
        "ed3b3d314cd2f16fac42676839854a68cab2e22b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 09:48:28 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:58 2010 -0400"
      },
      "message": "Btrfs: use async helpers for DIO write checksumming\n\nThe async helper threads offload crc work onto all the\nCPUs, and make streaming writes much faster.  This\nchanges the O_DIRECT write code to use them.  The only\nsmall complication was that we need to pass in the\nlogical offset in the file for each bio, because we can\u0027t\nfind it in the bio\u0027s pages.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4b46fce23349bfca781a32e2707a18328ca5ae22",
      "tree": "68f1200f2bc82d3f35218aef38e6d5d92bff4aca",
      "parents": [
        "c2c6ca417e2db7a519e6e92c82f4a933d940d076"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Sun May 23 11:00:55 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:57 2010 -0400"
      },
      "message": "Btrfs: add basic DIO read/write support\n\nThis provides basic DIO support for reading and writing.  It does not do the\nwork to recover from mismatching checksums, that will come later.  A few design\nchanges have been made from Jim\u0027s code (sorry Jim!)\n\n1) Use the generic direct-io code.  Jim originally re-wrote all the generic DIO\ncode in order to account for all of BTRFS\u0027s oddities, but thanks to that work it\nseems like the best bet is to just ignore compression and such and just opt to\nfallback on buffered IO.\n\n2) Fallback on buffered IO for compressed or inline extents.  Jim\u0027s code did\nit\u0027s own buffering to make dio with compressed extents work.  Now we just\nfallback onto normal buffered IO.\n\n3) Use ordered extents for the writes so that all of the\n\nlock_extent()\nlookup_ordered()\n\ntype checks continue to work.\n\n4) Do the lock_extent() lookup_ordered() loop in readpage so we don\u0027t race with\nDIO writes.\n\nI\u0027ve tested this with fsx and everything works great.  This patch depends on my\ndio and filemap.c patches to work.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "efa56464562991b8c24f965199888806bd8c4b38",
      "tree": "e7c7e69e2931674ddf4f14ac08dfdf43b45de0f4",
      "parents": [
        "4a500fd178c89b96fa166a2d9e7855df33429841"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:49:59 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:53 2010 -0400"
      },
      "message": "Btrfs: Pre-allocate space for data relocation\n\nPre-allocate space for data relocation. This can detect ENOPSC\ncondition caused by fragmentation of free space.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d68fc57b7e3245cfacf2e3b47acfed1946a11786",
      "tree": "c2572fcd935017440c8370c8a12ceb49a7fc4f1f",
      "parents": [
        "8929ecfa50f266163832eeacfbc3642ed5eb83b6"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:49:58 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:52 2010 -0400"
      },
      "message": "Btrfs: Metadata reservation for orphan inodes\n\nreserve metadata space for handling orphan inodes\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8929ecfa50f266163832eeacfbc3642ed5eb83b6",
      "tree": "e0177748af36d49d5f652cff0e421a8268cf7194",
      "parents": [
        "0ca1f7ceb1991099ed5273885ebcf4323948c72e"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:49:58 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:52 2010 -0400"
      },
      "message": "Btrfs: Introduce global metadata reservation\n\nReserve metadata space for extent tree, checksum tree and root tree\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "0ca1f7ceb1991099ed5273885ebcf4323948c72e",
      "tree": "10758d6a55c529aced177da3f6bf45cf26361913",
      "parents": [
        "a22285a6a32390195235171b89d157ed1a1fe932"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:48:47 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:51 2010 -0400"
      },
      "message": "Btrfs: Update metadata reservation for delayed allocation\n\nIntroduce metadata reservation context for delayed allocation\nand update various related functions.\n\nThis patch also introduces EXTENT_FIRST_DELALLOC control bit for\nset/clear_extent_bit. It tells set/clear_bit_hook whether they\nare processing the first extent_state with EXTENT_DELALLOC bit\nset. This change is important if set/clear_extent_bit involves\nmultiple extent_state.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a22285a6a32390195235171b89d157ed1a1fe932",
      "tree": "3fabc88a029e1af4f2fdcc708e7b62ef3cf3703a",
      "parents": [
        "f0486c68e4bd9a06a5904d3eeb3a0d73a83befb8"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:48:46 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:50 2010 -0400"
      },
      "message": "Btrfs: Integrate metadata reservation with start_transaction\n\nBesides simplify the code, this change makes sure all metadata\nreservation for normal metadata operations are released after\ncommitting transaction.\n\nChanges since V1:\n\nAdd code that check if unlink and rmdir will free space.\n\nAdd ENOSPC handling for clone ioctl.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2ead6ae770d9f9dec9f4286bf0fd9001b4388c4b",
      "tree": "9f2d01f2c2acf2ca7e7447c3a92b34bd8d8da94c",
      "parents": [
        "5da9d01b66458b180a6bee0e637a1d0a3effc622"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:46:25 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:49 2010 -0400"
      },
      "message": "Btrfs: Kill init_btrfs_i()\n\nAll code in init_btrfs_i can be moved into btrfs_alloc_inode()\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5da9d01b66458b180a6bee0e637a1d0a3effc622",
      "tree": "47eca61c0ad07ddc791cb7677c548d663fbac818",
      "parents": [
        "424499dbd0c4d88742bf581b5714b27fb44b9fef"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:46:25 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:48 2010 -0400"
      },
      "message": "Btrfs: Shrink delay allocated space in a synchronized\n\nShrink delayed allocation space in a synchronized manner is more\ncontrollable than flushing all delay allocated space in an async\nthread.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "ecc11fabf7ce16309112afe68fac466193ee7520",
      "tree": "946cf29541cfb4632d455ea84be052480b8ca677",
      "parents": [
        "319b2be49e91398eae07db4dfc29972846dec649"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Thu Mar 04 17:31:47 2010 +0300"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:23 2010 -0400"
      },
      "message": "btrfs: replace inode uid,gid,mode initialization with helper function\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "795d580baec0d5386b83a8b557df47c20810e86b",
      "tree": "d0387c37562e9e27a4f43cf7ae425319cbdad359",
      "parents": [
        "449cedf099b23a250e7d61982e35555ccb871182",
        "109f6aef5fc436f355ad027f4d97bd696df2049a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 05 13:21:15 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 05 13:21:15 2010 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: add check for changed leaves in setup_leaf_for_split\n  Btrfs: create snapshot references in same commit as snapshot\n  Btrfs: fix small race with delalloc flushing waitqueue\u0027s\n  Btrfs: use add_to_page_cache_lru, use __page_cache_alloc\n  Btrfs: fix chunk allocate size calculation\n  Btrfs: kill max_extent mount option\n  Btrfs: fail to mount if we have problems reading the block groups\n  Btrfs: check btrfs_get_extent return for IS_ERR()\n  Btrfs: handle kmalloc() failure in inode lookup ioctl\n  Btrfs: dereferencing freed memory\n  Btrfs: Simplify num_stripes\u0027s calculation logical for __btrfs_alloc_chunk()\n  Btrfs: Add error handle for btrfs_search_slot() in btrfs_read_chunk_tree()\n  Btrfs: Remove unnecessary finish_wait() in wait_current_trans()\n  Btrfs: add NULL check for do_walk_down()\n  Btrfs: remove duplicate include in ioctl.c\n\nFix trivial conflict in fs/btrfs/compression.c due to slab.h include\ncleanups.\n"
    },
    {
      "commit": "287a0ab91d25ca982f895a76402e5893b47ed7a6",
      "tree": "fcbe35daef2b4cbdc2bfc0c6026e7c45faef0245",
      "parents": [
        "1b1d1f6625e517a08640ddb4b8f8a0e025243fe3"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Mar 19 18:07:23 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 30 21:19:09 2010 -0400"
      },
      "message": "Btrfs: kill max_extent mount option\n\nAs Yan pointed out, theres not much reason for all this complicated math to\naccount for file extents being split up into max_extent chunks, since they are\nlikely to all end up in the same leaf anyway.  Since there isn\u0027t much reason to\nuse max_extent, just remove the option altogether so we have one less thing we\nneed to test.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "441f4058a04b2943685ff94e0f5f1992b0b3649e",
      "tree": "80a61f6dddcf7d5831a8bd3771ffa2b430af3935",
      "parents": [
        "7c34691abe23741bfc7d2514efd5a39f0e0ecb06",
        "8ad6fcab564c5bc956bdc3dfa440ab152b6e780f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 18 16:50:55 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 18 16:50:55 2010 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (30 commits)\n  Btrfs: fix the inode ref searches done by btrfs_search_path_in_tree\n  Btrfs: allow treeid\u003d\u003d0 in the inode lookup ioctl\n  Btrfs: return keys for large items to the search ioctl\n  Btrfs: fix key checks and advance in the search ioctl\n  Btrfs: buffer results in the space_info ioctl\n  Btrfs: use __u64 types in ioctl.h\n  Btrfs: fix search_ioctl key advance\n  Btrfs: fix gfp flags masking in the compression code\n  Btrfs: don\u0027t look at bio flags after submit_bio\n  btrfs: using btrfs_stack_device_id() get devid\n  btrfs: use memparse\n  Btrfs: add a \"df\" ioctl for btrfs\n  Btrfs: cache the extent state everywhere we possibly can V2\n  Btrfs: cache ordered extent when completing io\n  Btrfs: cache extent state in find_delalloc_range\n  Btrfs: change the ordered tree to use a spinlock instead of a mutex\n  Btrfs: finish read pages in the order they are submitted\n  btrfs: fix btrfs_mkdir goto for no free objectids\n  Btrfs: flush data on snapshot creation\n  Btrfs: make df be a little bit more understandable\n  ...\n"
    },
    {
      "commit": "2ac55d41b5d6bf49e76bc85db5431240617e2f8f",
      "tree": "ee8e2a716ef0b50388ef5e4a86387ec0499bca89",
      "parents": [
        "5a1a3df1f6c86926cfe8657e6f9b4b4c2f467d60"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Feb 03 19:33:23 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 15 11:00:13 2010 -0400"
      },
      "message": "Btrfs: cache the extent state everywhere we possibly can V2\n\nThis patch just goes through and fixes everybody that does\n\nlock_extent()\nblah\nunlock_extent()\n\nto use\n\nlock_extent_bits()\nblah\nunlock_extent_cached()\n\nand pass around a extent_state so we only have to do the searches once per\nfunction.  This gives me about a 3 mb/s boots on my random write test.  I have\nnot converted some things, like the relocation and ioctl\u0027s, since they aren\u0027t\nheavily used and the relocation stuff is in the middle of being re-written.  I\nalso changed the clear_extent_bit() to only unset the cached state if we are\nclearing EXTENT_LOCKED and related stuff, so we can do things like this\n\nlock_extent_bits()\nclear delalloc bits\nunlock_extent_cached()\n\nwithout losing our cached state.  I tested this thoroughly and turned on\nLEAK_DEBUG to make sure we weren\u0027t leaking extent states, everything worked out\nfine.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5a1a3df1f6c86926cfe8657e6f9b4b4c2f467d60",
      "tree": "bc73836bf0bde137da48eaff72dae75ee729aaba",
      "parents": [
        "c2a128d28a2e78e159e17e8c9274d0a9d9492555"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Feb 02 20:51:14 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 15 11:00:13 2010 -0400"
      },
      "message": "Btrfs: cache ordered extent when completing io\n\nWhen finishing io we run btrfs_dec_test_ordered_pending, and then immediately\nrun btrfs_lookup_ordered_extent, but btrfs_dec_test_ordered_pending does that\nalready, so we\u0027re searching twice when we don\u0027t have to.  This patch lets us\npass a btrfs_ordered_extent in to btrfs_dec_test_ordered_pending so if we do\ncomplete io on that ordered extent we can just use the one we found then instead\nof having to do another btrfs_lookup_ordered_extent.  This made my fio job with\nthe other patch go from 24 mb/s to 29 mb/s.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "0be2e98173f8badd5ccc7c2e994891746ba1caf4",
      "tree": "97a8faa272d05e543ac8b26b0a4c6705ababb0c6",
      "parents": [
        "0bdb1db297ab36865a63ee722d35ff0a1f0ae522"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Thu Feb 11 08:06:58 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 15 11:00:11 2010 -0400"
      },
      "message": "btrfs: fix btrfs_mkdir goto for no free objectids\n\nbtrfs_mkdir() must jump to the place of ending transaction after\nbtrfs_find_free_objectid() failed. Or this transaction can\u0027t end.\n\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "1e701a3292e25a6c4939cad9f24951dc6b6ad853",
      "tree": "899887a99aae82fe113bffedccb90a76e5473f8b",
      "parents": [
        "940100a4a7b78b27e60a3e72340fb9b5397dcdb2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Mar 11 09:42:04 2010 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 15 11:00:10 2010 -0400"
      },
      "message": "Btrfs: add new defrag-range ioctl.\n\nThe btrfs defrag ioctl was limited to doing the entire file.  This\ncommit adds a new interface that can defrag a specific range inside\nthe file.\n\nIt can also force compression on the file, allowing you to selectively\ncompress individual files after they were created, even when mount -o\ncompress isn\u0027t turned on.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "73f73415caddbc01d9f10c03e0a677d5b3d11569",
      "tree": "249ef103a73e8d99efe409b7988b694537b3d6ad",
      "parents": [
        "12534832cb7b0abc7369298246e8b7af03b863ca"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Dec 04 17:38:27 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 15 10:58:13 2010 -0400"
      },
      "message": "Btrfs: change how we mount subvolumes\n\nThis work is in preperation for being able to set a different root as the\ndefault mounting root.\n\nThere is currently a problem with how we mount subvolumes.  We cannot currently\nmount a subvolume of a subvolume, you can only mount subvolumes/snapshots of the\ndefault subvolume.  So say you take a snapshot of the default subvolume and call\nit snap1, and then take a snapshot of snap1 and call it snap2, so now you have\n\n/\n/snap1\n/snap1/snap2\n\nas your available volumes.  Currently you can only mount / and /snap1,\nyou cannot mount /snap1/snap2.  To fix this problem instead of passing\nsubvolid\u003d\u003cname\u003e you must pass in subvolid\u003d\u003ctreeid\u003e, where \u003ctreeid\u003e is\nthe tree id that gets spit out via the subvolume listing you get from\nthe subvolume listing patches (btrfs filesystem list).  This allows us\nto mount /, /snap1 and /snap1/snap2 as the root volume.\n\nIn addition to the above, we also now read the default dir item in the\ntree root to get the root key that it points to.  For now this just\npoints at what has always been the default subvolme, but later on I plan\nto change it to point at whatever root you want to be the new default\nroot, so you can just set the default mount and not have to mount with\n-o subvolid\u003d\u003ctreeid\u003e.  I tested this out with the above scenario and it\nworked perfectly.  Thanks,\n\nmount -o subvol operates inside the selected subvolid.  For example:\n\nmount -o subvol\u003dsnap1,subvolid\u003d256 /dev/xxx /mnt\n\n/mnt will have the snap1 directory for the subvolume with id\n256.\n\nmount -o subvol\u003dsnap /dev/xxx /mnt\n\n/mnt will be the snap directory of whatever the default subvolume\nis.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a9185b41a4f84971b930c519f0c63bd450c4810d",
      "tree": "268cf4e206cca12fb9e1dd68984e7c190e465b46",
      "parents": [
        "26821ed40b4230259e770c9911180f38fcaa6f59"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Mar 05 09:21:37 2010 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 05 13:25:52 2010 -0500"
      },
      "message": "pass writeback_control to -\u003ewrite_inode\n\nThis gives the filesystem more information about the writeback that\nis happening.  Trond requested this for the NFS unstable write handling,\nand other filesystems might benefit from this too by beeing able to\ndistinguish between the different callers in more detail.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "23b5c50945f2294add0137799400329c0ebba290",
      "tree": "b7bb2ea17bc2244162adef8a288db12cacbf3524",
      "parents": [
        "efd049fb26a162c3830fd3cb1001fdc09b147f3b"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu Feb 04 11:33:03 2010 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 04 11:33:03 2010 -0500"
      },
      "message": "Btrfs: apply updated fallocate i_size fix\n\nThis version of the i_size fix for fallocate makes sure we only update\nthe i_size when the current fallocate is really operating outside of\ni_size.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "efd049fb26a162c3830fd3cb1001fdc09b147f3b",
      "tree": "caedb4f8b1133b209360bd25ff3b2ddd1dc737c0",
      "parents": [
        "7a7965f83e89f0be506a96769938a721e4e5ae50"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Feb 02 20:50:10 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 04 11:31:45 2010 -0500"
      },
      "message": "Btrfs: do not try and lookup the file extent when finishing ordered io\n\nWhen running the following fio job\n\n[torrent]\nfilename\u003dtorrent-test\nrw\u003drandwrite\nsize\u003d4g\nfilesize\u003d4g\nbs\u003d4k\nioengine\u003dsync\n\nyou would see long stalls where no work was being done.  That is because we were\ndoing all this extra work to read in the file extent outside of the transaction,\nhowever in the random io case this ends up hurting us because the file extents\nare not there to begin with.  So axe this logic, since we end up reading in the\nfile extent when we go to update it anyway.  This took the fio job from 11 mb/s\nwith several ~10 second stalls to 24 mb/s to a couple of 1-2 second stalls.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "e3acc2a6850efff647f1c5458524eb3a8bcba20a",
      "tree": "a111740f879f5f0cbbcaf079c2500535263c1278",
      "parents": [
        "f858153c367a397235d3e81136741e40e44faf1d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Jan 26 14:30:53 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 28 16:20:39 2010 -0500"
      },
      "message": "Btrfs: run orphan cleanup on default fs root\n\nThis patch revert\u0027s commit\n\n6c090a11e1c403b727a6a8eff0b97d5fb9e95cb5\n\nSince it introduces this problem where we can run orphan cleanup on a\nvolume that can have orphan entries re-added.  Instead of my original\nfix, Yan Zheng pointed out that we can just revert my original fix and\nthen run the orphan cleanup in open_ctree after we look up the fs_root.\nI have tested this with all the tests that gave me problems and this\npatch fixes both problems.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d1ea6a61454e7d7ff0873d0ad1ae27d5807da0d3",
      "tree": "73645e52ffa4a38ea4a2a871489d0e2622e7304e",
      "parents": [
        "b8d9bfeb18f9af794020d96e9bee984d18a8d737"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Wed Jan 20 07:28:54 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 28 16:20:38 2010 -0500"
      },
      "message": "Btrfs: Use correct values when updating inode i_size on fallocate\n\ncommit f2bc9dd07e3424c4ec5f3949961fe053d47bc825\nAuthor: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nDate:   Wed Jan 20 12:57:53 2010 +0530\n\n    Btrfs: Use correct values when updating inode i_size on fallocate\n\n    Even though we allocate more, we should be updating inode i_size\n    as per the arguments passed\n\n    Signed-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a555f810af6d63ea5960abaed88e150ad95c3011",
      "tree": "643fd3e94c352dc0006ff9333de8b7b4dc2b8785",
      "parents": [
        "11dfe35a0108097f2df1f042c485fa7f758c2cdf"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 28 16:18:15 2010 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 28 16:18:15 2010 -0500"
      },
      "message": "Btrfs: Add mount -o compress-force\n\nThe default btrfs mount -o compress mode will quickly back off\ncompressing a file if it notices that compression does not reduce the\nsize of the data being written.  This can save considerable CPU because\nall future writes to the file go through uncompressed.\n\nBut some files are both very large and have mixed data stored in\nthem.  In that case, we want to add the ability to always try\ncompressing data before writing it.\n\nThis commit adds mount -o compress-force.  A later commit will add\na new inode flag that does the same thing.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6c090a11e1c403b727a6a8eff0b97d5fb9e95cb5",
      "tree": "51ff4a540d71e1cd6421041c3d3ec466e21a860f",
      "parents": [
        "6c7d54ac87f338c479d9729e8392eca3f76e11e1"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Jan 15 20:08:22 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Jan 17 20:40:21 2010 -0500"
      },
      "message": "Btrfs: fix regression in orphan cleanup\n\nCurrently orphan cleanup only ever gets triggered if we cross subvolumes during\na lookup, which means that if we just mount a plain jane fs that has orphans in\nit, they will never get cleaned up.  This results in panic\u0027s like these\n\nhttp://www.kerneloops.org/oops.php?number\u003d1109085\n\nwhere adding an orphan entry results in -EEXIST being returned and we panic.  In\norder to fix this, we check to see on lookup if our root has had the orphan\ncleanup done, and if not go ahead and do it.  This is easily reproduceable by\nrunning this testcase\n\n#include \u003csys/types.h\u003e\n#include \u003csys/stat.h\u003e\n#include \u003cfcntl.h\u003e\n#include \u003cstring.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003cstdio.h\u003e\n\nint main(int argc, char **argv)\n{\n\tchar data[4096];\n\tchar newdata[4096];\n\tint fd1, fd2;\n\n\tmemset(data, \u0027a\u0027, 4096);\n\tmemset(newdata, \u0027b\u0027, 4096);\n\n\twhile (1) {\n\t\tint i;\n\n\t\tfd1 \u003d creat(\"file1\", 0666);\n\t\tif (fd1 \u003c 0)\n\t\t\tbreak;\n\n\t\tfor (i \u003d 0; i \u003c 512; i++)\n\t\t\twrite(fd1, data, 4096);\n\n\t\tfsync(fd1);\n\t\tclose(fd1);\n\n\t\tfd2 \u003d creat(\"file2\", 0666);\n\t\tif (fd2 \u003c 0)\n\t\t\tbreak;\n\n\t\tftruncate(fd2, 4096 * 512);\n\n\t\tfor (i \u003d 0; i \u003c 512; i++)\n\t\t\twrite(fd2, newdata, 4096);\n\t\tclose(fd2);\n\n\t\ti \u003d rename(\"file2\", \"file1\");\n\t\tunlink(\"file1\");\n\t}\n\n\treturn 0;\n}\n\nand then pulling the power on the box, and then trying to run that test again\nwhen the box comes back up.  I\u0027ve tested this locally and it fixes the problem.\nThanks to Tomas Carnecky for helping me track this down initially.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "406266ab9ac8ed8b085c58aacd9e3161480dc5d5",
      "tree": "811d305c4c4fdf6b19279173959d06698a304416",
      "parents": [
        "3a1abec9f6880cf406593c392636199ea1c6c917"
      ],
      "author": {
        "name": "Jan Engelhardt",
        "email": "jengelh@medozas.de",
        "time": "Wed Dec 09 22:00:38 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Jan 17 20:06:27 2010 -0500"
      },
      "message": "btrfs: fix missing last-entry in readdir(3)\n\nparent 49313cdac7b34c9f7ecbb1780cfc648b1c082cd7 (v2.6.32-1-g49313cd)\ncommit ff48c08e1c05c67e8348ab6f8a24de8034e0e34d\nAuthor: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nDate:   Wed Dec 9 22:57:36 2009 +0100\n\nBtrfs: fix missing last-entry in readdir(3)\n\nWhen one does a 32-bit readdir(3), the last entry of a directory is\nmissing. This is however not due to passing a large value to filldir,\nbut it seems to have to do with glibc doing telldir or something\nquirky. In any case, this patch fixes it in practice.\n\nSigned-off-by: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3a1abec9f6880cf406593c392636199ea1c6c917",
      "tree": "280edc4cacb9d14224f7d3da3510d386329a08ae",
      "parents": [
        "83d3c9696fed237a3d96fce18299e2fcf112109f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 15:47:17 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 15:47:17 2009 -0500"
      },
      "message": "Btrfs: make sure fallocate properly starts a transaction\n\nThe recent patch to make fallocate enospc friendly would send\ndown a NULL trans handle to the allocator.  This moves the\ntransaction start to properly fix things.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4a8be425a8fb8fbb5d881eb55fa6634c3463b9c9",
      "tree": "c89e0aa1aac790d77f6a29a4bc48384922152d00",
      "parents": [
        "a7a3f7cadd9bdee569243f7ead9550aa16b60e07"
      ],
      "author": {
        "name": "TARUISI Hiroaki",
        "email": "taruishi.hiroak@jp.fujitsu.com",
        "time": "Thu Nov 12 07:14:26 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:37 2009 -0500"
      },
      "message": "Btrfs: deny sys_link across subvolumes.\n\nI rebased Christian Parpart\u0027s patch to deny hard link across\nsubvolumes. Original patch modifies also btrfs_rename, but\nI excluded it because we can move across subvolumes now and\nit make no problem.\n-----------------\n\nHard link across subvolumes should not allowed in Btrfs.\nbtrfs_link checks root of \u0027to\u0027 directory is same as root\nof \u0027from\u0027 file. If not same, btrfs_link returns -EPERM.\n\nSigned-off-by: TARUISI Hiroaki \u003ctaruishi.hiroak@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "24bbcf0442ee04660a5a030efdbb6d03f1c275cb",
      "tree": "aa57d77d29cc5150b272cc3f6465f10262fcbaac",
      "parents": [
        "f34f57a3ab4e73304d78c125682f1a53cd3975f2"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:36:34 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:35 2009 -0500"
      },
      "message": "Btrfs: Add delayed iput\n\niput() can trigger new transactions if we are dropping the\nfinal reference, so calling it in btrfs_commit_transaction\nmay end up deadlock. This patch adds delayed iput to avoid\nthe issue.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "f34f57a3ab4e73304d78c125682f1a53cd3975f2",
      "tree": "359aff6491d3e92b3901ea78dc164d41209d3eea",
      "parents": [
        "8082510e7124cc50d728f1b875639cb4e22312cc"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:35:27 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:34 2009 -0500"
      },
      "message": "Btrfs: Pass transaction handle to security and ACL initialization functions\n\nPass transaction handle down to security and ACL initialization\nfunctions, so we can avoid starting nested transactions\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8082510e7124cc50d728f1b875639cb4e22312cc",
      "tree": "e9f0a0a4504a87689b4765368b508fff5ae2ddf8",
      "parents": [
        "5a303d5d4b8055d2e5a03e92d04745bfc5881a22"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:35:36 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:34 2009 -0500"
      },
      "message": "Btrfs: Make truncate(2) more ENOSPC friendly\n\ntruncating and deleting regular files are unbound operations,\nso it\u0027s not good to do them in a single transaction. This\npatch makes btrfs_truncate and btrfs_delete_inode start a\nnew transaction after all items in a tree leaf are deleted.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5a303d5d4b8055d2e5a03e92d04745bfc5881a22",
      "tree": "b3a46e3ebc9ac2618e295b94658ddb1402577b6c",
      "parents": [
        "2e4bfab97055aa6acdd0637913bd705c2d6506d6"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:52 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:33 2009 -0500"
      },
      "message": "Btrfs: Make fallocate(2) more ENOSPC friendly\n\nfallocate(2) may allocate large number of file extents, so it\u0027s not\ngood to do it in a single transaction. This patch make fallocate(2)\nstart a new transaction for each file extents it allocates.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c71bf099abddf3e0fdc27f251ba76fca1461d49a",
      "tree": "0b682ad2b49aeaf9ac774c40be4b7549c1d079fe",
      "parents": [
        "c216775458a2ee345d9412a2770c2916acfb5d30"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:40 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:33 2009 -0500"
      },
      "message": "Btrfs: Avoid orphan inodes cleanup while replaying log\n\nWe do log replay in a single transaction, so it\u0027s not good to do unbound\noperations. This patch cleans up orphan inodes cleanup after replaying\nthe log. It also avoids doing other unbound operations such as truncating\na file during replaying log. These unbound operations are postponed to\nthe orphan inode cleanup stage.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c216775458a2ee345d9412a2770c2916acfb5d30",
      "tree": "41a947a9d254aeeef40b7e42162d80646477f30a",
      "parents": [
        "920bbbfb05c9fce22e088d20eb9dcb8f96342de9"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:21 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:24 2009 -0500"
      },
      "message": "Btrfs: Fix disk_i_size update corner case\n\nThere are some cases file extents are inserted without involving\nordered struct. In these cases, we update disk_i_size directly,\nwithout checking pending ordered extent and DELALLOC bit. This\npatch extends btrfs_ordered_update_i_size() to handle these cases.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "920bbbfb05c9fce22e088d20eb9dcb8f96342de9",
      "tree": "b972b3f39ebefb9c026300c1981d18cad769e431",
      "parents": [
        "ad48fd754676bfae4139be1a897b1ea58f9aaf21"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:08 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Dec 15 21:24:52 2009 -0500"
      },
      "message": "Btrfs: Rewrite btrfs_drop_extents\n\nRewrite btrfs_drop_extents by using btrfs_duplicate_item, so we can\navoid calling lock_extent within transaction.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "aa021baa3295fa6e3f367d80f8955dd5176656eb",
      "tree": "13da8275b1957399bc4fa19ec7cc313d48694e31",
      "parents": [
        "404291ac9e72d118fcadeb939a69b2caa0a0e9ca",
        "a6dbd429d8dd3382bbd9594b8d2ec74843a260d9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 11 13:38:59 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 11 13:38:59 2009 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix panic when trying to destroy a newly allocated\n  Btrfs: allow more metadata chunk preallocation\n  Btrfs: fallback on uncompressed io if compressed io fails\n  Btrfs: find ideal block group for caching\n  Btrfs: avoid null deref in unpin_extent_cache()\n  Btrfs: skip btrfs_release_path in btrfs_update_root and btrfs_del_root\n  Btrfs: fix some metadata enospc issues\n  Btrfs: fix how we set max_size for free space clusters\n  Btrfs: cleanup transaction starting and fix journal_info usage\n  Btrfs: fix data allocation hint start\n"
    },
    {
      "commit": "a6dbd429d8dd3382bbd9594b8d2ec74843a260d9",
      "tree": "9cc6426da748996e4e1cc61d446052838703434f",
      "parents": [
        "33b258086441dd07e00133c79fcd8cbc6a76d737"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Nov 11 15:53:34 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 11 15:53:34 2009 -0500"
      },
      "message": "Btrfs: fix panic when trying to destroy a newly allocated\n\nThere is a problem where iget5_locked will look for an inode, not find it, and\nthen subsequently try to allocate it.  Another CPU will have raced in and\nallocated the inode instead, so when iget5_locked gets the inode spin lock again\nand does a search, it finds the new inode.  So it goes ahead and calls\ndestroy_inode on the inode it just allocated.  The problem is we don\u0027t set\nBTRFS_I(inode)-\u003eroot until the new inode is completely initialized.  This patch\nmakes us set root to NULL when alloc\u0027ing a new inode, so when we get to\nbtrfs_destroy_inode and we see that root is NULL we can just free up the memory\nand continue on.  This fixes the panic\n\nhttp://www.kerneloops.org/submitresult.php?number\u003d812690\n\nThanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "f5a84ee3cdd88d96b7bcede10af58598ad8d52a7",
      "tree": "5f69342df0c457aca31176234a801bf3607978c5",
      "parents": [
        "ccf0e72537a9f68611ca575121afd08e2b4d0fb0"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Nov 10 21:23:48 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 11 14:20:20 2009 -0500"
      },
      "message": "Btrfs: fallback on uncompressed io if compressed io fails\n\nCurrently compressed IO does not deal with not having its entire extent able to\nbe allocated.  So if we have enough free space to allocate for the extent, but\nits not contiguous, it will fail spectacularly.  This patch fixes this by\nfalling back on uncompressed IO which lets us spread the delalloc extent across\nmultiple extents.  I tested this by making us randomly think the reservation had\nfailed to make it fallback on the uncompressed io way and it seemed to work\nfine.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5df6a9f606bf2ee25ab8031bff124ed883b823be",
      "tree": "2492876b6ebd9c4c52a50de1a431285fe3779889",
      "parents": [
        "01dea1efc23b511d3b58bb94da07ddb6d6db9895"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Nov 10 21:23:48 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 11 14:20:17 2009 -0500"
      },
      "message": "Btrfs: fix some metadata enospc issues\n\nWe weren\u0027t reserving metadata space for rename, rmdir and unlink, which could\ncause problems.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6346c93988caa3048bf4d81f9ba3608a7a195aa2",
      "tree": "78e5fbc5fa6ed8c692db24dfff475e2b95413570",
      "parents": [
        "444528b3e614f7f2391488d9bca8e0b872db909b"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Nov 10 21:23:47 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 11 14:20:16 2009 -0500"
      },
      "message": "Btrfs: fix data allocation hint start\n\nSometimes our start allocation hint when we cow a file can be either\nEXTENT_HOLE or some other such place holder, which is not optimal.  So if we\nfind that our em-\u003eblock_start is one of these special values, check to see\nwhere the first block of the inode is stored, and use that as a hint.  If that\nblock is also a special value, just fallback on a hint of 0 and let the\nallocator figure out a good place to put the data.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "dcbeb0bec5f2695c3ff53f174efb8e03c209f3f3",
      "tree": "30d223a3a3c7470c657284ef030657bd1753d4d3",
      "parents": [
        "2b650df2cea96e487f2fd9ecaa68e533ea9b5ed7",
        "444528b3e614f7f2391488d9bca8e0b872db909b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 15 15:06:37 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 15 15:06:37 2009 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: always pin metadata in discard mode\n  Btrfs: enable discard support\n  Btrfs: add -o discard option\n  Btrfs: properly wait log writers during log sync\n  Btrfs: fix possible ENOSPC problems with truncate\n  Btrfs: fix btrfs acl #ifdef checks\n  Btrfs: streamline tree-log btree block writeout\n  Btrfs: avoid tree log commit when there are no changes\n  Btrfs: only write one super copy during fsync\n"
    },
    {
      "commit": "5d5e103a70f74ae98e3965a4add1ab951d0651d1",
      "tree": "83b1cc73830f72f592aa804207a679912beef101",
      "parents": [
        "0eda294dfc980c1cbe4f8a0564bf543f86a01ddb"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Oct 13 16:46:49 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Oct 14 10:32:47 2009 -0400"
      },
      "message": "Btrfs: fix possible ENOSPC problems with truncate\n\nThere\u0027s a problem where we don\u0027t do any space reservation for truncates, which\ncan cause you to OOPs because you will be allowed to go off in the weeds a bit\nsince we don\u0027t account for the delalloc bytes that are created as a result of\nthe truncate.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "257c62e1bce03e5b9f3f069fd52ad73a56de71fd",
      "tree": "ad047fe5796156aa88e3f3600111bf2b8d12759f",
      "parents": [
        "4722607db6a78bd7748c51fa4c8d7371da797254"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 13:21:08 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 13:35:12 2009 -0400"
      },
      "message": "Btrfs: avoid tree log commit when there are no changes\n\nrpm has a habit of running fdatasync when the file hasn\u0027t\nchanged.  We already detect if a file hasn\u0027t been changed\nin the current transaction but it might have been sent to\nthe tree-log in this transaction and not changed since\nthe last call to fsync.\n\nIn this case, we want to avoid a tree log sync, which includes\na number of synchronous writes and barriers.  This commit\nextends the existing tracking of the last transaction to change\na file to also track the last sub-transaction.\n\nThe end result is that rpm -ivh and -Uvh are roughly twice as fast,\nand on par with ext3.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "474a503d4bf77ae0cbe484dd0842a2648c0b1c28",
      "tree": "70e3e4023209e741546491a58622bd45fb13e308",
      "parents": [
        "d43c36dc6b357fa1806800f18aa30123c747a6d1",
        "ac6889cbb254be1ffea376bea4a96ce9be0e0ed0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 11 11:23:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 11 11:23:13 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix file clone ioctl for bookend extents\n  Btrfs: fix uninit compiler warning in cow_file_range_nocow\n  Btrfs: constify dentry_operations\n  Btrfs: optimize back reference update during btrfs_drop_snapshot\n  Btrfs: remove negative dentry when deleting subvolumne\n  Btrfs: optimize fsync for the single writer case\n  Btrfs: async delalloc flushing under space pressure\n  Btrfs: release delalloc reservations on extent item insertion\n  Btrfs: delay clearing EXTENT_DELALLOC for compressed extents\n  Btrfs: cleanup extent_clear_unlock_delalloc flags\n  Btrfs: fix possible softlockup in the allocator\n  Btrfs: fix deadlock on async thread startup\n"
    },
    {
      "commit": "e9061e214810c9534381a705a1b46533e09f2676",
      "tree": "7eed17ffbfc2eeb06da70dafe8087855c4b22a60",
      "parents": [
        "82d339d9b3a6395f17d3253887653250b693b74b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 09 09:57:45 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 09 09:57:45 2009 -0400"
      },
      "message": "Btrfs: fix uninit compiler warning in cow_file_range_nocow\n\nThe extent_type variable was exposed uninit via a goto.  It should be\nimpossible to trigger because it is protected by a check on another\nvariable, but this makes sure.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "82d339d9b3a6395f17d3253887653250b693b74b",
      "tree": "04671df82289708192bd650c67eaa2f8a999132b",
      "parents": [
        "94fcca9f8999e7828d5f4dc181daa39cad2af38a"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Fri Oct 09 09:54:36 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 09 09:54:36 2009 -0400"
      },
      "message": "Btrfs: constify dentry_operations\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "efefb1438be269897585934fc6c05deb4dfa01ce",
      "tree": "41d3bf63789bc656421dfbd651bf38caf580ec03",
      "parents": [
        "ff782e0a131c7f669445c07fe5c7ba91e043b7ed"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Fri Oct 09 09:25:16 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 09 09:25:16 2009 -0400"
      },
      "message": "Btrfs: remove negative dentry when deleting subvolumne\n\nThe use of btrfs_dentry_delete is removing dentries from the\ndcache when deleting subvolumne. btrfs_dentry_delete ignores\nnegative dentries. This is incorrect since if we don\u0027t remove\nthe negative dentry, its parent dentry can\u0027t be removed.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "32c00aff718bb54a214b39146bdd9ac01511cd25",
      "tree": "c094ee494723a9ebc9d83cb95607f06351665639",
      "parents": [
        "a3429ab70b04363c6190964e82f04f44f3e34cf0"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Oct 08 13:34:05 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 15:21:10 2009 -0400"
      },
      "message": "Btrfs: release delalloc reservations on extent item insertion\n\nThis patch fixes an issue with the delalloc metadata space reservation\ncode.  The problem is we used to free the reservation as soon as we\nallocated the delalloc region.  The problem with this is if we are not\ninserting an inline extent, we don\u0027t actually insert the extent item until\nafter the ordered extent is written out.  This patch does 3 things,\n\n1) It moves the reservation clearing stuff into the ordered code, so when\nwe remove the ordered extent we remove the reservation.\n2) It adds a EXTENT_DO_ACCOUNTING flag that gets passed when we clear\ndelalloc bits in the cases where we want to clear the metadata reservation\nwhen we clear the delalloc extent, in the case that we do an inline extent\nor we invalidate the page.\n3) It adds another waitqueue to the space info so that when we start a fs\nwide delalloc flush, anybody else who also hits that area will simply wait\nfor the flush to finish and then try to make their allocation.\n\nThis has been tested thoroughly to make sure we did not regress on\nperformance.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a3429ab70b04363c6190964e82f04f44f3e34cf0",
      "tree": "f9aa5104699fdb82a3dfa327948241aa3e0022d5",
      "parents": [
        "a791e35e12ff672e8a0e140abeeaf900c3b2ea77"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 12:30:20 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 15:11:50 2009 -0400"
      },
      "message": "Btrfs: delay clearing EXTENT_DELALLOC for compressed extents\n\nWhen compression is on, the cow_file_range code is farmed off to\nworker threads.  This allows us to do significant CPU work in parallel\non SMP machines.\n\nBut it is a delicate balance around when we clear flags and how.  In\nthe past we cleared the delalloc flag immediately, which was safe\nbecause the pages stayed locked.\n\nBut this is causing problems with the newest ENOSPC code, and with the\nrecent extent state cleanups we can now clear the delalloc bit at the\nsame time the uncompressed code does.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a791e35e12ff672e8a0e140abeeaf900c3b2ea77",
      "tree": "f03b99451619c0425f3c93fbef3940c2b08c1bd3",
      "parents": [
        "1cdda9b81ac0e6ee986f034fa02f221679e1c11a"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 11:27:10 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 15:11:49 2009 -0400"
      },
      "message": "Btrfs: cleanup extent_clear_unlock_delalloc flags\n\nextent_clear_unlock_delalloc has a growing set of ugly parameters\nthat is very difficult to read and maintain.\n\nThis switches to a flag field and well named flag defines.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "0efe5e32c8729ef44b00d9a7203e4c99a6378b27",
      "tree": "8df3309198b2ab87f549c82c59125d2b106bcdbe",
      "parents": [
        "e6a0a8bfef1094084e53bfaad6d512c23da7a6dd",
        "9c2693c9243b81802c6860570557165e874779a7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 20:23:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 20:23:15 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix data space leak fix\n  Btrfs: remove duplicates of filemap_ helpers\n  Btrfs: take i_mutex before generic_write_checks\n  Btrfs: fix arguments to btrfs_wait_on_page_writeback_range\n  Btrfs: fix deadlock with free space handling and user transactions\n  Btrfs: fix error cases for ioctl transactions\n  Btrfs: Use CONFIG_BTRFS_POSIX_ACL to enable ACL code\n  Btrfs: introduce missing kfree\n  Btrfs: Fix setting umask when POSIX ACLs are not enabled\n  Btrfs: proper -ENOSPC handling\n"
    },
    {
      "commit": "828c09509b9695271bcbdc53e9fc9a6a737148d2",
      "tree": "072ffad6f02db7bf4095e07e2b90247cfa042998",
      "parents": [
        "1c4115e595dec42aa0e81ba47ef46e35b34ed428"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Thu Oct 01 15:43:56 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 16:11:11 2009 -0700"
      },
      "message": "const: constify remaining file_operations\n\n[akpm@linux-foundation.org: fix KVM]\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nAcked-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9c2693c9243b81802c6860570557165e874779a7",
      "tree": "c857a96a78cdc9fcd640ea4279e7214d6c9713b3",
      "parents": [
        "8aa38c31b7659e338fee4d9af4c3805acbd9806f",
        "fbf190874407f23d2891b53ffdf7d3c6be8d47ff"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 17:24:44 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 17:24:44 2009 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable into for-linus\n"
    },
    {
      "commit": "fbf190874407f23d2891b53ffdf7d3c6be8d47ff",
      "tree": "c60ab388e2b19b02fd3bbcef76498a3520f9dcbd",
      "parents": [
        "ab93dbecfba72bbc04b7036343d180aaff1b61a3"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Oct 01 17:10:23 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 17:10:23 2009 -0400"
      },
      "message": "Btrfs: fix data space leak fix\n\nThere is a problem where page_mkwrite can be called on a dirtied page that\nalready has a delalloc range associated with it.  The fix is to clear any\ndelalloc bits for the range we are dirtying so the space accounting gets\nhandled properly.  This is the same thing we do in the normal write case, so we\nare consistent across the board.  With this patch we no longer leak reserved\nspace.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "25472b880c69c0daa485c4f80a6550437ed1149f",
      "tree": "d12bc091e8991513db0d2891111ba773eb5c52e2",
      "parents": [
        "17d857be649a21ca90008c6dc425d849fa83db5c",
        "ab93dbecfba72bbc04b7036343d180aaff1b61a3"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 12:58:13 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 12:58:13 2009 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable into for-linus\n"
    },
    {
      "commit": "9ed74f2dba6ebf9f30b80554290bfc73cc3ef083",
      "tree": "763d58a4a11ceca26dcdaedefb1fd662c4e2fa8b",
      "parents": [
        "c65ddb52dc412c9b67681b1aa16cd1bac8434e24"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Sep 11 16:12:44 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 28 16:29:42 2009 -0400"
      },
      "message": "Btrfs: proper -ENOSPC handling\n\nAt the start of a transaction we do a btrfs_reserve_metadata_space() and\nspecify how many items we plan on modifying.  Then once we\u0027ve done our\nmodifications and such, just call btrfs_unreserve_metadata_space() for\nthe same number of items we reserved.\n\nFor keeping track of metadata needed for data I\u0027ve had to add an extent_io op\nfor when we merge extents.  This lets us track space properly when we are doing\nsequential writes, so we don\u0027t end up reserving way more metadata space than\nwhat we need.\n\nThe only place where the metadata space accounting is not done is in the\nrelocation code.  This is because Yan is going to be reworking that code in the\nnear future, so running btrfs-vol -b could still possibly result in a ENOSPC\nrelated panic.  This patch also turns off the metadata_ratio stuff in order to\nallow users to more efficiently use their disk space.\n\nThis patch makes it so we track how much metadata we need for an inode\u0027s\ndelayed allocation extents by tracking how many extents are currently\nwaiting for allocation.  It introduces two new callbacks for the\nextent_io tree\u0027s, merge_extent_hook and split_extent_hook.  These help\nus keep track of when we merge delalloc extents together and split them\nup.  Reservations are handled prior to any actually dirty\u0027ing occurs,\nand then we unreserve after we dirty.\n\nbtrfs_unreserve_metadata_for_delalloc() will make the appropriate\nunreservations as needed based on the number of reservations we\ncurrently have and the number of extents we currently have.  Doing the\nreservation outside of doing any of the actual dirty\u0027ing lets us do\nthings like filemap_flush() the inode to try and force delalloc to\nhappen, or as a last resort actually start allocation on all delalloc\ninodes in the fs.  This has survived dbench, fs_mark and an fsx torture\ntest.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "dc2af6a6bcf3abdf44ac545759a6547dfe12070e",
      "tree": "068ea2c5f5df55f72167ab3b51e001a98b7300e4",
      "parents": [
        "6c5daf012c9155aafd2c7973e4278766c30dfad0",
        "54bcf382daf08c1396edb8b81e650b58930ccaef"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 08:57:29 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 08:57:29 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (42 commits)\n  Btrfs: hash the btree inode during  fill_super\n  Btrfs: relocate file extents in clusters\n  Btrfs: don\u0027t rename file into dummy directory\n  Btrfs: check size of inode backref before adding hardlink\n  Btrfs: fix releasepage to avoid unlocking extents we haven\u0027t locked\n  Btrfs: Fix test_range_bit for whole file extents\n  Btrfs: fix errors handling cached state in set/clear_extent_bit\n  Btrfs: fix early enospc during balancing\n  Btrfs: deal with NULL space info\n  Btrfs: account for space used by the super mirrors\n  Btrfs: fix extent entry threshold calculation\n  Btrfs: remove dead code\n  Btrfs: fix bitmap size tracking\n  Btrfs: don\u0027t keep retrying a block group if we fail to allocate a cluster\n  Btrfs: make balance code choose more wisely when relocating\n  Btrfs: fix arithmetic error in clone ioctl\n  Btrfs: add snapshot/subvolume destroy ioctl\n  Btrfs: change how subvolumes are organized\n  Btrfs: do not reuse objectid of deleted snapshot/subvol\n  Btrfs: speed up snapshot dropping\n  ...\n"
    },
    {
      "commit": "db16826367fefcb0ddb93d76b66adc52eb4e6339",
      "tree": "626224c1eb1eb79c522714591f208b4fdbdcd9d4",
      "parents": [
        "cd6045138ed1bb5d8773e940d51c34318eef3ef2",
        "465fdd97cbe16ef8727221857e96ef62dd352017"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:53:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:53:22 2009 -0700"
      },
      "message": "Merge branch \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6\n\n* \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6: (21 commits)\n  HWPOISON: Enable error_remove_page on btrfs\n  HWPOISON: Add simple debugfs interface to inject hwpoison on arbitary PFNs\n  HWPOISON: Add madvise() based injector for hardware poisoned pages v4\n  HWPOISON: Enable error_remove_page for NFS\n  HWPOISON: Enable .remove_error_page for migration aware file systems\n  HWPOISON: The high level memory error handler in the VM v7\n  HWPOISON: Add PR_MCE_KILL prctl to control early kill behaviour per process\n  HWPOISON: shmem: call set_page_dirty() with locked page\n  HWPOISON: Define a new error_remove_page address space op for async truncation\n  HWPOISON: Add invalidate_inode_page\n  HWPOISON: Refactor truncate to allow direct truncating of page v2\n  HWPOISON: check and isolate corrupted free pages v2\n  HWPOISON: Handle hardware poisoned pages in try_to_unmap\n  HWPOISON: Use bitmask/action code for try_to_unmap behaviour\n  HWPOISON: x86: Add VM_FAULT_HWPOISON handling to x86 page fault handler v2\n  HWPOISON: Add poison check to page fault handling\n  HWPOISON: Add basic support for poisoned pages in fault handler v3\n  HWPOISON: Add new SIGBUS error codes for hardware poison signals\n  HWPOISON: Add support for poison swap entries v2\n  HWPOISON: Export some rmap vma locking to outside world\n  ...\n"
    },
    {
      "commit": "54bcf382daf08c1396edb8b81e650b58930ccaef",
      "tree": "64b941f09489b5c9ee63e4ad43d736bfce911b21",
      "parents": [
        "94a8d5caba74211ec76dac80fc6e2d5c391530df",
        "c65ddb52dc412c9b67681b1aa16cd1bac8434e24"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 10:00:58 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 10:00:58 2009 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable into for-linus\n\nConflicts:\n\tfs/btrfs/super.c\n"
    },
    {
      "commit": "f679a84034be6f7da123be786bbd8838bf3e9207",
      "tree": "4dce1760675978fd0b113e04f9608f57161bac85",
      "parents": [
        "a57195214358b75807a74bad96a8601a36262af7"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Sep 24 09:17:31 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 09:17:31 2009 -0400"
      },
      "message": "Btrfs: don\u0027t rename file into dummy directory\n\nA recent change enforces only one access point to each subvolume. The first\ndirectory entry (the one added when the subvolume/snapshot was created) is\ntreated as valid access point, all other subvolume links are linked to dummy\nempty directories. The dummy directories are temporary inodes that only in\nmemory, so we can not rename file into them.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a57195214358b75807a74bad96a8601a36262af7",
      "tree": "e288410ecfab5f15097bb66f06a5dd6bf99bca08",
      "parents": [
        "11ef160fda9c150cd75db77194bcc66839709662"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Sep 24 09:17:31 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 09:17:31 2009 -0400"
      },
      "message": "Btrfs: check size of inode backref before adding hardlink\n\nFor every hardlink in btrfs, there is a corresponding inode back\nreference. All inode back references for hardlinks in a given\ndirectory are stored in single b-tree item. The size of b-tree item\nis limited by the size of b-tree leaf, so we can only create limited\nnumber of hardlinks to a given file in a directory.\n\nThe original code lacks of the check, it oops if the number of\nhardlinks goes over the limit. This patch fixes the issue by adding\ncheck to btrfs_link and btrfs_rename.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6e1d5dcc2bbbe71dbf010c747e15739bef6b7218",
      "tree": "2edb0f6cc65acbae95e42df1bc763ec048e6c2e0",
      "parents": [
        "7f09410bbc4306f592cfb43812389ea1c7905a20"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Sep 21 17:01:11 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:24 2009 -0700"
      },
      "message": "const: mark remaining inode_operations as const\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7f09410bbc4306f592cfb43812389ea1c7905a20",
      "tree": "18f179435f70c4ec9231883501062d5ea0357af5",
      "parents": [
        "ac4cfdd6d141c319a7af8655f750ed504c187a74"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Sep 21 17:01:10 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:24 2009 -0700"
      },
      "message": "const: mark remaining address_space_operations const\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "76dda93c6ae2c1dc3e6cde34569d6aca26b0c918",
      "tree": "f5ca46ec89d4ae2c762952d5f35e2c6f95ac046a",
      "parents": [
        "4df27c4d5cc1dda54ed7d0a8389347f2df359cf9"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 16:00:26 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 16:00:26 2009 -0400"
      },
      "message": "Btrfs: add snapshot/subvolume destroy ioctl\n\nThis patch adds snapshot/subvolume destroy ioctl.  A subvolume that isn\u0027t being\nused and doesn\u0027t contains links to other subvolumes can be destroyed.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4df27c4d5cc1dda54ed7d0a8389347f2df359cf9",
      "tree": "2008f348d28c6c19e31924ae4fb414ca929a01f1",
      "parents": [
        "13a8a7c8c47e542b3cdb45bec3f431f96af79361"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "message": "Btrfs: change how subvolumes are organized\n\nbtrfs allows subvolumes and snapshots anywhere in the directory tree.\nIf we snapshot a subvolume that contains a link to other subvolume\ncalled subvolA, subvolA can be accessed through both the original\nsubvolume and the snapshot. This is similar to creating hard link to\ndirectory, and has the very similar problems.\n\nThe aim of this patch is enforcing there is only one access point to\neach subvolume. Only the first directory entry (the one added when\nthe subvolume/snapshot was created) is treated as valid access point.\nThe first directory entry is distinguished by checking root forward\nreference. If the corresponding root forward reference is missing,\nwe know the entry is not the first one.\n\nThis patch also adds snapshot/subvolume rename support, the code\nallows rename subvolume link across subvolumes.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "13a8a7c8c47e542b3cdb45bec3f431f96af79361",
      "tree": "473f3cc94b4a93a0a5f6f19b1832ef2e6b7ecf62",
      "parents": [
        "1c4850e21df8b441164d910bc611ef46a01d5d75"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "message": "Btrfs: do not reuse objectid of deleted snapshot/subvol\n\nThe new back reference format does not allow reusing objectid of\ndeleted snapshot/subvol. So we use ++highest_objectid to allocate\nobjectid for new snapshot/subvol.\n\nNow we use ++highest_objectid to allocate objectid for both new inode\nand new snapshot/subvolume, so this patch removes \u0027find hole\u0027 code in\nbtrfs_find_free_objectid.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b917b7c3be50435fa8257591b964934e917f2d45",
      "tree": "efdc2f768da474a4904dc6c065cc6e4b9a2379d3",
      "parents": [
        "f85d7d6c8f2ad4a86a1f4f4e3791f36dede2fa76"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 18 16:07:03 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 18 16:08:52 2009 -0400"
      },
      "message": "Btrfs: search for an allocation hint while filling file COW\n\nThe allocator has some nice knobs for sending hints about where\nto try and allocate new blocks, but when we\u0027re doing file allocations\nwe\u0027re not sending any hint at all.\n\nThis commit adds a simple extent map search to see if we can\nquickly and easily find a hint for the allocator.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "465fdd97cbe16ef8727221857e96ef62dd352017",
      "tree": "efeeba1553264f5fc0b140af301d7afa9ce1d6fd",
      "parents": [
        "cae681fc12a824631337906d6ba1dbd498e751a5"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Wed Sep 16 11:50:18 2009 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Sep 16 11:50:18 2009 +0200"
      },
      "message": "HWPOISON: Enable error_remove_page on btrfs\n\nCc: chris.mason@oracle.com\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "83ebade34bc1a90d0c3f77b87b940f336d075fda",
      "tree": "99b6366c52e6bec88119ae995399c985fc61e900",
      "parents": [
        "74fca6a42863ffacaf7ba6f1936a9f228950f657",
        "93c82d575055f1bd0277acae6f966bebafd80dd5"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 19:07:25 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 19:07:25 2009 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n"
    },
    {
      "commit": "93c82d575055f1bd0277acae6f966bebafd80dd5",
      "tree": "4b059485eb226291dac336921b32653131b0dd43",
      "parents": [
        "50a9b214bc6c052caa05a210ebfc1bdf0d7085b2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 12:36:29 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:08 2009 -0400"
      },
      "message": "Btrfs: zero page past end of inline file items\n\nWhen btrfs_get_extent is reading inline file items for readpage,\nit needs to copy the inline extent into the page.  If the\ninline extent doesn\u0027t cover all of the page, that means there\nis a hole in the file, or that our file is smaller than one\npage.\n\nreadpage does zeroing for the case where the file is smaller than one\npage, but nobody is currently zeroing for the case where there is\na hole after the inline item.\n\nThis commit changes btrfs_get_extent to zero fill the page past\nthe end of the inline item.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "50a9b214bc6c052caa05a210ebfc1bdf0d7085b2",
      "tree": "c5ae2e6a99778f237bdc88eb7157f7c4a82a2e54",
      "parents": [
        "a1ed835e1ab5795f91b198d08c43e2f56848dcf3"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 12:33:12 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:08 2009 -0400"
      },
      "message": "Btrfs: fix btrfs page_mkwrite to return locked page\n\nThis closes a whole where the page may be written before\nthe page_mkwrite caller has a chance to dirty it\n\n(thanks to Nick Piggin)\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a1ed835e1ab5795f91b198d08c43e2f56848dcf3",
      "tree": "ac3b370823fa76c5be7698e3663306badbbd622d",
      "parents": [
        "8b62b72b26bcd72082c4a69d179dd906bcc22200"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 12:27:37 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:07 2009 -0400"
      },
      "message": "Btrfs: Fix extent replacment race\n\nData COW means that whenever we write to a file, we replace any old\nextent pointers with new ones.  There was a window where a readpage\nmight find the old extent pointers on disk and cache them in the\nextent_map tree in ram in the middle of a given write replacing them.\n\nEven though both the readpage and the write had their respective bytes\nin the file locked, the extent readpage inserts may cover more bytes than\nit had locked down.\n\nThis commit closes the race by keeping the new extent pinned in the extent\nmap tree until after the on-disk btree is properly setup with the new\nextent pointers.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8b62b72b26bcd72082c4a69d179dd906bcc22200",
      "tree": "ceee20dfebe45654cb3a25d8916c195836cdbabf",
      "parents": [
        "9655d2982b53fdb38a9e0f2f11315b99b92d66e2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Sep 02 16:53:46 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:07 2009 -0400"
      },
      "message": "Btrfs: Use PagePrivate2 to track pages in the data\u003dordered code.\n\nBtrfs writes go through delalloc to the data\u003dordered code.  This\nmakes sure that all of the data is on disk before the metadata\nthat references it.  The tracking means that we have to make sure\neach page in an extent is fully written before we add that extent into\nthe on-disk btree.\n\nThis was done in the past by setting the EXTENT_ORDERED bit for the\nrange of an extent when it was added to the data\u003dordered code, and then\nclearing the EXTENT_ORDERED bit in the extent state tree as each page\nfinished IO.\n\nOne of the reasons we had to do this was because sometimes pages are\nmagically dirtied without page_mkwrite being called.  The EXTENT_ORDERED\nbit is checked at writepage time, and if it isn\u0027t there, our page become\ndirty without going through the proper path.\n\nThese bit operations make for a number of rbtree searches for each page,\nand can cause considerable lock contention.\n\nThis commit switches from the EXTENT_ORDERED bit to use PagePrivate2.\nAs pages go into the ordered code, PagePrivate2 is set on each one.\nThis is a cheap operation because we already have all the pages locked\nand ready to go.\n\nAs IO finishes, the PagePrivate2 bit is cleared and the ordered\naccoutning is updated for each page.\n\nAt writepage time, if the PagePrivate2 bit is missing, we go into the\nwritepage fixup code to handle improperly dirtied pages.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "9655d2982b53fdb38a9e0f2f11315b99b92d66e2",
      "tree": "e1271f2f2a3c2c356e0692b36a2d4742b5d651d8",
      "parents": [
        "d5550c6315fe0647b7ac21a6a736bf4a42620eac"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Sep 02 15:22:30 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:07 2009 -0400"
      },
      "message": "Btrfs: use a cached state for extent state operations during delalloc\n\nThis changes the btrfs code to find delalloc ranges in the extent state\ntree to use the new state caching code from set/test bit.  It reduces\none of the biggest causes of rbtree searches in the writeback path.\n\ntest_range_bit is also modified to take the cached state as a starting\npoint while searching.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2c64c53d8d30d43d0670482503a3914dfd3d6d46",
      "tree": "cfe7bfa8f5dc4078f8c995f305229622e25572b1",
      "parents": [
        "1edbb734b4e010974c41d2859d22a43d04f5f1cf"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Sep 02 15:04:12 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:06 2009 -0400"
      },
      "message": "Btrfs: cache values for locking extents\n\nMany of the btrfs extent state tree users follow the same pattern.\nThey lock an extent range in the tree, do some operation and then\nunlock.\n\nThis translates to at least 2 rbtree searches, and maybe more if they\nare doing operations on the extent state tree.  A locked extent\nin the tree isn\u0027t going to be merged or changed, and so we can\nsafely return the extent state structure as a cached handle.\n\nThis changes set_extent_bit to give back a cached handle, and also\nchanges both set_extent_bit and clear_extent_bit to use the cached\nhandle if it is available.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "890871be854b5f5e43e7ba2475f706209906cc24",
      "tree": "9d087adf7a28bb910992d07d93ea2a992e394110",
      "parents": [
        "57fd5a5ff8b48b99e90b22fc143082aba755c6c0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Sep 02 16:24:52 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:05 2009 -0400"
      },
      "message": "Btrfs: switch extent_map to a rw lock\n\nThere are two main users of the extent_map tree.  The\nfirst is regular file inodes, where it is evenly spread\nbetween readers and writers.\n\nThe second is the chunk allocation tree, which maps blocks from\nlogical addresses to phyiscal ones, and it is 99.99% reads.\n\nThe mapping tree is a point of lock contention during heavy IO\nworkloads, so this commit switches things to a rw lock.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "03e860bd9f6a3cca747b0795bed26279a8b420a0",
      "tree": "9a6e6fe663bfc5f01edac558433f314657c2eb67",
      "parents": [
        "df4ecf1524c7793de3121b2d4e5fc6bcc0da3bfb"
      ],
      "author": {
        "name": "From: Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Fri Aug 21 10:09:44 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Aug 21 10:09:44 2009 +0200"
      },
      "message": "btrfs: fix inode rbtree corruption\n\nNode may not be inserted over existing node. This causes inode tree\ncorruption and I was seeing crashes in inode_tree_del which I can not\nreproduce after this patch.\n\nThe other way to fix this would be to tie inode lifetime in the rbtree\nwith inode while not in freeing state. I had a look at this but it is\nnot so trivial at this point. At least this patch gets things working again.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nAcked-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "d6a0967c90dced0a8baf502e6f3d5862fd5a5805",
      "tree": "e0242d5077730dabc4102b7abad9ee0c41e33bc0",
      "parents": [
        "fb385003c4ac9634cf2448f6ded81e5fd1190c1f",
        "ceab36edd3d3ad3ffd01d41d6d1e05ac1ff8357e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 07 19:03:09 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 07 19:03:09 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix balancing oops when invalidate_inode_pages2 returns EBUSY\n  Btrfs: correct error-handling zlib error handling\n  Btrfs: remove superfluous NULL pointer check in btrfs_rename()\n  Btrfs: make sure the async caching thread advances the key\n  Btrfs: fix btrfs_remove_from_free_space corner case\n"
    },
    {
      "commit": "4baf8c9201e88546918cbfa61ea8062c38bc1644",
      "tree": "7ea84d6155aa7b4e246df56ea0f79d5b3da08d87",
      "parents": [
        "013f1b12f4fc479f697acae2f31bad220162cd03"
      ],
      "author": {
        "name": "Bartlomiej Zolnierkiewicz",
        "email": "bzolnier@gmail.com",
        "time": "Fri Aug 07 13:47:08 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Aug 07 13:47:08 2009 -0400"
      },
      "message": "Btrfs: remove superfluous NULL pointer check in btrfs_rename()\n\nThis takes care of the following entry from Dan\u0027s list:\n\nfs/btrfs/inode.c +4788 btrfs_rename(36) warning: variable derefenced before check \u0027old_inode\u0027\n\nReported-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nCc: Jonathan Corbet \u003ccorbet@lwn.net\u003e\nCc: Eugene Teo \u003ceteo@redhat.com\u003e\nCc: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Bartlomiej Zolnierkiewicz \u003cbzolnier@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "655c5d8fc110a9d4f90cc831bd009936f3e8df28",
      "tree": "6acb038a6dd8831830d8ae2f5485a4e411d0b579",
      "parents": [
        "ce4adcc6e5320062e0d993eb75152d165aaabbe6",
        "f25784b35f590c81d5fb8245a8cd45e1afb6f1b2"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 28 14:27:06 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 28 14:27:06 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (22 commits)\n  Btrfs: Fix async caching interaction with unmount\n  Btrfs: change how we unpin extents\n  Btrfs: Correct redundant test in add_inode_ref\n  Btrfs: find smallest available device extent during chunk allocation\n  Btrfs: clear all space_info-\u003efull after removing a block group\n  Btrfs: make flushoncommit mount option correctly wait on ordered_extents\n  Btrfs: Avoid delayed reference update looping\n  Btrfs: Fix ordering of key field checks in btrfs_previous_item\n  Btrfs: find_free_dev_extent doesn\u0027t handle holes at the start of the device\n  Btrfs: Remove code duplication in comp_keys\n  Btrfs: async block group caching\n  Btrfs: use hybrid extents+bitmap rb tree for free space\n  Btrfs: Fix crash on read failures at mount\n  Btrfs: remove of redundant btrfs_header_level\n  Btrfs: adjust NULL test\n  Btrfs: Remove broken sanity check from btrfs_rmap_block()\n  Btrfs: convert nested spin_lock_irqsave to spin_lock\n  Btrfs: make sure all dirty blocks are written at commit time\n  Btrfs: fix locking issue in btrfs_find_next_key\n  Btrfs: fix double increment of path-\u003eslots[0] in btrfs_next_leaf\n  ...\n"
    },
    {
      "commit": "33c17ad5717c887568c1de61f15e5d58ed66d189",
      "tree": "9593d6df5dd1a634361770d2cef87ab7c55b49b7",
      "parents": [
        "3acada49c2794c5aac21849e2ea05790c6dd2faa"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Wed Jul 22 16:49:01 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 22 16:49:01 2009 -0400"
      },
      "message": "Btrfs: adjust NULL test\n\nMove the call to BUG_ON to before the dereference of the tested value.\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "405f55712dfe464b3240d7816cc4fe4174831be2",
      "tree": "96c425ea7fa8b31058b8f83a433c5e5265c8ebc7",
      "parents": [
        "f9fabcb58a6d26d6efde842d1703ac7cfa9427b6"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Sat Jul 11 22:08:37 2009 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jul 12 12:22:34 2009 -0700"
      },
      "message": "headers: smp_lock.h redux\n\n* Remove smp_lock.h from files which don\u0027t need it (including some headers!)\n* Add smp_lock.h to files which do need it\n* Make smp_lock.h include conditional in hardirq.h\n  It\u0027s needed only for one kernel_locked() usage which is under CONFIG_PREEMPT\n\n  This will make hardirq.h inclusion cheaper for every PREEMPT\u003dn config\n  (which includes allmodconfig/allyesconfig, BTW)\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5291a12f0503e31e0b8e90ee8e4997d59c1c3aad",
      "tree": "63606ab8991540c5cb963e079be92a05fd829791",
      "parents": [
        "c7cba0623fc17fe766063d492810632366790763",
        "68f5a38c3ea4ae9cc7a40f86ff6d6d031583d93a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 02 16:52:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 02 16:52:38 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix error message formatting\n  Btrfs: fix use after free in btrfs_start_workers fail path\n  Btrfs: honor nodatacow/sum mount options for new files\n  Btrfs: update backrefs while dropping snapshot\n  Btrfs: account for space we may use in fallocate\n  Btrfs: fix the file clone ioctl for preallocated extents\n  Btrfs: don\u0027t log the inode in file_write while growing the file\n"
    },
    {
      "commit": "9427216476d4fa75103f39d4b228c47d56ba20da",
      "tree": "a6ed7b28aa778a4f9e0c9326f20215e75eb48d40",
      "parents": [
        "2c47e605a91dde6b0514f689645e7ab336c8592a"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 02 12:26:06 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 02 13:41:17 2009 -0400"
      },
      "message": "Btrfs: honor nodatacow/sum mount options for new files\n\nThe btrfs attr patches unconditionally inherited the inode flags field\nwithout honoring nodatacow and nodatasum.  This fix makes sure\nwe properly record the nodatacow/sum mount options in new inodes.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a970b0a16cc416a509d5ae8b1d70978664e6f4fe",
      "tree": "fa371ca55fd97cd00ddb3b27ba1a784551a469a0",
      "parents": [
        "c8a894d77de4a1e0a544577fd4eabc9aacd453a8"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Sat Jun 27 21:07:34 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 02 13:41:16 2009 -0400"
      },
      "message": "Btrfs: account for space we may use in fallocate\n\nUsing Eric Sandeen\u0027s xfstest for fallocate, you can easily trigger a ENOSPC\npanic on btrfs.  This is because we do not account for data we may use when\ndoing the fallocate.  This patch fixes the problem by properly reserving space,\nand then just freeing it when we are done.  The reservation stuff was made with\ndelalloc in mind, so its a little crude for this case, but it keeps the box\nfrom panicing.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "72c04902d1e27c8a324014cff1d4475c11b1cecd",
      "tree": "3e93abdd0a3eeedd6df5a1dc43170744f2fa7664",
      "parents": [
        "641cf4a668e9e69d2bc061e953422ff72a91f86e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 24 16:58:48 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 24 16:58:48 2009 -0400"
      },
      "message": "Get \"no acls for this inode\" right, fix shmem breakage\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5affd88a104af43f0063a12ad1ee4c7a587945dc",
      "tree": "95c727eac8669bd346f937b8be2d58ef716a2fe5",
      "parents": [
        "290c263bf83cd78e53b1aa3b42165f588163f2be"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 08 19:55:32 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 24 08:17:05 2009 -0400"
      },
      "message": "switch btrfs to inode-\u003ei_acl\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "59d697b70285c348c01cfc2695c3469ba71d7539",
      "tree": "e383e5a2c0fc6196bed269aac032d3e363e9c4f7",
      "parents": [
        "c3f8a40c1cd5591b882497d1d00d43d0e5bb4698"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 27 09:46:41 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:05 2009 -0400"
      },
      "message": "btrfs: remove -\u003ewrite_super and stop maintaining -\u003es_dirt\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6cbff00f4632c8060b06bfc9585805217f11e12e",
      "tree": "1886c4c855662172b84be2bfbd2aa5ac6a5c429d",
      "parents": [
        "c289811cc096c57ff35550ee8132793a4f9b5b59"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Apr 17 10:37:41 2009 +0200"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 10 11:29:52 2009 -0400"
      },
      "message": "Btrfs: implement FS_IOC_GETFLAGS/SETFLAGS/GETVERSION\n\nAdd support for the standard attributes set via chattr and read via\nlsattr.  Currently we store the attributes in the flags value in\nthe btrfs inode, but I wonder whether we should split it into two so\nthat we don\u0027t have to keep converting between the two formats.\n\nRemove the btrfs_clear_flag/btrfs_set_flag/btrfs_test_flag macros\nas they were confusing the existing code and got in the way of the\nnew additions.\n\nAlso add the FS_IOC_GETVERSION ioctl for getting i_generation as it\u0027s\ntrivial.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5d4f98a28c7d334091c1b7744f48a1acdd2a4ae0",
      "tree": "c611d7d824cbcdb777dd2d8e33e2ed1c5df8a9c6",
      "parents": [
        "5c939df56c3ea018b58e5aa76181284c2053d699"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Jun 10 10:45:14 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 10 11:29:46 2009 -0400"
      },
      "message": "Btrfs: Mixed back reference  (FORWARD ROLLING FORMAT CHANGE)\n\nThis commit introduces a new kind of back reference for btrfs metadata.\nOnce a filesystem has been mounted with this commit, IT WILL NO LONGER\nBE MOUNTABLE BY OLDER KERNELS.\n\nWhen a tree block in subvolume tree is cow\u0027d, the reference counts of all\nextents it points to are increased by one.  At transaction commit time,\nthe old root of the subvolume is recorded in a \"dead root\" data structure,\nand the btree it points to is later walked, dropping reference counts\nand freeing any blocks where the reference count goes to 0.\n\nThe increments done during cow and decrements done after commit cancel out,\nand the walk is a very expensive way to go about freeing the blocks that\nare no longer referenced by the new btree root.  This commit reduces the\ntransaction overhead by avoiding the need for dead root records.\n\nWhen a non-shared tree block is cow\u0027d, we free the old block at once, and the\nnew block inherits old block\u0027s references. When a tree block with reference\ncount \u003e 1 is cow\u0027d, we increase the reference counts of all extents\nthe new block points to by one, and decrease the old block\u0027s reference count by\none.\n\nThis dead tree avoidance code removes the need to modify the reference\ncounts of lower level extents when a non-shared tree block is cow\u0027d.\nBut we still need to update back ref for all pointers in the block.\nThis is because the location of the block is recorded in the back ref\nitem.\n\nWe can solve this by introducing a new type of back ref. The new\nback ref provides information about pointer\u0027s key, level and in which\ntree the pointer lives. This information allow us to find the pointer\nby searching the tree. The shortcoming of the new back ref is that it\nonly works for pointers in tree blocks referenced by their owner trees.\n\nThis is mostly a problem for snapshots, where resolving one of these\nfuzzy back references would be O(number_of_snapshots) and quite slow.\nThe solution used here is to use the fuzzy back references in the common\ncase where a given tree block is only referenced by one root,\nand use the full back references when multiple roots have a reference\non a given block.\n\nThis commit adds per subvolume red-black tree to keep trace of cached\ninodes. The red-black tree helps the balancing code to find cached\ninodes whose inode numbers within a given range.\n\nThis commit improves the balancing code by introducing several data\nstructures to keep the state of balancing. The most important one\nis the back ref cache. It caches how the upper level tree blocks are\nreferenced. This greatly reduce the overhead of checking back ref.\n\nThe improved balancing code scales significantly better with a large\nnumber of snapshots.\n\nThis is a very large commit and was written in a number of\npieces.  But, they depend heavily on the disk format change and were\nsquashed together to make sure git bisect didn\u0027t end up in a\nbad state wrt space balancing or the format change.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "cc7b0c9b701a079016183f3546b4d720194b367f",
      "tree": "a68f31ebb251158dd977c84f33a35a38728fe8aa",
      "parents": [
        "76a05b35a320e8c968d0fec8f512a1acae227309"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 13:31:21 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:33 2009 -0400"
      },
      "message": "Btrfs: remove some WARN_ONs in the IO failure path\n\nThese debugging WARN_ONs make too much console noise during regular\nIO failures.  An IO failure will still generate a number of messages\nas we verify checksums etc, but these two are not needed.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2757495c906113896b378bf084708846273c87b2",
      "tree": "883ae5bc6acd77cc9d1ce0932757827506664341",
      "parents": [
        "46a53cca826e71effe59e3cb4f383622c33ebdcb"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 13:10:02 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:31 2009 -0400"
      },
      "message": "Btrfs: init inode ordered_data_close flag properly\n\nThis flag is used to decide when we need to send a given file through\nthe ordered code to make sure it is fully written before a transaction\ncommits.  It was not being properly set to zero when the inode was\nbeing setup.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    }
  ],
  "next": "46a53cca826e71effe59e3cb4f383622c33ebdcb"
}
