)]}'
{
  "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": "733f4fbbc1083aa343da739f46ee839705d6cfe3",
      "tree": "0c6dab9e8610eb9b4ccd9a6453caa1588583b1b8",
      "parents": [
        "c11d2c236cc260b36ef644700fbe99bcc7e7da33"
      ],
      "author": {
        "name": "Stefan Behrens",
        "email": "sbehrens@giantdisaster.de",
        "time": "Fri May 25 16:06:10 2012 +0200"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed May 30 10:23:41 2012 -0400"
      },
      "message": "Btrfs: read device stats on mount, write modified ones during commit\n\nThe device statistics are written into the device tree with each\ntransaction commit. Only modified statistics are written.\nWhen a filesystem is mounted, the device statistics for each involved\ndevice are read from the device tree and used to initialize the\ncounters.\n\nSigned-off-by: Stefan Behrens \u003csbehrens@giantdisaster.de\u003e\n"
    },
    {
      "commit": "20b297d620cd1bb94127942bbb3702fb7b1030b2",
      "tree": "45e1d42c376b168ae55460e2d481f915d6cc8b78",
      "parents": [
        "19ae4e8133f370d820c4cdd61a4b703235664a5f"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Sun May 20 15:43:53 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed May 30 15:17:36 2012 +0200"
      },
      "message": "Btrfs: tree mod log sanity checks in join_transaction\n\nWhen a fresh transaction begins, the tree mod log must be clean. Users of\nthe tree modification log must ensure they never span across transaction\nboundaries.\n\nWe reset the sequence to 0 in this safe situation to make absolutely sure\noverflow can\u0027t happen.\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "19ae4e8133f370d820c4cdd61a4b703235664a5f",
      "tree": "3d8e34c149ea6a6ed4bdc5c176a4967e5ce37f39",
      "parents": [
        "8445f61cad927b6efffdd4e042a51a783ff8853f"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Sun May 20 15:42:19 2012 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed May 30 15:17:35 2012 +0200"
      },
      "message": "Btrfs: fs_info variable for join_transaction\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "871383be592ba7e819d27556591e315a0df38cee",
      "tree": "0f0c2bc7ecf2d70a5ffa842001d70b5b0f8958d0",
      "parents": [
        "8d082fb727ac11930ea20bf1612e334ea7c2b697"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Mon Apr 02 18:31:37 2012 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Wed Apr 18 19:22:14 2012 +0200"
      },
      "message": "btrfs: add missing unlocks to transaction abort paths\n\nAdded in commit 49b25e0540904be0bf558b84475c69d72e4de66e\n(\"btrfs: enhance transaction abort infrastructure\")\n\nReported-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\n"
    },
    {
      "commit": "4edc2ca388d62abffe38149f6ac00e749ea721c5",
      "tree": "6e31a2d72b9bb05f46960c0a8a789044f5dcf584",
      "parents": [
        "e627ee7bcd42b4e3a03ca01a8e46dcb4033c5ae0"
      ],
      "author": {
        "name": "Dave Jones",
        "email": "davej@redhat.com",
        "time": "Thu Apr 12 16:03:56 2012 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 12 16:03:56 2012 -0400"
      },
      "message": "Btrfs: fix use-after-free in __btrfs_end_transaction\n\n49b25e0540904be0bf558b84475c69d72e4de66e introduced a use-after-free bug\nthat caused spurious -EIO\u0027s to be returned.\n\nDo the check before we free the transaction.\n\nCc: David Sterba \u003cdsterba@suse.cz\u003e\nCc: Jeff Mahoney \u003cjeffm@suse.com\u003e\nSigned-off-by: Dave Jones \u003cdavej@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2bcc0328c3a043880796a602c75fbeb1537aa1e1",
      "tree": "ed18c3244abeda587b56498ca5da5609f3555d99",
      "parents": [
        "7ca4be45a0255ac8f08c05491c6add2dd87dd4f8"
      ],
      "author": {
        "name": "Liu Bo",
        "email": "liubo2009@cn.fujitsu.com",
        "time": "Thu Mar 29 09:57:44 2012 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Mar 29 09:57:44 2012 -0400"
      },
      "message": "Btrfs: show useful info in space reservation tracepoint\n\no For space info, the type of space info is useful for debug.\no For transaction handle, its transid is useful.\n\nSigned-off-by: Liu Bo \u003cliubo2009@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.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": "49b25e0540904be0bf558b84475c69d72e4de66e",
      "tree": "5a89b2f5d6e5bd8b1ff39bdb387071ec1cb2a615",
      "parents": [
        "4da35113426d16673aa1fb0613c14ca2e419e7fd"
      ],
      "author": {
        "name": "Jeff Mahoney",
        "email": "jeffm@suse.com",
        "time": "Thu Mar 01 17:24:58 2012 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Mar 22 01:45:40 2012 +0100"
      },
      "message": "btrfs: enhance transaction abort infrastructure\n\nSigned-off-by: Jeff Mahoney \u003cjeffm@suse.com\u003e\n"
    },
    {
      "commit": "2c536799f1bde905bbacf7af3aa6be3f4de66005",
      "tree": "54f306bf4320d97e73f9728268a99910b234d048",
      "parents": [
        "3fbe5c02ae5a59053d779392b9a12aa8f6d6198e"
      ],
      "author": {
        "name": "Jeff Mahoney",
        "email": "jeffm@suse.com",
        "time": "Mon Oct 03 23:22:41 2011 -0400"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Mar 22 01:45:36 2012 +0100"
      },
      "message": "btrfs: btrfs_drop_snapshot should return int\n\nCommit cb1b69f4 (Btrfs: forced readonly when btrfs_drop_snapshot() fails)\nmade btrfs_drop_snapshot return void because there were no callers checking\nthe return value. That is the wrong order to handle error propogation since\nthe caller will have no idea that an error has occured and continue on\nas if nothing went wrong.\n\nSigned-off-by: Jeff Mahoney \u003cjeffm@suse.com\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": "e77266e4c4be6f9dc91bf688bce015a8babd5fe0",
      "tree": "9ad1f7fa246188ac2f12088a8a1e354ffea63799",
      "parents": [
        "5500cdbe14d7435e04f66ff3cfb8ecd8b8e44ebf"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Feb 24 10:39:05 2012 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Feb 24 10:39:05 2012 -0500"
      },
      "message": "Btrfs: fix compiler warnings on 32 bit systems\n\nThe enospc tracing code added some interesting uses of\nu64 pointer casts.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "fe66a05a06795bd3b788404d69ea7709f46a1609",
      "tree": "8d576c0c69ef44a253370bbec135efe2477d18d2",
      "parents": [
        "692e5759a43b916f0b66bcb39b2957499992381e"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Feb 20 08:40:56 2012 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 23 10:43:45 2012 -0500"
      },
      "message": "Btrfs: improve error handling for btrfs_insert_dir_item callers\n\nThis allows us to gracefully continue if we aren\u0027t able to insert\ndirectory items, both for normal files/dirs and snapshots.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8c2a3ca20f6233677ac3222c6506174010eb414f",
      "tree": "88d1105c665d355b363929557ed0c5489795e348",
      "parents": [
        "90290e19820e3323ce6b9c2888eeb68bf29c278b"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Jan 10 10:31:31 2012 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 16 15:29:43 2012 -0500"
      },
      "message": "Btrfs: space leak tracepoints\n\nThis in addition to a script in my btrfs-tracing tree will help track down space\nleaks when we\u0027re getting space left over in block groups on umount.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "9785dbdf265ddc47d5c88267d89a97648c0dc14b",
      "tree": "3a97a48d6f282f9e06c5446beeb886fcd86c4798",
      "parents": [
        "d756bd2d9339447c29bde950910586df8f8941ec",
        "6bf7e080d5bcb0d399ee38ce3dabbfad64448192"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 16 15:26:31 2012 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 16 15:26:31 2012 -0500"
      },
      "message": "Merge branch \u0027for-chris\u0027 of git://git.jan-o-sch.net/btrfs-unstable into integration\n"
    },
    {
      "commit": "203bf287cb01a5dc26c20bd3737cecf3aeba1d48",
      "tree": "f9ce9d7c82360bd6059b5ef16166cf79d16b1380",
      "parents": [
        "c1111b1fcee6359922ad8e5f6d72ed43815ad8f9"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jan 06 15:23:57 2012 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jan 06 15:23:57 2012 -0500"
      },
      "message": "Btrfs: run chunk allocations while we do delayed refs\n\nBtrfs tries to batch extent allocation tree changes to improve performance\nand reduce metadata trashing.  But it doesn\u0027t allocate new metadata chunks\nwhile it is doing allocations for the extent allocation tree.\n\nThis commit changes the delayed refence code to do chunk allocations if we\u0027re\ngetting low on room.  It prevents crashes and improves performance.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a168650c08300434e1456abe7b6451f1448230d3",
      "tree": "addddb060b018eb569e97c11e1a1451feef11c7a",
      "parents": [
        "d1270cd91f308c9d22b2804720c36ccd32dbc35e"
      ],
      "author": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Mon Dec 12 16:10:07 2011 +0100"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed Jan 04 16:12:48 2012 +0100"
      },
      "message": "Btrfs: add waitqueue instead of doing busy waiting for more delayed refs\n\nNow that we may be holding back delayed refs for a limited period, we\nmight end up having no runnable delayed refs. Without this commit, we\u0027d\ndo busy waiting in that thread until another (runnable) ref arives.\nInstead, we\u0027re detecting this situation and use a waitqueue, such that\nwe only try to run more refs after\n\ta) another runnable ref was added  or\n\tb) delayed refs are no longer held back\n\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\u003e\n"
    },
    {
      "commit": "00f04b88791ff49dc64ada18819d40a5b0671709",
      "tree": "fd85a5f4b374aac035388b0cbf8ef572578d5578",
      "parents": [
        "5b25f70f4200766355cdabda604e131d2fb6010d"
      ],
      "author": {
        "name": "Arne Jansen",
        "email": "sensille@gmx.net",
        "time": "Wed Sep 14 12:37:00 2011 +0200"
      },
      "committer": {
        "name": "Jan Schmidt",
        "email": "list.btrfs@jan-o-sch.net",
        "time": "Wed Jan 04 16:12:42 2012 +0100"
      },
      "message": "Btrfs: add sequence numbers to delayed refs\n\nSequence numbers are needed to reconstruct the backrefs of a given extent to\na certain point in time. The total set of backrefs consist of the set of\nbackrefs recorded on disk plus the enqueued delayed refs for it that existed\nat that moment.\n\nThis patch also adds a list that records all delayed refs which are\ncurrently in the process of being added.\n\nWhen walking all refs of an extent in btrfs_find_all_roots(), we freeze the\ncurrent state of delayed refs, honor anythinh up to this point and prevent\nprocessing newer delayed refs to assert consistency.\n\nSigned-off-by: Arne Jansen \u003csensille@gmx.net\u003e\nSigned-off-by: Jan Schmidt \u003clist.btrfs@jan-o-sch.net\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": "62f30c5462374b991e7e3f42d49ce2265c1b82f1",
      "tree": "4d991bd451bcc9e619bb4b775b4acc6a0e3fca8f",
      "parents": [
        "2f120c05e67ae34c93786b1050c6828904314429"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Thu Nov 10 20:45:05 2011 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Nov 10 20:45:05 2011 -0500"
      },
      "message": "Btrfs: fix deadlock caused by the race between relocation\n\nWe can not do flushable reservation for the relocation when we create snapshot,\nbecause it may make the transaction commit task and the flush task wait for\neach other and the deadlock happens.\n\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d43317dcd074818d4bd12ddd4184a29aff98907b",
      "tree": "233033cf8c7f3cb38dc549d2a1be7f0fc9ecfd80",
      "parents": [
        "56d2a48f81a1bde827c625b90221fade72fe9c61"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Nov 06 03:26:19 2011 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Nov 06 03:26:19 2011 -0500"
      },
      "message": "Btrfs: fix race during transaction joins\n\nWhile we\u0027re allocating ram for a new transaction, we drop our spinlock.\nWhen we get the lock back, we do check to see if a transaction started\nwhile we slept, but we don\u0027t check to make sure it isn\u0027t blocked\nbecause a commit has already started.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "bf0da8c183a15656eee63c54f334c3794320872a",
      "tree": "dad92ff6ea5cba470d93664b9ea195ecab66b07b",
      "parents": [
        "663350ac38c67ca388acea6e876dc6d668c232b0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Nov 04 12:29:37 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Nov 06 03:04:20 2011 -0500"
      },
      "message": "Btrfs: ClearPageError during writepage and clean_tree_block\n\nFailure testing was tripping up over stale PageError bits in\nmetadata pages.  If we have an io error on a block, and later on\nend up reusing it, nobody ever clears PageError on those pages.\n\nDuring commit, we\u0027ll find PageError and think we had trouble writing\nthe block, which will lead to aborts and other problems.\n\nThis changes clean_tree_block and the btrfs writepage code to\nclear the PageError bit.  In both cases we\u0027re either completely\ndone with the page or the page has good stuff and the error bit\nis no longer valid.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6c41761fc6efe1503103a1afe03a6635c0b5d4ec",
      "tree": "08ad34d43aac48e8f8143a0b1fa07141df8f202a",
      "parents": [
        "c8174313a8102e874aaa321e2fc4c7c460a87151"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Wed Apr 13 15:41:04 2011 +0200"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Nov 06 03:04:01 2011 -0500"
      },
      "message": "btrfs: separate superblock items out of fs_info\n\nfs_info has now ~9kb, more than fits into one page. This will cause\nmount failure when memory is too fragmented. Top space consumers are\nsuper block structures super_copy and super_for_commit, ~2.8kb each.\nAllocate them dynamically. fs_info will be ~3.5kb. (measured on x86_64)\n\nAdd a wrapper for freeing fs_info and all of it\u0027s dynamically allocated\nmembers.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\n"
    },
    {
      "commit": "36ba022ac0b748dd543f43430b03198e899426c9",
      "tree": "3175872760ac769cde046b3ac43900fc42856bb8",
      "parents": [
        "3880a1b46d87a6b030c31889875befc745d95dff"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Oct 18 12:15:48 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Oct 19 15:12:59 2011 -0400"
      },
      "message": "Btrfs: seperate out btrfs_block_rsv_check out into 2 different functions\n\nCurrently btrfs_block_rsv_check does 2 things, it will either refill a block\nreserve like in the truncate or refill case, or it will check to see if there is\nenough space in the global reserve and possibly refill it.  However because of\novercommit we could be well overcommitting ourselves just to try and refill the\nglobal reserve, when really we should just be committing the transaction.  So\nbreack this out into btrfs_block_rsv_refill and btrfs_block_rsv_check.  Refill\nwill try to reserve more metadata if it can and btrfs_block_rsv_check will not,\nit will only tell you if the factor of the total space is still reserved.\nThanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "b24e03db0df3e9164c9649db12fecc8c2d81b0d1",
      "tree": "e7742796bf98c1211babe8d1bdc464ad3e3a98a1",
      "parents": [
        "877da174301dde9062b915da4c8103048be49702"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Oct 14 14:40:17 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Oct 19 15:12:58 2011 -0400"
      },
      "message": "Btrfs: release trans metadata bytes before flushing delayed refs\n\nWe started setting trans-\u003eblock_rsv \u003d NULL to allow the delayed refs flushing\nstuff to use the right block_rsv and then just made\nbtrfs_trans_release_metadata() unconditionally use the trans block rsv.  The\nproblem with this is we need to reserve some space in the transaction and then\nmigrate it to the global block rsv, so we need to be able to free that out\nproperly.  So instead just move btrfs_trans_release_metadata() before the\ndelayed ref flushing and use trans-\u003eblock_rsv for the freeing.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "73bc187680f94bed498f8a669103cad290e41180",
      "tree": "e4e8c9a6baa656dbeb470032956657b294610c61",
      "parents": [
        "e27425d614d68daa08f60735982a7c3a0230e855"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Oct 03 14:07:49 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Oct 19 15:12:51 2011 -0400"
      },
      "message": "Btrfs: introduce mount option no_space_cache\n\nSome users have requested this and I\u0027ve found I needed a way to disable cache\nloading without actually clearing the cache, so introduce the no_space_cache\noption.  Before we check the super blocks cache generation field and if it was\npopulated we always turned space caching on.  Now we check this and set the\nspace cache option on, and then parse the mount options so that if we want it\noff it get\u0027s turned off.  Then we check the mount option all the places we do\nthe caching work instead of checking the super\u0027s cache generation.  This makes\nthings more consistent and lets us turn space caching off.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "1728366efa5ebf48bd2ed544afa8700cd07ba822",
      "tree": "1f5d2129f3db9a9e8c3aa96b0c8120a55aac925c",
      "parents": [
        "462d6fac8960a3ba797927adfcbd29d503eb16fd"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Sep 26 13:58:47 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Oct 19 15:12:48 2011 -0400"
      },
      "message": "Btrfs: stop using write_one_page\n\nWhile looking for a performance regression a user was complaining about, I\nnoticed that we had a regression with the varmail test of filebench.  This was\nintroduced by\n\n0d10ee2e6deb5c8409ae65b970846344897d5e4e\n\nwhich keeps us from calling writepages in writepage.  This is a correct change,\nhowever it happens to help the varmail test because we write out in larger\nchunks.  This is largly to do with how we write out dirty pages for each\ntransaction.  If you run filebench with\n\nload varmail\nset $dir\u003d/mnt/btrfs-test\nrun 60\n\nprior to this patch you would get ~1420 ops/second, but with the patch you get\n~1200 ops/second.  This is a 16% decrease.  So since we know the range of dirty\npages we want to write out, don\u0027t write out in one page chunks, write out in\nranges.  So to do this we call filemap_fdatawrite_range() on the range of bytes.\nThen we convert the DIRTY extents to NEED_WAIT extents.  When we then call\nbtrfs_wait_marked_extents() we only have to filemap_fdatawait_range() on that\nrange and clear the NEED_WAIT extents.  This doesn\u0027t get us back to our original\nspeeds, but I\u0027ve been seeing ~1380 ops/second, which is a \u003c5% regression as\nopposed to a \u003e15% regression.  That is acceptable given that the original commit\ngreatly reduces our latency to begin with.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "9c8d86db9aee6f85866d480e0f9b37817264814c",
      "tree": "0f191662ee322e52ed7946390b6fc4bb7c0eb130",
      "parents": [
        "4a92b1b8d2810db4ea0c34616b94c0b3810fa027"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Sep 19 11:58:54 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Oct 19 15:12:44 2011 -0400"
      },
      "message": "Btrfs: make sure to unset trans-\u003eblock_rsv before running delayed refs\n\nChecksums are charged in 2 different ways.  The first case is when we\u0027re writing\nto the disk, we account for the new checksums with the delalloc block rsv.  In\norder for this to work we check if we\u0027re allocating a block for the csum root\nand if trans-\u003eblock_rsv \u003d\u003d the delalloc block rsv.  But when we\u0027re deleting the\ncsums because of cow, this is charged to the global block rsv, and is done when\nwe run the delayed refs.  So we need to make sure that trans-\u003eblock_rsv \u003d\u003d NULL\nwhen running the delayed refs.  So set it to NULL and reset it in\nshould_end_transaction, and set it to NULL in commit_transaction.  This got rid\nof the ridiculous amount of warnings I was seeing when trying to do a balance.\nThanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "4a92b1b8d2810db4ea0c34616b94c0b3810fa027",
      "tree": "dd01cff1987b8178be84f8b750951497b7f525a7",
      "parents": [
        "d02c9955ded7fc56dd1edc987558b084ccb03eb4"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Aug 30 12:34:28 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Oct 19 15:12:44 2011 -0400"
      },
      "message": "Btrfs: stop passing a trans handle all around the reservation code\n\nThe only thing that we need to have a trans handle for is in\nreserve_metadata_bytes and thats to know how much flushing we can do.  So\ninstead of passing it around, just check current-\u003ejournal_info for a\ntrans_handle so we know if we can commit a transaction to try and free up space\nor not.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "4c13d758b7e79c14a0026c1f783f0c79e339b7bb",
      "tree": "d1510daf164457d433b5f6219e5d48f2f6720a31",
      "parents": [
        "c09544e07f8cdc455ed8615d4c067d694c33bd18"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Aug 30 11:31:29 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Oct 19 15:12:42 2011 -0400"
      },
      "message": "Btrfs: use the transactions block_rsv for the csum root\n\nThe alloc warnings everybody has been seeing is because we have been reserving\nspace for csums, but we weren\u0027t actually using that space.  So make\nget_block_rsv() return the trans-\u003eblock_rsv if we\u0027re modifying the csum root.\nAlso set the trans-\u003eblock_rsv to NULL so that if we modify the csum root when\nrunning delayed ref\u0027s that comes out of the global reserve like it\u0027s supposed\nto.  With this patch I\u0027m not seeing those alloc warnings anymore.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "482e6dc5261406fdb921946e70b51467b0305bad",
      "tree": "b3acb0574ea5b7a8bd4991c346f5166f0317bbf4",
      "parents": [
        "07127184efb629f1336c0592bfdacec258cab731"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Aug 19 10:31:56 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Oct 19 15:12:38 2011 -0400"
      },
      "message": "Btrfs: allow callers to specify if flushing can occur for btrfs_block_rsv_check\n\nIf you run xfstest 224 it you will get lots of messages about not being able to\ndelete inodes and that they will be cleaned up next mount.  This is because\nbtrfs_block_rsv_check was not calling reserve_metadata_bytes with the ability to\nflush, so if there was not enough space, it simply failed.  But in truncate and\nevict case we could easily flush space to try and get enough space to do our\nwork, so make btrfs_block_rsv_check take a flush argument to pass down to\nreserve_metadata_bytes.  Now xfstests 224 runs fine without all those\ncomplaints.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "dba68306f3fae681b1005137f130f5bcfdfed34a",
      "tree": "eb19fa46bc8f7130fd68393420255876cc8f73fb",
      "parents": [
        "7709cde33f12db71efb377fae4ae7aab6c94ebc6"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Aug 04 15:34:57 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Oct 19 15:12:32 2011 -0400"
      },
      "message": "Btrfs: kill the orphan space calculation for snapshots\n\nThis patch kills off the calculation for the amount of space needed for the\norphan operations during a snapshot.  The thing is we only do snapshots on\ncommit, so any space that is in the block_rsv-\u003efreed[] isn\u0027t going to be in the\nnew snapshot anyway, so there isn\u0027t any reason to require that space to be\nreserved for the snapshot to occur.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "98c9942aca05fff198cd5ca629599cd193444809",
      "tree": "4013ae687f6a2a6f2f96d9da739bd3bcf468ac79",
      "parents": [
        "65450aa645b1ef7ed74e41c34b28d53333744978"
      ],
      "author": {
        "name": "Liu Bo",
        "email": "liubo2009@cn.fujitsu.com",
        "time": "Sun Sep 11 10:52:24 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Sep 11 10:52:24 2011 -0400"
      },
      "message": "Btrfs: fix misuse of trans block rsv\n\nAt the beginning of create_pending_snapshot, trans-\u003eblock_rsv is set\nto pending-\u003eblock_rsv and is used for snapshot things, however, when\nit is done, we do not recover it as will.\n\nSigned-off-by: Liu Bo \u003cliubo2009@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b9c8300c2ac354d850159f301d5b3ead13854cdd",
      "tree": "3c8a07481fda046b52d098780ea2eb02ac5b7e8d",
      "parents": [
        "72d63ed6427cf233e2b352c0b80c3e5c5a444986"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Thu Jul 14 03:17:14 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Aug 01 14:30:47 2011 -0400"
      },
      "message": "Btrfs: remove a BUG_ON() in btrfs_commit_transaction()\n\nwait_for_commit() always returns 0.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "72d63ed6427cf233e2b352c0b80c3e5c5a444986",
      "tree": "e88ba3e354552911f4ee8695e2123e7a4552a6f1",
      "parents": [
        "e55179b3d7d41d83fd6b5f59325f4a8d8ac9700a"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Thu Jul 14 03:17:00 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Aug 01 14:30:46 2011 -0400"
      },
      "message": "Btrfs: use wait_event()\n\nUse wait_event() when possible to avoid code duplication.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "81317fdeddcef259b6ecf7b5c0d04caa167c6b54",
      "tree": "aeca005b8b595539b554a6b8a92dc052ccad5601",
      "parents": [
        "a65917156e345946dbde3d7effd28124c6d6a8c2"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Sun Jul 24 15:45:34 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 27 12:46:46 2011 -0400"
      },
      "message": "Btrfs: fix deadlock when throttling transactions\n\nHit this nice little deadlock.  What happens is this\n\n__btrfs_end_transaction with throttle set, --use_count so it equals 0\n  btrfs_commit_transaction\n    \u003csomebody else actually manages to start the commit\u003e\n    btrfs_end_transaction --use_count so now its -1 \u003c\u003d\u003d BAD\n      we just return and wait on the transaction\n\nThis is bad because we just return after our use_count is -1 and don\u0027t let go\nof our num_writer count on the transaction, so the guy committing the\ntransaction just sits there forever.  Fix this by inc\u0027ing our use_count if we\u0027re\ngoing to call commit_transaction so that if we call btrfs_end_transaction it\u0027s\nvalid.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b5009945be18023942ce28327893c7bc1e58fe54",
      "tree": "fe2e04196c833a3b609a1cf947293aafcf90a7bd",
      "parents": [
        "fa09200b8334f9a6af3f656edae924a98d85630f"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Jun 07 15:07:51 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Jul 11 09:58:47 2011 -0400"
      },
      "message": "Btrfs: do transaction space reservation before joining the transaction\n\nWe have to do weird things when handling enospc in the transaction joining code.\nBecause we\u0027ve already joined the transaction we cannot commit the transaction\nwithin the reservation code since it will deadlock, so we have to return EAGAIN\nand then make sure we don\u0027t retry too many times.  Instead of doing this, just\ndo the reservation the normal way before we join the transaction, that way we\ncan do whatever we want to try and reclaim space, and then if it fails we know\nfor sure we are out of space and we can return ENOSPC.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "e999376f094162aa425ae749aa1df95ab928d010",
      "tree": "080d4a2a20d8d7e7ea8b36f63150827b970da715",
      "parents": [
        "35a30d7ce54e087d8025a725d4e5a2fdee723a9f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 17 16:14:09 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 17 16:38:47 2011 -0400"
      },
      "message": "Btrfs: avoid delayed metadata items during commits\n\nSnapshot creation has two phases.  One is the initial snapshot setup,\nand the second is done during commit, while nobody is allowed to modify\nthe root we are snapshotting.\n\nThe delayed metadata insertion code can break that rule, it does a\ndelayed inode update on the inode of the parent of the snapshot,\nand delayed directory item insertion.\n\nThis makes sure to run the pending delayed operations before we\nrecord the snapshot root, which avoids corruptions.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "e038dca803423bb7a3fa9a162b7dcc225efe9bf9",
      "tree": "efd5d76b77f21b4a9e570f2cb5bed9f95970f7a0",
      "parents": [
        "7585717f304f5ed005cc4ad933a69aab3efbd136",
        "ed0ca14021e5ae3147602128641aa7f742ab227c"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 17 14:16:13 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 17 14:16:13 2011 -0400"
      },
      "message": "Merge branch \u0027for-chris\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs-work into for-linus\n\nConflicts:\n\tfs/btrfs/transaction.c\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "7585717f304f5ed005cc4ad933a69aab3efbd136",
      "tree": "2bbef7f61c61b125778d3631237094594b408e0a",
      "parents": [
        "f4c44016218a6fce357715b9bbabbbbe1f69853c"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jun 13 20:00:16 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 17 13:36:58 2011 -0400"
      },
      "message": "Btrfs: fix relocation races\n\nThe recent commit to get rid of our trans_mutex introduced\nsome races with block group relocation.  The problem is that relocation\nneeds to do some record keeping about each root, and it was relying\non the transaction mutex to coordinate things in subtle ways.\n\nThis fix adds a mutex just for the relocation code and makes sure\nit doesn\u0027t have a big impact on normal operations.  The race is\nreally fixed in btrfs_record_root_in_trans, which is where we\nstep back and wait for the relocation code to finish accounting\nsetup.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "ed0ca14021e5ae3147602128641aa7f742ab227c",
      "tree": "22f9a66f0f99770edb483963ff308982424f2e53",
      "parents": [
        "8351583e3f6e430ce8f71913909a96ad5cc6a2f6"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Jun 14 16:22:15 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Jun 15 13:24:47 2011 -0400"
      },
      "message": "Btrfs: set no_trans_join after trying to expand the transaction\n\nWe can lockup if we try to allow new writers join the transaction and we have\nflushoncommit set or have a pending snapshot.  This is because we set\nno_trans_join and then loop around and try to wait for ordered extents again.\nThe problem is the ordered endio stuff needs to join the transaction, which it\ncan\u0027t do because no_trans_join is set.  So instead wait until after this loop to\nset no_trans_join and then make sure to wait for num_writers \u003d\u003d 1 in case\nanybody got started in between us exiting the loop and setting no_trans_join.\nThis could easily be reproduced by mounting -o flushoncommit and running xfstest\n13.  It cannot be reproduced with this patch.  Thanks,\n\nReported-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "38e880540f983045da7a00fbc50daad238207fc5",
      "tree": "3221e77ecf07f3a25037fccc304788aab33e0724",
      "parents": [
        "38e87880666091fe9c572a7a2ed2e771d97ca5aa"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Jun 10 18:43:13 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 10 16:42:29 2011 -0400"
      },
      "message": "Btrfs: clear current-\u003ejournal_info on async transaction commit\n\nNormally current-\u003ejouranl_info is cleared by commit_transaction.  For an\nasync snap or subvol creation, though, it runs in a work queue.  Clear\nit in btrfs_commit_transaction_async() to avoid leaking a non-NULL\njournal_info when we return to userspace.  When the actual commit runs in\nthe other thread it won\u0027t care that it\u0027s current-\u003ejournal_info is already\nNULL.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nTested-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3473f3c06a36865ae05993041fff35ee928342a7",
      "tree": "1f87d27e58a27ab525ac7579e6e1233052f8b573",
      "parents": [
        "25b8b936ed44814a5ce6fc3b2a21401f33cd56f6"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Jun 09 10:15:17 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Jun 09 10:15:17 2011 -0400"
      },
      "message": "Btrfs: unlock the trans lock properly\n\nIn btrfs_wait_for_commit if we came upon a transaction that had committed we\njust exited, but that\u0027s bad since we are holding the trans_lock.  So break\ninstead so that the lock is dropped.  Thanks,\n\nReported-by: David Sterba \u003cdsterba@suse.cz\u003e\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "7841cb2898f66a73062c64d0ef5733dde7279e46",
      "tree": "b7a94d96d44971845951a59e9fb7b5c2e30c46b3",
      "parents": [
        "4b9465cb9e3859186eefa1ca3b990a5849386320"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Tue May 31 18:07:27 2011 +0200"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat Jun 04 08:11:22 2011 -0400"
      },
      "message": "btrfs: add helper for fs_info-\u003eclosing\n\nwrap checking of filesystem \u0027closing\u0027 flag and fix a few missing memory\nbarriers.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\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": "d82a6f1d7e8b61ed5996334d0db66651bb43641d",
      "tree": "5738ec75f7679bdc1b97aecbc5cad3464cc65541",
      "parents": [
        "7e2355ba1a11649f0b212a29fdb9f47476f1248e"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed May 11 15:26:06 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon May 23 13:03:12 2011 -0400"
      },
      "message": "Btrfs: kill BTRFS_I(inode)-\u003eblock_group\n\nOriginally this was going to be used as a way to give hints to the allocator,\nbut frankly we can get much better hints elsewhere and it\u0027s not even used at all\nfor anything usefull.  In addition to be completely useless, when we initialize\nan inode we try and find a freeish block group to set as the inodes block group,\nand with a completely full 40gb fs this takes _forever_, so I imagine with say\n1tb fs this is just unbearable.  So just axe the thing altoghether, we don\u0027t\nneed it and it saves us 8 bytes in the inode and saves us 500 microseconds per\ninode lookup in my testcase.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "a4abeea41adfa3c143c289045f4625dfaeba2212",
      "tree": "792e2a398d8ba77447ba3f9f2c4266a1ce2f611c",
      "parents": [
        "2a1eb4614d984d5cd4c928784e9afcf5c07f93be"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Apr 11 17:25:13 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon May 23 13:00:57 2011 -0400"
      },
      "message": "Btrfs: kill trans_mutex\n\nWe use trans_mutex for lots of things, here\u0027s a basic list\n\n1) To serialize trans_handles joining the currently running transaction\n2) To make sure that no new trans handles are started while we are committing\n3) To protect the dead_roots list and the transaction lists\n\nReally the serializing trans_handles joining is not too hard, and can really get\nbogged down in acquiring a reference to the transaction.  So replace the\ntrans_mutex with a trans_lock spinlock and use it to do the following\n\n1) Protect fs_info-\u003erunning_transaction.  All trans handles have to do is check\nthis, and then take a reference of the transaction and keep on going.\n2) Protect the fs_info-\u003etrans_list.  This doesn\u0027t get used too much, basically\nit just holds the current transactions, which will usually just be the currently\ncommitting transaction and the currently running transaction at most.\n3) Protect the dead roots list.  This is only ever processed by splicing the\nlist so this is relatively simple.\n4) Protect the fs_info-\u003ereloc_ctl stuff.  This is very lightweight and was using\nthe trans_mutex before, so this is a pretty straightforward change.\n5) Protect fs_info-\u003eno_trans_join.  Because we don\u0027t hold the trans_lock over\nthe entirety of the commit we need to have a way to block new people from\ncreating a new transaction while we\u0027re doing our work.  So we set no_trans_join\nand in join_transaction we test to see if that is set, and if it is we do a\nwait_on_commit.\n6) Make the transaction use count atomic so we don\u0027t need to take locks to\nmodify it when we\u0027re dropping references.\n7) Add a commit_lock to the transaction to make sure multiple people trying to\ncommit the same transaction don\u0027t race and commit at the same time.\n8) Make open_ioctl_trans an atomic so we don\u0027t have to take any locks for ioctl\ntrans.\n\nI have tested this with xfstests, but obviously it is a pretty hairy change so\nlots of testing is greatly appreciated.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "2a1eb4614d984d5cd4c928784e9afcf5c07f93be",
      "tree": "892b123c194e490a2dc0bc5b45f641ac921e9d26",
      "parents": [
        "7a7eaa40a39bde4eefc91aadeb1ce3dc4e6a1252"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Apr 13 15:15:59 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon May 23 13:00:57 2011 -0400"
      },
      "message": "Btrfs: if we\u0027ve already started a trans handle, use that one\n\nWe currently track trans handles in current-\u003ejournal_info, but we don\u0027t actually\nuse it.  This patch fixes it.  This will cover the case where we have multiple\npeople starting transactions down the call chain.  This keeps us from having to\nallocate a new handle and all of that, we just increase the use count of the\ncurrent handle, save the old block_rsv, and return.  I tested this with xfstests\nand it worked out fine.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "7a7eaa40a39bde4eefc91aadeb1ce3dc4e6a1252",
      "tree": "eea3dea572a73168b70efa9fba2e9800457571d7",
      "parents": [
        "74b2107543da4ed9607ec484f63c42362dc9fca6"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Apr 13 12:54:33 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon May 23 13:00:56 2011 -0400"
      },
      "message": "Btrfs: take away the num_items argument from btrfs_join_transaction\n\nI keep forgetting that btrfs_join_transaction() just ignores the num_items\nargument, which leads me to sending pointless patches and looking stupid :).  So\njust kill the num_items argument from btrfs_join_transaction and\nbtrfs_start_ioctl_transaction, since neither of them use it.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "712673339a0d085358fd1cd3a6477cc7979bb69f",
      "tree": "b2e268685e3cbba19a4adb2a47d853e4e461fcfc",
      "parents": [
        "aa2dfb372a2a647beedac163ce6f8b0fcbefac29",
        "8628764e1a5e1998a42b9713e9edea7753653d01"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 06:30:52 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 06:30:52 2011 -0400"
      },
      "message": "Merge branch \u0027for-chris\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arne/btrfs-unstable-arne into inode_numbers\n\nConflicts:\n\tfs/btrfs/Makefile\n\tfs/btrfs/ctree.h\n\tfs/btrfs/volumes.h\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.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": "dcc6d073225b6b732a52477c91bd4edc9b4d5502",
      "tree": "71da6844bb03c940c87c01a2a1f8c2e11cf85238",
      "parents": [
        "0965537308ac3b267ea16e731bd73870a51c53b8",
        "16cdcec736cd214350cdb591bf1091f8beedefa0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun May 22 07:07:01 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun May 22 07:07:01 2011 -0400"
      },
      "message": "Merge branch \u0027delayed_inode\u0027 into inode_numbers\n\nConflicts:\n\tfs/btrfs/inode.c\n\tfs/btrfs/ioctl.c\n\tfs/btrfs/transaction.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": "a2de733c78fa7af51ba9670482fa7d392aa67c57",
      "tree": "d88817bc7aba94e7efea530efac5ef190c1b799c",
      "parents": [
        "7cf96da3ec7ca225acf4f284b0e904a1f5f98821"
      ],
      "author": {
        "name": "Arne Jansen",
        "email": "sensille@gmx.net",
        "time": "Tue Mar 08 14:14:00 2011 +0100"
      },
      "committer": {
        "name": "Arne Jansen",
        "email": "sensille@gmx.net",
        "time": "Thu May 12 14:45:20 2011 +0200"
      },
      "message": "btrfs: scrub\n\nThis adds an initial implementation for scrub. It works quite\nstraightforward. The usermode issues an ioctl for each device in the\nfs. For each device, it enumerates the allocated device chunks. For\neach chunk, the contained extents are enumerated and the data checksums\nfetched. The extents are read sequentially and the checksums verified.\nIf an error occurs (checksum or EIO), a good copy is searched for. If\none is found, the bad copy will be rewritten.\nAll enumerations happen from the commit roots. During a transaction\ncommit, the scrubs get paused and afterwards continue from the new\nroots.\n\nThis commit is based on the series originally posted to linux-btrfs\nwith some improvements that resulted from comments from David Sterba,\nIlya Dryomov and Jan Schmidt.\n\nSigned-off-by: Arne Jansen \u003csensille@gmx.net\u003e\n"
    },
    {
      "commit": "182608c8294b5fe90d7bbd4b026c82bf0a24b736",
      "tree": "5705e84960e66caa84ac059a3528a31493e35d16",
      "parents": [
        "f2a97a9dbd86eb1ef956bdf20e05c507b32beb96"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu May 05 13:13:16 2011 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Fri May 06 12:34:10 2011 +0200"
      },
      "message": "btrfs: remove old unused commented out code\n\nRemove code which has been #if0-ed out for a very long time and does not\nseem to be related to current codebase anymore.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\n"
    },
    {
      "commit": "f993c883ad8e111fb9e9ae603540acbe94f7246c",
      "tree": "8c57c5377bff275e0a6e0d75284ab81fd74109a5",
      "parents": [
        "62a45b60923a576170a1a0c309c240d9f40d193d"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Wed Apr 20 23:35:57 2011 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Mon May 02 13:57:21 2011 +0200"
      },
      "message": "btrfs: drop unused argument from extent_io_tree_init\n\nall callers pass GFP_NOFS, but the GFP mask argument is not used in the\nfunction; GFP_ATOMIC is passed to radix tree initialization and it\u0027s the\nonly correct one, since we\u0027re using the preload/insert mechanism of\nradix tree.\nLet\u0027s drop the gfp mask from btrfs function, this will not change\nbehaviour.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\n"
    },
    {
      "commit": "82d5902d9c681be37ffa9d70482907f9f0b7ec1f",
      "tree": "c9c99f0b60004ac14d09d277d3216667df09c32d",
      "parents": [
        "33345d01522f8152f99dc84a3e7a1a45707f387f"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Wed Apr 20 10:33:24 2011 +0800"
      },
      "committer": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Mon Apr 25 16:46:11 2011 +0800"
      },
      "message": "Btrfs: Support reading/writing on disk free ino cache\n\nThis is similar to block group caching.\n\nWe dedicate a special inode in fs tree to save free ino cache.\n\nAt the very first time we create/delete a file after mount, the free ino\ncache will be loaded from disk into memory. When the fs tree is commited,\nthe cache will be written back to disk.\n\nTo keep compatibility, we check the root generation against the generation\nof the special inode when loading the cache, so the loading will fail\nif the btrfs filesystem was mounted in an older kernel before.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "33345d01522f8152f99dc84a3e7a1a45707f387f",
      "tree": "6a978702dc4421768e63501fa15bc8fedd5bff32",
      "parents": [
        "0414efae7989a2183fb2cc000ab285c4c2836a00"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Wed Apr 20 10:31:50 2011 +0800"
      },
      "committer": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Mon Apr 25 16:46:09 2011 +0800"
      },
      "message": "Btrfs: Always use 64bit inode number\n\nThere\u0027s a potential problem in 32bit system when we exhaust 32bit inode\nnumbers and start to allocate big inode numbers, because btrfs uses\ninode-\u003ei_ino in many places.\n\nSo here we always use BTRFS_I(inode)-\u003elocation.objectid, which is an\nu64 variable.\n\nThere are 2 exceptions that BTRFS_I(inode)-\u003elocation.objectid !\u003d\ninode-\u003ei_ino: the btree inode (0 vs 1) and empty subvol dirs (256 vs 2),\nand inode-\u003ei_ino will be used in those cases.\n\nAnother reason to make this change is I\u0027m going to use a special inode\nto save free ino cache, and the inode number must be \u003e (u64)-256.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "581bb050941b4f220f84d3e5ed6dace3d42dd382",
      "tree": "5ebd56af5eb3612f508419b188dfc18e959e7c94",
      "parents": [
        "34d52cb6c50b5a43901709998f59fb1c5a43dc4a"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Wed Apr 20 10:06:11 2011 +0800"
      },
      "committer": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Mon Apr 25 16:46:04 2011 +0800"
      },
      "message": "Btrfs: Cache free inode numbers in memory\n\nCurrently btrfs stores the highest objectid of the fs tree, and it always\nreturns (highest+1) inode number when we create a file, so inode numbers\nwon\u0027t be reclaimed when we delete files, so we\u0027ll run out of inode numbers\nas we keep create/delete files in 32bits machines.\n\nThis fixes it, and it works similarly to how we cache free space in block\ncgroups.\n\nWe start a kernel thread to read the file tree. By scanning inode items,\nwe know which chunks of inode numbers are free, and we cache them in\nan rb-tree.\n\nBecause we are searching the commit root, we have to carefully handle the\ncross-transaction case.\n\nThe rb-tree is a hybrid extent+bitmap tree, so if we have too many small\nchunks of inode numbers, we\u0027ll use bitmaps. Initially we allow 16K ram\nof extents, and a bitmap will be used if we exceed this threshold. The\nextents threshold is adjusted in runtime.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "13c5a93e7005d7dae0b6d070d25203593e692d13",
      "tree": "ecbc7205618940bbba3f0d9ad000462a5364f763",
      "parents": [
        "93a54bc4c28a125978cddbe2db9e347391e3522d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Apr 11 15:45:29 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Apr 11 20:43:52 2011 -0400"
      },
      "message": "Btrfs: avoid taking the trans_mutex in btrfs_end_transaction\n\nI\u0027ve been working on making our O_DIRECT latency not suck and I noticed we were\ntaking the trans_mutex in btrfs_end_transaction.  So to do this we convert\nnum_writers and use_count to atomic_t\u0027s and just decrement them in\nbtrfs_end_transaction.  Instead of deleting the transaction from the trans list\nin put_transaction we do that in btrfs_commit_transaction() since that\u0027s the\nonly time it actually needs to be removed from the list.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "06d5a5899d6d3ac401d2359b5eac6d2a3a0fe331",
      "tree": "ff26c40dec6e649dca7316ce10412cc6c0ace985",
      "parents": [
        "be1a12a0dfed06cf1e62e35bf91620dc610a451a"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Apr 05 11:57:27 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Apr 08 13:00:32 2011 -0400"
      },
      "message": "Btrfs: only retry transaction reservation once\n\nI saw a lockup where we kept getting into this start transaction-\u003ecommit\ntransaction loop because of enospce.  The fact is if we fail to make our\nreservation, we\u0027ve tried _everything_ several times, so we only need to try and\ncommit the transaction once, and if that doesn\u0027t work then we really are out of\nspace and need to just exit.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "08fe4db170b4193603d9d31f40ebaf652d07ac9c",
      "tree": "2d0d2abe40b77266600653e399d4973a679716a9",
      "parents": [
        "adae52b94e18afa1f84fab67df2a8a872c2f5533"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Mon Mar 28 02:01:25 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Apr 05 01:20:24 2011 -0400"
      },
      "message": "Btrfs: Fix uninitialized root flags for subvolumes\n\nroot_item-\u003eflags and root_item-\u003ebyte_limit are not initialized when\na subvolume is created. This bug is not revealed until we added\nreadonly snapshot support - now you mount a btrfs filesystem and you\nmay find the subvolumes in it are readonly.\n\nTo work around this problem, we steal a bit from root_item-\u003einode_item-\u003eflags,\nand use it to indicate if those fields have been properly initialized.\nWhen we read a tree root from disk, we check if the bit is set, and if\nnot we\u0027ll set the flag and initialize the two fields of the root item.\n\nReported-by: Andreas Philipp \u003cphilipp.andreas@gmail.com\u003e\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nTested-by: Andreas Philipp \u003cphilipp.andreas@gmail.com\u003e\ncc: stable@kernel.org\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6e8df2ae89ab37730c0062782f844c66ecfc97a7",
      "tree": "4172619b01d817440d43807da8baec77a14d39d2",
      "parents": [
        "8b2b2d3cbefb605501342adaf64d601b545ed154"
      ],
      "author": {
        "name": "Yoshinori Sano",
        "email": "yoshinori.sano@gmail.com",
        "time": "Sun Apr 03 12:31:28 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Apr 05 01:19:43 2011 -0400"
      },
      "message": "Btrfs: fix memory leak in start_transaction()\n\nFree btrfs_trans_handle when join_transaction() fails\nin start_transaction()\n\nSigned-off-by: Yoshinori Sano \u003cyoshinori.sano@gmail.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": "3612b49598c303cfb22a4b609427f829828e2427",
      "tree": "d0e9eabb176777ab80af5d78eab0555044172370",
      "parents": [
        "34d19bada00f4825588b338a8ee193820f9ceeb0"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Tue Jan 25 02:51:38 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jan 28 16:40:37 2011 -0500"
      },
      "message": "btrfs: fix return value check of btrfs_join_transaction()\n\nThe error check of btrfs_join_transaction()/btrfs_join_transaction_nolock()\nis added, and the mistake of the error check in several places is\ncorrected.\n\nFor more stable Btrfs, I think that we should reduce BUG_ON().\nBut, I think that long time is necessary for this.\nSo, I propose this patch as a short-term solution.\n\nWith this patch:\n - To more stable Btrfs, the part that should be corrected is clarified.\n - The panic isn\u0027t done by the NULL pointer reference etc. (even if\n   BUG_ON() is increased temporarily)\n - The error code is returned in the place where the error can be easily\n   returned.\n\nAs a long-term plan:\n - BUG_ON() is reduced by using the forced-readonly framework, etc.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "acce952b0263825da32cf10489413dec78053347",
      "tree": "d934881f247484d7b6917bebc40828600bb6b76c",
      "parents": [
        "6f88a4403def422bd8e276ddf6863d6ac71435d2"
      ],
      "author": {
        "name": "liubo",
        "email": "liubo2009@cn.fujitsu.com",
        "time": "Thu Jan 06 19:30:25 2011 +0800"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 17 15:13:08 2011 -0500"
      },
      "message": "Btrfs: forced readonly mounts on errors\n\nThis patch comes from \"Forced readonly mounts on errors\" ideas.\n\nAs we know, this is the first step in being more fault tolerant of disk\ncorruptions instead of just using BUG() statements.\n\nThe major content:\n- add a framework for generating errors that should result in filesystems\n  going readonly.\n- keep FS state in disk super block.\n- make sure that all of resource will be freed and released at umount time.\n- make sure that fter FS is forced readonly on error, there will be no more\n  disk change before FS is corrected. For this, we should stop write operation.\n\nAfter this patch is applied, the conversion from BUG() to such a framework can\nhappen incrementally.\n\nSigned-off-by: Liu Bo \u003cliubo2009@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b83cc9693f39689490970c19f6c5b866f6719a70",
      "tree": "b86d09884015fce195a4ac5ff1e8ec5f6ec00677",
      "parents": [
        "fa0d2b9bd717340e0bc4850a80ac0eb344e9a7fb"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Mon Dec 20 16:04:08 2010 +0800"
      },
      "committer": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Thu Dec 23 08:49:17 2010 +0800"
      },
      "message": "Btrfs: Add readonly snapshots support\n\nUsage:\n\nSet BTRFS_SUBVOL_RDONLY of btrfs_ioctl_vol_arg_v2-\u003eflags, and call\nioctl(BTRFS_I0CTL_SNAP_CREATE_V2).\n\nImplementation:\n\n- Set readonly bit of btrfs_root_item-\u003eflags.\n- Add readonly checks in btrfs_permission (inode_permission),\nbtrfs_setattr, btrfs_set/remove_xattr and some ioctls.\n\nChangelog for v3:\n\n- Eliminate btrfs_root-\u003ereadonly, but check btrfs_root-\u003eroot_item.flags.\n- Rename BTRFS_ROOT_SNAP_RDONLY to BTRFS_ROOT_SUBVOL_RDONLY.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "6a912213046ecb6511fdf35531a0c7de3de963c9",
      "tree": "b745a07d0ad5c5bedf68c55739200093f9d96c1b",
      "parents": [
        "76195853903ca613ba722203db9b747d70478fc7"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Sat Nov 20 09:48:00 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Nov 21 22:26:09 2010 -0500"
      },
      "message": "Btrfs: use dget_parent where we can UPDATED\n\nThere are lots of places where we do dentry-\u003ed_parent-\u003ed_inode without holding\nthe dentry-\u003ed_lock.  This could cause problems with rename.  So instead we need\nto use dget_parent() and hold the reference to the parent as long as we are\ngoing to use it\u0027s inode and then dput it at the end.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nCc: raven@themaw.net\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "462045928bda777c86919a396a42991fcf235378",
      "tree": "c2b12ff8e9ef1951b5960b853034bd4165578f99",
      "parents": [
        "bb9c12c945cbd1b0eaa1589546dde772ccabeeba"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Oct 29 15:41:32 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 15:41:32 2010 -0400"
      },
      "message": "Btrfs: add START_SYNC, WAIT_SYNC ioctls\n\nSTART_SYNC will start a sync/commit, but not wait for it to\ncomplete.  Any modification started after the ioctl returns is\nguaranteed not to be included in the commit.  If a non-NULL\npointer is passed, the transaction id will be returned to\nuserspace.\n\nWAIT_SYNC will wait for any in-progress commit to complete.  If a\ntransaction id is specified, the ioctl will block and then\nreturn (success) when the specified transaction has committed.\nIf it has already committed when we call the ioctl, it returns\nimmediately.  If the specified transaction doesn\u0027t exist, it\nreturns EINVAL.\n\nIf no transaction id is specified, WAIT_SYNC will wait for the\ncurrently committing transaction to finish it\u0027s commit to disk.\nIf there is no currently committing transaction, it returns\nsuccess.\n\nThese ioctls are useful for applications which want to impose an\nordering on when fs modifications reach disk, but do not want to\nwait for the full (slow) commit process to do so.\n\nPicky callers can take the transid returned by START_SYNC and\nfeed it to WAIT_SYNC, and be certain to wait only as long as\nnecessary for the transaction _they_ started to reach disk.\n\nSloppy callers can START_SYNC and WAIT_SYNC without a transid,\nand provided they didn\u0027t wait too long between the calls, they\nwill get the same result.  However, if a second commit starts\nbefore they call WAIT_SYNC, they may end up waiting longer for\nit to commit as well.  Even so, a START_SYNC+WAIT_SYNC still\nguarantees that any operation completed before the START_SYNC\nreaches disk.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "bb9c12c945cbd1b0eaa1589546dde772ccabeeba",
      "tree": "92f0bb01dce5125547c590d7c06b3e02d5c9d4fa",
      "parents": [
        "99d16cbcaf694c803a1b6bf7e851694ffe1d255d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Oct 29 15:37:34 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 15:37:34 2010 -0400"
      },
      "message": "Btrfs: async transaction commit\n\nAdd support for an async transaction commit that is ordered such that any\nsubsequent operations will join the following transaction, but does not\nwait until the current commit is fully on disk.  This avoids much of the\nlatency associated with the btrfs_commit_transaction for callers concerned\nwith serialization and not safety.\n\nThe wait_for_unblock flag controls whether we wait for the \u0027middle\u0027 portion\nof commit_transaction to complete, which is necessary if the caller expects\nsome of the modifications contained in the commit to be available (this is\nthe case for subvol/snapshot creation).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "99d16cbcaf694c803a1b6bf7e851694ffe1d255d",
      "tree": "dacf7f8eca75dc0d92566b5d3876f3efe8196e35",
      "parents": [
        "fccdae435c1b295cca546f23f6f43126a28ffac3"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Oct 29 15:37:34 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 15:37:34 2010 -0400"
      },
      "message": "Btrfs: fix deadlock in btrfs_commit_transaction\n\nWe calculate timeout (either 1 or MAX_SCHEDULE_TIMEOUT) based on whether\nnum_writers \u003e 1 or should_grow at the top of the loop.  Then, much much\nlater, we wait for that timeout if either num_writers or should_grow is\ntrue.  However, it\u0027s possible for a racing process (calling\nbtrfs_end_transaction()) to decrement num_writers such that we wait\nforever instead of for 1.\n\nFix this by deciding how long to wait when we wait.  Include a smp_mb()\nbefore checking if the waitqueue is active to ensure the num_writers\nis visible.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6b5b817f103450444f3f658a498f435d92a197e5",
      "tree": "2896588127c4dd6c2867ef09e7e3cdd83391f8ae",
      "parents": [
        "8216ef866df1119fd5a72372b8b29bce49c18590",
        "e9bb7f10d3617304ef94ff7aa8fefbce3078f08b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 09:27:49 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 09:27:49 2010 -0400"
      },
      "message": "Merge branch \u0027bug-fixes\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs-work\n\nConflicts:\n\tfs/btrfs/extent-tree.c\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "0af3d00bad38d3bb9912a60928ad0669f17bdb76",
      "tree": "abbf4c773138a33dcde483ac60f016c4b5e55dcc",
      "parents": [
        "f6f94e2ab1b33f0082ac22d71f66385a60d8157f"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Jun 21 14:48:16 2010 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Oct 28 15:59:09 2010 -0400"
      },
      "message": "Btrfs: create special free space cache inode\n\nIn order to save free space cache, we need an inode to hold the data, and we\nneed a special item to point at the right inode for the right block group.  So\nfirst, create a special item that will point to the right inode, and the number\nof extent entries we will have and the number of bitmaps we will have.  We\ntruncate and pre-allocate space everytime to make sure it\u0027s uptodate.\n\nThis feature will be turned on as soon as you mount with -o space_cache, however\nit is safe to boot into old kernels, they will just generate the cache the old\nfashion way.  When you boot back into a newer kernel we will notice that we\nmodified and not the cache and automatically discard the cache.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "8bb8ab2e93f9c3c9453e13be0f37d344a32a3a6d",
      "tree": "619600c7458a3af18555f189d53efc4c092b9280",
      "parents": [
        "14ed0ca6e8236f2d264c4a8faec9e3a2b3d04377"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Oct 15 16:52:49 2010 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Oct 22 15:55:01 2010 -0400"
      },
      "message": "Btrfs: rework how we reserve metadata bytes\n\nWith multi-threaded writes we were getting ENOSPC early because somebody would\ncome in, start flushing delalloc because they couldn\u0027t make their reservation,\nand in the meantime other threads would come in and use the space that was\ngetting freed up, so when the original thread went to check to see if they had\nspace they didn\u0027t and they\u0027d return ENOSPC.  So instead if we have some free\nspace but not enough for our reservation, take the reservation and then start\ndoing the flushing.  The only time we don\u0027t take reservations is when we\u0027ve\nalready overcommitted our space, that way we don\u0027t have people who come late to\nthe party way overcommitting ourselves.  This also moves all of the retrying and\nflushing code into reserve_metdata_bytes so it\u0027s all uniform.  This keeps my\nfs_mark test from returning -ENOSPC as soon as it starts and actually lets me\nfill up the disk.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "ed3b3d314cd2f16fac42676839854a68cab2e22b",
      "tree": "a38462cdfbaa0dce3bbd26fe7167fe7368439a47",
      "parents": [
        "11c65dccf70be9ace5dbd3906778e1a099b1fee1"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:12:41 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:58 2010 -0400"
      },
      "message": "Btrfs: don\u0027t walk around with task-\u003estate !\u003d TASK_RUNNING\n\nYan Zheng noticed two places we were doing a lot of work\nwithout task-\u003estate set to TASK_RUNNING.  This sets the state\nproperly after we get ready to sleep but decide not to.\n\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": "d68fc57b7e3245cfacf2e3b47acfed1946a11786",
      "tree": "c2572fcd935017440c8370c8a12ceb49a7fc4f1f",
      "parents": [
        "8929ecfa50f266163832eeacfbc3642ed5eb83b6"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:49:58 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:52 2010 -0400"
      },
      "message": "Btrfs: Metadata reservation for orphan inodes\n\nreserve metadata space for handling orphan inodes\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8929ecfa50f266163832eeacfbc3642ed5eb83b6",
      "tree": "e0177748af36d49d5f652cff0e421a8268cf7194",
      "parents": [
        "0ca1f7ceb1991099ed5273885ebcf4323948c72e"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:49:58 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:52 2010 -0400"
      },
      "message": "Btrfs: Introduce global metadata reservation\n\nReserve metadata space for extent tree, checksum tree and root tree\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a22285a6a32390195235171b89d157ed1a1fe932",
      "tree": "3fabc88a029e1af4f2fdcc708e7b62ef3cf3703a",
      "parents": [
        "f0486c68e4bd9a06a5904d3eeb3a0d73a83befb8"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:48:46 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:50 2010 -0400"
      },
      "message": "Btrfs: Integrate metadata reservation with start_transaction\n\nBesides simplify the code, this change makes sure all metadata\nreservation for normal metadata operations are released after\ncommitting transaction.\n\nChanges since V1:\n\nAdd code that check if unlink and rmdir will free space.\n\nAdd ENOSPC handling for clone ioctl.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "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": "6bdb72ded1e281cd8844918c39d00cdd0e59f655",
      "tree": "39c25c85ddb1c2eecf7977e7e21a95f1c95ec21f",
      "parents": [
        "b5cb160084fad438c513d0952849e597ffe9e3d9"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 15 17:27:13 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 05 14:42:01 2010 -0400"
      },
      "message": "Btrfs: create snapshot references in same commit as snapshot\n\nThis creates the reference to a new snapshot in the same commit as the\nsnapshot itself.  This avoids the need for a second commit in order for a\nsnapshot to be persistent, and also avoids the problem of \"leaking\" a\nnew snapshot tree root if the host crashes before the second commit takes\nplace.\n\nIt is not at all clear to me why it wasn\u0027t always done this way.  If there\nis still a reason for the two-stage {create,finish}_pending_snapshots()\napproach I\u0027m missing something!  :)\n\nI\u0027ve been running this for a couple weeks under pretty heavy usage (a few\nsnapshots per minute) without obvious problems.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "471fa17dff556ad38caf26de097c0630530d8cbe",
      "tree": "1a89bf8fa9eb34df3512c1216d5a92a29327a98d",
      "parents": [
        "90d2c51dbb4db05c040bc7db264bb7ab35e35455"
      ],
      "author": {
        "name": "Zhao Lei",
        "email": "zhaolei@cn.fujitsu.com",
        "time": "Thu Mar 25 12:35:14 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 30 21:19:08 2010 -0400"
      },
      "message": "Btrfs: Remove unnecessary finish_wait() in wait_current_trans()\n\nWe only need to call finish_wait() after wait loop.\n\nBy the way, this patch makes code of waiting loop similar to\nexample in wait.h(no functional change)\n\nSigned-off-by: Zhao Lei \u003czhaolei@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": "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": "0bdb1db297ab36865a63ee722d35ff0a1f0ae522",
      "tree": "bd30183300d2ceaa35db1ab59adacf89e8e19d1a",
      "parents": [
        "bd4d10888990f7e3f8029205d27eb155202d6969"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Feb 19 14:13:50 2010 -0800"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 15 11:00:11 2010 -0400"
      },
      "message": "Btrfs: flush data on snapshot creation\n\nFlush any delalloc extents when we create a snapshot, so that recently\nwritten file data is always included in the snapshot.\n\nA later commit will add the ability to snapshot without the flush, but\nmost people expect flushing.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6bef4d317193d3badbbfa3f3c593758ace84a629",
      "tree": "8aa9fcf3297c69033b9a9a83a27ecccaab0f9d7d",
      "parents": [
        "3f6fae9559225741c91f1320090b285da1413290"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Feb 23 19:43:04 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 08 16:26:50 2010 -0500"
      },
      "message": "Btrfs: use RB_ROOT to intialize rb_trees instead of setting rb_node to NULL\n\nbtrfs inialize rb trees in quite a number of places by settin rb_node \u003d\nNULL;  The problem with this is that 17d9ddc72fb8bba0d4f678 in the\nlinux-next tree adds a new field to that struct which needs to be NULL for\nthe new rbtree library code to work properly.  This patch uses RB_ROOT as\nthe intializer so all of the relevant fields will be NULL\u0027d.  Without the\npatch I get a panic.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Venkatesh Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.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": "24bbcf0442ee04660a5a030efdbb6d03f1c275cb",
      "tree": "aa57d77d29cc5150b272cc3f6465f10262fcbaac",
      "parents": [
        "f34f57a3ab4e73304d78c125682f1a53cd3975f2"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:36:34 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:35 2009 -0500"
      },
      "message": "Btrfs: Add delayed iput\n\niput() can trigger new transactions if we are dropping the\nfinal reference, so calling it in btrfs_commit_transaction\nmay end up deadlock. This patch adds delayed iput to avoid\nthe issue.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2e4bfab97055aa6acdd0637913bd705c2d6506d6",
      "tree": "2c07c3668c8d13ee1e2076d32a728c60eaa8f4ed",
      "parents": [
        "c71bf099abddf3e0fdc27f251ba76fca1461d49a"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:37:02 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:33 2009 -0500"
      },
      "message": "Btrfs: Avoid orphan inodes cleanup during committing transaction\n\nbtrfs_lookup_dentry may trigger orphan cleanup, so it\u0027s not good\nto call it while committing a transaction.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8cef4e160d74920ad1725f58c89fd75ec4c4ac38",
      "tree": "c1592369c7085e75d67a1709438a4f56351b2348",
      "parents": [
        "22763c5cf3690a681551162c15d34d935308c8d7"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:33:26 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Dec 15 21:24:25 2009 -0500"
      },
      "message": "Btrfs: Avoid superfluous tree-log writeout\n\nWe allow two log transactions at a time, but use same flag\nto mark dirty tree-log btree blocks. So we may flush dirty\nblocks belonging to newer log transaction when committing a\nlog transaction. This patch fixes the issue by using two\nflags to mark dirty tree-log btree blocks.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "249ac1e55c642c670f47aacdc57629bbbf10a8db",
      "tree": "b03fdf12ee409fb2b5d696f2644ac67a7a690778",
      "parents": [
        "6346c93988caa3048bf4d81f9ba3608a7a195aa2"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Nov 10 21:23:48 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 11 14:20:16 2009 -0500"
      },
      "message": "Btrfs: cleanup transaction starting and fix journal_info usage\n\nWe use journal_info to tell if we\u0027re in a nested transaction to make sure we\ndon\u0027t commit the transaction within a nested transaction.  We use another\nmethod to see if there are any outstanding ioctl trans handles, so if we\u0027re\nstarting one do not set current-\u003ejournal_info, since it will screw with other\nfilesystems.  This patch also cleans up the starting stuff so there aren\u0027t any\nmagic numbers.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "690587d109ffe19d6743e4cc80c18b0906b7f9ff",
      "tree": "788acd32c4ed1463d0166d0c45b233d96bb102e0",
      "parents": [
        "257c62e1bce03e5b9f3f069fd52ad73a56de71fd"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 13:29:19 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 13:35:12 2009 -0400"
      },
      "message": "Btrfs: streamline tree-log btree block writeout\n\nSyncing the tree log is a 3 phase operation.\n\n1) write and wait for all the tree log blocks for a given root.\n\n2) write and wait for all the tree log blocks for the\ntree of tree log roots.\n\n3) write and wait for the super blocks (barriers here)\n\nThis isn\u0027t as efficient as it could be because there is\nno requirement to wait for the blocks from step one to hit the disk\nbefore we start writing the blocks from step two.  This commit\nchanges the sequence so that we don\u0027t start waiting until\nall the tree blocks from both steps one and two have been sent\nto disk.\n\nWe do this by breaking up btrfs_write_wait_marked_extents into\ntwo functions, which is trivial because it was already broken\nup into two parts.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "9ed74f2dba6ebf9f30b80554290bfc73cc3ef083",
      "tree": "763d58a4a11ceca26dcdaedefb1fd662c4e2fa8b",
      "parents": [
        "c65ddb52dc412c9b67681b1aa16cd1bac8434e24"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Sep 11 16:12:44 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 28 16:29:42 2009 -0400"
      },
      "message": "Btrfs: proper -ENOSPC handling\n\nAt the start of a transaction we do a btrfs_reserve_metadata_space() and\nspecify how many items we plan on modifying.  Then once we\u0027ve done our\nmodifications and such, just call btrfs_unreserve_metadata_space() for\nthe same number of items we reserved.\n\nFor keeping track of metadata needed for data I\u0027ve had to add an extent_io op\nfor when we merge extents.  This lets us track space properly when we are doing\nsequential writes, so we don\u0027t end up reserving way more metadata space than\nwhat we need.\n\nThe only place where the metadata space accounting is not done is in the\nrelocation code.  This is because Yan is going to be reworking that code in the\nnear future, so running btrfs-vol -b could still possibly result in a ENOSPC\nrelated panic.  This patch also turns off the metadata_ratio stuff in order to\nallow users to more efficiently use their disk space.\n\nThis patch makes it so we track how much metadata we need for an inode\u0027s\ndelayed allocation extents by tracking how many extents are currently\nwaiting for allocation.  It introduces two new callbacks for the\nextent_io tree\u0027s, merge_extent_hook and split_extent_hook.  These help\nus keep track of when we merge delalloc extents together and split them\nup.  Reservations are handled prior to any actually dirty\u0027ing occurs,\nand then we unreserve after we dirty.\n\nbtrfs_unreserve_metadata_for_delalloc() will make the appropriate\nunreservations as needed based on the number of reservations we\ncurrently have and the number of extents we currently have.  Doing the\nreservation outside of doing any of the actual dirty\u0027ing lets us do\nthings like filemap_flush() the inode to try and force delalloc to\nhappen, or as a last resort actually start allocation on all delalloc\ninodes in the fs.  This has survived dbench, fs_mark and an fsx torture\ntest.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "76dda93c6ae2c1dc3e6cde34569d6aca26b0c918",
      "tree": "f5ca46ec89d4ae2c762952d5f35e2c6f95ac046a",
      "parents": [
        "4df27c4d5cc1dda54ed7d0a8389347f2df359cf9"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 16:00:26 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 16:00:26 2009 -0400"
      },
      "message": "Btrfs: add snapshot/subvolume destroy ioctl\n\nThis patch adds snapshot/subvolume destroy ioctl.  A subvolume that isn\u0027t being\nused and doesn\u0027t contains links to other subvolumes can be destroyed.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4df27c4d5cc1dda54ed7d0a8389347f2df359cf9",
      "tree": "2008f348d28c6c19e31924ae4fb414ca929a01f1",
      "parents": [
        "13a8a7c8c47e542b3cdb45bec3f431f96af79361"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "message": "Btrfs: change how subvolumes are organized\n\nbtrfs allows subvolumes and snapshots anywhere in the directory tree.\nIf we snapshot a subvolume that contains a link to other subvolume\ncalled subvolA, subvolA can be accessed through both the original\nsubvolume and the snapshot. This is similar to creating hard link to\ndirectory, and has the very similar problems.\n\nThe aim of this patch is enforcing there is only one access point to\neach subvolume. Only the first directory entry (the one added when\nthe subvolume/snapshot was created) is treated as valid access point.\nThe first directory entry is distinguished by checking root forward\nreference. If the corresponding root forward reference is missing,\nwe know the entry is not the first one.\n\nThis patch also adds snapshot/subvolume rename support, the code\nallows rename subvolume link across subvolumes.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "1c4850e21df8b441164d910bc611ef46a01d5d75",
      "tree": "aeccbf3495421d1343bbe08cb824ac1ae6764e43",
      "parents": [
        "b917b7c3be50435fa8257591b964934e917f2d45"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 15:55:59 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 15:55:59 2009 -0400"
      },
      "message": "Btrfs: speed up snapshot dropping\n\nThis patch contains two changes to avoid unnecessary tree block reads during\nsnapshot dropping.\n\nFirst, check tree block\u0027s reference count and flags before reading the tree\nblock. if reference count \u003e 1 and there is no need to update backrefs, we can\navoid reading the tree block.\n\nSecond, save when snapshot was created in root_key.offset. we can compare block\npointer\u0027s generation with snapshot\u0027s creation generation during updating\nbackrefs. If a given block was created before snapshot was created, the\nsnapshot can\u0027t be the tree block\u0027s owner. So we can avoid reading the block.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "11833d66be94b514652466802100378046c16b72",
      "tree": "2b00b36d0aa42e9e10cecf3bf723eb70a607afec",
      "parents": [
        "6e74057c4686dc12ea767b4bdc50a63876056e1c"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Fri Sep 11 16:11:19 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 17 15:47:36 2009 -0400"
      },
      "message": "Btrfs: improve async block group caching\n\nThis patch gets rid of two limitations of async block group caching.\nThe old code delays handling pinned extents when block group is in\ncaching. To allocate logged file extents, the old code need wait\nuntil block group is fully cached. To get rid of the limitations,\nThis patch introduces a data structure to track the progress of\ncaching. Base on the caching progress, we know which extents should\nbe added to the free space cache when handling the pinned extents.\nThe logged file extents are also handled in a similar way.\n\nThis patch also changes how pinned extents are tracked. The old\ncode uses one tree to track pinned extents, and copy the pinned\nextents tree at transaction commit time. This patch makes it use\ntwo trees to track pinned extents. One tree for extents that are\npinned in the running transaction, one tree for extents that can\nbe unpinned. At transaction commit time, we swap the two trees.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "f36f3042eae238bdaefe7c79310afe573bfc3622",
      "tree": "83ea0e271dedeef36423509be7f4189b838d14b5",
      "parents": [
        "276e680d192a67d222fcea51af37b056feffb665"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 30 10:04:48 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 30 10:14:46 2009 -0400"
      },
      "message": "Btrfs: be more polite in the async caching threads\n\nThe semaphore used by the async caching threads can prevent a\ntransaction commit, which can make the FS appear to stall.  This\nreleases the semaphore more often when a transaction commit is\nin progress.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    }
  ],
  "next": "276e680d192a67d222fcea51af37b056feffb665"
}
