)]}'
{
  "log": [
    {
      "commit": "064e38aaded5269e573ac1c765284fd65c8ebd13",
      "tree": "efce870caf67069df9dd42d95a232a347bbbdb17",
      "parents": [
        "cd24f8c1e7e27a2c6051a9a338d4704a2431dbf0",
        "44fb5511638938a2c37c895abc14df648ffc07e9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 05 11:54:28 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 05 11:54:28 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 oops and use after free during space balancing\n  Btrfs: set device-\u003etotal_disk_bytes when adding new device\n"
    },
    {
      "commit": "44fb5511638938a2c37c895abc14df648ffc07e9",
      "tree": "0554a8a71403958b279ddcb601a3d0bb85943a59",
      "parents": [
        "2cc3c559fb2fe8cecca82a517bc56e88b0c1effd"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jun 04 15:34:51 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jun 04 15:41:27 2009 -0400"
      },
      "message": "Btrfs: Fix oops and use after free during space balancing\n\nThe btrfs allocator uses list_for_each to walk the available block\ngroups when searching for free blocks.  It starts off with a hint\nto help find the best block group for a given allocation.\n\nThe hint is resolved into a block group, but we don\u0027t properly check\nto make sure the block group we find isn\u0027t in the middle of being\nfreed due to filesystem shrinking or balancing.  If it is being\nfreed, the list pointers in it are bogus and can\u0027t be trusted.  But,\nthe code happily goes along and uses them in the list_for_each loop,\nleading to all kinds of fun.\n\nThe fix used here is to check to make sure the block group we find really\nis on the list before we use it.  list_del_init is used when removing\nit from the list, so we can do a proper check.\n\nThe allocation clustering code has a similar bug where it will trust\nthe block group in the current free space cluster.  If our allocation\nflags have changed (going from single spindle dup to raid1 for example)\nbecause the drives in the FS have changed, we\u0027re not allowed to use\nthe old block group any more.\n\nThe fix used here is to check the current cluster against the\ncurrent allocation flags.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2cc3c559fb2fe8cecca82a517bc56e88b0c1effd",
      "tree": "d060c3b3d9943a8f8aaddc5f6748b9ca59d90ee5",
      "parents": [
        "9f55684c2d9869e8cc53595a3fee679958511cfb"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Jun 04 09:23:50 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jun 04 09:23:57 2009 -0400"
      },
      "message": "Btrfs: set device-\u003etotal_disk_bytes when adding new device\n\nIt was not being properly initialized, and so the size saved to\ndisk was not correct.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5732c468495effd3089c1c893f3eba9a8a1d373c",
      "tree": "6cb79b79acde60efd82af296fd312569034d5a58",
      "parents": [
        "45d447406a19cbfd42720f066f156f4eb9d68801",
        "9f55684c2d9869e8cc53595a3fee679958511cfb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 14 19:18:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 14 19:18:44 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: Spelling fix in btrfs_lookup_first_block_group comments\n  Btrfs: make show_options result match actual option names\n  Btrfs: remove outdated comment in btrfs_ioctl_resize()\n  Btrfs: remove some WARN_ONs in the IO failure path\n  Btrfs: Don\u0027t loop forever on metadata IO failures\n  Btrfs: init inode ordered_data_close flag properly\n"
    },
    {
      "commit": "9f55684c2d9869e8cc53595a3fee679958511cfb",
      "tree": "67f9b0af9e1533d84ade000ef2daee50cbf71f94",
      "parents": [
        "6b65c5c61bf86086817a5ed786c8f45755ac83b3"
      ],
      "author": {
        "name": "Sankar P",
        "email": "sankar.curiosity@gmail.com",
        "time": "Thu May 14 13:52:22 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:34 2009 -0400"
      },
      "message": "Btrfs: Spelling fix in btrfs_lookup_first_block_group comments\n\nSigned-off-by: Sankar P \u003csankar.curiosity@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6b65c5c61bf86086817a5ed786c8f45755ac83b3",
      "tree": "a5991f92b4ea22aba4f2042c893446462b47d2df",
      "parents": [
        "5d847a8ed970d17e2734ff9e07a74fe36cceb24e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 14 13:52:21 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:34 2009 -0400"
      },
      "message": "Btrfs: make show_options result match actual option names\n\nThe notreelog and flushoncommit mount options were being printed slightly\ndifferently.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5d847a8ed970d17e2734ff9e07a74fe36cceb24e",
      "tree": "3712028cb17a52b773ee626bda51ba6dc349d2a5",
      "parents": [
        "cc7b0c9b701a079016183f3546b4d720194b367f"
      ],
      "author": {
        "name": "Li Hong",
        "email": "lihong.hi@gmail.com",
        "time": "Thu May 14 13:52:21 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:33 2009 -0400"
      },
      "message": "Btrfs: remove outdated comment in btrfs_ioctl_resize()\n\nIn Li Zefan\u0027s commit dae7b665cf6d6e6e733f1c9c16cf55547dd37e33,\na combination call of kmalloc() and copy_from_user() is replaced by\nmemdup_user(). So btrfs_ioctl_resize() doesn\u0027t use GFP_NOFS any more.\n\nSigned-off-by: Li Hong \u003clihong.hi@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "cc7b0c9b701a079016183f3546b4d720194b367f",
      "tree": "a68f31ebb251158dd977c84f33a35a38728fe8aa",
      "parents": [
        "76a05b35a320e8c968d0fec8f512a1acae227309"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 13:31:21 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:33 2009 -0400"
      },
      "message": "Btrfs: remove some WARN_ONs in the IO failure path\n\nThese debugging WARN_ONs make too much console noise during regular\nIO failures.  An IO failure will still generate a number of messages\nas we verify checksums etc, but these two are not needed.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "76a05b35a320e8c968d0fec8f512a1acae227309",
      "tree": "611875a5ea273de7208c84884a0ec59d985eb614",
      "parents": [
        "2757495c906113896b378bf084708846273c87b2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 13:24:30 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:32 2009 -0400"
      },
      "message": "Btrfs: Don\u0027t loop forever on metadata IO failures\n\nWhen a btrfs metadata read fails, the first thing we try to do is find\na good copy on another mirror of the block.  If this fails, read_tree_block()\nends up returning a buffer that isn\u0027t up to date.\n\nThe btrfs btree reading code was reworked to drop locks and repeat\nthe search when IO was done, but the changes didn\u0027t add a check for failed\nreads.  The end result was looping forever on buffers that were never\ngoing to become up to date.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2757495c906113896b378bf084708846273c87b2",
      "tree": "883ae5bc6acd77cc9d1ce0932757827506664341",
      "parents": [
        "46a53cca826e71effe59e3cb4f383622c33ebdcb"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 13:10:02 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:31 2009 -0400"
      },
      "message": "Btrfs: init inode ordered_data_close flag properly\n\nThis flag is used to decide when we need to send a given file through\nthe ordered code to make sure it is fully written before a transaction\ncommits.  It was not being properly set to zero when the inode was\nbeing setup.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6f5bbff9a1b7d6864a495763448a363bbfa96324",
      "tree": "0067dca46f40def1c55541c34c262e06aeb8c4c8",
      "parents": [
        "74dbbdd7fdc11763f4698d2f3e684cf4446951e6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed May 06 01:34:22 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat May 09 10:49:40 2009 -0400"
      },
      "message": "Convert obvious places to deactivate_locked_super()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4ebf66233798347a73b01da5d30d5d2c0ef39f56",
      "tree": "3aae053ccbf3b6206fe6d17e62172559d35a7711",
      "parents": [
        "14b6084daa61bfd4da926f63e6e8bd0b6de87ad9",
        "46a53cca826e71effe59e3cb4f383622c33ebdcb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 27 11:16:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 27 11:16:33 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: look for acls during btrfs_read_locked_inode\n  Btrfs: fix acl caching\n  Btrfs: Fix a bunch of printk() warnings.\n  Btrfs: Fix a trivial warning using max() of u64 vs ULL.\n  Btrfs: remove unused btrfs_bit_radix slab\n  Btrfs: ratelimit IO error printks\n  Btrfs: remove #if 0 code\n  Btrfs: When shrinking, only update disk size on success\n  Btrfs: fix deadlocks and stalls on dead root removal\n  Btrfs: fix fallocate deadlock on inode extent lock\n  Btrfs: kill btrfs_cache_create\n  Btrfs: don\u0027t export symbols\n  Btrfs: simplify makefile\n  Btrfs: try to keep a healthy ratio of metadata vs data block groups\n"
    },
    {
      "commit": "46a53cca826e71effe59e3cb4f383622c33ebdcb",
      "tree": "8786a00a80e55862c58785ff40c0d98dc53c194a",
      "parents": [
        "7b1a14bbb0e547aaa4d30cc376e6c8c12539ab0f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 11:47:50 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 13:18:35 2009 -0400"
      },
      "message": "Btrfs: look for acls during btrfs_read_locked_inode\n\nThis changes btrfs_read_locked_inode() to peek ahead in the btree for acl items.\nIf it is certain a given inode has no acls, it will set the in memory acl\nfields to null to avoid acl lookups completely.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "7b1a14bbb0e547aaa4d30cc376e6c8c12539ab0f",
      "tree": "80b75191277afe05201fab3e3d1bc50884444626",
      "parents": [
        "21380931eb4da4e29ac663d0221581282cbba208"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 10:49:53 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 13:18:26 2009 -0400"
      },
      "message": "Btrfs: fix acl caching\n\nLinus noticed the btrfs code to cache acls wasn\u0027t properly caching\na NULL acl when the inode didn\u0027t have any acls.  This meant the common\ncase of no acls resulted in expensive btree searches every time the\nkernel checked permissions (which is quite often).\n\nThis is a modified version of Linus\u0027 original patch:\n\nProperly set initial acl fields to BTRFS_ACL_NOT_CACHED in the inode.\nThis forces an acl lookup when permission checks are done.\n\nFix btrfs_get_acl to avoid lookups and locking when the inode acls fields\nare set to null.\n\nFix btrfs_get_acl to use the right return value from __btrfs_getxattr\nwhen deciding to cache a NULL acl.  It was storing a NULL acl when\n__btrfs_getxattr return -ENOENT, but __btrfs_getxattr was actually returning\n-ENODATA for this case.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "21380931eb4da4e29ac663d0221581282cbba208",
      "tree": "fa8c2155784ccb0ee996e52e75d1e04b79cf2560",
      "parents": [
        "e63b6a6c0ffa2ebd8617cc1a10969000296831aa"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Apr 21 12:38:29 2009 -0700"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 08:37:49 2009 -0400"
      },
      "message": "Btrfs: Fix a bunch of printk() warnings.\n\nJust happened to notice a bunch of %llu vs u64 warnings.  Here\u0027s a patch\nto cast them all.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "e63b6a6c0ffa2ebd8617cc1a10969000296831aa",
      "tree": "bb8a5b4ad968c161c327e592e0302308e21573bb",
      "parents": [
        "45c06543afe2772c02f21efee0e2138b4e1c911e"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Apr 21 12:38:30 2009 -0700"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 08:37:49 2009 -0400"
      },
      "message": "Btrfs: Fix a trivial warning using max() of u64 vs ULL.\n\nA small warning popped up on ia64 because inode-map.c was comparing a\nu64 object id with the ULL FIRST_FREE_OBJECTID.  My first thought was\nthat all the OBJECTID constants should contain the u64 cast because\nbtrfs code deals entirely in u64s.  But then I saw how large that was,\nand figured I\u0027d just fix the max() call.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "45c06543afe2772c02f21efee0e2138b4e1c911e",
      "tree": "16ccc5158564c0e1de7764a4284f59eeb5a1a822",
      "parents": [
        "193f284d4985db0370a8a1bbdfb20df548cf9ffb"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 07:49:10 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 08:37:48 2009 -0400"
      },
      "message": "Btrfs: remove unused btrfs_bit_radix slab\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "193f284d4985db0370a8a1bbdfb20df548cf9ffb",
      "tree": "dfa8aec1c8000e5e00deb4eee4dc385a405d74a6",
      "parents": [
        "b7967db75a38df4891b22efe1b0969b9357eb946"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 07:29:05 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 07:41:47 2009 -0400"
      },
      "message": "Btrfs: ratelimit IO error printks\n\nBtrfs has printks for various IO errors, including bad checksums and\nmismatches between what we expect the block headers to contain and what\nwe actually find on the disk.\n\nLonger term we need a real reporting mechanism for this, but for now\nprintk is going to have to do.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b7967db75a38df4891b22efe1b0969b9357eb946",
      "tree": "63ce1e5394446d65111fbc768e44845c295c1049",
      "parents": [
        "d6397baee468809ef311e763dfc6e9f73418f8a6"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 07:29:04 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 07:40:52 2009 -0400"
      },
      "message": "Btrfs: remove #if 0 code\n\nBtrfs had some old code sitting around under #if 0, this drops it.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d6397baee468809ef311e763dfc6e9f73418f8a6",
      "tree": "b8f20c01239674eea287c1665fbf96fb92dfcb00",
      "parents": [
        "59bc5c758ece00fb0b2a170dd8fbbf31f1856c8a"
      ],
      "author": {
        "name": "Chris Ball",
        "email": "cjb@laptop.org",
        "time": "Mon Apr 27 07:29:03 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 27 07:40:51 2009 -0400"
      },
      "message": "Btrfs: When shrinking, only update disk size on success\n\nPreviously, we updated a device\u0027s size prior to attempting a shrink\noperation.  This patch moves the device resizing logic to only happen if\nthe shrink completes successfully.  In the process, it introduces a new\nfield to btrfs_device -- disk_total_bytes -- to track the on-disk size.\n\nSigned-off-by: Chris Ball \u003ccjb@laptop.org\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "59bc5c758ece00fb0b2a170dd8fbbf31f1856c8a",
      "tree": "746fcdfe8181c638b593174deb4d841310e8c698",
      "parents": [
        "e980b50cda1610f1c17978d9b7fd311a9dd93877"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 24 14:39:25 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 24 15:46:05 2009 -0400"
      },
      "message": "Btrfs: fix deadlocks and stalls on dead root removal\n\nAfter a transaction commit, the old root of the subvol btrees are sent through\nsnapshot removal.  This is what actually frees up any blocks replaced by\nCOW, and anything the old blocks pointed to.\n\nSnapshot deletion will pause when a transaction commit has started, which\nhelps to avoid a huge amount of delayed reference count updates piling up\nas the transaction is trying to close.\n\nBut, this pause happens after the snapshot deletion process has asked other\nprocs on the system to throttle back a bit so that it can make progress.\n\nWe don\u0027t want to throttle everyone while we\u0027re waiting for the transaction\ncommit, it leads to deadlocks in the user transaction ioctls used by Ceph\nand makes things slower in general.\n\nThis patch changes things to avoid the throttling while we sleep.\n\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": "9601e3f6336f6ca66929f451b1f66085e68e36e3",
      "tree": "002308d56cb1947490d691fdf9a8ea74e48d8672",
      "parents": [
        "0d4bf11e5309eff64272a49e1ea55658372abc56"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Apr 13 15:33:09 2009 +0200"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 24 15:46:04 2009 -0400"
      },
      "message": "Btrfs: kill btrfs_cache_create\n\nJust use kmem_cache_create directly.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "0d4bf11e5309eff64272a49e1ea55658372abc56",
      "tree": "f444a5aad67ede7f919b98ba813159a0a8c32e30",
      "parents": [
        "2ea2544ef5dad5cac52f1e4c7b812631274fc1cb"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Apr 13 15:33:56 2009 +0200"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 24 15:46:04 2009 -0400"
      },
      "message": "Btrfs: don\u0027t export symbols\n\nCurrently the extent_map code is only for btrfs so don\u0027t export it\u0027s\nsymbols.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2ea2544ef5dad5cac52f1e4c7b812631274fc1cb",
      "tree": "0a01a9d41918c533b299a1374f6294aa220948d7",
      "parents": [
        "97e728d4353f38c87bf0804cdfd79a9b13fc2c3e"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Apr 13 15:32:28 2009 +0200"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 24 15:46:03 2009 -0400"
      },
      "message": "Btrfs: simplify makefile\n\nGet rid of the hacks for building out of tree, and always use +\u003d for\nassigning to the object lists.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "97e728d4353f38c87bf0804cdfd79a9b13fc2c3e",
      "tree": "853d3317ff1476e4ad28921265e28b4919196304",
      "parents": [
        "546888da82082555a56528730a83f0afd12f33bf"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Tue Apr 21 17:40:57 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 24 15:46:02 2009 -0400"
      },
      "message": "Btrfs: try to keep a healthy ratio of metadata vs data block groups\n\nThis patch makes the chunk allocator keep a good ratio of metadata vs data\nblock groups.  By default for every 8 data block groups, we\u0027ll allocate 1\nmetadata chunk, or about 12% of the disk will be allocated for metadata.  This\ncan be changed by specifying the metadata_ratio mount option.\n\nThis is simply the number of data block groups that have to be allocated to\nforce a metadata chunk allocation.  By making sure we allocate metadata chunks\nmore often, we are less likely to get into situations where the whole disk\nhas been allocated as data block groups.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "ccc5ff94c66e628d3c501b26ace5d4339667715d",
      "tree": "41ca2f1552864cc86bd5735c1b05d0de2898bb05",
      "parents": [
        "c19c6c32dcccfc89216bd579c0cb12d2dd45098f",
        "546888da82082555a56528730a83f0afd12f33bf"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 21 14:12:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 21 14:12:58 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 btrfs fallocate oops and deadlock\n  Btrfs: use the right node in reada_for_balance\n  Btrfs: fix oops on page-\u003emapping-\u003ehost during writepage\n  Btrfs: add a priority queue to the async thread helpers\n  Btrfs: use WRITE_SYNC for synchronous writes\n"
    },
    {
      "commit": "546888da82082555a56528730a83f0afd12f33bf",
      "tree": "98ee868d1b8a4bd390a980fed707f91419b79fb5",
      "parents": [
        "8c594ea81d7abbbffdda447b127f8ba8d76f319d"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Apr 21 11:53:38 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Apr 21 12:45:12 2009 -0400"
      },
      "message": "Btrfs: fix btrfs fallocate oops and deadlock\n\nBtrfs fallocate was incorrectly starting a transaction with a lock held\non the extent_io tree for the file, which could deadlock.  Strictly\nspeaking it was using join_transaction which would be safe, but it is better\nto move the transaction outside of the lock.\n\nWhen preallocated extents are overwritten, btrfs_mark_buffer_dirty was\nbeing called on an unlocked buffer.  This was triggering an assertion and\noops because the lock is supposed to be held.\n\nThe bug was calling btrfs_mark_buffer_dirty on a leaf after btrfs_del_item had\nbeen run.  btrfs_del_item takes care of dirtying things, so the solution is a\nto skip the btrfs_mark_buffer_dirty call in this case.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "dae7b665cf6d6e6e733f1c9c16cf55547dd37e33",
      "tree": "ab7f9fc54bcf735c7f331f78858ec0db7f634cdd",
      "parents": [
        "3939fcde24473dc09ce16e922c88df9b3bee45d9"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Wed Apr 08 15:06:54 2009 +0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Apr 20 23:02:50 2009 -0400"
      },
      "message": "btrfs: use memdup_user()\n\nRemove open-coded memdup_user().\n\nNote this changes some GFP_NOFS to GFP_KERNEL, since copy_from_user() may\ncause pagefault, it\u0027s pointless to pass GFP_NOFS to kmalloc().\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8c594ea81d7abbbffdda447b127f8ba8d76f319d",
      "tree": "3f18a865e9795e40e2f4b086a01022accb1070b7",
      "parents": [
        "11c8349b4eb68f2b04cd8ece577377e6c0e5dd4b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:50:10 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:53:09 2009 -0400"
      },
      "message": "Btrfs: use the right node in reada_for_balance\n\nreada_for_balance was using the wrong index into the path node array,\nso it wasn\u0027t reading the right blocks.  We never directly used the\nresults of the read done by this function because the btree search is\nstarted over at the end.\n\nThis fixes reada_for_balance to reada in the correct node and to\navoid searching past the last slot in the node.  It also makes sure to\nhold the parent lock while we are finding the nodes to read.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "11c8349b4eb68f2b04cd8ece577377e6c0e5dd4b",
      "tree": "baeaabbe0a10d903ba3e0d6ff90ae9934912fc21",
      "parents": [
        "d313d7a31a752c88f7288692bd98e66d0789779b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:50:09 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:53:09 2009 -0400"
      },
      "message": "Btrfs: fix oops on page-\u003emapping-\u003ehost during writepage\n\nThe extent_io writepage call updates the writepage index in the inode\nas it makes progress.  But, it was doing the update after unlocking the page,\nwhich isn\u0027t legal because page-\u003emapping can\u0027t be trusted once the page\nis unlocked.\n\nThis lead to an oops, especially common with compression turned on.  The\nfix here is to update the writeback index before unlocking the page.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d313d7a31a752c88f7288692bd98e66d0789779b",
      "tree": "e26f332abd22d3bf5a57f09f94ad883d0f0c54c2",
      "parents": [
        "ffbd517d5a8c8e93ddd11046434fb029f3df73aa"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:50:09 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:53:08 2009 -0400"
      },
      "message": "Btrfs: add a priority queue to the async thread helpers\n\nBtrfs is using WRITE_SYNC_PLUG to send down synchronous IOs with a\nhigher priority.  But, the checksumming helper threads prevent it\nfrom being fully effective.\n\nThere are two problems.  First, a big queue of pending checksumming\nwill delay the synchronous IO behind other lower priority writes.  Second,\nthe checksumming uses an ordered async work queue.  The ordering makes sure\nthat IOs are sent to the block layer in the same order they are sent\nto the checksumming threads.  Usually this gives us less seeky IO.\n\nBut, when we start mixing IO priorities, the lower priority IO can delay\nthe higher priority IO.\n\nThis patch solves both problems by adding a high priority list to the async\nhelper threads, and a new btrfs_set_work_high_prio(), which is used\nto make put a new async work item onto the higher priority list.\n\nThe ordering is still done on high priority IO, but all of the high\npriority bios are ordered separately from the low priority bios.  This\nordering is purely an IO optimization, it is not involved in data\nor metadata integrity.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "ffbd517d5a8c8e93ddd11046434fb029f3df73aa",
      "tree": "9ec7b7f2efbb8950ca2654235a899398e82a68b5",
      "parents": [
        "0882e8dd3aad33eca41696d463bb896e6c8817eb"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:50:09 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:53:08 2009 -0400"
      },
      "message": "Btrfs: use WRITE_SYNC for synchronous writes\n\nPart of reducing fsync/O_SYNC/O_DIRECT latencies is using WRITE_SYNC for\nwrites we plan on waiting on in the near future.  This patch\nmirrors recent changes in other filesystems and the generic code to\nuse WRITE_SYNC when WB_SYNC_ALL is passed and to use WRITE_SYNC for\nother latency critical writes.\n\nBtrfs uses async worker threads for checksumming before the write is done,\nand then again to actually submit the bios.  The bio submission code just\nruns a per-device list of bios that need to be sent down the pipe.\n\nThis list is split into low priority and high priority lists so the\nWRITE_SYNC IO happens first.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b983471794e568fd71fa767da77a62ba517c3e63",
      "tree": "92a1cc26c4846b49d90225d004ba1b7bd6fe3d81",
      "parents": [
        "5a3ae276057840f0e60664c12fc3ef80aa59d1d4",
        "c293498be69816087746161338de4b81efdf69fc"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 15:14:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 15:14:44 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: BUG to BUG_ON changes\n  Btrfs: remove dead code\n  Btrfs: remove dead code\n  Btrfs: fix typos in comments\n  Btrfs: remove unused ftrace include\n  Btrfs: fix __ucmpdi2 compile bug on 32 bit builds\n  Btrfs: free inode struct when btrfs_new_inode fails\n  Btrfs: fix race in worker_loop\n  Btrfs: add flushoncommit mount option\n  Btrfs: notreelog mount option\n  Btrfs: introduce btrfs_show_options\n  Btrfs: rework allocation clustering\n  Btrfs: Optimize locking in btrfs_next_leaf()\n  Btrfs: break up btrfs_search_slot into smaller pieces\n  Btrfs: kill the pinned_mutex\n  Btrfs: kill the block group alloc mutex\n  Btrfs: clean up find_free_extent\n  Btrfs: free space cache cleanups\n  Btrfs: unplug in the async bio submission threads\n  Btrfs: keep processing bios for a given bdev if our proc is batching\n"
    },
    {
      "commit": "8fe74cf053de7ad2124a894996f84fa890a81093",
      "tree": "77dcd8fbf33ce53a3821942233962fb28c6f2848",
      "parents": [
        "c2eb2fa6d2b6fe122d3479ec5b28d978418b2698",
        "ced117c73edc917e96dea7cca98c91383f0792f7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 21:09:10 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 21:09:10 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:\n  Remove two unneeded exports and make two symbols static in fs/mpage.c\n  Cleanup after commit 585d3bc06f4ca57f975a5a1f698f65a45ea66225\n  Trim includes of fdtable.h\n  Don\u0027t crap into descriptor table in binfmt_som\n  Trim includes in binfmt_elf\n  Don\u0027t mess with descriptor table in load_elf_binary()\n  Get rid of indirect include of fs_struct.h\n  New helper - current_umask()\n  check_unsafe_exec() doesn\u0027t care about signal handlers sharing\n  New locking/refcounting for fs_struct\n  Take fs_struct handling to new file (fs/fs_struct.c)\n  Get rid of bumping fs_struct refcount in pivot_root(2)\n  Kill unsharing fs_struct in __set_personality()\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": "3e7ad38d20ad113158d1b4c9de0f51c04f50d4f7",
      "tree": "5ff4dc364642eb81ae3f9d57c705234d2fde816f",
      "parents": [
        "ff0a5836ac48554b9f3b9d3c5f5bce4ddea11f1f"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "message": "Btrfs: remove dead code\n\nRemove an unneeded return statement and conditional\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "ff0a5836ac48554b9f3b9d3c5f5bce4ddea11f1f",
      "tree": "53138b3833e0d8d144cdc9c33a6ae32b6b737f84",
      "parents": [
        "d4a789474a6213d1b55b363fb1787b0abf877bba"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "message": "Btrfs: remove dead code\n\nmerge is always NULL at this point.\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "d4a789474a6213d1b55b363fb1787b0abf877bba",
      "tree": "cce6f1ade81778ef63921b2ed9c37b7bf2e5524d",
      "parents": [
        "2e966ed22c3c56227f8a7322d7b008945352e6ab"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "message": "Btrfs: fix typos in comments\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "2e966ed22c3c56227f8a7322d7b008945352e6ab",
      "tree": "101bb798295de6a299d7f6febd437887134f5e43",
      "parents": [
        "93dbfad7ac647d4f00354893fe93e8a55be114d5"
      ],
      "author": {
        "name": "Jim Owens",
        "email": "jowens@hp.com",
        "time": "Thu Apr 02 17:02:55 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 17:02:55 2009 -0400"
      },
      "message": "Btrfs: remove unused ftrace include\n\nSigned-off-by: jim owens \u003cjowens@hp.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "93dbfad7ac647d4f00354893fe93e8a55be114d5",
      "tree": "dd9fbb0a3b2fc2a413f0083e42fb2cc779b5c5cd",
      "parents": [
        "09771430f3b46ee27c69daa7ecad82007568e834"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Fri Apr 03 10:33:45 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:33:45 2009 -0400"
      },
      "message": "Btrfs: fix __ucmpdi2 compile bug on 32 bit builds\n\nWe get this on 32 builds:\n\nfs/built-in.o: In function `extent_fiemap\u0027:\n(.text+0x1019f2): undefined reference to `__ucmpdi2\u0027\n\nHappens because of a switch statement with a 64 bit argument.\nConvert this to an if statement to fix this.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "09771430f3b46ee27c69daa7ecad82007568e834",
      "tree": "eb51c0f62c3c0672102cf53a731ca6ed68e1be49",
      "parents": [
        "b5555f77115bfba3630fefff2d4e68140b644171"
      ],
      "author": {
        "name": "Shen Feng",
        "email": "shen@cn.fujitsu.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "message": "Btrfs: free inode struct when btrfs_new_inode fails\n\nbtrfs_new_inode doesn\u0027t call iput to free the inode\nwhen it fails.\n\nSigned-off-by: Shen Feng \u003cshen@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "b5555f77115bfba3630fefff2d4e68140b644171",
      "tree": "5a2712105e9e5e493ebf01b9b382828d91e046b8",
      "parents": [
        "dccae99995089641fbac452ebc7f0cab18751ddb"
      ],
      "author": {
        "name": "Amit Gud",
        "email": "amitgud@gmail.com",
        "time": "Thu Apr 02 17:01:27 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 17:01:27 2009 -0400"
      },
      "message": "Btrfs: fix race in worker_loop\n\nNeed to check kthread_should_stop after schedule_timeout() before calling\nschedule(). This causes threads to sleep with potentially no one to wake them\nup causing mount(2) to hang in btrfs_stop_workers waiting for threads to stop.\n\nSigned-off-by: Amit Gud \u003cgud@ksu.edu\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "dccae99995089641fbac452ebc7f0cab18751ddb",
      "tree": "c8f3611cc62baa6fa02baff18374d8f3a61b06bf",
      "parents": [
        "3a5e14048a0a81276d284cbda441507a17e26147"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Apr 02 16:59:01 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 16:59:01 2009 -0400"
      },
      "message": "Btrfs: add flushoncommit mount option\n\nThe \u0027flushoncommit\u0027 mount option forces any data dirtied by a write in a\nprior transaction to commit as part of the current commit.  This makes\nthe committed state a fully consistent view of the file system from the\napplication\u0027s perspective (i.e., it includes all completed file system\noperations).  This was previously the behavior only when a snapshot is\ncreated.\n\nThis is used by Ceph to ensure that completed writes make it to the\nplatter along with the metadata operations they are bound to (by\nBTRFS_IOC_TRANS_{START,END}).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\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": "a9572a15a854bd40453a6b7b4dd9d29132f64c64",
      "tree": "36eb4ee3be45a4d622da2f103e571894a60c3c13",
      "parents": [
        "fa9c0d795f7b57c76560b7fac703f5d341210e28"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 16:46:06 2009 -0400"
      },
      "message": "Btrfs: introduce btrfs_show_options\n\nbtrfs options can change at times other than mount, yet /proc/mounts shows the\noptions string used when the fs was mounted (an example would be when btrfs\ndetermines that barriers aren\u0027t useful and turns them off.)  This patch\ninstead outputs the actual options in use by btrfs.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "fa9c0d795f7b57c76560b7fac703f5d341210e28",
      "tree": "74d9d9846e21ce5b99738f3cc13b855fb63d1eba",
      "parents": [
        "8e73f275011b3264a87339fd9f1690e944e381c9"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 09:47:43 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 09:47:43 2009 -0400"
      },
      "message": "Btrfs: rework allocation clustering\n\nBecause btrfs is copy-on-write, we end up picking new locations for\nblocks very often.  This makes it fairly difficult to maintain perfect\nread patterns over time, but we can at least do some optimizations\nfor writes.\n\nThis is done today by remembering the last place we allocated and\ntrying to find a free space hole big enough to hold more than just one\nallocation.  The end result is that we tend to write sequentially to\nthe drive.\n\nThis happens all the time for metadata and it happens for data\nwhen mounted -o ssd.  But, the way we record it is fairly racey\nand it tends to fragment the free space over time because we are trying\nto allocate fairly large areas at once.\n\nThis commit gets rid of the races by adding a free space cluster object\nwith dedicated locking to make sure that only one process at a time\nis out replacing the cluster.\n\nThe free space fragmentation is somewhat solved by allowing a cluster\nto be comprised of smaller free space extents.  This part definitely\nadds some CPU time to the cluster allocations, but it allows the allocator\nto consume the small holes left behind by cow.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "8e73f275011b3264a87339fd9f1690e944e381c9",
      "tree": "865900b191ed0e01f10d2f87e28c9e2ed56e5722",
      "parents": [
        "c8c42864f6193638eed136e0243f426a0b7f4bc2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "message": "Btrfs: Optimize locking in btrfs_next_leaf()\n\nbtrfs_next_leaf was using blocking locks when it could have been using\nfaster spinning ones instead.  This adds a few extra checks around\nthe pieces that block and switches over to spinning locks.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n\n"
    },
    {
      "commit": "c8c42864f6193638eed136e0243f426a0b7f4bc2",
      "tree": "079f003794f005942af18f1e3943ea6965a85206",
      "parents": [
        "04018de5d41e6490840de9399e029fd30e78576f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:18 2009 -0400"
      },
      "message": "Btrfs: break up btrfs_search_slot into smaller pieces\n\nbtrfs_search_slot was doing too many things at once.  This breaks\nit up into more reasonable units.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "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": "6226cb0a5ea3f6289883753c15d53f48a6c6bbfb",
      "tree": "819765cd5a5816017580f638c4b2a3e7f6354aea",
      "parents": [
        "2552d17e328044d1811cae733087a1fb9aac2eb6"
      ],
      "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 block group alloc mutex\n\nThis patch removes the block group alloc mutex used to protect the free space\ntree for allocations and replaces it with a spin lock which is used only to\nprotect the free space rb tree.  This means we only take the lock when we are\ndirectly manipulating the tree, which makes us a touch faster with\nmulti-threaded workloads.\n\nThis patch also gets rid of btrfs_find_free_space and replaces it with\nbtrfs_find_space_for_alloc, which takes the number of bytes you want to\nallocate, and empty_size, which is used to indicate how much free space should\nbe at the end of the allocation.\n\nIt will return an offset for the allocator to use.  If we don\u0027t end up using it\nwe _must_ call btrfs_add_free_space to put it back.  This is the tradeoff to\nkill the alloc_mutex, since we need to make sure nobody else comes along and\ntakes our space.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n"
    },
    {
      "commit": "2552d17e328044d1811cae733087a1fb9aac2eb6",
      "tree": "21101d10ccfa4f44d150bc570c2080160e332305",
      "parents": [
        "70cb074345832b75cf422ed729706345511773b3"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Fri Apr 03 10:14:19 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:19 2009 -0400"
      },
      "message": "Btrfs: clean up find_free_extent\n\nI\u0027ve replaced the strange looping constructs with a list_for_each_entry on\nspace_info-\u003eblock_groups.  If we have a hint we just jump into the loop with\nthe block group and start looking for space.  If we don\u0027t find anything we\nstart at the beginning and start looking.  We never come out of the loop with a\nref on the block_group _unless_ we found space to use, then we drop it after we\nset the trans block_group.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n"
    },
    {
      "commit": "70cb074345832b75cf422ed729706345511773b3",
      "tree": "37f23796751a20feff12f935568d4f5fff33b3fc",
      "parents": [
        "bedf762ba3a4b70295661fa70c29c1f18fe0f351"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Fri Apr 03 10:14:19 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:14:19 2009 -0400"
      },
      "message": "Btrfs: free space cache cleanups\n\nThis patch cleans up the free space cache code a bit.  It better documents the\nidiosyncrasies of tree_search_offset and makes the code make a bit more sense.\nI took out the info allocation at the start of __btrfs_add_free_space and put it\nwhere it makes more sense.  This was left over cruft from when alloc_mutex\nexisted.  Also all of the re-searches we do to make sure we inserted properly.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n"
    },
    {
      "commit": "bedf762ba3a4b70295661fa70c29c1f18fe0f351",
      "tree": "f74718485798020ba97a5fb111f4794a1c8e945e",
      "parents": [
        "b765ead57da62cccf7fa21e00e6eed65e9df62b0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:32:58 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:32:58 2009 -0400"
      },
      "message": "Btrfs: unplug in the async bio submission threads\n\nBtrfs pages being written get set to writeback, and then may go through\na number of steps before they hit the block layer.  This includes compression,\nchecksumming and async bio submission.\n\nThe end result is that someone who writes a page and then does\nwait_on_page_writeback is likely to unplug the queue before the bio they\ncared about got there.\n\nWe could fix this by marking bios sync, or by doing more frequent unplugs,\nbut this commit just changes the async bio submission code to unplug\nafter it has processed all the bios for a device.  The async bio submission\ndoes a fair job of collection bios, so this shouldn\u0027t be a huge problem\nfor reducing merging at the elevator.\n\nFor streaming O_DIRECT writes on a 5 drive array, it boosts performance\nfrom 386MB/s to 460MB/s.\n\nThanks to Hisashi Hifumi for helping with this work.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b765ead57da62cccf7fa21e00e6eed65e9df62b0",
      "tree": "66541fd018482a8d0db0021c3a3f3e8611ddb6fe",
      "parents": [
        "d57e62b89796f751c9422801cbcd407a9f8dcdc4"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:27:10 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Apr 03 10:27:10 2009 -0400"
      },
      "message": "Btrfs: keep processing bios for a given bdev if our proc is batching\n\nBtrfs uses async helper threads to submit write bios so the checksumming\nhelper threads don\u0027t block on the disk.\n\nThe submit bio threads may process bios for more than one block device,\nso when they find one device congested they try to move on to other\ndevices instead of blocking in get_request_wait for one device.\n\nThis does a pretty good job of keeping multiple devices busy, but the\ncongested flag has a number of problems.  A congested device may still\ngive you a request, and other procs that aren\u0027t backing off the congested\ndevice may starve you out.\n\nThis commit uses the io_context stored in current to decide if our process\nhas been made a batching process by the block layer.  If so, it keeps\nsending IO down for at least one batch.  This helps make sure we do\na good amount of work each time we visit a bdev, and avoids large IO\nstalls in multi-device workloads.\n\nIt\u0027s also very ugly.  A better solution is in the works with Jens Axboe.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c226fd659fa7b6a7b038df5ae6856a68514bacde",
      "tree": "a695689d4d8cdd927400747b94250521eb863686",
      "parents": [
        "c09bca786ff941ed17c5f381c4eca5b106808c51",
        "d57e62b89796f751c9422801cbcd407a9f8dcdc4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 10:20:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 10:20:44 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: try to free metadata pages when we free btree blocks\n  Btrfs: add extra flushing for renames and truncates\n  Btrfs: make sure btrfs_update_delayed_ref doesn\u0027t increase ref_mod\n  Btrfs: optimize fsyncs on old files\n  Btrfs: tree logging unlink/rename fixes\n  Btrfs: Make sure i_nlink doesn\u0027t hit zero too soon during log replay\n  Btrfs: limit balancing work while flushing delayed refs\n  Btrfs: readahead checksums during btrfs_finish_ordered_io\n  Btrfs: leave btree locks spinning more often\n  Btrfs: Only let very young transactions grow during commit\n  Btrfs: Check for a blocking lock before taking the spin\n  Btrfs: reduce stack in cow_file_range\n  Btrfs: reduce stalls during transaction commit\n  Btrfs: process the delayed reference queue in clusters\n  Btrfs: try to cleanup delayed refs while freeing extents\n  Btrfs: reduce stack usage in some crucial tree balancing functions\n  Btrfs: do extent allocation and reference count updates in the background\n  Btrfs: don\u0027t preallocate metadata blocks during btrfs_search_slot\n"
    },
    {
      "commit": "56a76f8275c379ed73c8a43cfa1dfa2f5e9cfa19",
      "tree": "cbeaa82516c4818f72535b6ebe48a607cef88af4",
      "parents": [
        "c2ec175c39f62949438354f603f4aa170846aabb"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Mar 31 15:23:23 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:14 2009 -0700"
      },
      "message": "fs: fix page_mkwrite error cases in core code and btrfs\n\npage_mkwrite is called with neither the page lock nor the ptl held.  This\nmeans a page can be concurrently truncated or invalidated out from\nunderneath it.  Callers are supposed to prevent truncate races themselves,\nhowever previously the only thing they can do in case they hit one is to\nraise a SIGBUS.  A sigbus is wrong for the case that the page has been\ninvalidated or truncated within i_size (eg.  hole punched).  Callers may\nalso have to perform memory allocations in this path, where again, SIGBUS\nwould be wrong.\n\nThe previous patch (\"mm: page_mkwrite change prototype to match fault\")\nmade it possible to properly specify errors.  Convert the generic buffer.c\ncode and btrfs to return sane error values (in the case of page removed\nfrom pagecache, VM_FAULT_NOPAGE will cause the fault handler to exit\nwithout doing anything, and the fault will be retried properly).\n\nThis fixes core code, and converts btrfs as a template/example.  All other\nfilesystems defining their own page_mkwrite should be fixed in a similar\nmanner.\n\nAcked-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c2ec175c39f62949438354f603f4aa170846aabb",
      "tree": "f2c9bf1bec2deabe2d3a5092405b027637b6ead3",
      "parents": [
        "c2fdf3a9b2d52842808a8e551b53b55dd9b45030"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Mar 31 15:23:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:14 2009 -0700"
      },
      "message": "mm: page_mkwrite change prototype to match fault\n\nChange the page_mkwrite prototype to take a struct vm_fault, and return\nVM_FAULT_xxx flags.  There should be no functional change.\n\nThis makes it possible to return much more detailed error information to\nthe VM (and also can provide more information eg.  virtual_address to the\ndriver, which might be important in some special cases).\n\nThis is required for a subsequent fix.  And will also make it easier to\nmerge page_mkwrite() with fault() in future.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Artem Bityutskiy \u003cdedekind@infradead.org\u003e\nCc: Felix Blyakher \u003cfelixb@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ce3b0f8d5c2203301fc87f3aaaed73e5819e2a48",
      "tree": "ab952affafe18e604f6aaf6b13315b9435588e60",
      "parents": [
        "f1191b50ec11c8e2ca766d6d99eb5bb9d2c084a3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 29 19:08:22 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 31 23:00:26 2009 -0400"
      },
      "message": "New helper - current_umask()\n\ncurrent-\u003efs-\u003eumask is what most of fs_struct users are doing.\nPut that into a helper function.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d57e62b89796f751c9422801cbcd407a9f8dcdc4",
      "tree": "353960256ddf5f92aa391a2ea570bea1d2d11fa8",
      "parents": [
        "5a3f23d515a2ebf0c750db80579ca57b28cbce6d"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 31 13:47:50 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 31 14:27:58 2009 -0400"
      },
      "message": "Btrfs: try to free metadata pages when we free btree blocks\n\nCOW means we cycle though blocks fairly quickly, and once we\nfree an extent on disk, it doesn\u0027t make much sense to keep the pages around.\n\nThis commit tries to immediately free the page when we free the extent,\nwhich lowers our memory footprint significantly.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5a3f23d515a2ebf0c750db80579ca57b28cbce6d",
      "tree": "e0ffb43dd35f1c3def9a74ec7a6f4470902c9761",
      "parents": [
        "1a81af4d1d9c60d4313309f937a1fc5567205a87"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 31 13:27:11 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 31 14:27:58 2009 -0400"
      },
      "message": "Btrfs: add extra flushing for renames and truncates\n\nRenames and truncates are both common ways to replace old data with new\ndata.  The filesystem can make an effort to make sure the new data is\non disk before actually replacing the old data.\n\nThis is especially important for rename, which many application use as\nthough it were atomic for both the data and the metadata involved.  The\ncurrent btrfs code will happily replace a file that is fully on disk\nwith one that was just created and still has pending IO.\n\nIf we crash after transaction commit but before the IO is done, we\u0027ll end\nup replacing a good file with a zero length file.  The solution used\nhere is to create a list of inodes that need special ordering and force\nthem to disk before the commit is done.  This is similar to the\next3 style data\u003dordering, except it is only done on selected files.\n\nBtrfs is able to get away with this because it does not wait on commits\nvery often, even for fsync (which use a sub-commit).\n\nFor renames, we order the file when it wasn\u0027t already\non disk and when it is replacing an existing file.  Larger files\nare sent to filemap_flush right away (before the transaction handle is\nopened).\n\nFor truncates, we order if the file goes from non-zero size down to\nzero size.  This is a little different, because at the time of the\ntruncate the file has no dirty bytes to order.  But, we flag the inode\nso that it is added to the ordered list on close (via release method).  We\nalso immediately add it to the ordered list of the current transaction\nso that we can try to flush down any writes the application sneaks in\nbefore commit.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6933c02e9cc47c2df3c016621a013ec79fb4203f",
      "tree": "d2b711f72c6d1aab317b96ff5040f3fa2ced9ec8",
      "parents": [
        "26160158d3d3df548f4ee046cc6147fe048cfa9c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Mar 17 09:36:37 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Mar 26 11:01:35 2009 +0100"
      },
      "message": "btrfs: get rid of current_is_pdflush() in btrfs_btree_balance_dirty\n\nChris says it\u0027s safe to kill.\n\nAcked-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1a81af4d1d9c60d4313309f937a1fc5567205a87",
      "tree": "535b65b3948d34f0948613afc6ebdfe693683f33",
      "parents": [
        "af4176b49c5ee15a9c9b10720c92456b28e7aac7"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Mar 25 09:55:11 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Mar 25 09:55:11 2009 -0400"
      },
      "message": "Btrfs: make sure btrfs_update_delayed_ref doesn\u0027t increase ref_mod\n\nbtrfs_update_delayed_ref is optimized to add and remove different\nreferences in one pass through the delayed ref tree.  It is a zero\nsum on the total number of refs on a given extent.\n\nBut, the code was recording an extra ref in the head node.  This\nnever made it down to the disk but was used when deciding if it was\nsafe to free the extent while dropping snapshots.\n\nThe fix used here is to make sure the ref_mod count is unchanged\non the head ref when btrfs_update_delayed_ref is called.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\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": "a4b6e07d1a8a9b907e82b9acbf51a026fbb9301c",
      "tree": "fb93f38d01812a6f8af8dbefd4f769460afc997e",
      "parents": [
        "5d13a98f3bf5afc1113f7db184c627a44659bc29"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 16 10:59:57 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:51 2009 -0400"
      },
      "message": "Btrfs: limit balancing work while flushing delayed refs\n\nThe delayed reference mechanism is responsible for all updates to the\nextent allocation trees, including those updates created while processing\nthe delayed references.\n\nThis commit tries to limit the amount of work that gets created during\nthe final run of delayed refs before a commit.  It avoids cowing new blocks\nunless it is required to finish the commit, and so it avoids new allocations\nthat were not really required.\n\nThe goal is to avoid infinite loops where we are always making more work\non the final run of delayed refs.  Over the long term we\u0027ll make a\nspecial log for the last delayed ref updates as well.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5d13a98f3bf5afc1113f7db184c627a44659bc29",
      "tree": "1b9e7f2ed6047e9f471fd6f3b9e665c74dd5910b",
      "parents": [
        "b9473439d3e84d9fc1a0a83faca69cc1b7566341"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 11:41:46 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:51 2009 -0400"
      },
      "message": "Btrfs: readahead checksums during btrfs_finish_ordered_io\n\nThis reads in blocks in the checksum btree before starting the\ntransaction in btrfs_finish_ordered_io.  It makes it much more likely\nwe\u0027ll be able to do operations inside the transaction without\nneeding any btree reads, which limits transaction latencies overall.\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": "89573b9c516b24af8a3b9958dd5afca8fa874e3d",
      "tree": "77b622ea49234d3383882ed0050e8910b4d99adb",
      "parents": [
        "66d7e85ea7c3628189d19b265495358f756cb463"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Mar 12 20:12:45 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:28 2009 -0400"
      },
      "message": "Btrfs: Only let very young transactions grow during commit\n\nCommits are fairly expensive, and so btrfs has code to sit around for a while\nduring the commit and let new writers come in.\n\nBut, while we\u0027re sitting there, new delayed refs might be added, and those\ncan be expensive to process as well.  Unless the transaction is very very\nyoung, it makes sense to go ahead and let the commit finish without hanging\naround.\n\nThe commit grow loop isn\u0027t as important as it used to be, the fsync logging\ncode handles most performance critical syncs now.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "66d7e85ea7c3628189d19b265495358f756cb463",
      "tree": "ffd9484c6e80f90bcf0c4da2f41dda57c8d6eac5",
      "parents": [
        "7f366cfecfc126731f8ac505d72026d691dac79a"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Mar 12 20:12:45 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:27 2009 -0400"
      },
      "message": "Btrfs: Check for a blocking lock before taking the spin\n\nThis reduces contention on the extent buffer spin locks by testing for a\nblocking lock before trying to take the spinlock.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "7f366cfecfc126731f8ac505d72026d691dac79a",
      "tree": "72541fb0c7c891989c2d279c4e26beea2abbca73",
      "parents": [
        "b7ec40d7845bffca8bb3af2ea3f192d6257bbe21"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Mar 12 20:12:45 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:27 2009 -0400"
      },
      "message": "Btrfs: reduce stack in cow_file_range\n\nThe fs/btrfs/inode.c code to run delayed allocation during writout\nneeded some stack usage optimization.  This is the first pass, it does\nthe check for compression earlier on, which allows us to do the common\n(no compression) case higher up in the call chain.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b7ec40d7845bffca8bb3af2ea3f192d6257bbe21",
      "tree": "65b833b979417d36f0fd26d647573de1df0646b9",
      "parents": [
        "c3e69d58e86c3917ae4e9e31b4acf490a7cafe60"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Mar 12 20:12:45 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:26 2009 -0400"
      },
      "message": "Btrfs: reduce stalls during transaction commit\n\nTo avoid deadlocks and reduce latencies during some critical operations, some\ntransaction writers are allowed to jump into the running transaction and make\nit run a little longer, while others sit around and wait for the commit to\nfinish.\n\nThis is a bit unfair, especially when the callers that jump in do a bunch\nof IO that makes all the others procs on the box wait.  This commit\nreduces the stalls this produces by pre-reading file extent pointers\nduring btrfs_finish_ordered_io before the transaction is joined.\n\nIt also tunes the drop_snapshot code to politely wait for transactions\nthat have started writing out their delayed refs to finish.  This avoids\nnew delayed refs being flooded into the queue while we\u0027re trying to\nclose off the transaction.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c3e69d58e86c3917ae4e9e31b4acf490a7cafe60",
      "tree": "bd4f1e62446a208bdae26f0c36d67e3afbc1cd1d",
      "parents": [
        "1887be66dcc3140a81d1299958a41fc0eedfa64f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 10:17:05 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:26 2009 -0400"
      },
      "message": "Btrfs: process the delayed reference queue in clusters\n\nThe delayed reference queue maintains pending operations that need to\nbe done to the extent allocation tree.  These are processed by\nfinding records in the tree that are not currently being processed one at\na time.\n\nThis is slow because it uses lots of time searching through the rbtree\nand because it creates lock contention on the extent allocation tree\nwhen lots of different procs are running delayed refs at the same time.\n\nThis commit changes things to grab a cluster of refs for processing,\nusing a cursor into the rbtree as the starting point of the next search.\nThis way we walk smoothly through the rbtree.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "1887be66dcc3140a81d1299958a41fc0eedfa64f",
      "tree": "3f0666948a83c48c77e0c37dca1c71a6aff9eb1d",
      "parents": [
        "44871b1b24b593996db43495cf4484cc580bdc10"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 10:11:24 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:26 2009 -0400"
      },
      "message": "Btrfs: try to cleanup delayed refs while freeing extents\n\nWhen extents are freed, it is likely that we\u0027ve removed the last\ndelayed reference update for the extent.  This checks the delayed\nref tree when things are freed, and if no ref updates area left it\nimmediately processes the delayed ref.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "44871b1b24b593996db43495cf4484cc580bdc10",
      "tree": "b1b56f48e76006662798508f20c2b2d1378fd04f",
      "parents": [
        "56bec294dea971335d4466b30f2d959f28f6e36d"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 10:04:31 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:25 2009 -0400"
      },
      "message": "Btrfs: reduce stack usage in some crucial tree balancing functions\n\nMany of the tree balancing functions follow the same pattern.\n\n1) cow a block\n2) do something to the result\n\nThis commit breaks them up into two functions so the variables and\ncode required for part two don\u0027t suck down stack during part one.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "56bec294dea971335d4466b30f2d959f28f6e36d",
      "tree": "fc0b5bbf4bb6ab35582a4c7f58f5ac88f71c38bf",
      "parents": [
        "9fa8cfe706f9c20067c042a064999d5825a35330"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 10:10:06 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:25 2009 -0400"
      },
      "message": "Btrfs: do extent allocation and reference count updates in the background\n\nThe extent allocation tree maintains a reference count and full\nback reference information for every extent allocated in the\nfilesystem.  For subvolume and snapshot trees, every time\na block goes through COW, the new copy of the block adds a reference\non every block it points to.\n\nIf a btree node points to 150 leaves, then the COW code needs to go\nand add backrefs on 150 different extents, which might be spread all\nover the extent allocation tree.\n\nThese updates currently happen during btrfs_cow_block, and most COWs\nhappen during btrfs_search_slot.  btrfs_search_slot has locks held\non both the parent and the node we are COWing, and so we really want\nto avoid IO during the COW if we can.\n\nThis commit adds an rbtree of pending reference count updates and extent\nallocations.  The tree is ordered by byte number of the extent and byte number\nof the parent for the back reference.  The tree allows us to:\n\n1) Modify back references in something close to disk order, reducing seeks\n2) Significantly reduce the number of modifications made as block pointers\nare balanced around\n3) Do all of the extent insertion and back reference modifications outside\nof the performance critical btrfs_search_slot code.\n\n#3 has the added benefit of greatly reducing the btrfs stack footprint.\nThe extent allocation tree modifications are done without the deep\n(and somewhat recursive) call chains used in the past.\n\nThese delayed back reference updates must be done before the transaction\ncommits, and so the rbtree is tied to the transaction.  Throttling is\nimplemented to help keep the queue of backrefs at a reasonable size.\n\nSince there was a similar mechanism in place for the extent tree\nextents, that is removed and replaced by the delayed reference tree.\n\nYan Zheng \u003cyan.zheng@oracle.com\u003e helped review and fixup this code.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "9fa8cfe706f9c20067c042a064999d5825a35330",
      "tree": "8e64281caffcdb3ad5a8ab8bf22bb90483e9e214",
      "parents": [
        "8e0ee43bc2c3e19db56a4adaa9a9b04ce885cd84"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Mar 13 10:24:59 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 24 16:14:25 2009 -0400"
      },
      "message": "Btrfs: don\u0027t preallocate metadata blocks during btrfs_search_slot\n\nIn order to avoid doing expensive extent management with tree locks held,\nbtrfs_search_slot will preallocate tree blocks for use by COW without\nany tree locks held.\n\nA later commit moves all of the extent allocation work for COW into\na delayed update mechanism, and this preallocation will no longer be\nrequired.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "913d952eb573c3d1f7487e83b5590e13e7cae2bd",
      "tree": "ce01f54ffbd6ae871c4e11560ae1c826cffe4d3a",
      "parents": [
        "4184ea7f908d95f329febc3665cf66da8568b467"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 10 13:17:18 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 10 13:17:18 2009 -0400"
      },
      "message": "Btrfs: Clear space_info full when adding new devices\n\nThe full flag on the space info structs tells the allocator not to try\nand allocate more chunks because the devices in the FS are fully allocated.\n\nWhen more devices are added, we need to clear the full flag so the allocator\nknows it has more space available.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "4184ea7f908d95f329febc3665cf66da8568b467",
      "tree": "ef16aabf4604c9c1aba23e222ff7fb4510052ebb",
      "parents": [
        "b9447ef80bd301b932ac4d85c9622e929de5fd62"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 10 12:39:20 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 10 12:39:20 2009 -0400"
      },
      "message": "Btrfs: Fix locking around adding new space_info\n\nStorage allocated to different raid levels in btrfs is tracked by\na btrfs_space_info structure, and all of the current space_infos are\ncollected into a list_head.\n\nMost filesystems have 3 or 4 of these structs total, and the list is\nonly changed when new raid levels are added or at unmount time.\n\nThis commit adds rcu locking on the list head, and properly frees\nthings at unmount time.  It also clears the space_info-\u003efull flag\nwhenever new space is added to the FS.\n\nThe locking for the space info list goes like this:\n\nreads: protected by rcu_read_lock()\nwrites: protected by the chunk_mutex\n\nAt unmount time we don\u0027t need special locking because all the readers\nare gone.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "b9447ef80bd301b932ac4d85c9622e929de5fd62",
      "tree": "6d0bb1f287ed09f7850b77e2f622c3bebb35112b",
      "parents": [
        "4e06bdd6cbd5105376e7caf4e683ed131e777389"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 09 11:45:38 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 09 11:45:38 2009 -0400"
      },
      "message": "Btrfs: fix spinlock assertions on UP systems\n\nbtrfs_tree_locked was being used to make sure a given extent_buffer was\nproperly locked in a few places.  But, it wasn\u0027t correct for UP compiled\nkernels.\n\nThis switches it to using assert_spin_locked instead, and renames it to\nbtrfs_assert_tree_locked to better reflect how it was really being used.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4e06bdd6cbd5105376e7caf4e683ed131e777389",
      "tree": "20a7b891f7f8f518eb2cd81234e0c9ab5902c6c3",
      "parents": [
        "6a63209fc02d5483371f07e4913ee8abad608051"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Fri Feb 20 10:59:53 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Feb 20 10:59:53 2009 -0500"
      },
      "message": "Btrfs: try committing transaction before returning ENOSPC\n\nThis fixes a problem where we could return -ENOSPC when we may actually have\nplenty of space, the space is just pinned.  Instead of returning -ENOSPC\nimmediately, commit the transaction first and then try and do the allocation\nagain.\n\nThis patch also does chunk allocation for metadata if we pass the 80%\nthreshold for metadata space.  This will help with stack usage since the chunk\nallocation will happen early on, instead of when the allocation is happening.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n\n"
    },
    {
      "commit": "6a63209fc02d5483371f07e4913ee8abad608051",
      "tree": "7595e0df452928b677b66a64baf0cb3b7ec53dfc",
      "parents": [
        "2cfbd50b536c878e58ab3681c4e944fa3d99b415"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Fri Feb 20 11:00:09 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Feb 20 11:00:09 2009 -0500"
      },
      "message": "Btrfs: add better -ENOSPC handling\n\nThis is a step in the direction of better -ENOSPC handling.  Instead of\nchecking the global bytes counter we check the space_info bytes counters to\nmake sure we have enough space.\n\nIf we don\u0027t we go ahead and try to allocate a new chunk, and then if that fails\nwe return -ENOSPC.  This patch adds two counters to btrfs_space_info,\nbytes_delalloc and bytes_may_use.\n\nbytes_delalloc account for extents we\u0027ve actually setup for delalloc and will\nbe allocated at some point down the line. \n\nbytes_may_use is to keep track of how many bytes we may use for delalloc at\nsome point.  When we actually set the extent_bit for the delalloc bytes we\nsubtract the reserved bytes from the bytes_may_use counter.  This keeps us from\nnot actually being able to allocate space for any delalloc bytes.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n\n\n\n"
    },
    {
      "commit": "2cfbd50b536c878e58ab3681c4e944fa3d99b415",
      "tree": "af29d7c8a094b0560c3ed04aebacdea23ae1177f",
      "parents": [
        "2456242530a21cfee82646ebeeda65d3f74faa4c"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Feb 20 10:55:10 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Feb 20 10:55:10 2009 -0500"
      },
      "message": "Btrfs: check file pointer in btrfs_sync_file\n\nfsync can be called by NFS with a null file pointer, and btrfs was\noopsing in this case.\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": "4008c04a07c73ec3cb1be4c1391d2159a8f75d6d",
      "tree": "c0b10a7287ac810bfc406541e32b850ad4580248",
      "parents": [
        "3f3420df505e47751ef76a652b5cb660e5360d6f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 14:09:45 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 14:09:45 2009 -0500"
      },
      "message": "Btrfs: make a lockdep class for the extent buffer locks\n\nBtrfs is currently using spin_lock_nested with a nested value based\non the tree depth of the block.  But, this doesn\u0027t quite work because\nthe max tree depth is bigger than what spin_lock_nested can deal with,\nand because locks are sometimes taken before the level field is filled in.\n\nThe solution here is to use lockdep_set_class_and_name instead, and to\nset the class before unlocking the pages when the block is read from the\ndisk and just after init of a freshly allocated tree block.\n\nbtrfs_clear_path_blocking is also changed to take the locks in the proper\norder, and it also makes sure all the locks currently held are properly\nset to blocking before it tries to retake the spinlocks.  Otherwise, lockdep\ngets upset about bad lock orderin.\n\nThe lockdep magic cam from Peter Zijlstra \u003cpeterz@infradead.org\u003e\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3f3420df505e47751ef76a652b5cb660e5360d6f",
      "tree": "de413daa777dba47be638c29825c779635a45764",
      "parents": [
        "a48ddf08ba9bab91efd95e458737afa9d7699623"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Thu Feb 12 10:16:03 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 10:16:03 2009 -0500"
      },
      "message": "Btrfs: fs/btrfs/volumes.c: remove useless kzalloc\n\nThe call to kzalloc is followed by a kmalloc whose result is stored in the\nsame variable.\n\nThe semantic match that finds the problem is as follows:\n(http://www.emn.fr/x-info/coccinelle/)\n\n// \u003csmpl\u003e\n@r exists@\nlocal idexpression x;\nstatement S;\nexpression E;\nidentifier f,l;\nposition p1,p2;\nexpression *ptr !\u003d NULL;\n@@\n\n(\nif ((x@p1 \u003d \\(kmalloc\\|kzalloc\\|kcalloc\\)(...)) \u003d\u003d NULL) S\n|\nx@p1 \u003d \\(kmalloc\\|kzalloc\\|kcalloc\\)(...);\n...\nif (x \u003d\u003d NULL) S\n)\n\u003c... when !\u003d x\n     when !\u003d if (...) { \u003c+...x...+\u003e }\nx-\u003ef \u003d E\n...\u003e\n(\n return \\(0\\|\u003c+...x...+\u003e\\|ptr\\);\n|\n return@p2 ...;\n)\n\n@script:python@\np1 \u003c\u003c r.p1;\np2 \u003c\u003c r.p2;\n@@\n\nprint \"* file: %s kmalloc %s return %s\" % (p1[0].file,p1[0].line,p2[0].line)\n// \u003c/smpl\u003e\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a48ddf08ba9bab91efd95e458737afa9d7699623",
      "tree": "58fb45f4b54d3a18108f636528337a09c0a08cc7",
      "parents": [
        "e00f7308658622fbd483cb0d9fe41165bf9050d0"
      ],
      "author": {
        "name": "Qinghuang Feng",
        "email": "qhfeng.kernel@gmail.com",
        "time": "Thu Feb 12 14:25:23 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 14:25:23 2009 -0500"
      },
      "message": "Btrfs: remove unused code in split_state()\n\nThese two lines are not used, remove them.\n\nSigned-off-by: Qinghuang Feng \u003cqhfeng.kernel@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "e00f7308658622fbd483cb0d9fe41165bf9050d0",
      "tree": "5baeaee96a3d6789f4cce2ca17d7f4f8afb3431e",
      "parents": [
        "7951f3cefbd711f4429a0cd014aa83a844c399a0"
      ],
      "author": {
        "name": "Jeff Mahoney",
        "email": "jeffm@suse.com",
        "time": "Thu Feb 12 14:11:25 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 14:11:25 2009 -0500"
      },
      "message": "Btrfs: remove btrfs_init_path\n\nbtrfs_init_path was initially used when the path objects were on the\nstack.  Now all the work is done by btrfs_alloc_path and btrfs_init_path\nisn\u0027t required.\n\nThis patch removes it, and just uses kmem_cache_zalloc to zero out the object.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "7951f3cefbd711f4429a0cd014aa83a844c399a0",
      "tree": "7eec0bc3b933d71f99cad5379ef15bf1e084a572",
      "parents": [
        "b335b0034e252e79ec2e9c6697f5d663c4627bec"
      ],
      "author": {
        "name": "Jeff Mahoney",
        "email": "jeffm@suse.com",
        "time": "Thu Feb 12 10:06:15 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 10:06:15 2009 -0500"
      },
      "message": "Btrfs: balance_level checks !child after access\n\nThe BUG_ON() is in the wrong spot.\n\nSigned-off-by: Jeff Mahoney \u003cjeffm@suse.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "b335b0034e252e79ec2e9c6697f5d663c4627bec",
      "tree": "f99286083d21fdc298b50d3d47dc96a9f1f54bb8",
      "parents": [
        "e1df36d2f18254d0690a0fbe036cece74ec311b8"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Feb 12 10:06:04 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 10:06:04 2009 -0500"
      },
      "message": "Btrfs: Avoid using __GFP_HIGHMEM with slab allocator\n\nbtrfs_releasepage may call kmem_cache_alloc indirectly,\nand provide same GFP flags it gets to kmem_cache_alloc.\nSo it\u0027s possible to use __GFP_HIGHMEM with the slab\nallocator.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\n\n"
    },
    {
      "commit": "e1df36d2f18254d0690a0fbe036cece74ec311b8",
      "tree": "34823b4533c7fe2d5a329a03b99faa6bd0a88956",
      "parents": [
        "536ac8ae86e68bb5574d7cc81c7d229a86b82601"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 09:45:08 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 09:45:08 2009 -0500"
      },
      "message": "Btrfs: don\u0027t clean old snapshots on sync(1)\n\nCleaning old snapshots can make sync(1) somewhat slow, and some users\nand applications still use it in a global fsync kind of workload.\n\nThis patch changes btrfs not to clean old snapshots during sync, which is\nsafe from a FS consistency point of view.  The major downside is that it\nmakes it difficult to tell when old snapshots have been reaped and\nthe space they were using has been reclaimed.  A new ioctl will be added\nfor this purpose instead.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "536ac8ae86e68bb5574d7cc81c7d229a86b82601",
      "tree": "2ec565edbbe3cf91e864b83f3fbd0a5bf8c088c4",
      "parents": [
        "b288052e1779261ae80138074989ef50358c4e58"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 09:41:38 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 09:41:38 2009 -0500"
      },
      "message": "Btrfs: use larger metadata clusters in ssd mode\n\nLarger metadata clusters can significantly improve writeback performance\non ssd drives with large erasure blocks.  The larger clusters make it\nmore likely a given IO will completely overwrite the ssd block, so it\ndoesn\u0027t have to do an internal rwm cycle.\n\nOn spinning media, lager metadata clusters end up spreading out the\nmetadata more over time, which makes fsck slower, so we don\u0027t want this\nto be the default.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "b288052e1779261ae80138074989ef50358c4e58",
      "tree": "58c2a8e3bd4208c9b49f471f33303c88bdc20606",
      "parents": [
        "eb099670895f22970cd143875467c2768d6d87e5"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 09:37:35 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 09:37:35 2009 -0500"
      },
      "message": "Btrfs: process mount options on mount -o remount,\n\nBtrfs wasn\u0027t parsing any new mount options during remount, making it\ndifficult to set mount options on a root drive.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "eb099670895f22970cd143875467c2768d6d87e5",
      "tree": "4fc48dad8f0f2c13ff85d9310aa163305a243ef2",
      "parents": [
        "284b066af41579f62649048fdec5c5e7091703e6"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Thu Feb 12 09:27:38 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 12 09:27:38 2009 -0500"
      },
      "message": "Btrfs: make sure all pending extent operations are complete\n\nTheres a slight problem with finish_current_insert, if we set all to 1 and then\ngo through and don\u0027t actually skip any of the extents on the pending list, we\ncould exit right after we\u0027ve added new extents.\n\nThis is a problem because by inserting the new extents we could have gotten new\nCOW\u0027s to happen and such, so we may have some pending updates to do or even\nmore inserts to do after that.\n\nSo this patch will only exit if we have never skipped any of the extents in the\npending list, and we have no extents to insert, this will make sure that all of\nthe pending work is truly done before we return.  I\u0027ve been running with this\npatch for a few days with all of my other testing and have not seen issues.\nThanks,\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\n\n"
    },
    {
      "commit": "284b066af41579f62649048fdec5c5e7091703e6",
      "tree": "e34185c911cb50b0ade04f804056ffbe2a6e04ae",
      "parents": [
        "42f15d77df8a7e8a2feb15041d5d30710ee7f951"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Feb 09 16:22:03 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Feb 09 16:22:03 2009 -0500"
      },
      "message": "Btrfs: don\u0027t use spin_is_contended\n\nBtrfs was using spin_is_contended to see if it should drop locks before\ndoing extent allocations during btrfs_search_slot.  The idea was to avoid\nexpensive searches in the tree unless the lock was actually contended.\n\nBut, spin_is_contended is specific to the ticket spinlocks on x86, so this\nis causing compile errors everywhere else.\n\nIn practice, the contention could easily appear some time after we started\ndoing the extent allocation, and it makes more sense to always drop the lock\ninstead.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "42f15d77df8a7e8a2feb15041d5d30710ee7f951",
      "tree": "5b6a3cdaab135c41848952874a6fab086b8b9f72",
      "parents": [
        "806638bce99f51deccbfedbe86ab3c5cf55a1d35"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Feb 06 11:35:57 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Feb 06 11:35:57 2009 -0500"
      },
      "message": "Btrfs: Make sure dir is non-null before doing S_ISGID checks\n\nThe S_ISGID check in btrfs_new_inode caused an oops during subvol creation\nbecause sometimes the dir is null.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "806638bce99f51deccbfedbe86ab3c5cf55a1d35",
      "tree": "86e53bb492274a9e20f515220b737e71b6397b86",
      "parents": [
        "9b0d3ace33ef225690a86d7130feadb22367f496"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 05 09:08:14 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 05 09:08:14 2009 -0500"
      },
      "message": "Btrfs: Fix memory leak in cache_drop_leaf_ref\n\nThe code wasn\u0027t doing a kfree on the sorted array\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "9b0d3ace33ef225690a86d7130feadb22367f496",
      "tree": "eae45955a38b4d4c2515549112ec749590b56aa9",
      "parents": [
        "7b78c170dc4f538cc7ee66f47b3aac3f3974a36c"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:33:00 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:33:00 2009 -0500"
      },
      "message": "Btrfs: don\u0027t return congestion in write_cache_pages as often\n\nOn fast devices that go from congested to uncongested very quickly, pdflush\nis waiting too often in congestion_wait, and the FS is backing off to\neasily in write_cache_pages.\n\nFor now, fix this on the btrfs side by only checking congestion after\nsome bios have already gone down.  Longer term a real fix is needed\nfor pdflush, but that is a larger project.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "7b78c170dc4f538cc7ee66f47b3aac3f3974a36c",
      "tree": "e2301fba4de0f3a04cf4b691f63e2bdf1e8c64d2",
      "parents": [
        "12f4daccfc3732280debba8f9ba49720372de831"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:12:46 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:12:46 2009 -0500"
      },
      "message": "Btrfs: Only prep for btree deletion balances when nodes are mostly empty\n\nWhenever an item deletion is done, we need to balance all the nodes\nin the tree to make sure we don\u0027t end up with an empty node if a pointer\nis deleted.  This balance prep happens from the root of the tree down\nso we can drop our locks as we go.\n\nreada_for_balance was triggering read-ahead on neighboring nodes even\nwhen no balancing was required.  This adds an extra check to avoid\ncalling balance_level() and avoid reada_for_balance() when a balance\nwon\u0027t be required.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    }
  ],
  "next": "12f4daccfc3732280debba8f9ba49720372de831"
}
