)]}'
{
  "log": [
    {
      "commit": "a9185b41a4f84971b930c519f0c63bd450c4810d",
      "tree": "268cf4e206cca12fb9e1dd68984e7c190e465b46",
      "parents": [
        "26821ed40b4230259e770c9911180f38fcaa6f59"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Mar 05 09:21:37 2010 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 05 13:25:52 2010 -0500"
      },
      "message": "pass writeback_control to -\u003ewrite_inode\n\nThis gives the filesystem more information about the writeback that\nis happening.  Trond requested this for the NFS unstable write handling,\nand other filesystems might benefit from this too by beeing able to\ndistinguish between the different callers in more detail.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "23b5c50945f2294add0137799400329c0ebba290",
      "tree": "b7bb2ea17bc2244162adef8a288db12cacbf3524",
      "parents": [
        "efd049fb26a162c3830fd3cb1001fdc09b147f3b"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu Feb 04 11:33:03 2010 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 04 11:33:03 2010 -0500"
      },
      "message": "Btrfs: apply updated fallocate i_size fix\n\nThis version of the i_size fix for fallocate makes sure we only update\nthe i_size when the current fallocate is really operating outside of\ni_size.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "efd049fb26a162c3830fd3cb1001fdc09b147f3b",
      "tree": "caedb4f8b1133b209360bd25ff3b2ddd1dc737c0",
      "parents": [
        "7a7965f83e89f0be506a96769938a721e4e5ae50"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Feb 02 20:50:10 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Feb 04 11:31:45 2010 -0500"
      },
      "message": "Btrfs: do not try and lookup the file extent when finishing ordered io\n\nWhen running the following fio job\n\n[torrent]\nfilename\u003dtorrent-test\nrw\u003drandwrite\nsize\u003d4g\nfilesize\u003d4g\nbs\u003d4k\nioengine\u003dsync\n\nyou would see long stalls where no work was being done.  That is because we were\ndoing all this extra work to read in the file extent outside of the transaction,\nhowever in the random io case this ends up hurting us because the file extents\nare not there to begin with.  So axe this logic, since we end up reading in the\nfile extent when we go to update it anyway.  This took the fio job from 11 mb/s\nwith several ~10 second stalls to 24 mb/s to a couple of 1-2 second stalls.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "e3acc2a6850efff647f1c5458524eb3a8bcba20a",
      "tree": "a111740f879f5f0cbbcaf079c2500535263c1278",
      "parents": [
        "f858153c367a397235d3e81136741e40e44faf1d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Jan 26 14:30:53 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 28 16:20:39 2010 -0500"
      },
      "message": "Btrfs: run orphan cleanup on default fs root\n\nThis patch revert\u0027s commit\n\n6c090a11e1c403b727a6a8eff0b97d5fb9e95cb5\n\nSince it introduces this problem where we can run orphan cleanup on a\nvolume that can have orphan entries re-added.  Instead of my original\nfix, Yan Zheng pointed out that we can just revert my original fix and\nthen run the orphan cleanup in open_ctree after we look up the fs_root.\nI have tested this with all the tests that gave me problems and this\npatch fixes both problems.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d1ea6a61454e7d7ff0873d0ad1ae27d5807da0d3",
      "tree": "73645e52ffa4a38ea4a2a871489d0e2622e7304e",
      "parents": [
        "b8d9bfeb18f9af794020d96e9bee984d18a8d737"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Wed Jan 20 07:28:54 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 28 16:20:38 2010 -0500"
      },
      "message": "Btrfs: Use correct values when updating inode i_size on fallocate\n\ncommit f2bc9dd07e3424c4ec5f3949961fe053d47bc825\nAuthor: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nDate:   Wed Jan 20 12:57:53 2010 +0530\n\n    Btrfs: Use correct values when updating inode i_size on fallocate\n\n    Even though we allocate more, we should be updating inode i_size\n    as per the arguments passed\n\n    Signed-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a555f810af6d63ea5960abaed88e150ad95c3011",
      "tree": "643fd3e94c352dc0006ff9333de8b7b4dc2b8785",
      "parents": [
        "11dfe35a0108097f2df1f042c485fa7f758c2cdf"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 28 16:18:15 2010 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jan 28 16:18:15 2010 -0500"
      },
      "message": "Btrfs: Add mount -o compress-force\n\nThe default btrfs mount -o compress mode will quickly back off\ncompressing a file if it notices that compression does not reduce the\nsize of the data being written.  This can save considerable CPU because\nall future writes to the file go through uncompressed.\n\nBut some files are both very large and have mixed data stored in\nthem.  In that case, we want to add the ability to always try\ncompressing data before writing it.\n\nThis commit adds mount -o compress-force.  A later commit will add\na new inode flag that does the same thing.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6c090a11e1c403b727a6a8eff0b97d5fb9e95cb5",
      "tree": "51ff4a540d71e1cd6421041c3d3ec466e21a860f",
      "parents": [
        "6c7d54ac87f338c479d9729e8392eca3f76e11e1"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Jan 15 20:08:22 2010 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Jan 17 20:40:21 2010 -0500"
      },
      "message": "Btrfs: fix regression in orphan cleanup\n\nCurrently orphan cleanup only ever gets triggered if we cross subvolumes during\na lookup, which means that if we just mount a plain jane fs that has orphans in\nit, they will never get cleaned up.  This results in panic\u0027s like these\n\nhttp://www.kerneloops.org/oops.php?number\u003d1109085\n\nwhere adding an orphan entry results in -EEXIST being returned and we panic.  In\norder to fix this, we check to see on lookup if our root has had the orphan\ncleanup done, and if not go ahead and do it.  This is easily reproduceable by\nrunning this testcase\n\n#include \u003csys/types.h\u003e\n#include \u003csys/stat.h\u003e\n#include \u003cfcntl.h\u003e\n#include \u003cstring.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003cstdio.h\u003e\n\nint main(int argc, char **argv)\n{\n\tchar data[4096];\n\tchar newdata[4096];\n\tint fd1, fd2;\n\n\tmemset(data, \u0027a\u0027, 4096);\n\tmemset(newdata, \u0027b\u0027, 4096);\n\n\twhile (1) {\n\t\tint i;\n\n\t\tfd1 \u003d creat(\"file1\", 0666);\n\t\tif (fd1 \u003c 0)\n\t\t\tbreak;\n\n\t\tfor (i \u003d 0; i \u003c 512; i++)\n\t\t\twrite(fd1, data, 4096);\n\n\t\tfsync(fd1);\n\t\tclose(fd1);\n\n\t\tfd2 \u003d creat(\"file2\", 0666);\n\t\tif (fd2 \u003c 0)\n\t\t\tbreak;\n\n\t\tftruncate(fd2, 4096 * 512);\n\n\t\tfor (i \u003d 0; i \u003c 512; i++)\n\t\t\twrite(fd2, newdata, 4096);\n\t\tclose(fd2);\n\n\t\ti \u003d rename(\"file2\", \"file1\");\n\t\tunlink(\"file1\");\n\t}\n\n\treturn 0;\n}\n\nand then pulling the power on the box, and then trying to run that test again\nwhen the box comes back up.  I\u0027ve tested this locally and it fixes the problem.\nThanks to Tomas Carnecky for helping me track this down initially.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "406266ab9ac8ed8b085c58aacd9e3161480dc5d5",
      "tree": "811d305c4c4fdf6b19279173959d06698a304416",
      "parents": [
        "3a1abec9f6880cf406593c392636199ea1c6c917"
      ],
      "author": {
        "name": "Jan Engelhardt",
        "email": "jengelh@medozas.de",
        "time": "Wed Dec 09 22:00:38 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sun Jan 17 20:06:27 2010 -0500"
      },
      "message": "btrfs: fix missing last-entry in readdir(3)\n\nparent 49313cdac7b34c9f7ecbb1780cfc648b1c082cd7 (v2.6.32-1-g49313cd)\ncommit ff48c08e1c05c67e8348ab6f8a24de8034e0e34d\nAuthor: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nDate:   Wed Dec 9 22:57:36 2009 +0100\n\nBtrfs: fix missing last-entry in readdir(3)\n\nWhen one does a 32-bit readdir(3), the last entry of a directory is\nmissing. This is however not due to passing a large value to filldir,\nbut it seems to have to do with glibc doing telldir or something\nquirky. In any case, this patch fixes it in practice.\n\nSigned-off-by: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3a1abec9f6880cf406593c392636199ea1c6c917",
      "tree": "280edc4cacb9d14224f7d3da3510d386329a08ae",
      "parents": [
        "83d3c9696fed237a3d96fce18299e2fcf112109f"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 15:47:17 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 15:47:17 2009 -0500"
      },
      "message": "Btrfs: make sure fallocate properly starts a transaction\n\nThe recent patch to make fallocate enospc friendly would send\ndown a NULL trans handle to the allocator.  This moves the\ntransaction start to properly fix things.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4a8be425a8fb8fbb5d881eb55fa6634c3463b9c9",
      "tree": "c89e0aa1aac790d77f6a29a4bc48384922152d00",
      "parents": [
        "a7a3f7cadd9bdee569243f7ead9550aa16b60e07"
      ],
      "author": {
        "name": "TARUISI Hiroaki",
        "email": "taruishi.hiroak@jp.fujitsu.com",
        "time": "Thu Nov 12 07:14:26 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:37 2009 -0500"
      },
      "message": "Btrfs: deny sys_link across subvolumes.\n\nI rebased Christian Parpart\u0027s patch to deny hard link across\nsubvolumes. Original patch modifies also btrfs_rename, but\nI excluded it because we can move across subvolumes now and\nit make no problem.\n-----------------\n\nHard link across subvolumes should not allowed in Btrfs.\nbtrfs_link checks root of \u0027to\u0027 directory is same as root\nof \u0027from\u0027 file. If not same, btrfs_link returns -EPERM.\n\nSigned-off-by: TARUISI Hiroaki \u003ctaruishi.hiroak@jp.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "24bbcf0442ee04660a5a030efdbb6d03f1c275cb",
      "tree": "aa57d77d29cc5150b272cc3f6465f10262fcbaac",
      "parents": [
        "f34f57a3ab4e73304d78c125682f1a53cd3975f2"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:36:34 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:35 2009 -0500"
      },
      "message": "Btrfs: Add delayed iput\n\niput() can trigger new transactions if we are dropping the\nfinal reference, so calling it in btrfs_commit_transaction\nmay end up deadlock. This patch adds delayed iput to avoid\nthe issue.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "f34f57a3ab4e73304d78c125682f1a53cd3975f2",
      "tree": "359aff6491d3e92b3901ea78dc164d41209d3eea",
      "parents": [
        "8082510e7124cc50d728f1b875639cb4e22312cc"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:35:27 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:34 2009 -0500"
      },
      "message": "Btrfs: Pass transaction handle to security and ACL initialization functions\n\nPass transaction handle down to security and ACL initialization\nfunctions, so we can avoid starting nested transactions\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8082510e7124cc50d728f1b875639cb4e22312cc",
      "tree": "e9f0a0a4504a87689b4765368b508fff5ae2ddf8",
      "parents": [
        "5a303d5d4b8055d2e5a03e92d04745bfc5881a22"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:35:36 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:34 2009 -0500"
      },
      "message": "Btrfs: Make truncate(2) more ENOSPC friendly\n\ntruncating and deleting regular files are unbound operations,\nso it\u0027s not good to do them in a single transaction. This\npatch makes btrfs_truncate and btrfs_delete_inode start a\nnew transaction after all items in a tree leaf are deleted.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5a303d5d4b8055d2e5a03e92d04745bfc5881a22",
      "tree": "b3a46e3ebc9ac2618e295b94658ddb1402577b6c",
      "parents": [
        "2e4bfab97055aa6acdd0637913bd705c2d6506d6"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:52 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:33 2009 -0500"
      },
      "message": "Btrfs: Make fallocate(2) more ENOSPC friendly\n\nfallocate(2) may allocate large number of file extents, so it\u0027s not\ngood to do it in a single transaction. This patch make fallocate(2)\nstart a new transaction for each file extents it allocates.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c71bf099abddf3e0fdc27f251ba76fca1461d49a",
      "tree": "0b682ad2b49aeaf9ac774c40be4b7549c1d079fe",
      "parents": [
        "c216775458a2ee345d9412a2770c2916acfb5d30"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:40 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:33 2009 -0500"
      },
      "message": "Btrfs: Avoid orphan inodes cleanup while replaying log\n\nWe do log replay in a single transaction, so it\u0027s not good to do unbound\noperations. This patch cleans up orphan inodes cleanup after replaying\nthe log. It also avoids doing other unbound operations such as truncating\na file during replaying log. These unbound operations are postponed to\nthe orphan inode cleanup stage.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c216775458a2ee345d9412a2770c2916acfb5d30",
      "tree": "41a947a9d254aeeef40b7e42162d80646477f30a",
      "parents": [
        "920bbbfb05c9fce22e088d20eb9dcb8f96342de9"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:21 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Dec 17 12:33:24 2009 -0500"
      },
      "message": "Btrfs: Fix disk_i_size update corner case\n\nThere are some cases file extents are inserted without involving\nordered struct. In these cases, we update disk_i_size directly,\nwithout checking pending ordered extent and DELALLOC bit. This\npatch extends btrfs_ordered_update_i_size() to handle these cases.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "920bbbfb05c9fce22e088d20eb9dcb8f96342de9",
      "tree": "b972b3f39ebefb9c026300c1981d18cad769e431",
      "parents": [
        "ad48fd754676bfae4139be1a897b1ea58f9aaf21"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Nov 12 09:34:08 2009 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Dec 15 21:24:52 2009 -0500"
      },
      "message": "Btrfs: Rewrite btrfs_drop_extents\n\nRewrite btrfs_drop_extents by using btrfs_duplicate_item, so we can\navoid calling lock_extent within transaction.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "aa021baa3295fa6e3f367d80f8955dd5176656eb",
      "tree": "13da8275b1957399bc4fa19ec7cc313d48694e31",
      "parents": [
        "404291ac9e72d118fcadeb939a69b2caa0a0e9ca",
        "a6dbd429d8dd3382bbd9594b8d2ec74843a260d9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 11 13:38:59 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 11 13:38:59 2009 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix panic when trying to destroy a newly allocated\n  Btrfs: allow more metadata chunk preallocation\n  Btrfs: fallback on uncompressed io if compressed io fails\n  Btrfs: find ideal block group for caching\n  Btrfs: avoid null deref in unpin_extent_cache()\n  Btrfs: skip btrfs_release_path in btrfs_update_root and btrfs_del_root\n  Btrfs: fix some metadata enospc issues\n  Btrfs: fix how we set max_size for free space clusters\n  Btrfs: cleanup transaction starting and fix journal_info usage\n  Btrfs: fix data allocation hint start\n"
    },
    {
      "commit": "a6dbd429d8dd3382bbd9594b8d2ec74843a260d9",
      "tree": "9cc6426da748996e4e1cc61d446052838703434f",
      "parents": [
        "33b258086441dd07e00133c79fcd8cbc6a76d737"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Nov 11 15:53:34 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 11 15:53:34 2009 -0500"
      },
      "message": "Btrfs: fix panic when trying to destroy a newly allocated\n\nThere is a problem where iget5_locked will look for an inode, not find it, and\nthen subsequently try to allocate it.  Another CPU will have raced in and\nallocated the inode instead, so when iget5_locked gets the inode spin lock again\nand does a search, it finds the new inode.  So it goes ahead and calls\ndestroy_inode on the inode it just allocated.  The problem is we don\u0027t set\nBTRFS_I(inode)-\u003eroot until the new inode is completely initialized.  This patch\nmakes us set root to NULL when alloc\u0027ing a new inode, so when we get to\nbtrfs_destroy_inode and we see that root is NULL we can just free up the memory\nand continue on.  This fixes the panic\n\nhttp://www.kerneloops.org/submitresult.php?number\u003d812690\n\nThanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "f5a84ee3cdd88d96b7bcede10af58598ad8d52a7",
      "tree": "5f69342df0c457aca31176234a801bf3607978c5",
      "parents": [
        "ccf0e72537a9f68611ca575121afd08e2b4d0fb0"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Nov 10 21:23:48 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 11 14:20:20 2009 -0500"
      },
      "message": "Btrfs: fallback on uncompressed io if compressed io fails\n\nCurrently compressed IO does not deal with not having its entire extent able to\nbe allocated.  So if we have enough free space to allocate for the extent, but\nits not contiguous, it will fail spectacularly.  This patch fixes this by\nfalling back on uncompressed IO which lets us spread the delalloc extent across\nmultiple extents.  I tested this by making us randomly think the reservation had\nfailed to make it fallback on the uncompressed io way and it seemed to work\nfine.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5df6a9f606bf2ee25ab8031bff124ed883b823be",
      "tree": "2492876b6ebd9c4c52a50de1a431285fe3779889",
      "parents": [
        "01dea1efc23b511d3b58bb94da07ddb6d6db9895"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Nov 10 21:23:48 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 11 14:20:17 2009 -0500"
      },
      "message": "Btrfs: fix some metadata enospc issues\n\nWe weren\u0027t reserving metadata space for rename, rmdir and unlink, which could\ncause problems.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6346c93988caa3048bf4d81f9ba3608a7a195aa2",
      "tree": "78e5fbc5fa6ed8c692db24dfff475e2b95413570",
      "parents": [
        "444528b3e614f7f2391488d9bca8e0b872db909b"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Nov 10 21:23:47 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 11 14:20:16 2009 -0500"
      },
      "message": "Btrfs: fix data allocation hint start\n\nSometimes our start allocation hint when we cow a file can be either\nEXTENT_HOLE or some other such place holder, which is not optimal.  So if we\nfind that our em-\u003eblock_start is one of these special values, check to see\nwhere the first block of the inode is stored, and use that as a hint.  If that\nblock is also a special value, just fallback on a hint of 0 and let the\nallocator figure out a good place to put the data.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "dcbeb0bec5f2695c3ff53f174efb8e03c209f3f3",
      "tree": "30d223a3a3c7470c657284ef030657bd1753d4d3",
      "parents": [
        "2b650df2cea96e487f2fd9ecaa68e533ea9b5ed7",
        "444528b3e614f7f2391488d9bca8e0b872db909b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 15 15:06:37 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 15 15:06:37 2009 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: always pin metadata in discard mode\n  Btrfs: enable discard support\n  Btrfs: add -o discard option\n  Btrfs: properly wait log writers during log sync\n  Btrfs: fix possible ENOSPC problems with truncate\n  Btrfs: fix btrfs acl #ifdef checks\n  Btrfs: streamline tree-log btree block writeout\n  Btrfs: avoid tree log commit when there are no changes\n  Btrfs: only write one super copy during fsync\n"
    },
    {
      "commit": "5d5e103a70f74ae98e3965a4add1ab951d0651d1",
      "tree": "83b1cc73830f72f592aa804207a679912beef101",
      "parents": [
        "0eda294dfc980c1cbe4f8a0564bf543f86a01ddb"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue Oct 13 16:46:49 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Oct 14 10:32:47 2009 -0400"
      },
      "message": "Btrfs: fix possible ENOSPC problems with truncate\n\nThere\u0027s a problem where we don\u0027t do any space reservation for truncates, which\ncan cause you to OOPs because you will be allowed to go off in the weeds a bit\nsince we don\u0027t account for the delalloc bytes that are created as a result of\nthe truncate.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "257c62e1bce03e5b9f3f069fd52ad73a56de71fd",
      "tree": "ad047fe5796156aa88e3f3600111bf2b8d12759f",
      "parents": [
        "4722607db6a78bd7748c51fa4c8d7371da797254"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 13:21:08 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Oct 13 13:35:12 2009 -0400"
      },
      "message": "Btrfs: avoid tree log commit when there are no changes\n\nrpm has a habit of running fdatasync when the file hasn\u0027t\nchanged.  We already detect if a file hasn\u0027t been changed\nin the current transaction but it might have been sent to\nthe tree-log in this transaction and not changed since\nthe last call to fsync.\n\nIn this case, we want to avoid a tree log sync, which includes\na number of synchronous writes and barriers.  This commit\nextends the existing tracking of the last transaction to change\na file to also track the last sub-transaction.\n\nThe end result is that rpm -ivh and -Uvh are roughly twice as fast,\nand on par with ext3.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "474a503d4bf77ae0cbe484dd0842a2648c0b1c28",
      "tree": "70e3e4023209e741546491a58622bd45fb13e308",
      "parents": [
        "d43c36dc6b357fa1806800f18aa30123c747a6d1",
        "ac6889cbb254be1ffea376bea4a96ce9be0e0ed0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 11 11:23:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 11 11:23:13 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix file clone ioctl for bookend extents\n  Btrfs: fix uninit compiler warning in cow_file_range_nocow\n  Btrfs: constify dentry_operations\n  Btrfs: optimize back reference update during btrfs_drop_snapshot\n  Btrfs: remove negative dentry when deleting subvolumne\n  Btrfs: optimize fsync for the single writer case\n  Btrfs: async delalloc flushing under space pressure\n  Btrfs: release delalloc reservations on extent item insertion\n  Btrfs: delay clearing EXTENT_DELALLOC for compressed extents\n  Btrfs: cleanup extent_clear_unlock_delalloc flags\n  Btrfs: fix possible softlockup in the allocator\n  Btrfs: fix deadlock on async thread startup\n"
    },
    {
      "commit": "e9061e214810c9534381a705a1b46533e09f2676",
      "tree": "7eed17ffbfc2eeb06da70dafe8087855c4b22a60",
      "parents": [
        "82d339d9b3a6395f17d3253887653250b693b74b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 09 09:57:45 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 09 09:57:45 2009 -0400"
      },
      "message": "Btrfs: fix uninit compiler warning in cow_file_range_nocow\n\nThe extent_type variable was exposed uninit via a goto.  It should be\nimpossible to trigger because it is protected by a check on another\nvariable, but this makes sure.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "82d339d9b3a6395f17d3253887653250b693b74b",
      "tree": "04671df82289708192bd650c67eaa2f8a999132b",
      "parents": [
        "94fcca9f8999e7828d5f4dc181daa39cad2af38a"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Fri Oct 09 09:54:36 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 09 09:54:36 2009 -0400"
      },
      "message": "Btrfs: constify dentry_operations\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "efefb1438be269897585934fc6c05deb4dfa01ce",
      "tree": "41d3bf63789bc656421dfbd651bf38caf580ec03",
      "parents": [
        "ff782e0a131c7f669445c07fe5c7ba91e043b7ed"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Fri Oct 09 09:25:16 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 09 09:25:16 2009 -0400"
      },
      "message": "Btrfs: remove negative dentry when deleting subvolumne\n\nThe use of btrfs_dentry_delete is removing dentries from the\ndcache when deleting subvolumne. btrfs_dentry_delete ignores\nnegative dentries. This is incorrect since if we don\u0027t remove\nthe negative dentry, its parent dentry can\u0027t be removed.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "32c00aff718bb54a214b39146bdd9ac01511cd25",
      "tree": "c094ee494723a9ebc9d83cb95607f06351665639",
      "parents": [
        "a3429ab70b04363c6190964e82f04f44f3e34cf0"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Oct 08 13:34:05 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 15:21:10 2009 -0400"
      },
      "message": "Btrfs: release delalloc reservations on extent item insertion\n\nThis patch fixes an issue with the delalloc metadata space reservation\ncode.  The problem is we used to free the reservation as soon as we\nallocated the delalloc region.  The problem with this is if we are not\ninserting an inline extent, we don\u0027t actually insert the extent item until\nafter the ordered extent is written out.  This patch does 3 things,\n\n1) It moves the reservation clearing stuff into the ordered code, so when\nwe remove the ordered extent we remove the reservation.\n2) It adds a EXTENT_DO_ACCOUNTING flag that gets passed when we clear\ndelalloc bits in the cases where we want to clear the metadata reservation\nwhen we clear the delalloc extent, in the case that we do an inline extent\nor we invalidate the page.\n3) It adds another waitqueue to the space info so that when we start a fs\nwide delalloc flush, anybody else who also hits that area will simply wait\nfor the flush to finish and then try to make their allocation.\n\nThis has been tested thoroughly to make sure we did not regress on\nperformance.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a3429ab70b04363c6190964e82f04f44f3e34cf0",
      "tree": "f9aa5104699fdb82a3dfa327948241aa3e0022d5",
      "parents": [
        "a791e35e12ff672e8a0e140abeeaf900c3b2ea77"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 12:30:20 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 15:11:50 2009 -0400"
      },
      "message": "Btrfs: delay clearing EXTENT_DELALLOC for compressed extents\n\nWhen compression is on, the cow_file_range code is farmed off to\nworker threads.  This allows us to do significant CPU work in parallel\non SMP machines.\n\nBut it is a delicate balance around when we clear flags and how.  In\nthe past we cleared the delalloc flag immediately, which was safe\nbecause the pages stayed locked.\n\nBut this is causing problems with the newest ENOSPC code, and with the\nrecent extent state cleanups we can now clear the delalloc bit at the\nsame time the uncompressed code does.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a791e35e12ff672e8a0e140abeeaf900c3b2ea77",
      "tree": "f03b99451619c0425f3c93fbef3940c2b08c1bd3",
      "parents": [
        "1cdda9b81ac0e6ee986f034fa02f221679e1c11a"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 11:27:10 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 08 15:11:49 2009 -0400"
      },
      "message": "Btrfs: cleanup extent_clear_unlock_delalloc flags\n\nextent_clear_unlock_delalloc has a growing set of ugly parameters\nthat is very difficult to read and maintain.\n\nThis switches to a flag field and well named flag defines.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "0efe5e32c8729ef44b00d9a7203e4c99a6378b27",
      "tree": "8df3309198b2ab87f549c82c59125d2b106bcdbe",
      "parents": [
        "e6a0a8bfef1094084e53bfaad6d512c23da7a6dd",
        "9c2693c9243b81802c6860570557165e874779a7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 20:23:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 20:23:15 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix data space leak fix\n  Btrfs: remove duplicates of filemap_ helpers\n  Btrfs: take i_mutex before generic_write_checks\n  Btrfs: fix arguments to btrfs_wait_on_page_writeback_range\n  Btrfs: fix deadlock with free space handling and user transactions\n  Btrfs: fix error cases for ioctl transactions\n  Btrfs: Use CONFIG_BTRFS_POSIX_ACL to enable ACL code\n  Btrfs: introduce missing kfree\n  Btrfs: Fix setting umask when POSIX ACLs are not enabled\n  Btrfs: proper -ENOSPC handling\n"
    },
    {
      "commit": "828c09509b9695271bcbdc53e9fc9a6a737148d2",
      "tree": "072ffad6f02db7bf4095e07e2b90247cfa042998",
      "parents": [
        "1c4115e595dec42aa0e81ba47ef46e35b34ed428"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Thu Oct 01 15:43:56 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 16:11:11 2009 -0700"
      },
      "message": "const: constify remaining file_operations\n\n[akpm@linux-foundation.org: fix KVM]\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nAcked-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9c2693c9243b81802c6860570557165e874779a7",
      "tree": "c857a96a78cdc9fcd640ea4279e7214d6c9713b3",
      "parents": [
        "8aa38c31b7659e338fee4d9af4c3805acbd9806f",
        "fbf190874407f23d2891b53ffdf7d3c6be8d47ff"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 17:24:44 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 17:24:44 2009 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable into for-linus\n"
    },
    {
      "commit": "fbf190874407f23d2891b53ffdf7d3c6be8d47ff",
      "tree": "c60ab388e2b19b02fd3bbcef76498a3520f9dcbd",
      "parents": [
        "ab93dbecfba72bbc04b7036343d180aaff1b61a3"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Oct 01 17:10:23 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 17:10:23 2009 -0400"
      },
      "message": "Btrfs: fix data space leak fix\n\nThere is a problem where page_mkwrite can be called on a dirtied page that\nalready has a delalloc range associated with it.  The fix is to clear any\ndelalloc bits for the range we are dirtying so the space accounting gets\nhandled properly.  This is the same thing we do in the normal write case, so we\nare consistent across the board.  With this patch we no longer leak reserved\nspace.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "25472b880c69c0daa485c4f80a6550437ed1149f",
      "tree": "d12bc091e8991513db0d2891111ba773eb5c52e2",
      "parents": [
        "17d857be649a21ca90008c6dc425d849fa83db5c",
        "ab93dbecfba72bbc04b7036343d180aaff1b61a3"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 12:58:13 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Oct 01 12:58:13 2009 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable into for-linus\n"
    },
    {
      "commit": "9ed74f2dba6ebf9f30b80554290bfc73cc3ef083",
      "tree": "763d58a4a11ceca26dcdaedefb1fd662c4e2fa8b",
      "parents": [
        "c65ddb52dc412c9b67681b1aa16cd1bac8434e24"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Fri Sep 11 16:12:44 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 28 16:29:42 2009 -0400"
      },
      "message": "Btrfs: proper -ENOSPC handling\n\nAt the start of a transaction we do a btrfs_reserve_metadata_space() and\nspecify how many items we plan on modifying.  Then once we\u0027ve done our\nmodifications and such, just call btrfs_unreserve_metadata_space() for\nthe same number of items we reserved.\n\nFor keeping track of metadata needed for data I\u0027ve had to add an extent_io op\nfor when we merge extents.  This lets us track space properly when we are doing\nsequential writes, so we don\u0027t end up reserving way more metadata space than\nwhat we need.\n\nThe only place where the metadata space accounting is not done is in the\nrelocation code.  This is because Yan is going to be reworking that code in the\nnear future, so running btrfs-vol -b could still possibly result in a ENOSPC\nrelated panic.  This patch also turns off the metadata_ratio stuff in order to\nallow users to more efficiently use their disk space.\n\nThis patch makes it so we track how much metadata we need for an inode\u0027s\ndelayed allocation extents by tracking how many extents are currently\nwaiting for allocation.  It introduces two new callbacks for the\nextent_io tree\u0027s, merge_extent_hook and split_extent_hook.  These help\nus keep track of when we merge delalloc extents together and split them\nup.  Reservations are handled prior to any actually dirty\u0027ing occurs,\nand then we unreserve after we dirty.\n\nbtrfs_unreserve_metadata_for_delalloc() will make the appropriate\nunreservations as needed based on the number of reservations we\ncurrently have and the number of extents we currently have.  Doing the\nreservation outside of doing any of the actual dirty\u0027ing lets us do\nthings like filemap_flush() the inode to try and force delalloc to\nhappen, or as a last resort actually start allocation on all delalloc\ninodes in the fs.  This has survived dbench, fs_mark and an fsx torture\ntest.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "dc2af6a6bcf3abdf44ac545759a6547dfe12070e",
      "tree": "068ea2c5f5df55f72167ab3b51e001a98b7300e4",
      "parents": [
        "6c5daf012c9155aafd2c7973e4278766c30dfad0",
        "54bcf382daf08c1396edb8b81e650b58930ccaef"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 08:57:29 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 08:57:29 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (42 commits)\n  Btrfs: hash the btree inode during  fill_super\n  Btrfs: relocate file extents in clusters\n  Btrfs: don\u0027t rename file into dummy directory\n  Btrfs: check size of inode backref before adding hardlink\n  Btrfs: fix releasepage to avoid unlocking extents we haven\u0027t locked\n  Btrfs: Fix test_range_bit for whole file extents\n  Btrfs: fix errors handling cached state in set/clear_extent_bit\n  Btrfs: fix early enospc during balancing\n  Btrfs: deal with NULL space info\n  Btrfs: account for space used by the super mirrors\n  Btrfs: fix extent entry threshold calculation\n  Btrfs: remove dead code\n  Btrfs: fix bitmap size tracking\n  Btrfs: don\u0027t keep retrying a block group if we fail to allocate a cluster\n  Btrfs: make balance code choose more wisely when relocating\n  Btrfs: fix arithmetic error in clone ioctl\n  Btrfs: add snapshot/subvolume destroy ioctl\n  Btrfs: change how subvolumes are organized\n  Btrfs: do not reuse objectid of deleted snapshot/subvol\n  Btrfs: speed up snapshot dropping\n  ...\n"
    },
    {
      "commit": "db16826367fefcb0ddb93d76b66adc52eb4e6339",
      "tree": "626224c1eb1eb79c522714591f208b4fdbdcd9d4",
      "parents": [
        "cd6045138ed1bb5d8773e940d51c34318eef3ef2",
        "465fdd97cbe16ef8727221857e96ef62dd352017"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:53:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:53:22 2009 -0700"
      },
      "message": "Merge branch \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6\n\n* \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6: (21 commits)\n  HWPOISON: Enable error_remove_page on btrfs\n  HWPOISON: Add simple debugfs interface to inject hwpoison on arbitary PFNs\n  HWPOISON: Add madvise() based injector for hardware poisoned pages v4\n  HWPOISON: Enable error_remove_page for NFS\n  HWPOISON: Enable .remove_error_page for migration aware file systems\n  HWPOISON: The high level memory error handler in the VM v7\n  HWPOISON: Add PR_MCE_KILL prctl to control early kill behaviour per process\n  HWPOISON: shmem: call set_page_dirty() with locked page\n  HWPOISON: Define a new error_remove_page address space op for async truncation\n  HWPOISON: Add invalidate_inode_page\n  HWPOISON: Refactor truncate to allow direct truncating of page v2\n  HWPOISON: check and isolate corrupted free pages v2\n  HWPOISON: Handle hardware poisoned pages in try_to_unmap\n  HWPOISON: Use bitmask/action code for try_to_unmap behaviour\n  HWPOISON: x86: Add VM_FAULT_HWPOISON handling to x86 page fault handler v2\n  HWPOISON: Add poison check to page fault handling\n  HWPOISON: Add basic support for poisoned pages in fault handler v3\n  HWPOISON: Add new SIGBUS error codes for hardware poison signals\n  HWPOISON: Add support for poison swap entries v2\n  HWPOISON: Export some rmap vma locking to outside world\n  ...\n"
    },
    {
      "commit": "54bcf382daf08c1396edb8b81e650b58930ccaef",
      "tree": "64b941f09489b5c9ee63e4ad43d736bfce911b21",
      "parents": [
        "94a8d5caba74211ec76dac80fc6e2d5c391530df",
        "c65ddb52dc412c9b67681b1aa16cd1bac8434e24"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 10:00:58 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 10:00:58 2009 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable into for-linus\n\nConflicts:\n\tfs/btrfs/super.c\n"
    },
    {
      "commit": "f679a84034be6f7da123be786bbd8838bf3e9207",
      "tree": "4dce1760675978fd0b113e04f9608f57161bac85",
      "parents": [
        "a57195214358b75807a74bad96a8601a36262af7"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Sep 24 09:17:31 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 09:17:31 2009 -0400"
      },
      "message": "Btrfs: don\u0027t rename file into dummy directory\n\nA recent change enforces only one access point to each subvolume. The first\ndirectory entry (the one added when the subvolume/snapshot was created) is\ntreated as valid access point, all other subvolume links are linked to dummy\nempty directories. The dummy directories are temporary inodes that only in\nmemory, so we can not rename file into them.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a57195214358b75807a74bad96a8601a36262af7",
      "tree": "e288410ecfab5f15097bb66f06a5dd6bf99bca08",
      "parents": [
        "11ef160fda9c150cd75db77194bcc66839709662"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Thu Sep 24 09:17:31 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 24 09:17:31 2009 -0400"
      },
      "message": "Btrfs: check size of inode backref before adding hardlink\n\nFor every hardlink in btrfs, there is a corresponding inode back\nreference. All inode back references for hardlinks in a given\ndirectory are stored in single b-tree item. The size of b-tree item\nis limited by the size of b-tree leaf, so we can only create limited\nnumber of hardlinks to a given file in a directory.\n\nThe original code lacks of the check, it oops if the number of\nhardlinks goes over the limit. This patch fixes the issue by adding\ncheck to btrfs_link and btrfs_rename.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6e1d5dcc2bbbe71dbf010c747e15739bef6b7218",
      "tree": "2edb0f6cc65acbae95e42df1bc763ec048e6c2e0",
      "parents": [
        "7f09410bbc4306f592cfb43812389ea1c7905a20"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Sep 21 17:01:11 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:24 2009 -0700"
      },
      "message": "const: mark remaining inode_operations as const\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7f09410bbc4306f592cfb43812389ea1c7905a20",
      "tree": "18f179435f70c4ec9231883501062d5ea0357af5",
      "parents": [
        "ac4cfdd6d141c319a7af8655f750ed504c187a74"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Sep 21 17:01:10 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:24 2009 -0700"
      },
      "message": "const: mark remaining address_space_operations const\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "76dda93c6ae2c1dc3e6cde34569d6aca26b0c918",
      "tree": "f5ca46ec89d4ae2c762952d5f35e2c6f95ac046a",
      "parents": [
        "4df27c4d5cc1dda54ed7d0a8389347f2df359cf9"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 16:00:26 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 16:00:26 2009 -0400"
      },
      "message": "Btrfs: add snapshot/subvolume destroy ioctl\n\nThis patch adds snapshot/subvolume destroy ioctl.  A subvolume that isn\u0027t being\nused and doesn\u0027t contains links to other subvolumes can be destroyed.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4df27c4d5cc1dda54ed7d0a8389347f2df359cf9",
      "tree": "2008f348d28c6c19e31924ae4fb414ca929a01f1",
      "parents": [
        "13a8a7c8c47e542b3cdb45bec3f431f96af79361"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "message": "Btrfs: change how subvolumes are organized\n\nbtrfs allows subvolumes and snapshots anywhere in the directory tree.\nIf we snapshot a subvolume that contains a link to other subvolume\ncalled subvolA, subvolA can be accessed through both the original\nsubvolume and the snapshot. This is similar to creating hard link to\ndirectory, and has the very similar problems.\n\nThe aim of this patch is enforcing there is only one access point to\neach subvolume. Only the first directory entry (the one added when\nthe subvolume/snapshot was created) is treated as valid access point.\nThe first directory entry is distinguished by checking root forward\nreference. If the corresponding root forward reference is missing,\nwe know the entry is not the first one.\n\nThis patch also adds snapshot/subvolume rename support, the code\nallows rename subvolume link across subvolumes.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "13a8a7c8c47e542b3cdb45bec3f431f96af79361",
      "tree": "473f3cc94b4a93a0a5f6f19b1832ef2e6b7ecf62",
      "parents": [
        "1c4850e21df8b441164d910bc611ef46a01d5d75"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 21 15:56:00 2009 -0400"
      },
      "message": "Btrfs: do not reuse objectid of deleted snapshot/subvol\n\nThe new back reference format does not allow reusing objectid of\ndeleted snapshot/subvol. So we use ++highest_objectid to allocate\nobjectid for new snapshot/subvol.\n\nNow we use ++highest_objectid to allocate objectid for both new inode\nand new snapshot/subvolume, so this patch removes \u0027find hole\u0027 code in\nbtrfs_find_free_objectid.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b917b7c3be50435fa8257591b964934e917f2d45",
      "tree": "efdc2f768da474a4904dc6c065cc6e4b9a2379d3",
      "parents": [
        "f85d7d6c8f2ad4a86a1f4f4e3791f36dede2fa76"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 18 16:07:03 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 18 16:08:52 2009 -0400"
      },
      "message": "Btrfs: search for an allocation hint while filling file COW\n\nThe allocator has some nice knobs for sending hints about where\nto try and allocate new blocks, but when we\u0027re doing file allocations\nwe\u0027re not sending any hint at all.\n\nThis commit adds a simple extent map search to see if we can\nquickly and easily find a hint for the allocator.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "465fdd97cbe16ef8727221857e96ef62dd352017",
      "tree": "efeeba1553264f5fc0b140af301d7afa9ce1d6fd",
      "parents": [
        "cae681fc12a824631337906d6ba1dbd498e751a5"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Wed Sep 16 11:50:18 2009 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Sep 16 11:50:18 2009 +0200"
      },
      "message": "HWPOISON: Enable error_remove_page on btrfs\n\nCc: chris.mason@oracle.com\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "83ebade34bc1a90d0c3f77b87b940f336d075fda",
      "tree": "99b6366c52e6bec88119ae995399c985fc61e900",
      "parents": [
        "74fca6a42863ffacaf7ba6f1936a9f228950f657",
        "93c82d575055f1bd0277acae6f966bebafd80dd5"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 19:07:25 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 19:07:25 2009 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n"
    },
    {
      "commit": "93c82d575055f1bd0277acae6f966bebafd80dd5",
      "tree": "4b059485eb226291dac336921b32653131b0dd43",
      "parents": [
        "50a9b214bc6c052caa05a210ebfc1bdf0d7085b2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 12:36:29 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:08 2009 -0400"
      },
      "message": "Btrfs: zero page past end of inline file items\n\nWhen btrfs_get_extent is reading inline file items for readpage,\nit needs to copy the inline extent into the page.  If the\ninline extent doesn\u0027t cover all of the page, that means there\nis a hole in the file, or that our file is smaller than one\npage.\n\nreadpage does zeroing for the case where the file is smaller than one\npage, but nobody is currently zeroing for the case where there is\na hole after the inline item.\n\nThis commit changes btrfs_get_extent to zero fill the page past\nthe end of the inline item.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "50a9b214bc6c052caa05a210ebfc1bdf0d7085b2",
      "tree": "c5ae2e6a99778f237bdc88eb7157f7c4a82a2e54",
      "parents": [
        "a1ed835e1ab5795f91b198d08c43e2f56848dcf3"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 12:33:12 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:08 2009 -0400"
      },
      "message": "Btrfs: fix btrfs page_mkwrite to return locked page\n\nThis closes a whole where the page may be written before\nthe page_mkwrite caller has a chance to dirty it\n\n(thanks to Nick Piggin)\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a1ed835e1ab5795f91b198d08c43e2f56848dcf3",
      "tree": "ac3b370823fa76c5be7698e3663306badbbd622d",
      "parents": [
        "8b62b72b26bcd72082c4a69d179dd906bcc22200"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 12:27:37 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:07 2009 -0400"
      },
      "message": "Btrfs: Fix extent replacment race\n\nData COW means that whenever we write to a file, we replace any old\nextent pointers with new ones.  There was a window where a readpage\nmight find the old extent pointers on disk and cache them in the\nextent_map tree in ram in the middle of a given write replacing them.\n\nEven though both the readpage and the write had their respective bytes\nin the file locked, the extent readpage inserts may cover more bytes than\nit had locked down.\n\nThis commit closes the race by keeping the new extent pinned in the extent\nmap tree until after the on-disk btree is properly setup with the new\nextent pointers.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8b62b72b26bcd72082c4a69d179dd906bcc22200",
      "tree": "ceee20dfebe45654cb3a25d8916c195836cdbabf",
      "parents": [
        "9655d2982b53fdb38a9e0f2f11315b99b92d66e2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Sep 02 16:53:46 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:07 2009 -0400"
      },
      "message": "Btrfs: Use PagePrivate2 to track pages in the data\u003dordered code.\n\nBtrfs writes go through delalloc to the data\u003dordered code.  This\nmakes sure that all of the data is on disk before the metadata\nthat references it.  The tracking means that we have to make sure\neach page in an extent is fully written before we add that extent into\nthe on-disk btree.\n\nThis was done in the past by setting the EXTENT_ORDERED bit for the\nrange of an extent when it was added to the data\u003dordered code, and then\nclearing the EXTENT_ORDERED bit in the extent state tree as each page\nfinished IO.\n\nOne of the reasons we had to do this was because sometimes pages are\nmagically dirtied without page_mkwrite being called.  The EXTENT_ORDERED\nbit is checked at writepage time, and if it isn\u0027t there, our page become\ndirty without going through the proper path.\n\nThese bit operations make for a number of rbtree searches for each page,\nand can cause considerable lock contention.\n\nThis commit switches from the EXTENT_ORDERED bit to use PagePrivate2.\nAs pages go into the ordered code, PagePrivate2 is set on each one.\nThis is a cheap operation because we already have all the pages locked\nand ready to go.\n\nAs IO finishes, the PagePrivate2 bit is cleared and the ordered\naccoutning is updated for each page.\n\nAt writepage time, if the PagePrivate2 bit is missing, we go into the\nwritepage fixup code to handle improperly dirtied pages.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "9655d2982b53fdb38a9e0f2f11315b99b92d66e2",
      "tree": "e1271f2f2a3c2c356e0692b36a2d4742b5d651d8",
      "parents": [
        "d5550c6315fe0647b7ac21a6a736bf4a42620eac"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Sep 02 15:22:30 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:07 2009 -0400"
      },
      "message": "Btrfs: use a cached state for extent state operations during delalloc\n\nThis changes the btrfs code to find delalloc ranges in the extent state\ntree to use the new state caching code from set/test bit.  It reduces\none of the biggest causes of rbtree searches in the writeback path.\n\ntest_range_bit is also modified to take the cached state as a starting\npoint while searching.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2c64c53d8d30d43d0670482503a3914dfd3d6d46",
      "tree": "cfe7bfa8f5dc4078f8c995f305229622e25572b1",
      "parents": [
        "1edbb734b4e010974c41d2859d22a43d04f5f1cf"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Sep 02 15:04:12 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:06 2009 -0400"
      },
      "message": "Btrfs: cache values for locking extents\n\nMany of the btrfs extent state tree users follow the same pattern.\nThey lock an extent range in the tree, do some operation and then\nunlock.\n\nThis translates to at least 2 rbtree searches, and maybe more if they\nare doing operations on the extent state tree.  A locked extent\nin the tree isn\u0027t going to be merged or changed, and so we can\nsafely return the extent state structure as a cached handle.\n\nThis changes set_extent_bit to give back a cached handle, and also\nchanges both set_extent_bit and clear_extent_bit to use the cached\nhandle if it is available.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "890871be854b5f5e43e7ba2475f706209906cc24",
      "tree": "9d087adf7a28bb910992d07d93ea2a992e394110",
      "parents": [
        "57fd5a5ff8b48b99e90b22fc143082aba755c6c0"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Sep 02 16:24:52 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:05 2009 -0400"
      },
      "message": "Btrfs: switch extent_map to a rw lock\n\nThere are two main users of the extent_map tree.  The\nfirst is regular file inodes, where it is evenly spread\nbetween readers and writers.\n\nThe second is the chunk allocation tree, which maps blocks from\nlogical addresses to phyiscal ones, and it is 99.99% reads.\n\nThe mapping tree is a point of lock contention during heavy IO\nworkloads, so this commit switches things to a rw lock.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "03e860bd9f6a3cca747b0795bed26279a8b420a0",
      "tree": "9a6e6fe663bfc5f01edac558433f314657c2eb67",
      "parents": [
        "df4ecf1524c7793de3121b2d4e5fc6bcc0da3bfb"
      ],
      "author": {
        "name": "From: Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Fri Aug 21 10:09:44 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Aug 21 10:09:44 2009 +0200"
      },
      "message": "btrfs: fix inode rbtree corruption\n\nNode may not be inserted over existing node. This causes inode tree\ncorruption and I was seeing crashes in inode_tree_del which I can not\nreproduce after this patch.\n\nThe other way to fix this would be to tie inode lifetime in the rbtree\nwith inode while not in freeing state. I had a look at this but it is\nnot so trivial at this point. At least this patch gets things working again.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nAcked-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "d6a0967c90dced0a8baf502e6f3d5862fd5a5805",
      "tree": "e0242d5077730dabc4102b7abad9ee0c41e33bc0",
      "parents": [
        "fb385003c4ac9634cf2448f6ded81e5fd1190c1f",
        "ceab36edd3d3ad3ffd01d41d6d1e05ac1ff8357e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 07 19:03:09 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 07 19:03:09 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix balancing oops when invalidate_inode_pages2 returns EBUSY\n  Btrfs: correct error-handling zlib error handling\n  Btrfs: remove superfluous NULL pointer check in btrfs_rename()\n  Btrfs: make sure the async caching thread advances the key\n  Btrfs: fix btrfs_remove_from_free_space corner case\n"
    },
    {
      "commit": "4baf8c9201e88546918cbfa61ea8062c38bc1644",
      "tree": "7ea84d6155aa7b4e246df56ea0f79d5b3da08d87",
      "parents": [
        "013f1b12f4fc479f697acae2f31bad220162cd03"
      ],
      "author": {
        "name": "Bartlomiej Zolnierkiewicz",
        "email": "bzolnier@gmail.com",
        "time": "Fri Aug 07 13:47:08 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Aug 07 13:47:08 2009 -0400"
      },
      "message": "Btrfs: remove superfluous NULL pointer check in btrfs_rename()\n\nThis takes care of the following entry from Dan\u0027s list:\n\nfs/btrfs/inode.c +4788 btrfs_rename(36) warning: variable derefenced before check \u0027old_inode\u0027\n\nReported-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nCc: Jonathan Corbet \u003ccorbet@lwn.net\u003e\nCc: Eugene Teo \u003ceteo@redhat.com\u003e\nCc: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Bartlomiej Zolnierkiewicz \u003cbzolnier@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "655c5d8fc110a9d4f90cc831bd009936f3e8df28",
      "tree": "6acb038a6dd8831830d8ae2f5485a4e411d0b579",
      "parents": [
        "ce4adcc6e5320062e0d993eb75152d165aaabbe6",
        "f25784b35f590c81d5fb8245a8cd45e1afb6f1b2"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 28 14:27:06 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 28 14:27:06 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (22 commits)\n  Btrfs: Fix async caching interaction with unmount\n  Btrfs: change how we unpin extents\n  Btrfs: Correct redundant test in add_inode_ref\n  Btrfs: find smallest available device extent during chunk allocation\n  Btrfs: clear all space_info-\u003efull after removing a block group\n  Btrfs: make flushoncommit mount option correctly wait on ordered_extents\n  Btrfs: Avoid delayed reference update looping\n  Btrfs: Fix ordering of key field checks in btrfs_previous_item\n  Btrfs: find_free_dev_extent doesn\u0027t handle holes at the start of the device\n  Btrfs: Remove code duplication in comp_keys\n  Btrfs: async block group caching\n  Btrfs: use hybrid extents+bitmap rb tree for free space\n  Btrfs: Fix crash on read failures at mount\n  Btrfs: remove of redundant btrfs_header_level\n  Btrfs: adjust NULL test\n  Btrfs: Remove broken sanity check from btrfs_rmap_block()\n  Btrfs: convert nested spin_lock_irqsave to spin_lock\n  Btrfs: make sure all dirty blocks are written at commit time\n  Btrfs: fix locking issue in btrfs_find_next_key\n  Btrfs: fix double increment of path-\u003eslots[0] in btrfs_next_leaf\n  ...\n"
    },
    {
      "commit": "33c17ad5717c887568c1de61f15e5d58ed66d189",
      "tree": "9593d6df5dd1a634361770d2cef87ab7c55b49b7",
      "parents": [
        "3acada49c2794c5aac21849e2ea05790c6dd2faa"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Wed Jul 22 16:49:01 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 22 16:49:01 2009 -0400"
      },
      "message": "Btrfs: adjust NULL test\n\nMove the call to BUG_ON to before the dereference of the tested value.\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "405f55712dfe464b3240d7816cc4fe4174831be2",
      "tree": "96c425ea7fa8b31058b8f83a433c5e5265c8ebc7",
      "parents": [
        "f9fabcb58a6d26d6efde842d1703ac7cfa9427b6"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Sat Jul 11 22:08:37 2009 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jul 12 12:22:34 2009 -0700"
      },
      "message": "headers: smp_lock.h redux\n\n* Remove smp_lock.h from files which don\u0027t need it (including some headers!)\n* Add smp_lock.h to files which do need it\n* Make smp_lock.h include conditional in hardirq.h\n  It\u0027s needed only for one kernel_locked() usage which is under CONFIG_PREEMPT\n\n  This will make hardirq.h inclusion cheaper for every PREEMPT\u003dn config\n  (which includes allmodconfig/allyesconfig, BTW)\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5291a12f0503e31e0b8e90ee8e4997d59c1c3aad",
      "tree": "63606ab8991540c5cb963e079be92a05fd829791",
      "parents": [
        "c7cba0623fc17fe766063d492810632366790763",
        "68f5a38c3ea4ae9cc7a40f86ff6d6d031583d93a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 02 16:52:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 02 16:52:38 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: fix error message formatting\n  Btrfs: fix use after free in btrfs_start_workers fail path\n  Btrfs: honor nodatacow/sum mount options for new files\n  Btrfs: update backrefs while dropping snapshot\n  Btrfs: account for space we may use in fallocate\n  Btrfs: fix the file clone ioctl for preallocated extents\n  Btrfs: don\u0027t log the inode in file_write while growing the file\n"
    },
    {
      "commit": "9427216476d4fa75103f39d4b228c47d56ba20da",
      "tree": "a6ed7b28aa778a4f9e0c9326f20215e75eb48d40",
      "parents": [
        "2c47e605a91dde6b0514f689645e7ab336c8592a"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 02 12:26:06 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 02 13:41:17 2009 -0400"
      },
      "message": "Btrfs: honor nodatacow/sum mount options for new files\n\nThe btrfs attr patches unconditionally inherited the inode flags field\nwithout honoring nodatacow and nodatasum.  This fix makes sure\nwe properly record the nodatacow/sum mount options in new inodes.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a970b0a16cc416a509d5ae8b1d70978664e6f4fe",
      "tree": "fa371ca55fd97cd00ddb3b27ba1a784551a469a0",
      "parents": [
        "c8a894d77de4a1e0a544577fd4eabc9aacd453a8"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "jbacik@redhat.com",
        "time": "Sat Jun 27 21:07:34 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 02 13:41:16 2009 -0400"
      },
      "message": "Btrfs: account for space we may use in fallocate\n\nUsing Eric Sandeen\u0027s xfstest for fallocate, you can easily trigger a ENOSPC\npanic on btrfs.  This is because we do not account for data we may use when\ndoing the fallocate.  This patch fixes the problem by properly reserving space,\nand then just freeing it when we are done.  The reservation stuff was made with\ndelalloc in mind, so its a little crude for this case, but it keeps the box\nfrom panicing.\n\nSigned-off-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "72c04902d1e27c8a324014cff1d4475c11b1cecd",
      "tree": "3e93abdd0a3eeedd6df5a1dc43170744f2fa7664",
      "parents": [
        "641cf4a668e9e69d2bc061e953422ff72a91f86e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 24 16:58:48 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 24 16:58:48 2009 -0400"
      },
      "message": "Get \"no acls for this inode\" right, fix shmem breakage\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5affd88a104af43f0063a12ad1ee4c7a587945dc",
      "tree": "95c727eac8669bd346f937b8be2d58ef716a2fe5",
      "parents": [
        "290c263bf83cd78e53b1aa3b42165f588163f2be"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 08 19:55:32 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 24 08:17:05 2009 -0400"
      },
      "message": "switch btrfs to inode-\u003ei_acl\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "59d697b70285c348c01cfc2695c3469ba71d7539",
      "tree": "e383e5a2c0fc6196bed269aac032d3e363e9c4f7",
      "parents": [
        "c3f8a40c1cd5591b882497d1d00d43d0e5bb4698"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 27 09:46:41 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:05 2009 -0400"
      },
      "message": "btrfs: remove -\u003ewrite_super and stop maintaining -\u003es_dirt\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6cbff00f4632c8060b06bfc9585805217f11e12e",
      "tree": "1886c4c855662172b84be2bfbd2aa5ac6a5c429d",
      "parents": [
        "c289811cc096c57ff35550ee8132793a4f9b5b59"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Apr 17 10:37:41 2009 +0200"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 10 11:29:52 2009 -0400"
      },
      "message": "Btrfs: implement FS_IOC_GETFLAGS/SETFLAGS/GETVERSION\n\nAdd support for the standard attributes set via chattr and read via\nlsattr.  Currently we store the attributes in the flags value in\nthe btrfs inode, but I wonder whether we should split it into two so\nthat we don\u0027t have to keep converting between the two formats.\n\nRemove the btrfs_clear_flag/btrfs_set_flag/btrfs_test_flag macros\nas they were confusing the existing code and got in the way of the\nnew additions.\n\nAlso add the FS_IOC_GETVERSION ioctl for getting i_generation as it\u0027s\ntrivial.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5d4f98a28c7d334091c1b7744f48a1acdd2a4ae0",
      "tree": "c611d7d824cbcdb777dd2d8e33e2ed1c5df8a9c6",
      "parents": [
        "5c939df56c3ea018b58e5aa76181284c2053d699"
      ],
      "author": {
        "name": "Yan Zheng",
        "email": "zheng.yan@oracle.com",
        "time": "Wed Jun 10 10:45:14 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 10 11:29:46 2009 -0400"
      },
      "message": "Btrfs: Mixed back reference  (FORWARD ROLLING FORMAT CHANGE)\n\nThis commit introduces a new kind of back reference for btrfs metadata.\nOnce a filesystem has been mounted with this commit, IT WILL NO LONGER\nBE MOUNTABLE BY OLDER KERNELS.\n\nWhen a tree block in subvolume tree is cow\u0027d, the reference counts of all\nextents it points to are increased by one.  At transaction commit time,\nthe old root of the subvolume is recorded in a \"dead root\" data structure,\nand the btree it points to is later walked, dropping reference counts\nand freeing any blocks where the reference count goes to 0.\n\nThe increments done during cow and decrements done after commit cancel out,\nand the walk is a very expensive way to go about freeing the blocks that\nare no longer referenced by the new btree root.  This commit reduces the\ntransaction overhead by avoiding the need for dead root records.\n\nWhen a non-shared tree block is cow\u0027d, we free the old block at once, and the\nnew block inherits old block\u0027s references. When a tree block with reference\ncount \u003e 1 is cow\u0027d, we increase the reference counts of all extents\nthe new block points to by one, and decrease the old block\u0027s reference count by\none.\n\nThis dead tree avoidance code removes the need to modify the reference\ncounts of lower level extents when a non-shared tree block is cow\u0027d.\nBut we still need to update back ref for all pointers in the block.\nThis is because the location of the block is recorded in the back ref\nitem.\n\nWe can solve this by introducing a new type of back ref. The new\nback ref provides information about pointer\u0027s key, level and in which\ntree the pointer lives. This information allow us to find the pointer\nby searching the tree. The shortcoming of the new back ref is that it\nonly works for pointers in tree blocks referenced by their owner trees.\n\nThis is mostly a problem for snapshots, where resolving one of these\nfuzzy back references would be O(number_of_snapshots) and quite slow.\nThe solution used here is to use the fuzzy back references in the common\ncase where a given tree block is only referenced by one root,\nand use the full back references when multiple roots have a reference\non a given block.\n\nThis commit adds per subvolume red-black tree to keep trace of cached\ninodes. The red-black tree helps the balancing code to find cached\ninodes whose inode numbers within a given range.\n\nThis commit improves the balancing code by introducing several data\nstructures to keep the state of balancing. The most important one\nis the back ref cache. It caches how the upper level tree blocks are\nreferenced. This greatly reduce the overhead of checking back ref.\n\nThe improved balancing code scales significantly better with a large\nnumber of snapshots.\n\nThis is a very large commit and was written in a number of\npieces.  But, they depend heavily on the disk format change and were\nsquashed together to make sure git bisect didn\u0027t end up in a\nbad state wrt space balancing or the format change.\n\nSigned-off-by: Yan Zheng \u003czheng.yan@oracle.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "cc7b0c9b701a079016183f3546b4d720194b367f",
      "tree": "a68f31ebb251158dd977c84f33a35a38728fe8aa",
      "parents": [
        "76a05b35a320e8c968d0fec8f512a1acae227309"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 13:31:21 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:33 2009 -0400"
      },
      "message": "Btrfs: remove some WARN_ONs in the IO failure path\n\nThese debugging WARN_ONs make too much console noise during regular\nIO failures.  An IO failure will still generate a number of messages\nas we verify checksums etc, but these two are not needed.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2757495c906113896b378bf084708846273c87b2",
      "tree": "883ae5bc6acd77cc9d1ce0932757827506664341",
      "parents": [
        "46a53cca826e71effe59e3cb4f383622c33ebdcb"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 13:10:02 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu May 14 14:00:31 2009 -0400"
      },
      "message": "Btrfs: init inode ordered_data_close flag properly\n\nThis flag is used to decide when we need to send a given file through\nthe ordered code to make sure it is fully written before a transaction\ncommits.  It was not being properly set to zero when the inode was\nbeing setup.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "06d9a8d7c24fe22836bf0b0f82db59d6f98e271e",
      "tree": "b6cc453c21c2cb38f8a4b10401bec8652c75a83f",
      "parents": [
        "f03d9301f15fb69cdf1eb59d53c9fb72f68ecccc"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:30:58 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:30:58 2009 -0500"
      },
      "message": "Btrfs: Change btrfs_truncate_inode_items to stop when it hits the inode\n\nbtrfs_truncate_inode_items is setup to stop doing btree searches when\nit has finished removing the items for the inode.  It used to detect the\nend of the inode by looking for an objectid that didn\u0027t match the\none we were searching for.\n\nBut, this would result in an extra search through the btree, which\nadds extra balancing and cow costs to the operation.\n\nThis commit adds a check to see if we found the inode item, which means\nwe can stop searching early.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "f03d9301f15fb69cdf1eb59d53c9fb72f68ecccc",
      "tree": "2299a89d213e9fa5f616a5bb0b2125a3c632da97",
      "parents": [
        "811449496b3e3caa9a8cf43feacbade0153324f2"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:31:06 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:31:06 2009 -0500"
      },
      "message": "Btrfs: Don\u0027t try to compress pages past i_size\n\nThe compression code had some checks to make sure we were only\ncompressing bytes inside of i_size, but it wasn\u0027t catching every\ncase.  To make things worse, some incorrect math about the number\nof bytes remaining would make it try to compress more pages than the\nfile really had.\n\nThe fix used here is to fall back to the non-compression code in this\ncase, which does all the proper cleanup of delalloc and other accounting.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8c087b5183adab186a298f2d6ed39aefdcae413c",
      "tree": "ee0ee85c27516f24d4456efed5f8561ee34b82f0",
      "parents": [
        "bd56b30205bc09da0beb80d4ba3d4c7309792da5"
      ],
      "author": {
        "name": "Chris Ball",
        "email": "cjb@laptop.org",
        "time": "Wed Feb 04 09:29:54 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:29:54 2009 -0500"
      },
      "message": "Btrfs: Handle SGID bit when creating inodes\nBefore this patch, new files/dirs would ignore the SGID bit on their\nparent directory and always be owned by the creating user\u0027s uid/gid.\n\nSigned-off-by: Chris Ball \u003ccjb@laptop.org\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n\n"
    },
    {
      "commit": "bd56b30205bc09da0beb80d4ba3d4c7309792da5",
      "tree": "a5cb3104687b27e923b73b2840f053abc1229a92",
      "parents": [
        "b4ce94de9b4d64e8ab3cf155d13653c666e22b9b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:27:02 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:27:02 2009 -0500"
      },
      "message": "Btrfs: Make btrfs_drop_snapshot work in larger and more efficient chunks\n\nEvery transaction in btrfs creates a new snapshot, and then schedules the\nsnapshot from the last transaction for deletion.  Snapshot deletion\nworks by walking down the btree and dropping the reference counts\non each btree block during the walk.\n\nIf if a given leaf or node has a reference count greater than one,\nthe reference count is decremented and the subtree pointed to by that\nnode is ignored.\n\nIf the reference count is one, walking continues down into that node\nor leaf, and the references of everything it points to are decremented.\n\nThe old code would try to work in small pieces, walking down the tree\nuntil it found the lowest leaf or node to free and then returning.  This\nwas very friendly to the rest of the FS because it didn\u0027t have a huge\nimpact on other operations.\n\nBut it wouldn\u0027t always keep up with the rate that new commits added new\nsnapshots for deletion, and it wasn\u0027t very optimal for the extent\nallocation tree because it wasn\u0027t finding leaves that were close together\non disk and processing them at the same time.\n\nThis changes things to walk down to a level 1 node and then process it\nin bulk.  All the leaf pointers are sorted and the leaves are dropped\nin order based on their extent number.\n\nThe extent allocation tree and commit code are now fast enough for\nthis kind of bulk processing to work without slowing the rest of the FS\ndown.  Overall it does less IO and is better able to keep up with\nsnapshot deletions under high load.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    }
  ],
  "next": "b4ce94de9b4d64e8ab3cf155d13653c666e22b9b"
}
