)]}'
{
  "log": [
    {
      "commit": "5bdbeb2187a99d690b374a8c5ec9911fcbcfe739",
      "tree": "ca0120adbf92af41980371706781f8845b0fab05",
      "parents": [
        "22ee6985de7d3e81ec0cef9c6ba01b45ad1bafeb"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue May 29 16:59:49 2012 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed May 30 10:23:42 2012 -0400"
      },
      "message": "Btrfs: fix return code in drop_objectid_items\n\nSo dpkg fsync()\u0027s the file and the directory containing the file whenever it\nwrites to a file which is really slow in btrfs.  This is partly because\nfsync()\u0027ing a directory _always_ committed the transaction instead of just\ngoing to the tree log.  This is because drop_objectid_items() would return 1\nsince it does a btrfs_search_slot() which returns 1.  In tree-log jargon\nthis means that we have to commit the transaction to be safe.  So just check\nif ret is greater than 0 and set it to 0 if it does.  With this patch we now\nuse the tree-log instead of committing the entire transaction, which is\ntwice as fast on my box.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "22ee6985de7d3e81ec0cef9c6ba01b45ad1bafeb",
      "tree": "96f9f1b4a4e0f0e77503fd63e6552a4a4b477e21",
      "parents": [
        "018642a1f197887058e97291460b890d296e8953"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue May 29 16:57:49 2012 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed May 30 10:23:42 2012 -0400"
      },
      "message": "Btrfs: check to see if the inode is in the log before fsyncing\n\nWe have this check down in the actual logging code, but this is after we\nstart a transaction and all that good stuff.  So move the helper\ninode_in_log() out so we can call it in fsync() and avoid starting a\ntransaction altogether and just exit if we\u0027ve already fsync()\u0027ed this file\nrecently.  You would notice this issue if you fsync()\u0027ed a file over and\nover again until the transaction committed.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "018642a1f197887058e97291460b890d296e8953",
      "tree": "5fc77a516728d0281873dc19f66ef9ca9e92ae34",
      "parents": [
        "733f4fbbc1083aa343da739f46ee839705d6cfe3"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Tue May 29 18:10:13 2012 +0900"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed May 30 10:23:41 2012 -0400"
      },
      "message": "Btrfs: return value of btrfs_read_buffer is checked correctly\n\nbtrfs_read_buffer() has the possibility of returning the error.\nTherefore, I add the code in which the return value of btrfs_read_buffer()\nis checked.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "b9fab919b748c7b39c19ff236ed6c5682c266dde",
      "tree": "49e5a6f8041a7f0a9be0c1a39cd9088e3faa1df2",
      "parents": [
        "ea9947b4395fa34666086b2fa6f686e94903e047"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun May 06 07:23:47 2012 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun May 06 07:23:47 2012 -0400"
      },
      "message": "Btrfs: avoid sleeping in verify_parent_transid while atomic\n\nverify_parent_transid needs to lock the extent range to make\nsure no IO is underway, and so it can safely clear the\nuptodate bits if our checks fail.\n\nBut, a few callers are using it with spinlocks held.  Most\nof the time, the generation numbers are going to match, and\nwe don\u0027t want to switch to a blocking lock just for the error\ncase.  This adds an atomic flag to verify_parent_transid,\nand changes it to return EAGAIN if it needs to block to\nproperly verifiy things.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "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": "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": "6dd70ce4eb7429c2ba6dd9fa46f78a0a2a254038",
      "tree": "d527b7a18a05183b9826d42f42e74811d5793cef",
      "parents": [
        "357b9784b79924a31ccded5d9a0c688f48cc28f2"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Jan 26 15:01:11 2012 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 26 15:01:11 2012 -0500"
      },
      "message": "btrfs: Fix busyloops in transaction waiting code\n\nwait_log_commit() and wait_for_writer() were using slightly different\nconditions for deciding whether they should call schedule() and whether they\nshould continue in the wait loop. Thus it could happen that we busylooped when\nthe first condition was not true while the second one was. That is burning CPU\ncycles needlessly and is deadly on UP machines...\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.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": "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": "6a6662ced4153f6dbcfc40d7225c3cc45416039c",
      "tree": "77ad5d577333f02cd854e44827a407dd0388d4eb",
      "parents": [
        "32aaeffbd4a7457bf2f7448b33b5946ff2a960eb",
        "7c7e82a77fe3d89ae50824aa7c897454675eb4c4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 20:03:41 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 20:03:41 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: (114 commits)\n  Btrfs: check for a null fs root when writing to the backup root log\n  Btrfs: fix race during transaction joins\n  Btrfs: fix a potential btrfs_bio leak on scrub fixups\n  Btrfs: rename btrfs_bio multi -\u003e bbio for consistency\n  Btrfs: stop leaking btrfs_bios on readahead\n  Btrfs: stop the readahead threads on failed mount\n  Btrfs: fix extent_buffer leak in the metadata IO error handling\n  Btrfs: fix the new inspection ioctls for 32 bit compat\n  Btrfs: fix delayed insertion reservation\n  Btrfs: ClearPageError during writepage and clean_tree_block\n  Btrfs: be smarter about committing the transaction in reserve_metadata_bytes\n  Btrfs: make a delayed_block_rsv for the delayed item insertion\n  Btrfs: add a log of past tree roots\n  btrfs: separate superblock items out of fs_info\n  Btrfs: use the global reserve when truncating the free space cache inode\n  Btrfs: release metadata from global reserve if we have to fallback for unlink\n  Btrfs: make sure to flush queued bios if write_cache_pages waits\n  Btrfs: fix extent pinning bugs in the tree log\n  Btrfs: make sure btrfs_remove_free_space doesn\u0027t leak EAGAIN\n  Btrfs: don\u0027t wait as long for more batches during SSD log commit\n  ...\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": "e688b7252f784c2479d559f9f70ca8354752c5e7",
      "tree": "3934b0a9c348b2900e08e8fc9c0e6819e80d0fff",
      "parents": [
        "1eae31e918972bbeefc119d23c1d67674f49a301"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Oct 31 20:52:39 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Nov 06 03:03:48 2011 -0500"
      },
      "message": "Btrfs: fix extent pinning bugs in the tree log\n\nThe tree log had two important bugs that could cause corruptions after a\ncrash.  Sometimes we were allowing tree log blocks to be reused after\nthe tree log was committed but before the transaction commit was done.\n\nThis allowed a future metadata write to overwrite the tree log data.  It\nis fixed by adding a new variant of freeing reserved extents that always\npins them.  Credit goes to Stefan Behrens and Arne Jansen for many many\nhours spent tracking this bug down.\n\nDuring tree log replay, we do a pass through the tree log and pin all\nthe extents we find.  This makes sure the replay code won\u0027t go in and\nuse any of those blocks for new allocations during replay.  The problem\nis the free space cache isn\u0027t honoring these pinned extents.  So the\nallocator can end up handing them out, leading to all kinds of problems\nduring replay.\n\nThe fix here is to force any free space cache to load while we pin the\nextents, and then to make sure we remove the pinned extents from the\nfree space rbtree.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nReported-by: Stefan Behrens \u003csbehrens@giantdisaster.de\u003e\n"
    },
    {
      "commit": "cd354ad613a393424f85333ceed6b15e07fb94ae",
      "tree": "98261d8cc0a0f3808fd34037629a92d31a670b19",
      "parents": [
        "dff51cd1c60856c28f5d22a571294c2b70b6b322"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 20 15:45:37 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Nov 06 03:03:47 2011 -0500"
      },
      "message": "Btrfs: don\u0027t wait as long for more batches during SSD log commit\n\nWhen we\u0027re doing log commits, we try to wait for more writers to come in\nand make the commit bigger.  This helps improve performance on rotating\ndisks, but on SSDs it adds latencies.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "bfe8684869601dacfcb2cd69ef8cfd9045f62170",
      "tree": "4e213aaa766b26f43f0f9ec7998a7745239d9377",
      "parents": [
        "6d6b77f163c7eabedbba00ed2abb7d4a570bff76"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Oct 28 14:13:29 2011 +0200"
      },
      "committer": {
        "name": "Christoph Hellwig",
        "email": "hch@serles.lst.de",
        "time": "Wed Nov 02 12:53:43 2011 +0100"
      },
      "message": "filesystems: add set_nlink()\n\nReplace remaining direct i_nlink updates with a new set_nlink()\nupdater function.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nTested-by: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "34f3e4f23ca3d259fe078f62a128d97ca83508ef",
      "tree": "91e500624827a43c658268a41d195990db7159df",
      "parents": [
        "d5e2003c2bcda93a8f2e668eb4642d70c9c38301"
      ],
      "author": {
        "name": "liubo",
        "email": "liubo2009@cn.fujitsu.com",
        "time": "Sat Aug 06 08:35:23 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Aug 16 21:09:15 2011 -0400"
      },
      "message": "Btrfs: fix an oops of log replay\n\nWhen btrfs recovers from a crash, it may hit the oops below:\n\n------------[ cut here ]------------\nkernel BUG at fs/btrfs/inode.c:4580!\n[...]\nRIP: 0010:[\u003cffffffffa03df251\u003e]  [\u003cffffffffa03df251\u003e] btrfs_add_link+0x161/0x1c0 [btrfs]\n[...]\nCall Trace:\n [\u003cffffffffa03e7b31\u003e] ? btrfs_inode_ref_index+0x31/0x80 [btrfs]\n [\u003cffffffffa04054e9\u003e] add_inode_ref+0x319/0x3f0 [btrfs]\n [\u003cffffffffa0407087\u003e] replay_one_buffer+0x2c7/0x390 [btrfs]\n [\u003cffffffffa040444a\u003e] walk_down_log_tree+0x32a/0x480 [btrfs]\n [\u003cffffffffa0404695\u003e] walk_log_tree+0xf5/0x240 [btrfs]\n [\u003cffffffffa0406cc0\u003e] btrfs_recover_log_trees+0x250/0x350 [btrfs]\n [\u003cffffffffa0406dc0\u003e] ? btrfs_recover_log_trees+0x350/0x350 [btrfs]\n [\u003cffffffffa03d18b2\u003e] open_ctree+0x1442/0x17d0 [btrfs]\n[...]\n\nThis comes from that while replaying an inode ref item, we forget to\ncheck those old conflicting DIR_ITEM and DIR_INDEX items in fs/file tree,\nthen we will come to conflict corners which lead to BUG_ON().\n\nSigned-off-by: Liu Bo \u003cliubo2009@cn.fujitsu.com\u003e\nTested-by: Andy Lutomirski \u003cluto@mit.edu\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b43b31bdf2e662006c27cc4dcccf863312d62bc1",
      "tree": "9e12413edbd9d7a77e4c0b692dd28ca4ae5039bd",
      "parents": [
        "ff95acb6733d41a8d45feb0e18b96df25e610e78",
        "38a1a919535742af677303271eb4ff731547b706"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Aug 01 14:27:34 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Aug 01 14:27:34 2011 -0400"
      },
      "message": "Merge branch \u0027alloc_path\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/btrfs-error-handling into for-linus\n"
    },
    {
      "commit": "bd681513fa6f2ff29aa391f01e413a2d1c59fd77",
      "tree": "bb10ec6ef876b4d7a553cbe54976ec49a0d10b21",
      "parents": [
        "81317fdeddcef259b6ecf7b5c0d04caa167c6b54"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat Jul 16 15:23:14 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 27 12:46:46 2011 -0400"
      },
      "message": "Btrfs: switch the btrfs tree locks to reader/writer\n\nThe btrfs metadata btree is the source of significant\nlock contention, especially in the root node.   This\ncommit changes our locking to use a reader/writer\nlock.\n\nThe lock is built on top of rw spinlocks, and it\nextends the lock tracking to remember if we have a\nread lock or a write lock when we go to blocking.  Atomics\ncount the number of blocking readers or writers at any\ngiven time.\n\nIt removes all of the adaptive spinning from the old code\nand uses only the spinning/blocking hints inside of btrfs\nto decide when it should continue spinning.\n\nIn read heavy workloads this is dramatically faster.  In write\nheavy workloads we\u0027re still faster because of less contention\non the root node lock.\n\nWe suffer slightly in dbench because we schedule more often\nduring write locks, but all other benchmarks so far are improved.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "1e5063d093b5f024ae35bf835ca07463de2c1a1f",
      "tree": "c3d5f934e5db6e7169231ce4a7456a31a5eadb28",
      "parents": [
        "d8926bb3badd36670fecf2de4a062c78bc37430b"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Tue Jul 12 10:46:06 2011 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 14 14:14:44 2011 -0700"
      },
      "message": "btrfs: Don\u0027t BUG_ON alloc_path errors in replay_one_buffer()\n\nThe two -\u003eprocess_func call sites in tree-log.c which were ignoring a return\ncode have also been updated to gracefully exit as well.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "3ed4498caf381a73d6259d3ffacc914b17a507ec",
      "tree": "cfa41f477e31b26a602d5d2e81c52a032071e01d",
      "parents": [
        "e038dca803423bb7a3fa9a162b7dcc225efe9bf9"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Mon Jun 13 17:54:22 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 17 14:54:17 2011 -0400"
      },
      "message": "btrfs: fix dereference of ERR_PTR value\n\nsmatch reports:\n\nbtrfs_recover_log_trees error: \u0027wc.replay_dest\u0027 dereferencing\npossible ERR_PTR()\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d6c0cb379c5198487e4ac124728cbb2346d63b1f",
      "tree": "167a97ac58c7a2fbf7c4e94b6abbfe1e03af014a",
      "parents": [
        "8e531cdfeb75269c6c5aae33651cca39707848da",
        "1f78160ce1b1b8e657e2248118c4d91f881763f0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 14:37:47 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 14:37:47 2011 -0400"
      },
      "message": "Merge branch \u0027cleanups_and_fixes\u0027 into inode_numbers\n\nConflicts:\n\tfs/btrfs/tree-log.c\n\tfs/btrfs/volumes.c\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "37daa4f968e9470ae9f30e246a5781717c598271",
      "tree": "a9b7366069150ab3f8e5bc85c475c6194c5fabdf",
      "parents": [
        "c00e9493f1412621c8665a707d63e32b0768f572"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Thu Apr 28 09:18:21 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 13:24:40 2011 -0400"
      },
      "message": "Btrfs: check return value of btrfs_inc_extent_ref()\n\nIf return value of btrfs_inc_extent_ref() is not 0, BUG() is called.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c00e9493f1412621c8665a707d63e32b0768f572",
      "tree": "60e7b26ea4e6ff0b3270edc2abecdbacc4b211dc",
      "parents": [
        "1cd307990d6e2b4965620e339a92e0d7ae853e13"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Thu Apr 28 09:10:23 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 13:24:40 2011 -0400"
      },
      "message": "Btrfs: return error to caller if read_one_inode() fails\n\nWhen read_one_inode() fails, error code is returned to caller instead\nof 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": "1cd307990d6e2b4965620e339a92e0d7ae853e13",
      "tree": "cd3cc9c06e2c7bbbeda4d38bbcc00d44bfd98a02",
      "parents": [
        "65a246c5ffe3b487a001de025816326939e63362"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Thu May 19 05:19:08 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 13:24:39 2011 -0400"
      },
      "message": "Btrfs: BUG_ON is deleted from the caller of btrfs_truncate_item \u0026 btrfs_extend_item\n\nCurrently, btrfs_truncate_item and btrfs_extend_item returns only 0.\nSo, the check by BUG_ON in the caller is unnecessary.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "65a246c5ffe3b487a001de025816326939e63362",
      "tree": "52da5b08a584ac3178f8bd35a5e7333f5a3908e1",
      "parents": [
        "b0b802d7e34b0b4a78f911c3a8aad88aa91fd7ab"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Thu May 19 04:37:44 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 13:24:39 2011 -0400"
      },
      "message": "Btrfs: return error code to caller when btrfs_del_item fails\n\nThe error code is returned instead of calling BUG_ON when\nbtrfs_del_item returns the error.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8e531cdfeb75269c6c5aae33651cca39707848da",
      "tree": "34b6ef5c59c2983eca7744ef419d33d3302124ef",
      "parents": [
        "712673339a0d085358fd1cd3a6477cc7979bb69f"
      ],
      "author": {
        "name": "liubo",
        "email": "liubo2009@cn.fujitsu.com",
        "time": "Fri May 06 10:36:09 2011 +0800"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon May 23 10:13:16 2011 -0400"
      },
      "message": "Btrfs: do not flush csum items of unchanged file data during treelog\n\nThe current code relogs the entire inode every time during fsync log,\nand it is much better suited to small files rather than large ones.\n\nDuring my performance test, the fsync performace of large files sucks,\nand we can ascribe this to the tremendous amount of csum infos of the\nlarge ones, cause we have to flush all of these csum infos into log trees\neven when there are only _one_ change in the whole file data.  Apparently,\nto optimize fsync, we need to create a filter to skip the unnecessary csum\nones, that is, the corresponding file data remains unchanged before this fsync.\n\nHere I have some test results to show, I use sysbench to do \"random write + fsync\".\n\n\u003d\u003d\u003d\nsysbench --test\u003dfileio --num-threads\u003d1 --file-num\u003d2 --file-block-size\u003d4K --file-total-size\u003d8G --file-test-mode\u003drndwr --file-io-mode\u003dsync --file-extra-flags\u003d  [prepare, run]\n\u003d\u003d\u003d\n\nSysbench args:\n  - Number of threads: 1\n  - Extra file open flags: 0\n  - 2 files, 4Gb each\n  - Block size 4Kb\n  - Number of random requests for random IO: 10000\n  - Read/Write ratio for combined random IO test: 1.50\n  - Periodic FSYNC enabled, calling fsync() each 100 requests.\n  - Calling fsync() at the end of test, Enabled.\n  - Using synchronous I/O mode\n  - Doing random write test\n\nSysbench results:\n\u003d\u003d\u003d\n   Operations performed:  0 Read, 10000 Write, 200 Other \u003d 10200 Total\n   Read 0b  Written 39.062Mb  Total transferred 39.062Mb\n\u003d\u003d\u003d\na) without patch:  (*SPEED* : 451.01Kb/sec)\n   112.75 Requests/sec executed\n\nb) with patch:     (*SPEED* : 4.7533Mb/sec)\n   1216.84 Requests/sec executed\n\nPS: I\u0027ve made a _sub transid_ stuff patch, but it does not perform as effectively as this patch,\nand I\u0027m wanderring where the problem is and trying to improve it more.\n\nSigned-off-by: Liu Bo \u003cliubo2009@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.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": "0965537308ac3b267ea16e731bd73870a51c53b8",
      "tree": "7b52288b7272b2391f736dd82a313cbbaad68570",
      "parents": [
        "61c4f2c81c61f73549928dfd9f3e8f26aa36a8cf",
        "82d5902d9c681be37ffa9d70482907f9f0b7ec1f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat May 21 09:27:38 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat May 21 09:27:38 2011 -0400"
      },
      "message": "Merge branch \u0027ino-alloc\u0027 of git://repo.or.cz/linux-btrfs-devel into inode_numbers\n\nConflicts:\n\tfs/btrfs/free-space-cache.c\n\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": "b3b4aa74b58bded927f579fff787fb6fa1c0393c",
      "tree": "30dab4ab26558992dd8b6b212bef805de11c4c29",
      "parents": [
        "ba14419264684b290f0d0b7f48d26eafb11fc0c6"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Thu Apr 21 01:20:15 2011 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Mon May 02 13:57:22 2011 +0200"
      },
      "message": "btrfs: drop unused parameter from btrfs_release_path\n\nparameter tree root it\u0027s not used since commit\n5f39d397dfbe140a14edecd4e73c34ce23c4f9ee (\"Btrfs: Create extent_buffer\ninterface for large blocksizes\")\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\n"
    },
    {
      "commit": "c704005d886cf0bc9bc3974eb009b22fe0da32c7",
      "tree": "b9effb8d686af95ca92782697b75a70bf34a3964",
      "parents": [
        "4891aca2dac612a2f21a3278d9906ade13b55788"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Tue Apr 19 18:00:01 2011 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.cz",
        "time": "Mon May 02 13:57:20 2011 +0200"
      },
      "message": "btrfs: unify checking of IS_ERR and null\n\nuse IS_ERR_OR_NULL when possible, done by this coccinelle script:\n\n@ match @\nidentifier id;\n@@\n(\n- BUG_ON(IS_ERR(id) || !id);\n+ BUG_ON(IS_ERR_OR_NULL(id));\n|\n- IS_ERR(id) || !id\n+ IS_ERR_OR_NULL(id)\n|\n- !id || IS_ERR(id)\n+ IS_ERR_OR_NULL(id)\n)\n\nSigned-off-by: David Sterba \u003cdsterba@suse.cz\u003e\n"
    },
    {
      "commit": "a62f44a5f47ce45e524b55f91542dc386c6de7ef",
      "tree": "9385c5bb077e74a9e97ce048d8e615142366cc52",
      "parents": [
        "f65647c29b14f5a32ff6f3237b0ef3b375ed5a79"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Mon Apr 25 19:43:51 2011 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 25 19:43:51 2011 -0400"
      },
      "message": "Btrfs: fix missing mutex_unlock in btrfs_del_dir_entries_in_log()\n\nIt is necessary to unlock mutex_lock before it return an error when\nbtrfs_alloc_path() fails.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.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": "c622ae6085d0c6ad834213bbf1477eb311359078",
      "tree": "27e12a77c1759d17102c702606d535e78d7c3003",
      "parents": [
        "f7039b1d5c32241f87a513e33120db36bf30264d"
      ],
      "author": {
        "name": "liubo",
        "email": "liubo2009@cn.fujitsu.com",
        "time": "Sat Mar 26 08:01:12 2011 -0400"
      },
      "committer": {
        "name": "root",
        "email": "Chris Mason chris.mason@oracle.com",
        "time": "Mon Mar 28 05:37:48 2011 -0400"
      },
      "message": "btrfs: make inode ref log recovery faster\n\nWhen we recover from crash via write-ahead log tree and process\nthe inode refs, for each btrfs_inode_ref item, we will\n1) check if we already have a perfect match in fs/file tree, if\n   we have, then we\u0027re done.\n2) search the corresponding back reference in fs/file tree, and\n   check all the names in this back reference to see if they are\n   also in the log to avoid conflict corners.\n3) recover the logged inode refs to fs/file tree.\n\nIn current btrfs, however,\n- for 2)\u0027s check, once is enough, since the checked back reference\n  will remain unchanged after processing all the inode refs belonged\n  to the key.\n- it has no need to do another 1) between 2) and 3).\n\nI\u0027ve made a small test to show how it improves,\n\n$dd if\u003d/dev/zero of\u003dfoobar bs\u003d4K count\u003d1\n$sync\n$make 100 hard links continuously, like ln foobar link_i\n$fsync foobar\n$echo b \u003e /proc/sysrq-trigger\nafter reboot\n$time mount DEV PATH\n\nwithout patch:\nreal    0m0.285s\nuser    0m0.001s\nsys     0m0.009s\n\nwith patch:\nreal    0m0.123s\nuser    0m0.000s\nsys     0m0.010s\n\nChangelog v1-\u003ev2:\n- fix double free - pointed by David Sterba\nChangelog v2-\u003ev3:\n- adjust free order\n\nSigned-off-by: Liu Bo \u003cliubo2009@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "db5b493ac78e46c7b6bad22cd25d8041564cd8ea",
      "tree": "18f484c3d8194b80165e5400831931a3ac5c58ba",
      "parents": [
        "1abe9b8a138c9988ba8f7bfded6453649a31541f"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Wed Mar 23 08:14:16 2011 +0000"
      },
      "committer": {
        "name": "root",
        "email": "Chris Mason chris.mason@oracle.com",
        "time": "Mon Mar 28 05:37:35 2011 -0400"
      },
      "message": "Btrfs: cleanup some BUG_ON()\n\nThis patch changes some BUG_ON() to the error return.\n(but, most callers still use BUG_ON())\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "22a94d44bd6876a90630338229da6c0436d46593",
      "tree": "50e5c7dd52ccf9292240de995e5b42b1619bcd82",
      "parents": [
        "41415730a1050499fbd63b3f7dd59b3a4c3bb91a"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Mar 16 16:47:17 2011 -0400"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Mar 17 14:21:41 2011 -0400"
      },
      "message": "Btrfs: add checks to verify dir items are correct\n\nWe need to make sure the dir items we get are valid dir items.  So any time we\ntry and read one check it with verify_dir_item, which will do various sanity\nchecks to make sure it looks sane.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "98d5dc13e7e74b77ca3b4c3cbded9f48d2dbbbb7",
      "tree": "8e75f67b28b5b0d909483a06bb5258e0ba0c9789",
      "parents": [
        "5df67083488ccbad925f583b698ab38f8629a016"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Thu Jan 20 06:19:37 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Feb 01 07:17:27 2011 -0500"
      },
      "message": "btrfs: fix return value check of btrfs_start_transaction()\n\nThe error check of btrfs_start_transaction() is added, and the mistake\nof the error check on several places is corrected.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5df67083488ccbad925f583b698ab38f8629a016",
      "tree": "ec428f27f1b72c4d8e284831d4bef8894b2b8457",
      "parents": [
        "c87fb6fdcaf7560940b31a0c78c3e6370e3433cf"
      ],
      "author": {
        "name": "Tsutomu Itoh",
        "email": "t-itoh@jp.fujitsu.com",
        "time": "Tue Feb 01 09:17:35 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Feb 01 07:16:37 2011 -0500"
      },
      "message": "btrfs: checking NULL or not in some functions\n\nBecause NULL is returned when the memory allocation fails,\nit is checked whether it is NULL.\n\nSigned-off-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b31eabd86eb68d3c217e6821078249bc045e698a",
      "tree": "a6453484e1404ab2f92affad0225b3929dff5df6",
      "parents": [
        "b1953bcec95c189b1eea690a08e89646d7750bda"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 31 16:48:24 2011 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 31 16:48:24 2011 -0500"
      },
      "message": "Btrfs: catch errors from btrfs_sync_log\n\nbtrfs_sync_log returns -EAGAIN when we need full transaction commits\ninstead of small log commits, but sometimes we were dropping the return\nvalue.\n\nIn practice, we check for this a few different ways, but this is still a\nbug that can leave off full log commits when we really need them.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2a29edc6b60a5248ccab588e7ba7dad38cef0235",
      "tree": "45a7939e9e061cb2f06b09ae5f48aa79853e1250",
      "parents": [
        "6b82ce8d824bd46053e46a895876cde39d9026e4"
      ],
      "author": {
        "name": "liubo",
        "email": "liubo2009@cn.fujitsu.com",
        "time": "Wed Jan 26 06:22:08 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jan 28 16:40:36 2011 -0500"
      },
      "message": "btrfs: fix several uncheck memory allocations\n\nTo make btrfs more stable, add several missing necessary memory allocation\nchecks, and when no memory, return proper errno.\n\nWe\u0027ve checked that some of those -ENOMEM errors will be returned to\nuserspace, and some will be catched by BUG_ON() in the upper callers,\nand none will be ignored silently.\n\nSigned-off-by: Liu Bo \u003cliubo2009@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.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": "559af8211433b8c0b20e6c43c61409cb9c9c2996",
      "tree": "702ebd4c4f5b610daa36f65d814a518356a9a46b",
      "parents": [
        "411fc6bcef54f828a5458f4730c68abdf13c6bf0"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Fri Oct 29 15:14:37 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 15:14:37 2010 -0400"
      },
      "message": "Btrfs: cleanup warnings from gcc 4.6 (nonbugs)\n\nThese are all the cases where a variable is set, but not read which are\nnot bugs as far as I can see, but simply leftovers.\n\nStill needs more review.\n\nFound by gcc 4.6\u0027s new warnings\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "411fc6bcef54f828a5458f4730c68abdf13c6bf0",
      "tree": "89b91cd7e0d7633e9d6e386e388bd0493165f66c",
      "parents": [
        "d0b678cb0a26783ab7238784f1e7e608e5caafa3"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Fri Oct 29 15:14:31 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 15:14:31 2010 -0400"
      },
      "message": "Btrfs: Fix variables set but not read (bugs found by gcc 4.6)\n\nThese are all the cases where a variable is set, but not\nread which are really bugs.\n\n- Couple of incorrect error handling fixed.\n- One incorrect use of a allocation policy\n- Some other things\n\nStill needs more review.\n\nFound by gcc 4.6\u0027s new warnings.\n\n[akpm@linux-foundation.org: fix build.  Might have been bitrot]\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4a500fd178c89b96fa166a2d9e7855df33429841",
      "tree": "b97fe0b0c1cb19388fcf28f77cd74a645ec69a61",
      "parents": [
        "d68fc57b7e3245cfacf2e3b47acfed1946a11786"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Sun May 16 10:49:59 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:53 2010 -0400"
      },
      "message": "Btrfs: Metadata ENOSPC handling for tree log\n\nPrevious patches make the allocater return -ENOSPC if there is no\nunreserved free metadata space. This patch updates tree log code\nand various other places to propagate/handle the ENOSPC error.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.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": "73f73415caddbc01d9f10c03e0a677d5b3d11569",
      "tree": "249ef103a73e8d99efe409b7988b694537b3d6ad",
      "parents": [
        "12534832cb7b0abc7369298246e8b7af03b863ca"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Dec 04 17:38:27 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 15 10:58:13 2010 -0400"
      },
      "message": "Btrfs: change how we mount subvolumes\n\nThis work is in preperation for being able to set a different root as the\ndefault mounting root.\n\nThere is currently a problem with how we mount subvolumes.  We cannot currently\nmount a subvolume of a subvolume, you can only mount subvolumes/snapshots of the\ndefault subvolume.  So say you take a snapshot of the default subvolume and call\nit snap1, and then take a snapshot of snap1 and call it snap2, so now you have\n\n/\n/snap1\n/snap1/snap2\n\nas your available volumes.  Currently you can only mount / and /snap1,\nyou cannot mount /snap1/snap2.  To fix this problem instead of passing\nsubvolid\u003d\u003cname\u003e you must pass in subvolid\u003d\u003ctreeid\u003e, where \u003ctreeid\u003e is\nthe tree id that gets spit out via the subvolume listing you get from\nthe subvolume listing patches (btrfs filesystem list).  This allows us\nto mount /, /snap1 and /snap1/snap2 as the root volume.\n\nIn addition to the above, we also now read the default dir item in the\ntree root to get the root key that it points to.  For now this just\npoints at what has always been the default subvolme, but later on I plan\nto change it to point at whatever root you want to be the new default\nroot, so you can just set the default mount and not have to mount with\n-o subvolid\u003d\u003ctreeid\u003e.  I tested this out with the above scenario and it\nworked perfectly.  Thanks,\n\nmount -o subvol operates inside the selected subvolid.  For example:\n\nmount -o subvol\u003dsnap1,subvolid\u003d256 /dev/xxx /mnt\n\n/mnt will have the snap1 directory for the subvolume with id\n256.\n\nmount -o subvol\u003dsnap /dev/xxx /mnt\n\n/mnt will be the snap directory of whatever the default subvolume\nis.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c71bf099abddf3e0fdc27f251ba76fca1461d49a",
      "tree": "0b682ad2b49aeaf9ac774c40be4b7549c1d079fe",
      "parents": [
        "c216775458a2ee345d9412a2770c2916acfb5d30"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:40 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:33 2009 -0500"
      },
      "message": "Btrfs: Avoid orphan inodes cleanup while replaying log\n\nWe do log replay in a single transaction, so it\u0027s not good to do unbound\noperations. This patch cleans up orphan inodes cleanup after replaying\nthe log. It also avoids doing other unbound operations such as truncating\na file during replaying log. These unbound operations are postponed to\nthe orphan inode cleanup stage.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "920bbbfb05c9fce22e088d20eb9dcb8f96342de9",
      "tree": "b972b3f39ebefb9c026300c1981d18cad769e431",
      "parents": [
        "ad48fd754676bfae4139be1a897b1ea58f9aaf21"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:08 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Dec 15 21:24:52 2009 -0500"
      },
      "message": "Btrfs: Rewrite btrfs_drop_extents\n\nRewrite btrfs_drop_extents by using btrfs_duplicate_item, so we can\navoid calling lock_extent within transaction.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "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": "dcbeb0bec5f2695c3ff53f174efb8e03c209f3f3",
      "tree": "30d223a3a3c7470c657284ef030657bd1753d4d3",
      "parents": [
        "2b650df2cea96e487f2fd9ecaa68e533ea9b5ed7",
        "444528b3e614f7f2391488d9bca8e0b872db909b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 15 15:06:37 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 15 15:06:37 2009 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: always pin metadata in discard mode\n  Btrfs: enable discard support\n  Btrfs: add -o discard option\n  Btrfs: properly wait log writers during log sync\n  Btrfs: fix possible ENOSPC problems with truncate\n  Btrfs: fix btrfs acl #ifdef checks\n  Btrfs: streamline tree-log btree block writeout\n  Btrfs: avoid tree log commit when there are no changes\n  Btrfs: only write one super copy during fsync\n"
    },
    {
      "commit": "86df7eb921a009515285e7171363fa57dd2d7d31",
      "tree": "884e8cda2535dc43cf57ce9fa273381b827d2f4f",
      "parents": [
        "5d5e103a70f74ae98e3965a4add1ab951d0651d1"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Oct 14 09:24:59 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Oct 14 10:32:48 2009 -0400"
      },
      "message": "Btrfs: properly wait log writers during log sync\n\nA recently fsync optimization make btrfs_sync_log skip calling\nwait_for_writer in the single log writer case. This is incorrect\nsince the writer count can also be increased by btrfs_pin_log.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.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": "257c62e1bce03e5b9f3f069fd52ad73a56de71fd",
      "tree": "ad047fe5796156aa88e3f3600111bf2b8d12759f",
      "parents": [
        "4722607db6a78bd7748c51fa4c8d7371da797254"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 13:21:08 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 13:35:12 2009 -0400"
      },
      "message": "Btrfs: avoid tree log commit when there are no changes\n\nrpm has a habit of running fdatasync when the file hasn\u0027t\nchanged.  We already detect if a file hasn\u0027t been changed\nin the current transaction but it might have been sent to\nthe tree-log in this transaction and not changed since\nthe last call to fsync.\n\nIn this case, we want to avoid a tree log sync, which includes\na number of synchronous writes and barriers.  This commit\nextends the existing tracking of the last transaction to change\na file to also track the last sub-transaction.\n\nThe end result is that rpm -ivh and -Uvh are roughly twice as fast,\nand on par with ext3.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4722607db6a78bd7748c51fa4c8d7371da797254",
      "tree": "83c483a3f55d3f024863e1e33c3ac123e688c868",
      "parents": [
        "ac6889cbb254be1ffea376bea4a96ce9be0e0ed0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 12:55:09 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 13:35:11 2009 -0400"
      },
      "message": "Btrfs: only write one super copy during fsync\n\nDuring a tree-log commit for fsync, we\u0027ve been writing at least\ntwo copies of the super block and forcing them to disk.\n\nThe other filesystems write only one, and this change brings us on\npar with them.  A full transaction commit will write all the super\ncopies, so we still have redundant info written on a regular\nbasis.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "474a503d4bf77ae0cbe484dd0842a2648c0b1c28",
      "tree": "70e3e4023209e741546491a58622bd45fb13e308",
      "parents": [
        "d43c36dc6b357fa1806800f18aa30123c747a6d1",
        "ac6889cbb254be1ffea376bea4a96ce9be0e0ed0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 11 11:23:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 11 11:23:13 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix file clone ioctl for bookend extents\n  Btrfs: fix uninit compiler warning in cow_file_range_nocow\n  Btrfs: constify dentry_operations\n  Btrfs: optimize back reference update during btrfs_drop_snapshot\n  Btrfs: remove negative dentry when deleting subvolumne\n  Btrfs: optimize fsync for the single writer case\n  Btrfs: async delalloc flushing under space pressure\n  Btrfs: release delalloc reservations on extent item insertion\n  Btrfs: delay clearing EXTENT_DELALLOC for compressed extents\n  Btrfs: cleanup extent_clear_unlock_delalloc flags\n  Btrfs: fix possible softlockup in the allocator\n  Btrfs: fix deadlock on async thread startup\n"
    },
    {
      "commit": "ff782e0a131c7f669445c07fe5c7ba91e043b7ed",
      "tree": "ff7773e6ce60bf977ed29897c13605f257647684",
      "parents": [
        "e3ccfa989752c083ceb23c823a84f7ce3a081e61"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Oct 08 15:30:04 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 15:30:04 2009 -0400"
      },
      "message": "Btrfs: optimize fsync for the single writer case\n\nThis patch optimizes the tree logging stuff so it doesn\u0027t always wait 1 jiffie\nfor new people to join the logging transaction if there is only ever 1 writer.\nThis helps a little bit with latency where we have something like RPM where it\nwill fdatasync every file it writes, and so waiting the 1 jiffie for every\nfdatasync really starts to add up.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "54bcf382daf08c1396edb8b81e650b58930ccaef",
      "tree": "64b941f09489b5c9ee63e4ad43d736bfce911b21",
      "parents": [
        "94a8d5caba74211ec76dac80fc6e2d5c391530df",
        "c65ddb52dc412c9b67681b1aa16cd1bac8434e24"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 10:00:58 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 10:00:58 2009 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable into for-linus\n\nConflicts:\n\tfs/btrfs/super.c\n"
    },
    {
      "commit": "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": "13a8a7c8c47e542b3cdb45bec3f431f96af79361",
      "tree": "473f3cc94b4a93a0a5f6f19b1832ef2e6b7ecf62",
      "parents": [
        "1c4850e21df8b441164d910bc611ef46a01d5d75"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "message": "Btrfs: do not reuse objectid of deleted snapshot/subvol\n\nThe new back reference format does not allow reusing objectid of\ndeleted snapshot/subvol. So we use ++highest_objectid to allocate\nobjectid for new snapshot/subvol.\n\nNow we use ++highest_objectid to allocate objectid for both new inode\nand new snapshot/subvolume, so this patch removes \u0027find hole\u0027 code in\nbtrfs_find_free_objectid.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a419aef8b858a2bdb98df60336063d28df4b272f",
      "tree": "1736f6650ec0bfc01074c489fc47396114099c5e",
      "parents": [
        "2944fcbe03d65a704f07e43efe14adb0d226fd09"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Tue Aug 18 11:18:35 2009 -0700"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Sep 21 15:14:58 2009 +0200"
      },
      "message": "trivial: remove unnecessary semicolons\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\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": "a1ed835e1ab5795f91b198d08c43e2f56848dcf3",
      "tree": "ac3b370823fa76c5be7698e3663306badbbd622d",
      "parents": [
        "8b62b72b26bcd72082c4a69d179dd906bcc22200"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 12:27:37 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:07 2009 -0400"
      },
      "message": "Btrfs: Fix extent replacment race\n\nData COW means that whenever we write to a file, we replace any old\nextent pointers with new ones.  There was a window where a readpage\nmight find the old extent pointers on disk and cache them in the\nextent_map tree in ram in the middle of a given write replacing them.\n\nEven though both the readpage and the write had their respective bytes\nin the file locked, the extent readpage inserts may cover more bytes than\nit had locked down.\n\nThis commit closes the race by keeping the new extent pinned in the extent\nmap tree until after the on-disk btree is properly setup with the new\nextent pointers.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "68b38550ddbea13d296184bf69edff387618b1d3",
      "tree": "c0c3901b77f273ac08c39c641586884f41a90b84",
      "parents": [
        "631c07c8d12bcc6ce4a0fbfbd64ea843d78e2b10"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Jul 27 13:57:01 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jul 27 13:57:01 2009 -0400"
      },
      "message": "Btrfs: change how we unpin extents\n\nWe are racy with async block caching and unpinning extents.  This patch makes\nthings much less complicated by only unpinning the extent if the block group is\ncached.  We check the block_group-\u003ecached var under the block_group-\u003elock spin\nlock.  If it is set to BTRFS_CACHE_FINISHED then we update the pinned counters,\nand unpin the extent and add the free space back.  If it is not set to this, we\nstart the caching of the block group so the next time we unpin extents we can\nunpin the extent.  This keeps us from racing with the async caching threads,\nlets us kill the fs wide async thread counter, and keeps us from having to set\nDELALLOC bits for every extent we hit if there are caching kthreads going.\n\nOne thing that needed to be changed was btrfs_free_super_mirror_extents.  Now\ninstead of just looking for LOCKED extents, we also look for DIRTY extents,\nsince we could have left some extents pinned in the previous transaction that\nwill never get freed now that we are unmounting, which would cause us to leak\nmemory.  So btrfs_free_super_mirror_extents has been changed to\nbtrfs_free_pinned_extents, and it will clear the extents locked for the super\nmirror, and any remaining pinned extents that may be present.  Thank you,\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "631c07c8d12bcc6ce4a0fbfbd64ea843d78e2b10",
      "tree": "67c1564674da446c0472d8265f67843ff6cbe891",
      "parents": [
        "9779b72f0584fd53e0de53f62f205bf0dc0db553"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Mon Jul 27 13:57:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jul 27 13:57:00 2009 -0400"
      },
      "message": "Btrfs: Correct redundant test in add_inode_ref\n\ndir has already been tested.  It seems that this test should be on the\nrecently returned value inode.\n\nA simplified version of the semantic match that finds this problem is as\nfollows: (http://www.emn.fr/x-info/coccinelle/)\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "817d52f8dba26d0295c26035531c30ce5f1e3c3e",
      "tree": "5230153e86323de48e7e1440352d1b74d2d9961d",
      "parents": [
        "963030817060e4f109be1993b9ae8f81dbf5e11a"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Jul 13 21:29:25 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jul 24 09:23:39 2009 -0400"
      },
      "message": "Btrfs: async block group caching\n\nThis patch moves the caching of the block group off to a kthread in order to\nallow people to allocate sooner.  Instead of blocking up behind the caching\nmutex, we instead kick of the caching kthread, and then attempt to make an\nallocation.  If we cannot, we wait on the block groups caching waitqueue, which\nthe caching kthread will wake the waiting threads up everytime it finds 2 meg\nworth of space, and then again when its finished caching.  This is how I tested\nthe speedup from this\n\nmkfs the disk\nmount the disk\nfill the disk up with fs_mark\nunmount the disk\nmount the disk\ntime touch /mnt/foo\n\nWithout my changes this took 11 seconds on my box, with these changes it now\ntakes 1 second.\n\nAnother change thats been put in place is we lock the super mirror\u0027s in the\npinned extent map in order to keep us from adding that stuff as free space when\ncaching the block group.  This doesn\u0027t really change anything else as far as the\npinned extent map is concerned, since for actual pinned extents we use\nEXTENT_DIRTY, but it does mean that when we unmount we have to go in and unlock\nthose extents to keep from leaking memory.\n\nI\u0027ve also added a check where when we are reading block groups from disk, if the\namount of space used \u003d\u003d the size of the block group, we go ahead and mark the\nblock group as cached.  This drastically reduces the amount of time it takes to\ncache the block groups.  Using the same test as above, except doing a dd to a\nfile and then unmounting, it used to take 33 seconds to umount, now it takes 3\nseconds.\n\nThis version uses the commit_root in the caching kthread, and then keeps track\nof how many async caching threads are running at any given time so if one of the\nasync threads is still running as we cross transactions we can wait until its\nfinished before handling the pinned extents.  Thank you,\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b263c2c8bf13c273485bd99dbbeba79c844409dd",
      "tree": "8816eaabd20cfce5e37432ecf61cc8303863c48d",
      "parents": [
        "0b4dcea579a1b6f4d249d61f5bc8adeaa7c895d8"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jun 11 11:24:47 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jun 11 11:24:47 2009 -0400"
      },
      "message": "Btrfs: fix extent_buffer leak during tree log replay\n\nDuring tree log replay, we read in the tree log roots,\nprocess them and then free them.  A recent change\ntakes an extra reference on the root node of the tree\nwhen the root is read in, and stores that reference\nin root-\u003ecommit_root.\n\nThis reference was not being freed, leaving us with\none buffer pinned in ram for each subvol with\na tree log root after a crash.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5d4f98a28c7d334091c1b7744f48a1acdd2a4ae0",
      "tree": "c611d7d824cbcdb777dd2d8e33e2ed1c5df8a9c6",
      "parents": [
        "5c939df56c3ea018b58e5aa76181284c2053d699"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Jun 10 10:45:14 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 10 11:29:46 2009 -0400"
      },
      "message": "Btrfs: Mixed back reference  (FORWARD ROLLING FORMAT CHANGE)\n\nThis commit introduces a new kind of back reference for btrfs metadata.\nOnce a filesystem has been mounted with this commit, IT WILL NO LONGER\nBE MOUNTABLE BY OLDER KERNELS.\n\nWhen a tree block in subvolume tree is cow\u0027d, the reference counts of all\nextents it points to are increased by one.  At transaction commit time,\nthe old root of the subvolume is recorded in a \"dead root\" data structure,\nand the btree it points to is later walked, dropping reference counts\nand freeing any blocks where the reference count goes to 0.\n\nThe increments done during cow and decrements done after commit cancel out,\nand the walk is a very expensive way to go about freeing the blocks that\nare no longer referenced by the new btree root.  This commit reduces the\ntransaction overhead by avoiding the need for dead root records.\n\nWhen a non-shared tree block is cow\u0027d, we free the old block at once, and the\nnew block inherits old block\u0027s references. When a tree block with reference\ncount \u003e 1 is cow\u0027d, we increase the reference counts of all extents\nthe new block points to by one, and decrease the old block\u0027s reference count by\none.\n\nThis dead tree avoidance code removes the need to modify the reference\ncounts of lower level extents when a non-shared tree block is cow\u0027d.\nBut we still need to update back ref for all pointers in the block.\nThis is because the location of the block is recorded in the back ref\nitem.\n\nWe can solve this by introducing a new type of back ref. The new\nback ref provides information about pointer\u0027s key, level and in which\ntree the pointer lives. This information allow us to find the pointer\nby searching the tree. The shortcoming of the new back ref is that it\nonly works for pointers in tree blocks referenced by their owner trees.\n\nThis is mostly a problem for snapshots, where resolving one of these\nfuzzy back references would be O(number_of_snapshots) and quite slow.\nThe solution used here is to use the fuzzy back references in the common\ncase where a given tree block is only referenced by one root,\nand use the full back references when multiple roots have a reference\non a given block.\n\nThis commit adds per subvolume red-black tree to keep trace of cached\ninodes. The red-black tree helps the balancing code to find cached\ninodes whose inode numbers within a given range.\n\nThis commit improves the balancing code by introducing several data\nstructures to keep the state of balancing. The most important one\nis the back ref cache. It caches how the upper level tree blocks are\nreferenced. This greatly reduce the overhead of checking back ref.\n\nThe improved balancing code scales significantly better with a large\nnumber of snapshots.\n\nThis is a very large commit and was written in a number of\npieces.  But, they depend heavily on the disk format change and were\nsquashed together to make sure git bisect didn\u0027t end up in a\nbad state wrt space balancing or the format change.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "e980b50cda1610f1c17978d9b7fd311a9dd93877",
      "tree": "a5ab72fa4b791758e25fd6ece6f1aedd29954e7b",
      "parents": [
        "9601e3f6336f6ca66929f451b1f66085e68e36e3"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 24 14:39:24 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 24 15:46:05 2009 -0400"
      },
      "message": "Btrfs: fix fallocate deadlock on inode extent lock\n\nThe btrfs fallocate call takes an extent lock on the entire range\nbeing fallocated, and then runs through insert_reserved_extent on each\nextent as they are allocated.\n\nThe problem with this is that btrfs_drop_extents may decide to try\nand take the same extent lock fallocate was already holding.  The solution\nused here is to push down knowledge of the range that is already locked\ngoing into btrfs_drop_extents.\n\nIt turns out that at least one other caller had the same bug.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c293498be69816087746161338de4b81efdf69fc",
      "tree": "32b856b67ca63e2649c8574c9a09352666362ec8",
      "parents": [
        "3e7ad38d20ad113158d1b4c9de0f51c04f50d4f7"
      ],
      "author": {
        "name": "Stoyan Gaydarov",
        "email": "stoyboyker@gmail.com",
        "time": "Thu Apr 02 17:05:11 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 17:05:11 2009 -0400"
      },
      "message": "Btrfs: BUG to BUG_ON changes\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "3a5e14048a0a81276d284cbda441507a17e26147",
      "tree": "42464c2455216b008bf27c13496d001bb85d3564",
      "parents": [
        "a9572a15a854bd40453a6b7b4dd9d29132f64c64"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Apr 02 16:49:40 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 16:49:40 2009 -0400"
      },
      "message": "Btrfs: notreelog mount option\n\nAdd a \u0027notreelog\u0027 mount option to disable the tree log (used by fsync,\nO_SYNC writes).  This is much slower, but the tree logging produces\ninconsistent views into the FS for ceph.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "04018de5d41e6490840de9399e029fd30e78576f",
      "tree": "4fcb979cee830884ca0d3f9636cc70ed17b3364a",
      "parents": [
        "6226cb0a5ea3f6289883753c15d53f48a6c6bbfb"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "message": "Btrfs: kill the pinned_mutex\n\nThis patch removes the pinned_mutex.  The extent io map has an internal tree\nlock that protects the tree itself, and since we only copy the extent io map\nwhen we are committing the transaction we don\u0027t need it there.  We also don\u0027t\nneed it when caching the block group since searching through the tree is also\nprotected by the internal map spin lock.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n"
    },
    {
      "commit": "af4176b49c5ee15a9c9b10720c92456b28e7aac7",
      "tree": "a8f763a172e6fc19ef6ac24f04d6b88337c8a1b6",
      "parents": [
        "12fcfd22fe5bf4fe74710232098bc101af497995"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 10:24:31 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:52 2009 -0400"
      },
      "message": "Btrfs: optimize fsyncs on old files\n\nThe fsync log has code to make sure all of the parents of a file are in the\nlog along with the file.  It uses a minimal log of the parent directory\ninodes, just enough to get the parent directory on disk.\n\nIf the transaction that originally created a file is fully on disk,\nand the file hasn\u0027t been renamed or linked into other directories, we\ncan safely skip the parent directory walk.  We know the file is on disk\nsomewhere and we can go ahead and just log that single file.\n\nThis is more important now because unrelated unlinks in the parent directory\nmight make us force a commit if we try to log the parent.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "12fcfd22fe5bf4fe74710232098bc101af497995",
      "tree": "b01ba82147ea76c89149e54d475ed97121387261",
      "parents": [
        "a74ac3220774d33db967088906dc3351829e2d3a"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 10:24:20 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:52 2009 -0400"
      },
      "message": "Btrfs: tree logging unlink/rename fixes\n\nThe tree logging code allows individual files or directories to be logged\nwithout including operations on other files and directories in the FS.\nIt tries to commit the minimal set of changes to disk in order to\nfsync the single file or directory that was sent to fsync or O_SYNC.\n\nThe tree logging code was allowing files and directories to be unlinked\nif they were part of a rename operation where only one directory\nin the rename was in the fsync log.  This patch adds a few new rules\nto the tree logging.\n\n1) on rename or unlink, if the inode being unlinked isn\u0027t in the fsync\nlog, we must force a full commit before doing an fsync of the directory\nwhere the unlink was done.  The commit isn\u0027t done during the unlink,\nbut it is forced the next time we try to log the parent directory.\n\nSolution: record transid of last unlink/rename per directory when the\ndirectory wasn\u0027t already logged.  For renames this is only done when\nrenaming to a different directory.\n\nmkdir foo/some_dir\nnormal commit\nrename foo/some_dir foo2/some_dir\nmkdir foo/some_dir\nfsync foo/some_dir/some_file\n\nThe fsync above will unlink the original some_dir without recording\nit in its new location (foo2).  After a crash, some_dir will be gone\nunless the fsync of some_file forces a full commit\n\n2) we must log any new names for any file or dir that is in the fsync\nlog.  This way we make sure not to lose files that are unlinked during\nthe same transaction.\n\n2a) we must log any new names for any file or dir during rename\nwhen the directory they are being removed from was logged.\n\n2a is actually the more important variant.  Without the extra logging\na crash might unlink the old name without recreating the new one\n\n3) after a crash, we must go through any directories with a link count\nof zero and redo the rm -rf\n\nmkdir f1/foo\nnormal commit\nrm -rf f1/foo\nfsync(f1)\n\nThe directory f1 was fully removed from the FS, but fsync was never\ncalled on f1, only its parent dir.  After a crash the rm -rf must\nbe replayed.  This must be able to recurse down the entire\ndirectory tree.  The inode link count fixup code takes care of the\nugly details.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a74ac3220774d33db967088906dc3351829e2d3a",
      "tree": "292fe0b88a5917d3b282b6a1cdfca170f9405132",
      "parents": [
        "a4b6e07d1a8a9b907e82b9acbf51a026fbb9301c"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 10:24:13 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:51 2009 -0400"
      },
      "message": "Btrfs: Make sure i_nlink doesn\u0027t hit zero too soon during log replay\n\nDuring log replay, inodes are copied from the log to the main filesystem\nbtrees.  Sometimes they have a zero link count in the log but they actually\ngain links during the replay or have some in the main btree.\n\nThis patch updates the link count to be at least one after copying the\ninode out of the log.  This makes sure the inode is deleted during an\niput while the rest of the replay code is still working on it.\n\nThe log replay has fixup code to make sure that link counts are correct\nat the end of the replay, so we could use any non-zero number here and\nit would work fine.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b9473439d3e84d9fc1a0a83faca69cc1b7566341",
      "tree": "bef8321b80589026b617d61d0fabaf545d459269",
      "parents": [
        "89573b9c516b24af8a3b9958dd5afca8fa874e3d"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 11:00:37 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:28 2009 -0400"
      },
      "message": "Btrfs: leave btree locks spinning more often\n\nbtrfs_mark_buffer dirty would set dirty bits in the extent_io tree\nfor the buffers it was dirtying.  This may require a kmalloc and it\nwas not atomic.  So, anyone who called btrfs_mark_buffer_dirty had to\nset any btree locks they were holding to blocking first.\n\nThis commit changes dirty tracking for extent buffers to just use a flag\nin the extent buffer.  Now that we have one and only one extent buffer\nper page, this can be safely done without losing dirty bits along the way.\n\nThis also introduces a path-\u003eleave_spinning flag that callers of\nbtrfs_search_slot can use to indicate they will properly deal with a\npath returned where all the locks are spinning instead of blocking.\n\nMany of the btree search callers now expect spinning paths,\nresulting in better btree concurrency overall.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2456242530a21cfee82646ebeeda65d3f74faa4c",
      "tree": "c0e8f5eda96cefeb44a48f05a248ea22b4259ad2",
      "parents": [
        "4008c04a07c73ec3cb1be4c1391d2159a8f75d6d"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Feb 12 14:14:53 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 14:14:53 2009 -0500"
      },
      "message": "Btrfs: hold trans_mutex when using btrfs_record_root_in_trans\n\nbtrfs_record_root_in_trans needs the trans_mutex held to make sure two\ncallers don\u0027t race to setup the root in a given transaction.  This adds\nit to all the places that were missing it.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "b4ce94de9b4d64e8ab3cf155d13653c666e22b9b",
      "tree": "ebc44a9554a50b495b091cb0979d79fd29e50fe7",
      "parents": [
        "c487685d7c18a8481900755aa5c56a7a74193101"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:25:08 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:25:08 2009 -0500"
      },
      "message": "Btrfs: Change btree locking to use explicit blocking points\n\nMost of the btrfs metadata operations can be protected by a spinlock,\nbut some operations still need to schedule.\n\nSo far, btrfs has been using a mutex along with a trylock loop,\nmost of the time it is able to avoid going for the full mutex, so\nthe trylock loop is a big performance gain.\n\nThis commit is step one for getting rid of the blocking locks entirely.\nbtrfs_tree_lock takes a spinlock, and the code explicitly switches\nto a blocking lock when it starts an operation that can schedule.\n\nWe\u0027ll be able get rid of the blocking locks in smaller pieces over time.\nTracing allows us to find the most common cause of blocking, so we\ncan start with the hot spots first.\n\nThe basic idea is:\n\nbtrfs_tree_lock() returns with the spin lock held\n\nbtrfs_set_lock_blocking() sets the EXTENT_BUFFER_BLOCKING bit in\nthe extent buffer flags, and then drops the spin lock.  The buffer is\nstill considered locked by all of the btrfs code.\n\nIf btrfs_tree_lock gets the spinlock but finds the blocking bit set, it drops\nthe spin lock and waits on a wait queue for the blocking bit to go away.\n\nMuch of the code that needs to set the blocking bit finishes without actually\nblocking a good percentage of the time.  So, an adaptive spin is still\nused against the blocking bit to avoid very high context switch rates.\n\nbtrfs_clear_lock_blocking() clears the blocking bit and returns\nwith the spinlock held again.\n\nbtrfs_tree_unlock() can be called on either blocking or spinning locks,\nit does the right thing based on the blocking bit.\n\nctree.c has a helper function to set/clear all the locked buffers in a\npath as blocking.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "7237f1833601dcc435a64176c2c347ec4bd959f9",
      "tree": "5e12b9a7655f03181605e02fd91b42e68ee92c2e",
      "parents": [
        "7e6628544abad773222d8b177f738ac2db1859de"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Jan 21 12:54:03 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jan 21 12:54:03 2009 -0500"
      },
      "message": "Btrfs: fix tree logs parallel sync\n\nTo improve performance, btrfs_sync_log merges tree log sync\nrequests. But it wrongly merges sync requests for different\ntree logs. If multiple tree logs are synced at the same time,\nonly one of them actually gets synced.\n\nThis patch has following changes to fix the bug:\n\nMove most tree log related fields in btrfs_fs_info to\nbtrfs_root. This allows merging sync requests separately\nfor each tree log.\n\nDon\u0027t insert root item into the log root tree immediately\nafter log tree is allocated. Root item for log tree is\ninserted when log tree get synced for the first time. This\nallows syncing the log root tree without first syncing all\nlog trees.\n\nAt tree-log sync, btrfs_sync_log first sync the log tree;\nthen updates corresponding root item in the log root tree;\nsync the log root tree; then update the super block.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "e293e97e363e419d8a3628a927321e3f75206a0b",
      "tree": "067fb82bb4cabba35429b28c9e43f9614aea6274",
      "parents": [
        "755efdc3c4d3b42d5ffcef0f4d6e5b37ecd3bf21"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jan 09 13:14:17 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jan 09 13:14:17 2009 -0500"
      },
      "message": "Btrfs: explicitly mark the tree log root for writeback\n\nEach subvolume has an extent_state_tree used to mark metadata\nthat needs to be sent to disk while syncing the tree.  This is\nused in addition to the dirty bits on the pages themselves so that\na single subvolume can be sent to disk efficiently in disk order.\n\nNormally this marking happens in btrfs_alloc_free_block, which also does\nspecial recording of dirty tree blocks for the tree log roots.\n\nYan Zheng noticed that when the root of the log tree is allocated, it is added\nto the wrong writeback list.  The fix used here is to explicitly set\nit dirty as part of tree log creation.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "07d400a6df4767a90d49a153fdb7f4cfa1e3f23e",
      "tree": "8ca61bb87ffb72343b8d392a26fb7a6265f6fa3d",
      "parents": [
        "1ba12553f3600ffebad226c5204ab0e46df98161"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Tue Jan 06 11:42:00 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Jan 06 11:42:00 2009 -0500"
      },
      "message": "Btrfs: tree logging checksum fixes\n\nThis patch contains following things.\n\n1) Limit the max size of btrfs_ordered_sum structure to PAGE_SIZE.  This\nstruct is kmalloced so we want to keep it reasonable.\n\n2) Replace copy_extent_csums by btrfs_lookup_csums_range.  This was\nduplicated code in tree-log.c\n\n3) Remove replay_one_csum. csum items are replayed at the same time as\n   replaying file extents. This guarantees we only replay useful csums.\n\n4) nbytes accounting fix.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "d397712bcc6a759a560fd247e6053ecae091f958",
      "tree": "9da8daebb870d8b8b1843507c4621715e23dd31a",
      "parents": [
        "1f3c79a28c8837e8572b98f6d14142d9a6133c56"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 05 21:25:51 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 05 21:25:51 2009 -0500"
      },
      "message": "Btrfs: Fix checkpatch.pl warnings\n\nThere were many, most are fixed now.  struct-funcs.c generates some warnings\nbut these are bogus.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "ec051c0f929afe5c42c24bb07abf577c616c208c",
      "tree": "a9b75cd422cf7dde92c9dbb8828feb062e2c35ec",
      "parents": [
        "2d69a0f88459fae35df3ddef4934a2dad67e2765"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Jan 05 15:43:42 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 05 15:43:42 2009 -0500"
      },
      "message": "Btrfs: avoid orphan inode caused by log replay\n\ndrop_one_dir_item does not properly update inode\u0027s link count. It can be\nreproduced by executing following commands:\n\n#touch test\n#sync\n#rm -f test\n#dd if\u003d/dev/zero bs\u003d4k count\u003d1 of\u003dtest conv\u003dfsync\n#echo b \u003e /proc/sysrq-trigger\n\nThis fixes it by adding an BTRFS_ORPHAN_ITEM_KEY for the inode\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "87b29b208c6c38f3446d2de6ece946e2459052cf",
      "tree": "43e717289e1e8446fced4093ab39667bba9ea60a",
      "parents": [
        "d7f735d0bc68c411abda0a612e1421bdade649cc"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Dec 17 10:21:48 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Dec 17 10:21:48 2008 -0500"
      },
      "message": "Btrfs: properly check free space for tree balancing\n\nbtrfs_insert_empty_items takes the space needed by the btrfs_item\nstructure into account when calculating the required free space.\n\nSo the tree balancing code shouldn\u0027t add sizeof(struct btrfs_item)\nto the size when checking the free space. This patch removes these\nsuperfluous additions.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "580afd76e451deb6772d0507de580fb1df14da6c",
      "tree": "ea112be78807b07f617efffefb532e19778dc9bb",
      "parents": [
        "c3027eb5523d6983f12628f3fe13d8a7576db701"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Dec 08 19:15:39 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Dec 08 19:15:39 2008 -0500"
      },
      "message": "Btrfs: Fix compressed checksum fsync log copies\n\nThe fsync logging code makes sure to onl copy the relevant checksum for each\nextent based on the file extent pointers it finds.\n\nBut for compressed extents, it needs to copy the checksum for the\nentire extent.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "a512bbf855ff0af474257475f2e6da7acd854f52",
      "tree": "1b2cfcf4152e09f32a6cb0bcbd798d5dab2f5490",
      "parents": [
        "d20f7043fa65659136c1a7c3c456eeeb5c6f431f"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Dec 08 16:46:26 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Dec 08 16:46:26 2008 -0500"
      },
      "message": "Btrfs: superblock duplication\n\nThis patch implements superblock duplication. Superblocks\nare stored at offset 16K, 64M and 256G on every devices.\nSpaces used by superblocks are preserved by the allocator,\nwhich uses a reverse mapping function to find the logical\naddresses that correspond to superblocks. Thank you,\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "d20f7043fa65659136c1a7c3c456eeeb5c6f431f",
      "tree": "05d1031cadec6d440a97221e3a32adb504a51699",
      "parents": [
        "c99e905c945c462085c6d64646dc5af0c0a16815"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Dec 08 16:58:54 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Dec 08 16:58:54 2008 -0500"
      },
      "message": "Btrfs: move data checksumming into a dedicated tree\n\nBtrfs stores checksums for each data block.  Until now, they have\nbeen stored in the subvolume trees, indexed by the inode that is\nreferencing the data block.  This means that when we read the inode,\nwe\u0027ve probably read in at least some checksums as well.\n\nBut, this has a few problems:\n\n* The checksums are indexed by logical offset in the file.  When\ncompression is on, this means we have to do the expensive checksumming\non the uncompressed data.  It would be faster if we could checksum\nthe compressed data instead.\n\n* If we implement encryption, we\u0027ll be checksumming the plain text and\nstoring that on disk.  This is significantly less secure.\n\n* For either compression or encryption, we have to get the plain text\nback before we can verify the checksum as correct.  This makes the raid\nlayer balancing and extent moving much more expensive.\n\n* It makes the front end caching code more complex, as we have touch\nthe subvolume and inodes as we cache extents.\n\n* There is potentitally one copy of the checksum in each subvolume\nreferencing an extent.\n\nThe solution used here is to store the extent checksums in a dedicated\ntree.  This allows us to index the checksums by phyiscal extent\nstart and length.  It means:\n\n* The checksum is against the data stored on disk, after any compression\nor encryption is done.\n\n* The checksum is stored in a central location, and can be verified without\nfollowing back references, or reading inodes.\n\nThis makes compression significantly faster by reducing the amount of\ndata that needs to be checksummed.  It will also allow much faster\nraid management code in general.\n\nThe checksums are indexed by a key with a fixed objectid (a magic value\nin ctree.h) and offset set to the starting byte of the extent.  This\nallows us to copy the checksum items into the fsync log tree directly (or\nany other tree), without having to invent a second format for them.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "607d432da0542e84ddcd358adfddac6f68500e3d",
      "tree": "44425bf1fe8378022bc1b84425ca4ba9d0176566",
      "parents": [
        "c6e2bac1a52ffc36dd10769b594dfa3994e95f77"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Tue Dec 02 07:17:45 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Dec 02 07:17:45 2008 -0500"
      },
      "message": "Btrfs: add support for multiple csum algorithms\n\nThis patch gives us the space we will need in order to have different csum\nalgorithims at some point in the future.  We save the csum algorithim type\nin the superblock, and use those instead of define\u0027s.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n"
    },
    {
      "commit": "b2950863c61bc24cf0f63bc05947d9d50663c4c0",
      "tree": "3005a034713fe86db2d64ab1b21fe8762f6a4b0c",
      "parents": [
        "1ffa4f426c002161b7dbd58b297f5d0680e7dd6a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Dec 02 09:54:17 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Dec 02 09:54:17 2008 -0500"
      },
      "message": "Btrfs: make things static and include the right headers\n\nShut up various sparse warnings about symbols that should be either\nstatic or have their declarations in scope.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n\n"
    },
    {
      "commit": "d899e05215178fed903ad0e7fc1cb4d8e0cc0a88",
      "tree": "2969e3558f5c50ec0f9ac4201099c0d5d1d6e2c2",
      "parents": [
        "80ff385665b7fca29fefe358a60ab0d09f9b8e87"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Oct 30 14:25:28 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 30 14:25:28 2008 -0400"
      },
      "message": "Btrfs: Add fallocate support v2\nThis patch updates btrfs-progs for fallocate support.\n\nfallocate is a little different in Btrfs because we need to tell the\nCOW system that a given preallocated extent doesn\u0027t need to be\ncow\u0027d as long as there are no snapshots of it.  This leverages the\n-o nodatacow checks.\n \nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "84234f3a1f7c532e4afeba03cc8e7e4a8a5277ea",
      "tree": "c41f249b448f28b648b21c3898d0763b9c67ca6a",
      "parents": [
        "2517920135b0d29e70453e5b03d70d7b94207df3"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Oct 29 14:49:05 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Oct 29 14:49:05 2008 -0400"
      },
      "message": "Btrfs: Add root tree pointer transaction ids\n\nThis patch adds transaction IDs to root tree pointers.\nTransaction IDs in tree pointers are compared with the\ngeneration numbers in block headers when reading root\nblocks of trees. This can detect some types of IO errors.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n\n"
    },
    {
      "commit": "2517920135b0d29e70453e5b03d70d7b94207df3",
      "tree": "e0c526faa5c2c7bc3add340e5b7e8df26924dca9",
      "parents": [
        "80eb234af09dbe6c97b2e3d60a13ec391e98fbba"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Wed Oct 29 14:49:05 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Oct 29 14:49:05 2008 -0400"
      },
      "message": "Btrfs: nuke fs wide allocation mutex V2\n\nThis patch removes the giant fs_info-\u003ealloc_mutex and replaces it with a bunch\nof little locks.\n\nThere is now a pinned_mutex, which is used when messing with the pinned_extents\nextent io tree, and the extent_ins_mutex which is used with the pending_del and\nextent_ins extent io trees.\n\nThe locking for the extent tree stuff was inspired by a patch that Yan Zheng\nwrote to fix a race condition, I cleaned it up some and changed the locking\naround a little bit, but the idea remains the same.  Basically instead of\nholding the extent_ins_mutex throughout the processing of an extent on the\nextent_ins or pending_del trees, we just hold it while we\u0027re searching and when\nwe clear the bits on those trees, and lock the extent for the duration of the\noperations on the extent.\n\nAlso to keep from getting hung up waiting to lock an extent, I\u0027ve added a\ntry_lock_extent so if we cannot lock the extent, move on to the next one in the\ntree and we\u0027ll come back to that one.  I have tested this heavily and it does\nnot appear to break anything.  This has to be applied on top of my\nfind_free_extent redo patch.\n\nI tested this patch on top of Yan\u0027s space reblancing code and it worked fine.\nThe only thing that has changed since the last version is I pulled out all my\ndebugging stuff, apparently I forgot to run guilt refresh before I sent the\nlast patch out.  Thank you,\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n\n"
    },
    {
      "commit": "c8b978188c9a0fd3d535c13debd19d522b726f1f",
      "tree": "873628723fb82fe2a7c77adc65fa93eca1d61c0c",
      "parents": [
        "26ce34a9c47334ff7984769e4661b2f1883594ff"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Oct 29 14:49:59 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Oct 29 14:49:59 2008 -0400"
      },
      "message": "Btrfs: Add zlib compression support\n\nThis is a large change for adding compression on reading and writing,\nboth for inline and regular extents.  It does some fairly large\nsurgery to the writeback paths.\n\nCompression is off by default and enabled by mount -o compress.  Even\nwhen the -o compress mount option is not used, it is possible to read\ncompressed extents off the disk.\n\nIf compression for a given set of pages fails to make them smaller, the\nfile is flagged to avoid future compression attempts later.\n\n* While finding delalloc extents, the pages are locked before being sent down\nto the delalloc handler.  This allows the delalloc handler to do complex things\nsuch as cleaning the pages, marking them writeback and starting IO on their\nbehalf.\n\n* Inline extents are inserted at delalloc time now.  This allows us to compress\nthe data before inserting the inline extent, and it allows us to insert\nan inline extent that spans multiple pages.\n\n* All of the in-memory extent representations (extent_map.c, ordered-data.c etc)\nare changed to record both an in-memory size and an on disk size, as well\nas a flag for compression.\n\nFrom a disk format point of view, the extent pointers in the file are changed\nto record the on disk size of a given extent and some encoding flags.\nSpace in the disk format is allocated for compression encoding, as well\nas encryption and a generic \u0027other\u0027 field.  Neither the encryption or the\n\u0027other\u0027 field are currently used.\n\nIn order to limit the amount of data read for a single random read in the\nfile, the size of a compressed extent is limited to 128k.  This is a\nsoftware only limit, the disk format supports u64 sized compressed extents.\n\nIn order to limit the ram consumed while processing extents, the uncompressed\nsize of a compressed extent is limited to 256k.  This is a software only limit\nand will be subject to tuning later.\n\nChecksumming is still done on compressed extents, and it is done on the\nuncompressed version of the data.  This way additional encodings can be\nlayered on without having to figure out which encoding to checksum.\n\nCompression happens at delalloc time, which is basically singled threaded because\nit is usually done by a single pdflush thread.  This makes it tricky to\nspread the compression load across all the cpus on the box.  We\u0027ll have to\nlook at parallel pdflush walks of dirty inodes at a later time.\n\nDecompression is hooked into readpages and it does spread across CPUs nicely.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3bb1a1bc42f2ae9582c28adf620484efcd4da38d",
      "tree": "4e65ee859e73ea9558e33a02ba10e1d9d54756f3",
      "parents": [
        "a76a3cd40c1127ca199d4f7f37bf0d541bf44eb2"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Oct 09 11:46:24 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 09 11:46:24 2008 -0400"
      },
      "message": "Btrfs: Remove offset field from struct btrfs_extent_ref\n\nThe offset field in struct btrfs_extent_ref records the position\ninside file that file extent is referenced by. In the new back\nreference system, tree leaves holding references to file extent\nare recorded explicitly. We can scan these tree leaves very quickly, so the\noffset field is not required.\n\nThis patch also makes the back reference system check the objectid\nwhen extents are in deleting.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "a76a3cd40c1127ca199d4f7f37bf0d541bf44eb2",
      "tree": "a91e91d9f67ce8bd314cebdacc458315d3e54275",
      "parents": [
        "a62b940160d8125016e85046e68ae621c99e751f"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Oct 09 11:46:29 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 09 11:46:29 2008 -0400"
      },
      "message": "Btrfs: Count space allocated to file in bytes\n\nThis patch makes btrfs count space allocated to file in bytes instead\nof 512 byte sectors.\n\nEverything else in btrfs uses a byte count instead of sector sizes or\nblocks sizes, so this fits better.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "31840ae1a6b433ca0e6a8d341756ff478bbf959e",
      "tree": "9343db596aec175e9640aa2800b80f01496d7047",
      "parents": [
        "1c2308f8e7d8491467e0095af2b01500f1b70819"
      ],
      "author": {
        "name": "Zheng Yan",
        "email": "zheng.yan@oracle.com",
        "time": "Tue Sep 23 13:14:14 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:07 2008 -0400"
      },
      "message": "Btrfs: Full back reference support\n\nThis patch makes the back reference system to explicit record the\nlocation of parent node for all types of extents. The location of\nparent node is placed into the offset field of backref key. Every\ntime a tree block is balanced, the back references for the affected\nlower level extents are updated.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "9623f9a3894ec95fe140ee5460bb840ac53bc6a0",
      "tree": "e83d9907093f032cf4b5a4260815dd832bd5fb3f",
      "parents": [
        "d0c803c4049c5ca322d4795d8b74f28768603e0e"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 11 17:42:42 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:07 2008 -0400"
      },
      "message": "Btrfs: Disable the dir fsync optimization to skip logging the dir sometimes\n\nMore testing has turned up a bug, disable this for now.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d0c803c4049c5ca322d4795d8b74f28768603e0e",
      "tree": "b4c4f11b2f5938ad183a1771cd0b9e122709e2ff",
      "parents": [
        "31ff1cd25d376e8f499d450de177dffadc9e1c56"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 11 16:17:57 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:07 2008 -0400"
      },
      "message": "Btrfs: Record dirty pages tree-log pages in an extent_io tree\n\nThis is the same way the transaction code makes sure that all the\nother tree blocks are safely on disk.  There\u0027s an extent_io tree\nfor each root, and any blocks allocated to the tree logs are\nrecorded in that tree.\n\nAt tree-log sync, the extent_io tree is walked to flush down the\ndirty pages and wait for them.\n\nThe main benefit is less time spent walking the tree log and skipping\nclean pages, and getting sequential IO down to the drive.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "31ff1cd25d376e8f499d450de177dffadc9e1c56",
      "tree": "aa91844a70dcf0e285dd23318b5c80639c72b669",
      "parents": [
        "d00aff00139b40f2e9c60299d76aac29d72e48ba"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 11 16:17:57 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:07 2008 -0400"
      },
      "message": "Btrfs: Copy into the log tree in big batches\n\nThis changes the log tree copy code to use btrfs_insert_items and\nto work in larger batches where possible.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    }
  ],
  "next": "d00aff00139b40f2e9c60299d76aac29d72e48ba"
}
