)]}'
{
  "log": [
    {
      "commit": "1e20932a23578bb1ec59107843574e259b96193f",
      "tree": "844ae54293c4414fc4c232a36d0e4d4939dc35aa",
      "parents": [
        "cfc442b69696b593cb442f09997dcb4cb5748171",
        "c31931088fd6cf953bd0868a2647b6c3928e6c96"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 31 16:50:28 2012 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 31 16:49:53 2012 -0400"
      },
      "message": "Merge branch \u0027for-chris\u0027 of git://git.jan-o-sch.net/btrfs-unstable into for-linus\n\nConflicts:\n\tfs/btrfs/ulist.h\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c31931088fd6cf953bd0868a2647b6c3928e6c96",
      "tree": "657827f1fd4be55e2f1d52a661c8803b80c08de7",
      "parents": [
        "f395694c2cd76cb1882fa82dd37e761598367fe9"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Thu May 31 19:24:36 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Thu May 31 19:56:19 2012 +0200"
      },
      "message": "Btrfs: fix tree mod log rewinded level and rewinding of moved keys\n\nWhen we rewind REMOVE_WHILE_FREEING operations, there\u0027s code that allocates\na fresh buffer instead of cloning the old one. Setting that buffer\u0027s level\ncorrectly was missing in this case.\n\nWhen rewinding a MOVE_KEYS operation, btrfs_node_key_ptr_offset(slot) was\nmissing for memmove_extent_buffer()\u0027s arguments.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "f395694c2cd76cb1882fa82dd37e761598367fe9",
      "tree": "08e0ef4499046d1400d86b86c2f61a2a52a66cf6",
      "parents": [
        "e9b7fd4d8b7c915cff353ca085b83bd19737396b"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Thu May 31 15:02:32 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Thu May 31 19:56:19 2012 +0200"
      },
      "message": "Btrfs: fix tree mod log del_ptr\n\nLogging for del_ptr when we\u0027re not deleting the last pointer was wrong. This\nfixes both, duplicate log entries and log sequence.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "e9b7fd4d8b7c915cff353ca085b83bd19737396b",
      "tree": "44cb78d1d1a5d677b0c01fd082554150a2f0ce20",
      "parents": [
        "926dd8a640da1bbf7478eebea1c23a842fc9c890"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Thu May 31 14:59:09 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Thu May 31 19:56:18 2012 +0200"
      },
      "message": "Btrfs: add tree_mod_dont_log helper\n\nReplace duplicate code by small inline helper function.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "926dd8a640da1bbf7478eebea1c23a842fc9c890",
      "tree": "92ca5d559964d910575de487fdb66372ad5caa60",
      "parents": [
        "3301958b7c1dae8f0f5ded63aa881e0b71e78464"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Thu May 31 14:00:15 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Thu May 31 19:56:18 2012 +0200"
      },
      "message": "Btrfs: add missing spin_lock for insertion into tree mod log\n\ntree_mod_alloc calls __get_tree_mod_seq and must acquire a spinlock before\ndoing so.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "018642a1f197887058e97291460b890d296e8953",
      "tree": "5fc77a516728d0281873dc19f66ef9ca9e92ae34",
      "parents": [
        "733f4fbbc1083aa343da739f46ee839705d6cfe3"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Tue May 29 18:10:13 2012 +0900"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed May 30 10:23:41 2012 -0400"
      },
      "message": "Btrfs: return value of btrfs_read_buffer is checked correctly\n\nbtrfs_read_buffer() has the possibility of returning the error.\nTherefore, I add the code in which the return value of btrfs_read_buffer()\nis checked.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "5d9e75c41d11ca79b1d1ff6ed17c88c9047d1fea",
      "tree": "c7e6e1011997dcba5fd9522cd4172b34dec15860",
      "parents": [
        "f3ea38da3e76455fbd6d405cdca4d050ed085458"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed May 16 18:25:47 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed May 30 15:17:33 2012 +0200"
      },
      "message": "Btrfs: add btrfs_search_old_slot\n\nThe tree modification log together with the current state of the tree gives\na consistent, old version of the tree. btrfs_search_old_slot is used to\nsearch through this old version and return old (dummy!) extent buffers.\nNaturally, this function cannot do any tree modifications.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "f3ea38da3e76455fbd6d405cdca4d050ed085458",
      "tree": "8d0a86f40ca9516cb1a174c0716075e230bbfa0f",
      "parents": [
        "f230475e62f77930e776881deb6e95cfd2226bd4"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Sat May 26 11:45:21 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed May 30 15:17:32 2012 +0200"
      },
      "message": "Btrfs: add del_ptr and insert_ptr modifications to the tree mod log\n\nRecord all relevant modifications to block pointers in the tree mod log so\nthat we can rewind them later on for backref walking.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "f230475e62f77930e776881deb6e95cfd2226bd4",
      "tree": "bf57ab6531a988d5566138b9a4cf916ecfcbbf3f",
      "parents": [
        "bd989ba359f2acb8bc5f5490e19010fc0a6f8356"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Sat May 26 11:43:17 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed May 30 15:17:29 2012 +0200"
      },
      "message": "Btrfs: put all block modifications into the tree mod log\n\nWhen running functions that can make changes to the internal trees\n(e.g. btrfs_search_slot), we check if somebody may be interested in the\nblock we\u0027re currently modifying. If so, we record our modification to be\nable to rewind it later on.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "bd989ba359f2acb8bc5f5490e19010fc0a6f8356",
      "tree": "3689629e226678802bfe9b8a91ae560ef50a93f0",
      "parents": [
        "f29021b29a85701c08afadfd51d87163fb078059"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed May 16 17:18:50 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed May 30 15:17:01 2012 +0200"
      },
      "message": "Btrfs: add tree modification log functions\n\nThe tree mod log will log modifications made fs-tree nodes. Most\nmodifications are done by autobalance of the tree. Such changes are recorded\nas long as a block entry exists. When released, the log is cleaned.\n\nWith the tree modification log, it\u0027s possible to reconstruct a consistent\nold state of the tree. This is required to do backref walking on a busy\nfile system.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "5581a51a59a1f5f51ac3d4bacafb738d35e0350b",
      "tree": "d7e291e139d08f2be7870c9da602658df8f51ce8",
      "parents": [
        "976b1908d97bd8cbd024ba7aafaa3fb637ea8e13"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed May 16 17:04:52 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Sat May 26 12:17:53 2012 +0200"
      },
      "message": "Btrfs: don\u0027t set for_cow parameter for tree block functions\n\nThree callers of btrfs_free_tree_block or btrfs_alloc_tree_block passed\nparameter for_cow \u003d 1. In fact, these two functions should never mark\ntheir tree modification operations as for_cow, because they can change\nthe number of blocks referenced by a tree.\n\nHence, we remove the extra for_cow parameter from these functions and\nmake them pass a zero down.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "f775738f6fba9c7f6deaa540860d6fb7e2d28445",
      "tree": "ad2276d30997368ea4f5fc90daee9d8c71ad03ba",
      "parents": [
        "d48b97b403d23f6df0b990cee652bdf9a52337a3"
      ],
      "author": {
        "name": "Wang Sheng-Hui",
        "email": "shhuiw@gmail.com",
        "time": "Fri Mar 30 15:14:27 2012 +0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri May 11 10:56:37 2012 -0400"
      },
      "message": "btrfs/ctree.c: remove the unnecessary \u0027return -1;\u0027 at the end of bin_search\n\nThe code path should not reach there. Remove it.\n\nSigned-off-by: Wang Sheng-Hui \u003cshhuiw@gmail.com\u003e\n"
    },
    {
      "commit": "b9fab919b748c7b39c19ff236ed6c5682c266dde",
      "tree": "49e5a6f8041a7f0a9be0c1a39cd9088e3faa1df2",
      "parents": [
        "ea9947b4395fa34666086b2fa6f686e94903e047"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun May 06 07:23:47 2012 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun May 06 07:23:47 2012 -0400"
      },
      "message": "Btrfs: avoid sleeping in verify_parent_transid while atomic\n\nverify_parent_transid needs to lock the extent range to make\nsure no IO is underway, and so it can safely clear the\nuptodate bits if our checks fail.\n\nBut, a few callers are using it with spinlocks held.  Most\nof the time, the generation numbers are going to match, and\nwe don\u0027t want to switch to a blocking lock just for the error\ncase.  This adds an atomic flag to verify_parent_transid,\nand changes it to return EAGAIN if it needs to block to\nproperly verifiy things.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "e5846fc665d1c3dd32d877febe7402ccd583b8a1",
      "tree": "162d4487dd5cb573036507821d92d5c0c559d56b",
      "parents": [
        "dc7fdde39e4962b1a88741f7eba2a6b3be1285d8"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 03 12:08:48 2012 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri May 04 15:14:11 2012 -0400"
      },
      "message": "Btrfs: Add properly locking around add_root_to_dirty_list\n\nadd_root_to_dirty_list happens once at the very beginning of the\ntransaction, but it is still racey.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "1d4284bd6e8d7dd1d5521a6747bdb6dc1caf0225",
      "tree": "a7dde6312ec24eb6368cad7a3efedbf368a5a70c",
      "parents": [
        "b5d67f64f9bc656970dacba245410f0faedad18e",
        "65139ed99234d8505948cdb7a835452eb5c191f9"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Mar 28 20:31:37 2012 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Mar 28 20:31:37 2012 -0400"
      },
      "message": "Merge branch \u0027error-handling\u0027 into for-linus\n\nConflicts:\n\tfs/btrfs/ctree.c\n\tfs/btrfs/disk-io.c\n\tfs/btrfs/extent-tree.c\n\tfs/btrfs/extent_io.c\n\tfs/btrfs/extent_io.h\n\tfs/btrfs/inode.c\n\tfs/btrfs/scrub.c\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "f7c79f30cb2d3883488e70cafc9e3a7edd4b9fdb",
      "tree": "784c5c878e85a7b8fa283e22767b057d6cfcfa40",
      "parents": [
        "a098d8e8eec5a46a47b1bb74390746973d913a9c"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 19 15:54:38 2012 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 26 17:04:24 2012 -0400"
      },
      "message": "Btrfs: adjust the write_lock_level as we unlock\n\nbtrfs_search_slot sometimes needs write locks on high levels of\nthe tree.  It remembers the highest level that needs a write lock\nand will use that for all future searches through the tree in a given\ncall.\n\nBut, very often we\u0027ll just cow the top level or the level below and we\nwon\u0027t really need write locks on the root again after that.  This patch\nchanges things to adjust the write lock requirement as it unlocks\nlevels.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "cfed81a04eb555f5606d1b6a54bdbabab0ee1ac3",
      "tree": "2a763276869693b21c0e3a14f725f642c1f27fd3",
      "parents": [
        "0b32f4bbb423f02acee6d43cd442f5f0775db7e0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat Mar 03 07:40:03 2012 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 26 17:04:23 2012 -0400"
      },
      "message": "Btrfs: add the ability to cache a pointer into the eb\n\nThis cuts down on the CPU time used by map_private_extent_buffer\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3083ee2e18b701122a3b841db83448543a87a583",
      "tree": "0265021499da54e5b4667a041f8b82c6d1a8667e",
      "parents": [
        "115391d2315239164e400a8259b26392afccf3bd"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Mar 09 16:01:49 2012 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 26 16:51:08 2012 -0400"
      },
      "message": "Btrfs: introduce free_extent_buffer_stale\n\nBecause btrfs cow\u0027s we can end up with extent buffers that are no longer\nnecessary just sitting around in memory.  So instead of evicting these pages, we\ncould end up evicting things we actually care about.  Thus we have\nfree_extent_buffer_stale for use when we are freeing tree blocks.  This will\nmake it so that the ref for the eb being in the radix tree is dropped as soon as\npossible and then is freed when the refcount hits 0 instead of waiting to be\nreleased by releasepage.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "79787eaab46121d4713ed03c8fc63b9ec3eaec76",
      "tree": "ee6b17d0811ee54ab74a03aa4e0bb92769d2f12a",
      "parents": [
        "49b25e0540904be0bf558b84475c69d72e4de66e"
      ],
      "author": {
        "name": "Jeff Mahoney",
        "email": "jeffm@suse.com",
        "time": "Mon Mar 12 16:03:00 2012 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Mar 22 11:52:54 2012 +0100"
      },
      "message": "btrfs: replace many BUG_ONs with proper error handling\n\n btrfs currently handles most errors with BUG_ON. This patch is a work-in-\n progress but aims to handle most errors other than internal logic\n errors and ENOMEM more gracefully.\n\n This iteration prevents most crashes but can run into lockups with\n the page lock on occasion when the timing \"works out.\"\n\nSigned-off-by: Jeff Mahoney \u003cjeffm@suse.com\u003e\n"
    },
    {
      "commit": "305a26af5b2561a66859ef05ed7eb73d3c9f0913",
      "tree": "9afdcd2ccbe2a72b7dadaf25f92a4a1ec109ecfe",
      "parents": [
        "b68dc2a93e794c8507338c91577a277efa4555d5"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Sep 01 11:27:57 2011 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Mar 22 01:45:38 2012 +0100"
      },
      "message": "btrfs: Go readonly on tree errors in balance_level\n\nbalace_level() seems to deal with missing tree nodes by BUG_ON(). Instead,\nwe can easily just set the file system readonly and bubble -EROFS back up\nthe stack.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "b68dc2a93e794c8507338c91577a277efa4555d5",
      "tree": "b4e8cbdafdd893a22abbbd7edca989ea018b6a72",
      "parents": [
        "e5df957328b18baa731307c66cfe8e7a4981df65"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Aug 29 14:30:39 2011 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Mar 22 01:45:38 2012 +0100"
      },
      "message": "btrfs: Don\u0027t BUG_ON errors from update_ref_for_cow()\n\n__btrfs_cow_block(), the only caller of update_ref_for_cow() will BUG_ON()\nany error return.  Instead, we can go read-only fs as update_ref_for_cow()\nmanipulates disk data in a way which doesn\u0027t look like it\u0027s easily rolled\nback.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.de\u003e\n"
    },
    {
      "commit": "e5df957328b18baa731307c66cfe8e7a4981df65",
      "tree": "19f092c1e65c639c17a2fc0582d01b0ebfb3e3a7",
      "parents": [
        "4ed1d16e944c61cfb8a78159548672e7df168d97"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Aug 29 14:17:04 2011 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Mar 22 01:45:37 2012 +0100"
      },
      "message": "btrfs: Go readonly on bad extent refs in update_ref_for_cow()\n\nupdate_ref_for_cow() will BUG_ON() after it\u0027s call to\nbtrfs_lookup_extent_info() if no existing references are found.  Since refs\nare computed directly from disk, this should be treated as a corruption\ninstead of a logic error.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.de\u003e\n"
    },
    {
      "commit": "be1a5564fd39fa2ca6adbb41c75fb08f96a1ffcb",
      "tree": "de88d181ecbdcb130343116d7a6f71bbbc4a7e1a",
      "parents": [
        "ce598979be6f83549c90f42ba522a19a33727611"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Aug 08 13:20:18 2011 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Mar 22 01:45:36 2012 +0100"
      },
      "message": "btrfs: Don\u0027t BUG_ON() errors in update_ref_for_cow()\n\nThe only caller of update_ref_for_cow() is __btrfs_cow_block() which was\noriginally ignoring any return values. update_ref_for_cow() however doesn\u0027t\nlook like a candidate to become a void function - there are a few places\nwhere errors can occur.\n\nSo instead I changed update_ref_for_cow() to bubble all errors up (instead\nof BUG_ON). __btrfs_cow_block() was then updated to catch and BUG_ON() any\nerrors from update_ref_for_cow(). The end effect is that we have no change\nin behavior, but about 8 different places where a BUG_ON(ret) was removed.\n\nObviously a future patch will have to address the BUG_ON() in\n__btrfs_cow_block().\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.de\u003e\n"
    },
    {
      "commit": "143bede527b054a271053f41bfaca2b57baa9408",
      "tree": "95c71d3705c73bf98e7a1547da35e70a44703c1e",
      "parents": [
        "ffd7b33944f4573a063af7a55f8a5199c8185665"
      ],
      "author": {
        "name": "Jeff Mahoney",
        "email": "jeffm@suse.com",
        "time": "Thu Mar 01 14:56:26 2012 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Mar 22 01:45:34 2012 +0100"
      },
      "message": "btrfs: return void in functions without error conditions\n\nSigned-off-by: Jeff Mahoney \u003cjeffm@suse.com\u003e\n"
    },
    {
      "commit": "66d7e7f09f77456fe68683247d77721032a00ee5",
      "tree": "bbf7df3933ed47aa202d60d835864543d25df82d",
      "parents": [
        "c7d22a3c3cdb73d8a0151e2ccc8cf4a48c48310b"
      ],
      "author": {
        "name": "Arne Jansen",
        "email": "sensille@gmx.net",
        "time": "Mon Sep 12 15:26:38 2011 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Thu Dec 22 16:22:27 2011 +0100"
      },
      "message": "Btrfs: mark delayed refs as for cow\n\nAdd a for_cow parameter to add_delayed_*_ref and pass the appropriate value\nfrom every call site. The for_cow parameter will later on be used to\ndetermine if a ref will change anything with respect to qgroups.\n\nDelayed refs coming from relocation are always counted as for_cow, as they\ndon\u0027t change subvol quota.\n\nAlso pass in the fs_info for later use.\n\nbtrfs_find_all_roots() will use this as an optimization, as changes that are\nfor_cow will not change anything with respect to which root points to a\ncertain leaf. Thus, we don\u0027t need to add the current sequence number to\nthose delayed refs.\n\nSigned-off-by: Arne Jansen \u003csensille@gmx.net\u003e\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "f1ebcc74d5b2159f44c96b479b6eb8afc7829095",
      "tree": "83d949e151f2f7e4a980396538cc0f2356bacfd4",
      "parents": [
        "8965593e41dd2d0e2a2f1e6f245336005ea94a2c"
      ],
      "author": {
        "name": "Liu Bo",
        "email": "liubo2009@cn.fujitsu.com",
        "time": "Mon Nov 14 20:48:06 2011 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Nov 15 09:53:28 2011 -0500"
      },
      "message": "Btrfs: fix tree corruption after multi-thread snapshots and inode_cache flush\n\nThe btrfs snapshotting code requires that once a root has been\nsnapshotted, we don\u0027t change it during a commit.\n\nBut there are two cases to lead to tree corruptions:\n\n1) multi-thread snapshots can commit serveral snapshots in a transaction,\n   and this may change the src root when processing the following pending\n   snapshots, which lead to the former snapshots corruptions;\n\n2) the free inode cache was changing the roots when it root the cache,\n   which lead to corruptions.\n\nThis fixes things by making sure we force COW the block after we create a\nsnapshot during commiting a transaction, then any changes to the roots\nwill result in COW, and we get all the fs roots and snapshot roots to be\nconsistent.\n\nSigned-off-by: Liu Bo \u003cliubo2009@cn.fujitsu.com\u003e\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a05a9bb18ae0abec0b513b5fde876c47905fa13e",
      "tree": "80a74076bdbb86da8f02a209603526e5c0f524bb",
      "parents": [
        "f4c697e6406da5dd445eda8d923c53e1138793dd"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Tue Sep 06 16:55:34 2011 +0800"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Oct 20 18:10:41 2011 +0200"
      },
      "message": "Btrfs: fix array bound checking\n\nOtherwise we can execced the array bound of path-\u003eslots[].\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "31533fb263928c93a34cda41b66a6e83ade5c766",
      "tree": "b4f3a770e805403adc1931f3bb15213ee2a0d624",
      "parents": [
        "85d4e461117b40eb10722f774566b19bd5e77879"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Jul 26 16:01:59 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 27 12:46:47 2011 -0400"
      },
      "message": "Btrfs: remove lockdep magic from btrfs_next_leaf\n\nBefore the reader/writer locks, btrfs_next_leaf needed to keep\nthe path blocking to avoid making lockdep upset.\n\nNow that btrfs_next_leaf only takes read locks, this isn\u0027t required.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "bd681513fa6f2ff29aa391f01e413a2d1c59fd77",
      "tree": "bb10ec6ef876b4d7a553cbe54976ec49a0d10b21",
      "parents": [
        "81317fdeddcef259b6ecf7b5c0d04caa167c6b54"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat Jul 16 15:23:14 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 27 12:46:46 2011 -0400"
      },
      "message": "Btrfs: switch the btrfs tree locks to reader/writer\n\nThe btrfs metadata btree is the source of significant\nlock contention, especially in the root node.   This\ncommit changes our locking to use a reader/writer\nlock.\n\nThe lock is built on top of rw spinlocks, and it\nextends the lock tracking to remember if we have a\nread lock or a write lock when we go to blocking.  Atomics\ncount the number of blocking readers or writers at any\ngiven time.\n\nIt removes all of the adaptive spinning from the old code\nand uses only the spinning/blocking hints inside of btrfs\nto decide when it should continue spinning.\n\nIn read heavy workloads this is dramatically faster.  In write\nheavy workloads we\u0027re still faster because of less contention\non the root node lock.\n\nWe suffer slightly in dbench because we schedule more often\nduring write locks, but all other benchmarks so far are improved.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a65917156e345946dbde3d7effd28124c6d6a8c2",
      "tree": "dc5478189be0f6a321bfc23ee0545f71de67763b",
      "parents": [
        "199c36eaa95077a47ae1bc55532fc0fbeb80cc95"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Jul 19 12:04:14 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 27 12:46:45 2011 -0400"
      },
      "message": "Btrfs: stop using highmem for extent_buffers\n\nThe extent_buffers have a very complex interface where\nwe use HIGHMEM for metadata and try to cache a kmap mapping\nto access the memory.\n\nThe next commit adds reader/writer locks, and concurrent use\nof this kmap cache would make it even more complex.\n\nThis commit drops the ability to use HIGHMEM with extent buffers,\nand rips out all of the related code.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "25b8b936ed44814a5ce6fc3b2a21401f33cd56f6",
      "tree": "3f95ff0f54340bf63885e1d38766cf52a05d3029",
      "parents": [
        "f6a398298d34af66ec3a2d82a44a4dbc5277357d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Jun 08 14:36:54 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Jun 09 10:12:07 2011 -0400"
      },
      "message": "Btrfs: don\u0027t map extent buffer if path-\u003eskip_locking is set\n\nArne\u0027s scrub stuff exposed a problem with mapping the extent buffer in\nreada_for_search.  He searches the commit root with multiple threads and with\nskip_locking set, so we can race and overwrite node-\u003emap_token since node isn\u0027t\nlocked.  So fix this so that we only map the extent buffer if we don\u0027t already\nhave a map_token and skip_locking isn\u0027t set.  Without this patch scrub would\npanic almost immediately, with the patch it doesn\u0027t panic anymore.  Thanks,\n\nReported-by: Arne Jansen \u003csensille@gmx.net\u003e\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "ff5714cca971848963b87d6b477c16ca8abbaa54",
      "tree": "17ee34b9b5e00804df4059503f82f6f1d94383a9",
      "parents": [
        "174ba50915b08dcfd07c8b5fb795b46a165fa09a",
        "d90c732122a1f6d0efe388a8a204f67f144b2eb3"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat May 28 07:00:39 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat May 28 07:00:39 2011 -0400"
      },
      "message": "Merge branch \u0027for-chris\u0027 of\ngit://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs-work into for-linus\n\nConflicts:\n\tfs/btrfs/disk-io.c\n\tfs/btrfs/extent-tree.c\n\tfs/btrfs/free-space-cache.c\n\tfs/btrfs/inode.c\n\tfs/btrfs/transaction.c\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d6c0cb379c5198487e4ac124728cbb2346d63b1f",
      "tree": "167a97ac58c7a2fbf7c4e94b6abbfe1e03af014a",
      "parents": [
        "8e531cdfeb75269c6c5aae33651cca39707848da",
        "1f78160ce1b1b8e657e2248118c4d91f881763f0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 14:37:47 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 14:37:47 2011 -0400"
      },
      "message": "Merge branch \u0027cleanups_and_fixes\u0027 into inode_numbers\n\nConflicts:\n\tfs/btrfs/tree-log.c\n\tfs/btrfs/volumes.c\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "1cd307990d6e2b4965620e339a92e0d7ae853e13",
      "tree": "cd3cc9c06e2c7bbbeda4d38bbcc00d44bfd98a02",
      "parents": [
        "65a246c5ffe3b487a001de025816326939e63362"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Thu May 19 05:19:08 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 13:24:39 2011 -0400"
      },
      "message": "Btrfs: BUG_ON is deleted from the caller of btrfs_truncate_item \u0026 btrfs_extend_item\n\nCurrently, btrfs_truncate_item and btrfs_extend_item returns only 0.\nSo, the check by BUG_ON in the caller is unnecessary.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "026fd317828500524cdc7e5ff9e8e7923abb2868",
      "tree": "d303bffbd895c307f49286cd90186cf58223dde2",
      "parents": [
        "589d8ade83f07c0f11c8191c0ca309f34d7a2c14"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri May 13 10:32:11 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon May 23 13:03:14 2011 -0400"
      },
      "message": "Btrfs: don\u0027t always do readahead\n\nOur readahead is sort of sloppy, and really isn\u0027t always needed.  For example if\nls is doing a stating ls (which is the default) it\u0027s going to stat in non-disk\norder, so if say you have a directory with a stupid amount of files, readahead\nis going to do nothing but waste time in the case of doing the stat.  Taking the\nunconditional readahead out made my test go from 57 minutes to 36 minutes.  This\nmeans that everywhere we do loop through the tree we want to make sure we do set\npath-\u003ereada properly, so I went through and found all of the places where we\nloop through the path and set reada to 1.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "7e2355ba1a11649f0b212a29fdb9f47476f1248e",
      "tree": "94960a4d30595f9806dc66dcc36ae10756936f7c",
      "parents": [
        "cb25c2ea6a79702ab7895b873c6c43e0d3bc3c72"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed May 11 12:25:37 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon May 23 13:03:11 2011 -0400"
      },
      "message": "Btrfs: don\u0027t look at the extent buffer level 3 times in a row\n\nWe have a bit of debugging in btrfs_search_slot to make sure the level of the\ncow block is the same as the original block we were cow\u0027ing.  I don\u0027t think I\u0027ve\never seen this tripped, so kill it.  This saves us 2 kmap\u0027s per level in our\nsearch.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "cb25c2ea6a79702ab7895b873c6c43e0d3bc3c72",
      "tree": "08d112b38a1e017b563035b78861288dbf0d2fd6",
      "parents": [
        "af60bed24eb0e3b6d93eaa6bb395a5721e6c09a8"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed May 11 12:17:34 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon May 23 13:03:10 2011 -0400"
      },
      "message": "Btrfs: map the node block when looking for readahead targets\n\nIf we have particularly full nodes, we could call btrfs_node_blockptr up to 32\ntimes, which is 32 pairs of kmap/kunmap, which _sucks_.  So go ahead and map the\nextent buffer while we look for readahead targets.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "945d8962ceee6bb273365d0bdf42f763225b290f",
      "tree": "43f5617022c7c947c3c63664e49eb9575ab82f2f",
      "parents": [
        "0d0ca30f180906224be6279788f2b202cfd959d8",
        "4ea028859bbdad34b84c9951fbb832ae10c6a96c"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun May 22 12:33:42 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun May 22 12:33:42 2011 -0400"
      },
      "message": "Merge branch \u0027cleanups\u0027 of git://repo.or.cz/linux-2.6/btrfs-unstable into inode_numbers\n\nConflicts:\n\tfs/btrfs/extent-tree.c\n\tfs/btrfs/free-space-cache.c\n\tfs/btrfs/inode.c\n\tfs/btrfs/tree-log.c\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "16cdcec736cd214350cdb591bf1091f8beedefa0",
      "tree": "5598d4561660c4d7a1d4de8b3703d6dd3cc7f9e7",
      "parents": [
        "61c4f2c81c61f73549928dfd9f3e8f26aa36a8cf"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Fri Apr 22 18:12:22 2011 +0800"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat May 21 09:30:56 2011 -0400"
      },
      "message": "btrfs: implement delayed inode items operation\n\nChangelog V5 -\u003e V6:\n- Fix oom when the memory load is high, by storing the delayed nodes into the\n  root\u0027s radix tree, and letting btrfs inodes go.\n\nChangelog V4 -\u003e V5:\n- Fix the race on adding the delayed node to the inode, which is spotted by\n  Chris Mason.\n- Merge Chris Mason\u0027s incremental patch into this patch.\n- Fix deadlock between readdir() and memory fault, which is reported by\n  Itaru Kitayama.\n\nChangelog V3 -\u003e V4:\n- Fix nested lock, which is reported by Itaru Kitayama, by updating space cache\n  inode in time.\n\nChangelog V2 -\u003e V3:\n- Fix the race between the delayed worker and the task which does delayed items\n  balance, which is reported by Tsutomu Itoh.\n- Modify the patch address David Sterba\u0027s comment.\n- Fix the bug of the cpu recursion spinlock, reported by Chris Mason\n\nChangelog V1 -\u003e V2:\n- break up the global rb-tree, use a list to manage the delayed nodes,\n  which is created for every directory and file, and used to manage the\n  delayed directory name index items and the delayed inode item.\n- introduce a worker to deal with the delayed nodes.\n\nCompare with Ext3/4, the performance of file creation and deletion on btrfs\nis very poor. the reason is that btrfs must do a lot of b+ tree insertions,\nsuch as inode item, directory name item, directory name index and so on.\n\nIf we can do some delayed b+ tree insertion or deletion, we can improve the\nperformance, so we made this patch which implemented delayed directory name\nindex insertion/deletion and delayed inode update.\n\nImplementation:\n- introduce a delayed root object into the filesystem, that use two lists to\n  manage the delayed nodes which are created for every file/directory.\n  One is used to manage all the delayed nodes that have delayed items. And the\n  other is used to manage the delayed nodes which is waiting to be dealt with\n  by the work thread.\n- Every delayed node has two rb-tree, one is used to manage the directory name\n  index which is going to be inserted into b+ tree, and the other is used to\n  manage the directory name index which is going to be deleted from b+ tree.\n- introduce a worker to deal with the delayed operation. This worker is used\n  to deal with the works of the delayed directory name index items insertion\n  and deletion and the delayed inode update.\n  When the delayed items is beyond the lower limit, we create works for some\n  delayed nodes and insert them into the work queue of the worker, and then\n  go back.\n  When the delayed items is beyond the upper bound, we create works for all\n  the delayed nodes that haven\u0027t been dealt with, and insert them into the work\n  queue of the worker, and then wait for that the untreated items is below some\n  threshold value.\n- When we want to insert a directory name index into b+ tree, we just add the\n  information into the delayed inserting rb-tree.\n  And then we check the number of the delayed items and do delayed items\n  balance. (The balance policy is above.)\n- When we want to delete a directory name index from the b+ tree, we search it\n  in the inserting rb-tree at first. If we look it up, just drop it. If not,\n  add the key of it into the delayed deleting rb-tree.\n  Similar to the delayed inserting rb-tree, we also check the number of the\n  delayed items and do delayed items balance.\n  (The same to inserting manipulation)\n- When we want to update the metadata of some inode, we cached the data of the\n  inode into the delayed node. the worker will flush it into the b+ tree after\n  dealing with the delayed insertion and deletion.\n- We will move the delayed node to the tail of the list after we access the\n  delayed node, By this way, we can cache more delayed items and merge more\n  inode updates.\n- If we want to commit transaction, we will deal with all the delayed node.\n- the delayed node will be freed when we free the btrfs inode.\n- Before we log the inode items, we commit all the directory name index items\n  and the delayed inode update.\n\nI did a quick test by the benchmark tool[1] and found we can improve the\nperformance of file creation by ~15%, and file deletion by ~20%.\n\nBefore applying this patch:\nCreate files:\n        Total files: 50000\n        Total time: 1.096108\n        Average time: 0.000022\nDelete files:\n        Total files: 50000\n        Total time: 1.510403\n        Average time: 0.000030\n\nAfter applying this patch:\nCreate files:\n        Total files: 50000\n        Total time: 0.932899\n        Average time: 0.000019\nDelete files:\n        Total files: 50000\n        Total time: 1.215732\n        Average time: 0.000024\n\n[1] http://marc.info/?l\u003dlinux-btrfs\u0026m\u003d128212635122920\u0026q\u003dp3\n\nMany thanks for Kitayama-san\u0027s help!\n\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nReviewed-by: David Sterba \u003cdave@jikos.cz\u003e\nTested-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nTested-by: Itaru Kitayama \u003ckitayama@cl.bb4u.ne.jp\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b3b4aa74b58bded927f579fff787fb6fa1c0393c",
      "tree": "30dab4ab26558992dd8b6b212bef805de11c4c29",
      "parents": [
        "ba14419264684b290f0d0b7f48d26eafb11fc0c6"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Apr 21 01:20:15 2011 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Mon May 02 13:57:22 2011 +0200"
      },
      "message": "btrfs: drop unused parameter from btrfs_release_path\n\nparameter tree root it\u0027s not used since commit\n5f39d397dfbe140a14edecd4e73c34ce23c4f9ee (\"Btrfs: Create extent_buffer\ninterface for large blocksizes\")\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\n"
    },
    {
      "commit": "62a45b60923a576170a1a0c309c240d9f40d193d",
      "tree": "f432d4b9973b977855344dbb2abd0419400d56d0",
      "parents": [
        "c704005d886cf0bc9bc3974eb009b22fe0da32c7"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Wed Apr 20 15:52:26 2011 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Mon May 02 13:57:20 2011 +0200"
      },
      "message": "btrfs: make functions static when possible\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\n"
    },
    {
      "commit": "edc95aec57661c8e568e18f6c3f002aefa07ebc8",
      "tree": "a3f2570fb6aa53f89eb7a453bd3435dff4c3ba8d",
      "parents": [
        "306e16ce13c0f3d4fc071b45803b5b83c2606011"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Tue Apr 19 14:31:08 2011 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Mon May 02 13:57:19 2011 +0200"
      },
      "message": "btrfs: remove nested duplicate variable declarations\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\n"
    },
    {
      "commit": "97d9a8a420444eb5b5c071d4b3b9c4100a7ae015",
      "tree": "4ed3e77541ebcc4885c4a10630e2f6bf94d3cef2",
      "parents": [
        "7e75bf3ff3a716d7b21d8fb43bf823115801c1e9"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Thu Mar 24 06:33:21 2011 +0000"
      },
      "committer": {
        "name": "root",
        "email": "Chris Mason chris.mason@oracle.com",
        "time": "Mon Mar 28 05:37:37 2011 -0400"
      },
      "message": "Btrfs: check return value of read_tree_block()\n\nThis patch is checking return value of read_tree_block(),\nand if it is NULL, error processing.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "db5b493ac78e46c7b6bad22cd25d8041564cd8ea",
      "tree": "18f484c3d8194b80165e5400831931a3ac5c58ba",
      "parents": [
        "1abe9b8a138c9988ba8f7bfded6453649a31541f"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Wed Mar 23 08:14:16 2011 +0000"
      },
      "committer": {
        "name": "root",
        "email": "Chris Mason chris.mason@oracle.com",
        "time": "Mon Mar 28 05:37:35 2011 -0400"
      },
      "message": "Btrfs: cleanup some BUG_ON()\n\nThis patch changes some BUG_ON() to the error return.\n(but, most callers still use BUG_ON())\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "1abe9b8a138c9988ba8f7bfded6453649a31541f",
      "tree": "9fe0c181e78b075b65f6b1802f0a5092e7afbc6a",
      "parents": [
        "240f62c8756df285da11469259b3900f32883168"
      ],
      "author": {
        "name": "liubo",
        "email": "liubo2009@cn.fujitsu.com",
        "time": "Thu Mar 24 11:18:59 2011 +0000"
      },
      "committer": {
        "name": "root",
        "email": "Chris Mason chris.mason@oracle.com",
        "time": "Mon Mar 28 05:37:33 2011 -0400"
      },
      "message": "Btrfs: add initial tracepoint support for btrfs\n\nTracepoints can provide insight into why btrfs hits bugs and be greatly\nhelpful for debugging, e.g\n              dd-7822  [000]  2121.641088: btrfs_inode_request: root \u003d 5(FS_TREE), gen \u003d 4, ino \u003d 256, blocks \u003d 8, disk_i_size \u003d 0, last_trans \u003d 8, logged_trans \u003d 0\n              dd-7822  [000]  2121.641100: btrfs_inode_new: root \u003d 5(FS_TREE), gen \u003d 8, ino \u003d 257, blocks \u003d 0, disk_i_size \u003d 0, last_trans \u003d 0, logged_trans \u003d 0\n btrfs-transacti-7804  [001]  2146.935420: btrfs_cow_block: root \u003d 2(EXTENT_TREE), refs \u003d 2, orig_buf \u003d 29368320 (orig_level \u003d 0), cow_buf \u003d 29388800 (cow_level \u003d 0)\n btrfs-transacti-7804  [001]  2146.935473: btrfs_cow_block: root \u003d 1(ROOT_TREE), refs \u003d 2, orig_buf \u003d 29364224 (orig_level \u003d 0), cow_buf \u003d 29392896 (cow_level \u003d 0)\n btrfs-transacti-7804  [001]  2146.972221: btrfs_transaction_commit: root \u003d 1(ROOT_TREE), gen \u003d 8\n   flush-btrfs-2-7821  [001]  2155.824210: btrfs_chunk_alloc: root \u003d 3(CHUNK_TREE), offset \u003d 1103101952, size \u003d 1073741824, num_stripes \u003d 1, sub_stripes \u003d 0, type \u003d DATA\n   flush-btrfs-2-7821  [001]  2155.824241: btrfs_cow_block: root \u003d 2(EXTENT_TREE), refs \u003d 2, orig_buf \u003d 29388800 (orig_level \u003d 0), cow_buf \u003d 29396992 (cow_level \u003d 0)\n   flush-btrfs-2-7821  [001]  2155.824255: btrfs_cow_block: root \u003d 4(DEV_TREE), refs \u003d 2, orig_buf \u003d 29372416 (orig_level \u003d 0), cow_buf \u003d 29401088 (cow_level \u003d 0)\n   flush-btrfs-2-7821  [000]  2155.824329: btrfs_cow_block: root \u003d 3(CHUNK_TREE), refs \u003d 2, orig_buf \u003d 20971520 (orig_level \u003d 0), cow_buf \u003d 20975616 (cow_level \u003d 0)\n btrfs-endio-wri-7800  [001]  2155.898019: btrfs_cow_block: root \u003d 5(FS_TREE), refs \u003d 2, orig_buf \u003d 29384704 (orig_level \u003d 0), cow_buf \u003d 29405184 (cow_level \u003d 0)\n btrfs-endio-wri-7800  [001]  2155.898043: btrfs_cow_block: root \u003d 7(CSUM_TREE), refs \u003d 2, orig_buf \u003d 29376512 (orig_level \u003d 0), cow_buf \u003d 29409280 (cow_level \u003d 0)\n\nHere is what I have added:\n\n1) ordere_extent:\n        btrfs_ordered_extent_add\n        btrfs_ordered_extent_remove\n        btrfs_ordered_extent_start\n        btrfs_ordered_extent_put\n\nThese provide critical information to understand how ordered_extents are\nupdated.\n\n2) extent_map:\n        btrfs_get_extent\n\nextent_map is used in both read and write cases, and it is useful for tracking\nhow btrfs specific IO is running.\n\n3) writepage:\n        __extent_writepage\n        btrfs_writepage_end_io_hook\n\nPages are cirtical resourses and produce a lot of corner cases during writeback,\nso it is valuable to know how page is written to disk.\n\n4) inode:\n        btrfs_inode_new\n        btrfs_inode_request\n        btrfs_inode_evict\n\nThese can show where and when a inode is created, when a inode is evicted.\n\n5) sync:\n        btrfs_sync_file\n        btrfs_sync_fs\n\nThese show sync arguments.\n\n6) transaction:\n        btrfs_transaction_commit\n\nIn transaction based filesystem, it will be useful to know the generation and\nwho does commit.\n\n7) back reference and cow:\n\tbtrfs_delayed_tree_ref\n\tbtrfs_delayed_data_ref\n\tbtrfs_delayed_ref_head\n\tbtrfs_cow_block\n\nBtrfs natively supports back references, these tracepoints are helpful on\nunderstanding btrfs\u0027s COW mechanism.\n\n8) chunk:\n\tbtrfs_chunk_alloc\n\tbtrfs_chunk_free\n\nChunk is a link between physical offset and logical offset, and stands for space\ninfomation in btrfs, and these are helpful on tracing space things.\n\n9) reserved_extent:\n\tbtrfs_reserved_extent_alloc\n\tbtrfs_reserved_extent_free\n\nThese can show how btrfs uses its space.\n\nSigned-off-by: Liu Bo \u003cliubo2009@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "240f62c8756df285da11469259b3900f32883168",
      "tree": "eb973ef95389a9511c137c7c26248dfd04a2495f",
      "parents": [
        "c0da7aa1a2d8fcafe271a7077599253c8ed94bb2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Mar 23 14:54:42 2011 -0400"
      },
      "committer": {
        "name": "root",
        "email": "Chris Mason chris.mason@oracle.com",
        "time": "Mon Mar 28 05:37:22 2011 -0400"
      },
      "message": "Btrfs: use RCU instead of a spinlock to protect the root node\n\nThe pointer to the extent buffer for the root of each tree\nis protected by a spinlock so that we can safely read the pointer\nand take a reference on the extent buffer.\n\nBut now that the extent buffers are freed via RCU, we can safely\nuse rcu_read_lock instead.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a826d6dcb32d811b4c81df57a5ef1367516586b0",
      "tree": "4853d5acf6cde4dfb0eeb19f5c74dc3d7934359b",
      "parents": [
        "850265335f792f5d39ab24e5fb7160bac28d77e5"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Mar 16 13:42:43 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Mar 17 14:21:37 2011 -0400"
      },
      "message": "Btrfs: check items for correctness as we search\n\nCurrently if we have corrupted items things will blow up in spectacular ways.\nSo as we read in blocks and they are leaves, check the entire leaf to make sure\nall of the items are correct and point to valid parts in the leaf for the item\ndata the are responsible for.  If the item is corrupt we will kick back EIO and\nnot read any of the copies since they are likely to not be correct either.  This\nwill catch generic corruptions, it will be up to the individual callers of\nbtrfs_search_slot to make sure their items are right.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "91ca338d776e0cefb255bf2979b6448febd880f5",
      "tree": "5d1d344d6ed565faf5612b5c695f00c04e6f01d8",
      "parents": [
        "ff175d57f057f77d2d3031d674c2af9167a4af02"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Wed Jan 05 02:32:22 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Jan 16 11:30:20 2011 -0500"
      },
      "message": "btrfs: check NULL or not\n\nShould check if functions returns NULL or not.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "ff175d57f057f77d2d3031d674c2af9167a4af02",
      "tree": "ff04961d44566d7abc3ea4aab888900d40561c3e",
      "parents": [
        "20b450773d17e325190c158e10bfdb25dc21d2d6"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jj@chaosbits.net",
        "time": "Sat Dec 25 21:22:30 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Jan 16 11:30:20 2011 -0500"
      },
      "message": "btrfs: Don\u0027t pass NULL ptr to func that may deref it.\n\nHi,\n\nIn fs/btrfs/inode.c::fixup_tree_root_location() we have this code:\n\n...\n \t\tif (!path) {\n \t\t\terr \u003d -ENOMEM;\n \t\t\tgoto out;\n \t\t}\n...\n \tout:\n \t\tbtrfs_free_path(path);\n \t\treturn err;\n\nbtrfs_free_path() passes its argument on to other functions and some of\nthem end up dereferencing the pointer.\nIn the code above that pointer is clearly NULL, so btrfs_free_path() will\neventually cause a NULL dereference.\n\nThere are many ways to cut this cake (fix the bug). The one I chose was to\nmake btrfs_free_path() deal gracefully with NULL pointers. If you\ndisagree, feel free to come up with an alternative patch.\n\nSigned-off-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "559af8211433b8c0b20e6c43c61409cb9c9c2996",
      "tree": "702ebd4c4f5b610daa36f65d814a518356a9a46b",
      "parents": [
        "411fc6bcef54f828a5458f4730c68abdf13c6bf0"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Fri Oct 29 15:14:37 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 15:14:37 2010 -0400"
      },
      "message": "Btrfs: cleanup warnings from gcc 4.6 (nonbugs)\n\nThese are all the cases where a variable is set, but not read which are\nnot bugs as far as I can see, but simply leftovers.\n\nStill needs more review.\n\nFound by gcc 4.6\u0027s new warnings\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "cb44921a09221f0a90217b44044448f63190f3e5",
      "tree": "5580522b6db6868c02d3072320e338442272cb2b",
      "parents": [
        "6b5b817f103450444f3f658a498f435d92a197e5"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Oct 24 11:01:27 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 09:31:30 2010 -0400"
      },
      "message": "Btrfs: don\u0027t loop forever on bad btree blocks\n\nWhen btrfs discovers the generation number in a btree block is\nincorrect, it can loop forever without forcing the RAID\ncode to try a valid mirror, and without returning EIO.\n\nThis changes things to properly kick out the EIO.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "99d8f83c98930100cd70437b0c81a935e7a14b0b",
      "tree": "db4ea3e51c5cc33b903c498368dc7b14e2a07125",
      "parents": [
        "6f902af400b2499c80865c62a06fbbd15cf804fd"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 07 10:51:48 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jul 19 16:14:50 2010 -0400"
      },
      "message": "Btrfs: fix split_leaf double split corner case\n\nsplit_leaf was not properly balancing leaves when it was forced to\nsplit a leaf twice.  This commit adds an extra push left and right\nbefore forcing the double split in hopes of getting the slot where\nwe want to insert at either the start or end of the leaf.\n\nIf the extra pushes do work, then we are able to avoid splitting twice\nand we keep the tree properly balanced.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5bdd3536cbbe2ecd94ecc14410c6b1b31da16381",
      "tree": "7fd9cd2cb497f6150a5dfde4528ba6ba64144e40",
      "parents": [
        "46bfbb5c0740c200d2b66afcbd1f9d64ab320940"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed May 26 11:20:30 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 21:35:33 2010 -0400"
      },
      "message": "Btrfs: Fix block generation verification race\n\nAfter the path is released, the generation number got from block\npointer is no long valid. The race may cause disk corruption, because\nverify_parent_transid() calls clear_extent_buffer_uptodate() when\ngeneration numbers mismatch.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3fd0a5585eb98e074fb9934549c8d85c49756c0d",
      "tree": "3e7ff9bd9678a5eea62818a2f4a50e19dda91a81",
      "parents": [
        "efa56464562991b8c24f965199888806bd8c4b38"
      ],
      "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:54 2010 -0400"
      },
      "message": "Btrfs: Metadata ENOSPC handling for balance\n\nThis patch adds metadata ENOSPC handling for the balance code.\nIt is consisted by following major changes:\n\n1. Avoid COW tree leave in the phrase of merging tree.\n\n2. Handle interaction with snapshot creation.\n\n3. make the backref cache can live across transactions.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "f0486c68e4bd9a06a5904d3eeb3a0d73a83befb8",
      "tree": "509428ef400ef45e875a3c448b63b86cbea36aea",
      "parents": [
        "2ead6ae770d9f9dec9f4286bf0fd9001b4388c4b"
      ],
      "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:50 2010 -0400"
      },
      "message": "Btrfs: Introduce contexts for metadata reservation\n\nIntroducing metadata reseravtion contexts has two major advantages.\nFirst, it makes metadata reseravtion more traceable. Second, it can\nreclaim freed space and re-add them to the itself after transaction\ncommitted.\n\nBesides add btrfs_block_rsv structure and related helper functions,\nThis patch contains following changes:\n\nMove code that decides if freed tree block should be pinned into\nbtrfs_free_tree_block().\n\nMake space accounting more accurate, mainly for handling read only\nblock groups.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\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": "109f6aef5fc436f355ad027f4d97bd696df2049a",
      "tree": "645cf1752f2c62579f6dfe028d8a5d918c6b6f45",
      "parents": [
        "6bdb72ded1e281cd8844918c39d00cdd0e59f655"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 02 09:20:18 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 05 14:42:01 2010 -0400"
      },
      "message": "Btrfs: add check for changed leaves in setup_leaf_for_split\n\nsetup_leaf_for_split needs to drop the path and search again, and has\nchecks to see if the item we want to split changed size.  But, it misses\nthe case where the leaf changed and now has enough room for the item\nwe want to insert.\n\nThis adds an extra check to make sure the leaf really needs splitting\nbefore we call btrfs_split_leaf(), which keeps us from trying to split\na leaf with a single item.\n\nbtrfs_split_leaf() will blindly split the single item leaf, leaving us\nwith one good leaf and one empty leaf and then a crash.\n\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": "86b9f2eca5e0984145e3c7698a7cd6dd65c2a93f",
      "tree": "75dd0a52848b6f5396023f811f1a602f62b9d34e",
      "parents": [
        "55ef68990029fcd8d04d42fc184aa7fb18cf309e"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:36:50 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:35 2009 -0500"
      },
      "message": "Btrfs: Fix per root used space accounting\n\nThe bytes_used field in root item was originally planned to\ntrace the amount of used data and tree blocks. But it never\nworked right since we can\u0027t trace freeing of data accurately.\nThis patch changes it to only trace the amount of tree blocks.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "ad48fd754676bfae4139be1a897b1ea58f9aaf21",
      "tree": "a48a051fa8716ba4be8f148f6d7d8ca47d93ab07",
      "parents": [
        "8cef4e160d74920ad1725f58c89fd75ec4c4ac38"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:33:58 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Dec 15 21:24:25 2009 -0500"
      },
      "message": "Btrfs: Add btrfs_duplicate_item\n\nbtrfs_duplicate_item duplicates item with new key, guaranteeing\nthe source item and the new items are in the same tree leaf and\ncontiguous. It allows us to split file extent in place, without\nusing lock_extent to prevent bookend extent race.\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": "d717aa1d31c36cb56059e97966cb76f0be021969",
      "tree": "bb3f8aafe721504c329d448f84f3b3868e056413",
      "parents": [
        "0a4eefbb745ec0e8a5b694ae3f40cc34082d8f61"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Fri Jul 24 12:42:46 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jul 24 12:42:46 2009 -0400"
      },
      "message": "Btrfs: Avoid delayed reference update looping\n\nbtrfs_split_leaf and btrfs_del_items can end up in a loop\nwhere one is constantly spliting a given leaf and the other\nis constantly merging it back with the adjacent nodes.\n\nThere is a better fix for this, but in the interest of something\nsmall, this patch just changes btrfs_del_items back to balancing less\noften.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "0a4eefbb745ec0e8a5b694ae3f40cc34082d8f61",
      "tree": "b8c144c52f2725fa05325f282d8d2e4edc2e7181",
      "parents": [
        "1fcbac581be375ca0a686f72ee2b7fd1dbf386e7"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Fri Jul 24 11:06:53 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jul 24 11:22:47 2009 -0400"
      },
      "message": "Btrfs: Fix ordering of key field checks in btrfs_previous_item\n\nCheck objectid of item before checking the item type, otherwise we may return\nzero for a key that is actually too low.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "20736abaa361bea488df6a1f66f6b37fb01107b9",
      "tree": "d4e55905f371b701d06f3aa74eb18c6a25f83186",
      "parents": [
        "817d52f8dba26d0295c26035531c30ce5f1e3c3e"
      ],
      "author": {
        "name": "Diego Calleja",
        "email": "diegocg@gmail.com",
        "time": "Fri Jul 24 11:06:52 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jul 24 11:22:46 2009 -0400"
      },
      "message": "Btrfs: Remove code duplication in comp_keys\n\ncomp_keys is duplicating what is done in btrfs_comp_cpu_keys, so just\ncall it.\n\nSigned-off-by: Diego Calleja \u003cdiegocg@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "33c66f430bfa3a033e70470e4c93f967156b696d",
      "tree": "5af7edc4564aa3f32033b364495828eb32b690a7",
      "parents": [
        "e457afec60fdbd86b963d36f4a8a9285088c6043"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Jul 22 09:59:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 22 09:59:00 2009 -0400"
      },
      "message": "Btrfs: fix locking issue in btrfs_find_next_key\n\nWhen walking up the tree, btrfs_find_next_key assumes the upper level tree\nblock is properly locked. This isn\u0027t always true even path-\u003ekeep_locks is 1.\nThis is because btrfs_find_next_key may advance path-\u003eslots[] several times\ninstead of only once.\n\nWhen \u0027path-\u003eslots[level] \u003e\u003d btrfs_header_nritems(path-\u003enodes[level])\u0027 is found,\nwe can\u0027t guarantee the original value of \u0027path-\u003eslots[level]\u0027 is\n\u0027btrfs_header_nritems(path-\u003enodes[level]) - 1\u0027. If it\u0027s not, the tree block at\n\u0027level + 1\u0027 isn\u0027t locked.\n\nThis patch fixes the issue by explicitly checking the locking state,\nre-searching the tree if it\u0027s not locked.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "e457afec60fdbd86b963d36f4a8a9285088c6043",
      "tree": "e3d0add1584cd9edae3dfd24405a13294a2a2280",
      "parents": [
        "bf1fb512a58d7aeb41aaa40d6d2d2d29e08e506a"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Jul 22 09:59:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 22 09:59:00 2009 -0400"
      },
      "message": "Btrfs: fix double increment of path-\u003eslots[0] in btrfs_next_leaf\n\nif 1 is returned by btrfs_search_slot, the path already points to the\nfirst item with \u0027key \u003e searching key\u0027. So increasing path-\u003eslots[0] by\none is superfluous in that case.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "cfbb9308463f6dad1334884db046ccf0f1a77918",
      "tree": "12faa0d785c3e3adec21770db7112514d834f77b",
      "parents": [
        "b36124210248706186a02093427bdff4b3f548e8"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 18 10:41:58 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 10 11:29:47 2009 -0400"
      },
      "message": "Btrfs: balance btree more often\n\nWith the new back reference code, the cost of a balance has gone down\nin terms of the number of back reference updates done.  This commit\nmakes us more aggressively balance leaves and nodes as they become\nless full.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b36124210248706186a02093427bdff4b3f548e8",
      "tree": "42859bcab04454fe639f39ddbf65f9c408e6bbbc",
      "parents": [
        "5d4f98a28c7d334091c1b7744f48a1acdd2a4ae0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 13 19:12:15 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 10 11:29:47 2009 -0400"
      },
      "message": "Btrfs: stop avoiding balancing at the end of the transaction.\n\nWhen the delayed reference code was added, some checks were added\nto avoid extra balancing while the delayed references were being flushed.\nThis made for less efficient btrees, but it reduced the chances of\nloops where no forward progress was made because the balances made\nmore delayed ref updates.\n\nWith the new dead root removal code and the mixed back references,\nthe extent allocation tree is no longer using precise back refs, and\nthe delayed reference updates don\u0027t carry the risk of looping forever\nanymore.  So, the balance avoidance is no longer required.\n\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": "76a05b35a320e8c968d0fec8f512a1acae227309",
      "tree": "611875a5ea273de7208c84884a0ec59d985eb614",
      "parents": [
        "2757495c906113896b378bf084708846273c87b2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 13:24:30 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:32 2009 -0400"
      },
      "message": "Btrfs: Don\u0027t loop forever on metadata IO failures\n\nWhen a btrfs metadata read fails, the first thing we try to do is find\na good copy on another mirror of the block.  If this fails, read_tree_block()\nends up returning a buffer that isn\u0027t up to date.\n\nThe btrfs btree reading code was reworked to drop locks and repeat\nthe search when IO was done, but the changes didn\u0027t add a check for failed\nreads.  The end result was looping forever on buffers that were never\ngoing to become up to date.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8c594ea81d7abbbffdda447b127f8ba8d76f319d",
      "tree": "3f18a865e9795e40e2f4b086a01022accb1070b7",
      "parents": [
        "11c8349b4eb68f2b04cd8ece577377e6c0e5dd4b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:50:10 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:53:09 2009 -0400"
      },
      "message": "Btrfs: use the right node in reada_for_balance\n\nreada_for_balance was using the wrong index into the path node array,\nso it wasn\u0027t reading the right blocks.  We never directly used the\nresults of the read done by this function because the btree search is\nstarted over at the end.\n\nThis fixes reada_for_balance to reada in the correct node and to\navoid searching past the last slot in the node.  It also makes sure to\nhold the parent lock while we are finding the nodes to read.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c293498be69816087746161338de4b81efdf69fc",
      "tree": "32b856b67ca63e2649c8574c9a09352666362ec8",
      "parents": [
        "3e7ad38d20ad113158d1b4c9de0f51c04f50d4f7"
      ],
      "author": {
        "name": "Stoyan Gaydarov",
        "email": "stoyboyker@gmail.com",
        "time": "Thu Apr 02 17:05:11 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 17:05:11 2009 -0400"
      },
      "message": "Btrfs: BUG to BUG_ON changes\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "8e73f275011b3264a87339fd9f1690e944e381c9",
      "tree": "865900b191ed0e01f10d2f87e28c9e2ed56e5722",
      "parents": [
        "c8c42864f6193638eed136e0243f426a0b7f4bc2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "message": "Btrfs: Optimize locking in btrfs_next_leaf()\n\nbtrfs_next_leaf was using blocking locks when it could have been using\nfaster spinning ones instead.  This adds a few extra checks around\nthe pieces that block and switches over to spinning locks.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n\n"
    },
    {
      "commit": "c8c42864f6193638eed136e0243f426a0b7f4bc2",
      "tree": "079f003794f005942af18f1e3943ea6965a85206",
      "parents": [
        "04018de5d41e6490840de9399e029fd30e78576f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "message": "Btrfs: break up btrfs_search_slot into smaller pieces\n\nbtrfs_search_slot was doing too many things at once.  This breaks\nit up into more reasonable units.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "a4b6e07d1a8a9b907e82b9acbf51a026fbb9301c",
      "tree": "fb93f38d01812a6f8af8dbefd4f769460afc997e",
      "parents": [
        "5d13a98f3bf5afc1113f7db184c627a44659bc29"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 16 10:59:57 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:51 2009 -0400"
      },
      "message": "Btrfs: limit balancing work while flushing delayed refs\n\nThe delayed reference mechanism is responsible for all updates to the\nextent allocation trees, including those updates created while processing\nthe delayed references.\n\nThis commit tries to limit the amount of work that gets created during\nthe final run of delayed refs before a commit.  It avoids cowing new blocks\nunless it is required to finish the commit, and so it avoids new allocations\nthat were not really required.\n\nThe goal is to avoid infinite loops where we are always making more work\non the final run of delayed refs.  Over the long term we\u0027ll make a\nspecial log for the last delayed ref updates as well.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b9473439d3e84d9fc1a0a83faca69cc1b7566341",
      "tree": "bef8321b80589026b617d61d0fabaf545d459269",
      "parents": [
        "89573b9c516b24af8a3b9958dd5afca8fa874e3d"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 11:00:37 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:28 2009 -0400"
      },
      "message": "Btrfs: leave btree locks spinning more often\n\nbtrfs_mark_buffer dirty would set dirty bits in the extent_io tree\nfor the buffers it was dirtying.  This may require a kmalloc and it\nwas not atomic.  So, anyone who called btrfs_mark_buffer_dirty had to\nset any btree locks they were holding to blocking first.\n\nThis commit changes dirty tracking for extent buffers to just use a flag\nin the extent buffer.  Now that we have one and only one extent buffer\nper page, this can be safely done without losing dirty bits along the way.\n\nThis also introduces a path-\u003eleave_spinning flag that callers of\nbtrfs_search_slot can use to indicate they will properly deal with a\npath returned where all the locks are spinning instead of blocking.\n\nMany of the btree search callers now expect spinning paths,\nresulting in better btree concurrency overall.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "44871b1b24b593996db43495cf4484cc580bdc10",
      "tree": "b1b56f48e76006662798508f20c2b2d1378fd04f",
      "parents": [
        "56bec294dea971335d4466b30f2d959f28f6e36d"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 10:04:31 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:25 2009 -0400"
      },
      "message": "Btrfs: reduce stack usage in some crucial tree balancing functions\n\nMany of the tree balancing functions follow the same pattern.\n\n1) cow a block\n2) do something to the result\n\nThis commit breaks them up into two functions so the variables and\ncode required for part two don\u0027t suck down stack during part one.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "56bec294dea971335d4466b30f2d959f28f6e36d",
      "tree": "fc0b5bbf4bb6ab35582a4c7f58f5ac88f71c38bf",
      "parents": [
        "9fa8cfe706f9c20067c042a064999d5825a35330"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 10:10:06 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:25 2009 -0400"
      },
      "message": "Btrfs: do extent allocation and reference count updates in the background\n\nThe extent allocation tree maintains a reference count and full\nback reference information for every extent allocated in the\nfilesystem.  For subvolume and snapshot trees, every time\na block goes through COW, the new copy of the block adds a reference\non every block it points to.\n\nIf a btree node points to 150 leaves, then the COW code needs to go\nand add backrefs on 150 different extents, which might be spread all\nover the extent allocation tree.\n\nThese updates currently happen during btrfs_cow_block, and most COWs\nhappen during btrfs_search_slot.  btrfs_search_slot has locks held\non both the parent and the node we are COWing, and so we really want\nto avoid IO during the COW if we can.\n\nThis commit adds an rbtree of pending reference count updates and extent\nallocations.  The tree is ordered by byte number of the extent and byte number\nof the parent for the back reference.  The tree allows us to:\n\n1) Modify back references in something close to disk order, reducing seeks\n2) Significantly reduce the number of modifications made as block pointers\nare balanced around\n3) Do all of the extent insertion and back reference modifications outside\nof the performance critical btrfs_search_slot code.\n\n#3 has the added benefit of greatly reducing the btrfs stack footprint.\nThe extent allocation tree modifications are done without the deep\n(and somewhat recursive) call chains used in the past.\n\nThese delayed back reference updates must be done before the transaction\ncommits, and so the rbtree is tied to the transaction.  Throttling is\nimplemented to help keep the queue of backrefs at a reasonable size.\n\nSince there was a similar mechanism in place for the extent tree\nextents, that is removed and replaced by the delayed reference tree.\n\nYan Zheng \u003cyan.zheng@oracle.com\u003e helped review and fixup this code.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "9fa8cfe706f9c20067c042a064999d5825a35330",
      "tree": "8e64281caffcdb3ad5a8ab8bf22bb90483e9e214",
      "parents": [
        "8e0ee43bc2c3e19db56a4adaa9a9b04ce885cd84"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 10:24:59 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:25 2009 -0400"
      },
      "message": "Btrfs: don\u0027t preallocate metadata blocks during btrfs_search_slot\n\nIn order to avoid doing expensive extent management with tree locks held,\nbtrfs_search_slot will preallocate tree blocks for use by COW without\nany tree locks held.\n\nA later commit moves all of the extent allocation work for COW into\na delayed update mechanism, and this preallocation will no longer be\nrequired.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b9447ef80bd301b932ac4d85c9622e929de5fd62",
      "tree": "6d0bb1f287ed09f7850b77e2f622c3bebb35112b",
      "parents": [
        "4e06bdd6cbd5105376e7caf4e683ed131e777389"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 09 11:45:38 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 09 11:45:38 2009 -0400"
      },
      "message": "Btrfs: fix spinlock assertions on UP systems\n\nbtrfs_tree_locked was being used to make sure a given extent_buffer was\nproperly locked in a few places.  But, it wasn\u0027t correct for UP compiled\nkernels.\n\nThis switches it to using assert_spin_locked instead, and renames it to\nbtrfs_assert_tree_locked to better reflect how it was really being used.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4008c04a07c73ec3cb1be4c1391d2159a8f75d6d",
      "tree": "c0b10a7287ac810bfc406541e32b850ad4580248",
      "parents": [
        "3f3420df505e47751ef76a652b5cb660e5360d6f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 14:09:45 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 14:09:45 2009 -0500"
      },
      "message": "Btrfs: make a lockdep class for the extent buffer locks\n\nBtrfs is currently using spin_lock_nested with a nested value based\non the tree depth of the block.  But, this doesn\u0027t quite work because\nthe max tree depth is bigger than what spin_lock_nested can deal with,\nand because locks are sometimes taken before the level field is filled in.\n\nThe solution here is to use lockdep_set_class_and_name instead, and to\nset the class before unlocking the pages when the block is read from the\ndisk and just after init of a freshly allocated tree block.\n\nbtrfs_clear_path_blocking is also changed to take the locks in the proper\norder, and it also makes sure all the locks currently held are properly\nset to blocking before it tries to retake the spinlocks.  Otherwise, lockdep\ngets upset about bad lock orderin.\n\nThe lockdep magic cam from Peter Zijlstra \u003cpeterz@infradead.org\u003e\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "e00f7308658622fbd483cb0d9fe41165bf9050d0",
      "tree": "5baeaee96a3d6789f4cce2ca17d7f4f8afb3431e",
      "parents": [
        "7951f3cefbd711f4429a0cd014aa83a844c399a0"
      ],
      "author": {
        "name": "Jeff Mahoney",
        "email": "jeffm@suse.com",
        "time": "Thu Feb 12 14:11:25 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 14:11:25 2009 -0500"
      },
      "message": "Btrfs: remove btrfs_init_path\n\nbtrfs_init_path was initially used when the path objects were on the\nstack.  Now all the work is done by btrfs_alloc_path and btrfs_init_path\nisn\u0027t required.\n\nThis patch removes it, and just uses kmem_cache_zalloc to zero out the object.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "7951f3cefbd711f4429a0cd014aa83a844c399a0",
      "tree": "7eec0bc3b933d71f99cad5379ef15bf1e084a572",
      "parents": [
        "b335b0034e252e79ec2e9c6697f5d663c4627bec"
      ],
      "author": {
        "name": "Jeff Mahoney",
        "email": "jeffm@suse.com",
        "time": "Thu Feb 12 10:06:15 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 10:06:15 2009 -0500"
      },
      "message": "Btrfs: balance_level checks !child after access\n\nThe BUG_ON() is in the wrong spot.\n\nSigned-off-by: Jeff Mahoney \u003cjeffm@suse.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "284b066af41579f62649048fdec5c5e7091703e6",
      "tree": "e34185c911cb50b0ade04f804056ffbe2a6e04ae",
      "parents": [
        "42f15d77df8a7e8a2feb15041d5d30710ee7f951"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Feb 09 16:22:03 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Feb 09 16:22:03 2009 -0500"
      },
      "message": "Btrfs: don\u0027t use spin_is_contended\n\nBtrfs was using spin_is_contended to see if it should drop locks before\ndoing extent allocations during btrfs_search_slot.  The idea was to avoid\nexpensive searches in the tree unless the lock was actually contended.\n\nBut, spin_is_contended is specific to the ticket spinlocks on x86, so this\nis causing compile errors everywhere else.\n\nIn practice, the contention could easily appear some time after we started\ndoing the extent allocation, and it makes more sense to always drop the lock\ninstead.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "7b78c170dc4f538cc7ee66f47b3aac3f3974a36c",
      "tree": "e2301fba4de0f3a04cf4b691f63e2bdf1e8c64d2",
      "parents": [
        "12f4daccfc3732280debba8f9ba49720372de831"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:12:46 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:12:46 2009 -0500"
      },
      "message": "Btrfs: Only prep for btree deletion balances when nodes are mostly empty\n\nWhenever an item deletion is done, we need to balance all the nodes\nin the tree to make sure we don\u0027t end up with an empty node if a pointer\nis deleted.  This balance prep happens from the root of the tree down\nso we can drop our locks as we go.\n\nreada_for_balance was triggering read-ahead on neighboring nodes even\nwhen no balancing was required.  This adds an extra check to avoid\ncalling balance_level() and avoid reada_for_balance() when a balance\nwon\u0027t be required.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "12f4daccfc3732280debba8f9ba49720372de831",
      "tree": "922d52b907ea8495ab9362a789d607ed7f61b637",
      "parents": [
        "4d081c41a4f98aecb5e86ef7d3e644cc7b52131f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:31:42 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:31:42 2009 -0500"
      },
      "message": "Btrfs: fix btrfs_unlock_up_safe to walk the entire path\n\nbtrfs_unlock_up_safe would break out at the first NULL node entry or\nunlocked node it found in the path.\n\nSome of the callers have missing nodes at the lower levels of the path, so this\ncommit fixes things to check all the nodes in the path before returning.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4d081c41a4f98aecb5e86ef7d3e644cc7b52131f",
      "tree": "441e557a52e85a71e60da81d578bcb22fd4760d7",
      "parents": [
        "06d9a8d7c24fe22836bf0b0f82db59d6f98e271e"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:31:28 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:31:28 2009 -0500"
      },
      "message": "Btrfs: change btrfs_del_leaf to drop locks earlier\n\nbtrfs_del_leaf does two things.  First it removes the pointer in the\nparent, and then it frees the block that has the leaf.  It has the\nparent node locked for both operations.\n\nBut, it only needs the parent locked while it is deleting the pointer.\nAfter that it can safely free the block without the parent locked.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b4ce94de9b4d64e8ab3cf155d13653c666e22b9b",
      "tree": "ebc44a9554a50b495b091cb0979d79fd29e50fe7",
      "parents": [
        "c487685d7c18a8481900755aa5c56a7a74193101"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:25:08 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:25:08 2009 -0500"
      },
      "message": "Btrfs: Change btree locking to use explicit blocking points\n\nMost of the btrfs metadata operations can be protected by a spinlock,\nbut some operations still need to schedule.\n\nSo far, btrfs has been using a mutex along with a trylock loop,\nmost of the time it is able to avoid going for the full mutex, so\nthe trylock loop is a big performance gain.\n\nThis commit is step one for getting rid of the blocking locks entirely.\nbtrfs_tree_lock takes a spinlock, and the code explicitly switches\nto a blocking lock when it starts an operation that can schedule.\n\nWe\u0027ll be able get rid of the blocking locks in smaller pieces over time.\nTracing allows us to find the most common cause of blocking, so we\ncan start with the hot spots first.\n\nThe basic idea is:\n\nbtrfs_tree_lock() returns with the spin lock held\n\nbtrfs_set_lock_blocking() sets the EXTENT_BUFFER_BLOCKING bit in\nthe extent buffer flags, and then drops the spin lock.  The buffer is\nstill considered locked by all of the btrfs code.\n\nIf btrfs_tree_lock gets the spinlock but finds the blocking bit set, it drops\nthe spin lock and waits on a wait queue for the blocking bit to go away.\n\nMuch of the code that needs to set the blocking bit finishes without actually\nblocking a good percentage of the time.  So, an adaptive spin is still\nused against the blocking bit to avoid very high context switch rates.\n\nbtrfs_clear_lock_blocking() clears the blocking bit and returns\nwith the spinlock held again.\n\nbtrfs_tree_unlock() can be called on either blocking or spinning locks,\nit does the right thing based on the blocking bit.\n\nctree.c has a helper function to set/clear all the locked buffers in a\npath as blocking.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c487685d7c18a8481900755aa5c56a7a74193101",
      "tree": "f2ff6c059e24d7fdf2e1fff498bbef0bb90bfbfc",
      "parents": [
        "3935127c50c84106d654ef14962cff28c660bc62"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:24:25 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:24:25 2009 -0500"
      },
      "message": "Btrfs: hash_lock is no longer needed\n\nBefore metadata is written to disk, it is updated to reflect that writeout\nhas begun.  Once this update is done, the block must be cow\u0027d before it\ncan be modified again.\n\nThis update was originally synchronized by using a per-fs spinlock.  Today\nthe buffers for the metadata blocks are locked before writeout begins,\nand everyone that tests the flag has the buffer locked as well.\n\nSo, the per-fs spinlock (called hash_lock for no good reason) is no\nlonger required.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a717531942f488209dded30f6bc648167bcefa72",
      "tree": "f4e0c852d4462574ade5e965585647e7a253abe3",
      "parents": [
        "1506fcc8189cdd4b95e06df7845a09f18b4526a6"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 22 09:23:10 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 22 09:23:10 2009 -0500"
      },
      "message": "Btrfs: do less aggressive btree readahead\n\nJust before reading a leaf, btrfs scans the node for blocks that are\nclose by and reads them too.  It tries to build up a large window\nof IO looking for blocks that are within a max distance from the top\nand bottom of the IO window.\n\nThis patch changes things to just look for blocks within 64k of the\ntarget block.  It will trigger less IO and make for lower latencies on\nthe read size.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "d397712bcc6a759a560fd247e6053ecae091f958",
      "tree": "9da8daebb870d8b8b1843507c4621715e23dd31a",
      "parents": [
        "1f3c79a28c8837e8572b98f6d14142d9a6133c56"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 05 21:25:51 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 05 21:25:51 2009 -0500"
      },
      "message": "Btrfs: Fix checkpatch.pl warnings\n\nThere were many, most are fixed now.  struct-funcs.c generates some warnings\nbut these are bogus.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "87b29b208c6c38f3446d2de6ece946e2459052cf",
      "tree": "43e717289e1e8446fced4093ab39667bba9ea60a",
      "parents": [
        "d7f735d0bc68c411abda0a612e1421bdade649cc"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Dec 17 10:21:48 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Dec 17 10:21:48 2008 -0500"
      },
      "message": "Btrfs: properly check free space for tree balancing\n\nbtrfs_insert_empty_items takes the space needed by the btrfs_item\nstructure into account when calculating the required free space.\n\nSo the tree balancing code shouldn\u0027t add sizeof(struct btrfs_item)\nto the size when checking the free space. This patch removes these\nsuperfluous additions.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "42dc7babdcc99feadb04d461592ce5898a362550",
      "tree": "9497d6dddba1a046b4a40a51a49cc41a13922394",
      "parents": [
        "17d217fe970d34720f4f1633dca73a6aa2f3d9d1"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Dec 15 11:44:56 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Dec 15 11:44:56 2008 -0500"
      },
      "message": "Btrfs: Fix compressed writes on truncated pages\n\nThe compression code was using isize to limit the amount of data it\nsent through zlib.  But, it wasn\u0027t properly limiting the looping to\njust the pages inside i_size.  The end result was trying to compress\ntoo many pages, including those that had not been setup and properly locked\ndown.  This made the compression code oops while trying find_get_page on a\npage that didn\u0027t exist.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "459931eca5f4b8c9ad259d07cc1ca49afed54804",
      "tree": "86088c14cff53f93281dc25022b61fb1d86c2458",
      "parents": [
        "580afd76e451deb6772d0507de580fb1df14da6c"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Dec 10 09:10:46 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Dec 10 09:10:46 2008 -0500"
      },
      "message": "Btrfs: Delete csum items when freeing extents\n\nThis finishes off the new checksumming code by removing csum items\nfor extents that are no longer in use.\n\nThe trick is doing it without racing because a single csum item may\nhold csums for more than one extent.  Extra checks are added to\nbtrfs_csum_file_blocks to make sure that we are using the correct\ncsum item after dropping locks.\n\nA new btrfs_split_item is added to split a single csum item so it\ncan be split without dropping the leaf lock.  This is used to\nremove csum bytes from the middle of an item.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "934d375bacf9ea8a37fbfff5f3cf1c093f324095",
      "tree": "e81948e6e26028fd979ce59f4fc5988c1813694c",
      "parents": [
        "a512bbf855ff0af474257475f2e6da7acd854f52"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Dec 08 16:43:10 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Dec 08 16:43:10 2008 -0500"
      },
      "message": "Btrfs: Use map_private_extent_buffer during generic_bin_search\n\nIt is possible that generic_bin_search will be called on a tree block\nthat has not been locked.  This happens because cache_block_block skips\nlocking on the tree blocks.\n\nSince the tree block isn\u0027t locked, we aren\u0027t allowed to change\nthe extent_buffer-\u003emap_token field.  Using map_private_extent_buffer\navoids any changes to the internal extent buffer fields.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "b2950863c61bc24cf0f63bc05947d9d50663c4c0",
      "tree": "3005a034713fe86db2d64ab1b21fe8762f6a4b0c",
      "parents": [
        "1ffa4f426c002161b7dbd58b297f5d0680e7dd6a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Dec 02 09:54:17 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Dec 02 09:54:17 2008 -0500"
      },
      "message": "Btrfs: make things static and include the right headers\n\nShut up various sparse warnings about symbols that should be either\nstatic or have their declarations in scope.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n\n"
    },
    {
      "commit": "b4eec2ca1167bae46295aeb66abd15fd52387845",
      "tree": "bad79258bb437341611116d951f7a8711c4473a0",
      "parents": [
        "ea9e8b11bd1252dcbc23afefcf1a52ec6aa3c113"
      ],
      "author": {
        "name": "Liu Hui",
        "email": "onlyflyer@gmail.com",
        "time": "Tue Nov 18 11:30:10 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Nov 18 11:30:10 2008 -0500"
      },
      "message": "Btrfs: Some fixes for batching extent insert.\n\nIn insert_extents(), when ret\u003d\u003d1 and last is not zero, it should\ncheck if the current inserted item is the last item in this batching\ninserts. If so, it should just break from loop. If not, \u0027cur \u003d\ninsert_list-\u003enext\u0027 will make no sense because the list is empty now,\nand \u0027op\u0027 will point to an unexpectable place.\n\nThere are also some trivial fixs in this patch including one comment\ntypo error and deleting two redundant lines.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "2b82032c34ec40515d3c45c36cd1961f37977de8",
      "tree": "fbdfe7b13dd51983dfca4aeb75983b37ee186ff9",
      "parents": [
        "c146afad2c7fea6a366d4945c1bab9b03880f526"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Nov 17 21:11:30 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Nov 17 21:11:30 2008 -0500"
      },
      "message": "Btrfs: Seed device support\n\nSeed device is a special btrfs with SEEDING super flag\nset and can only be mounted in read-only mode. Seed\ndevices allow people to create new btrfs on top of it.\n\nThe new FS contains the same contents as the seed device,\nbut it can be mounted in read-write mode.\n\nThis patch does the following:\n\n1) split code in btrfs_alloc_chunk into two parts. The first part does makes\nthe newly allocated chunk usable, but does not do any operation that modifies\nthe chunk tree. The second part does the the chunk tree modifications. This\ndivision is for the bootstrap step of adding storage to the seed device.\n\n2) Update device management code to handle seed device.\nThe basic idea is: For an FS grown from seed devices, its\nseed devices are put into a list. Seed devices are\nopened on demand at mounting time. If any seed device is\nmissing or has been changed, btrfs kernel module will\nrefuse to mount the FS.\n\n3) make btrfs_find_block_group not return NULL when all\nblock groups are read-only.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "f3465ca44e2a51fd647c167045768a8ab5a96603",
      "tree": "3d08ed21a29374321469d4f43391fec7f34d8214",
      "parents": [
        "c5c9cd4d1b827fe545ed2a945e91e3a6909f3886"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Wed Nov 12 14:19:50 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 12 14:19:50 2008 -0500"
      },
      "message": "Btrfs: batch extent inserts/updates/deletions on the extent root\n\nWhile profiling the allocator I noticed a good amount of time was being spent in\nfinish_current_insert and del_pending_extents, and as the filesystem filled up\nmore and more time was being spent in those functions.  This patch aims to try\nand reduce that problem.  This happens two ways\n\n1) track if we tried to delete an extent that we are going to update or insert.\nOnce we get into finish_current_insert we discard any of the extents that were\nmarked for deletion.  This saves us from doing unnecessary work almost every\ntime finish_current_insert runs.\n\n2) Batch insertion/updates/deletions.  Instead of doing a btrfs_search_slot for\neach individual extent and doing the needed operation, we instead keep the leaf\naround and see if there is anything else we can do on that leaf.  On the insert\ncase I introduced a btrfs_insert_some_items, which will take an array of keys\nwith an array of data_sizes and try and squeeze in as many of those keys as\npossible, and then return how many keys it was able to insert.  In the update\ncase we search for an extent ref, update the ref and then loop through the leaf\nto see if any of the other refs we are looking to update are on that leaf, and\nthen once we are done we release the path and search for the next ref we need to\nupdate.  And finally for the deletion we try and delete the extent+ref in pairs,\nso we will try to find extent+ref pairs next to the extent we are trying to free\nand free them in bulk if possible.\n\nThis along with the other cluster fix that Chris pushed out a bit ago helps make\nthe allocator preform more uniformly as it fills up the disk.  There is still a\nslight drop as we fill up the disk since we start having to stick new blocks in\nodd places which results in more COW\u0027s than on a empty fs, but the drop is not\nnearly as severe as it was before.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n"
    },
    {
      "commit": "6f3577bdc768e6dae3c4d419e89b5a904f470728",
      "tree": "69d0df75fe55f7c4e9b2f1a1651478e37a3d2920",
      "parents": [
        "5b050f04c8ce911c5b6831305a24d70eab95e732"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Nov 13 09:59:36 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Nov 13 09:59:36 2008 -0500"
      },
      "message": "Btrfs: Improve metadata read latencies\n\nThis fixes latency problems on metadata reads by making sure they\ndon\u0027t go through the async submit queue, and by tuning down the amount\nof readahead done during btree searches.\n\nAlso, the btrfs bdi congestion function is tuned to ignore the\nnumber of pending async bios and checksums pending.  There is additional\ncode that throttles new async bios now and the congestion function\ndoesn\u0027t need to worry about it anymore.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    }
  ],
  "next": "2517920135b0d29e70453e5b03d70d7b94207df3"
}
