)]}'
{
  "log": [
    {
      "commit": "4498f4779f0495dbe4491bb005cf095d8ba73f0e",
      "tree": "4991892c4253020ddf43243aada6242c73872363",
      "parents": [
        "8d122fe6156d38206d3e84999a9a87f52dbe9447"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Mon Mar 02 13:14:13 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Mon Mar 02 13:14:13 2020 -0500"
      },
      "message": "btrfs: remove a BUG_ON() from merge_reloc_roots()\n\nThis was pretty subtle, we default to reloc roots having 0 root refs, so\nif we crash in the middle of the relocation they can just be deleted.\nIf we successfully complete the relocation operations we\u0027ll set our root\nrefs to 1 in prepare_to_merge() and then go on to merge_reloc_roots().\n\nAt prepare_to_merge() time if any of the reloc roots have a 0 reference\nstill, we will remove that reloc root from our reloc root rb tree, and\nthen clean it up later.\n\nHowever this only happens if we successfully start a transaction.  If\nwe\u0027ve aborted previously we will skip this step completely, and only\nhave reloc roots with a reference count of 0, but were never properly\nremoved from the reloc control\u0027s rb tree.\n\nThis isn\u0027t a problem per-se, our references are held by the list the\nreloc roots are on, and by the original root the reloc root belongs to.\nIf we end up in this situation all the reloc roots will be added to the\ndirty_reloc_list, and then properly dropped at that point.  The reloc\ncontrol will be free\u0027d and the rb tree is no longer used.\n\nThere were two options when fixing this, one was to remove the BUG_ON(),\nthe other was to make prepare_to_merge() handle the case where we\ncouldn\u0027t start a trans handle.\n\nIMO this is the cleaner solution.  I started with handling the error in\nprepare_to_merge(), but it turned out super ugly.  And in the end this\nBUG_ON() simply doesn\u0027t matter, the cleanup was happening properly, we\nwere just panicing because this BUG_ON() only matters in the success\ncase.  So I\u0027ve opted to just remove it and add a comment where it was.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "8d122fe6156d38206d3e84999a9a87f52dbe9447",
      "tree": "7debb9861af8091fd45822a61cb23e29717b62b8",
      "parents": [
        "7b272d42d201d1b60392badf94e4f258adaf72b5"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Feb 27 16:35:20 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 28 16:47:13 2020 -0500"
      },
      "message": "btrfs: hold a ref on the root-\u003ereloc_root\n\nWe previously were relying on root-\u003ereloc_root to be cleaned up by the\ndrop snapshot, or the error handling.  However if btrfs_drop_snapshot()\nfailed it wouldn\u0027t drop the ref for the root.  Also we sort of depend on\nthe right thing to happen with moving reloc roots between lists and the\nfs root they belong to, which makes it hard to figure out who owns the\nreference.\n\nFix this by explicitly holding a reference on the reloc root for\nroo-\u003ereloc_root.  This means that we hold two references on reloc roots,\none for whichever reloc_roots list it\u0027s attached to, and the\nroot-\u003ereloc_root we\u0027re on.\n\nThis makes it easier to reason out who owns a reference on the root, and\nwhen it needs to be dropped.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "7b272d42d201d1b60392badf94e4f258adaf72b5",
      "tree": "7debfd5fd747e8550d9a26b61d19de81026d9a9d",
      "parents": [
        "4202997339f8dda55ed2250d4f985de5384c10b0"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 28 14:26:44 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 28 16:47:13 2020 -0500"
      },
      "message": "btrfs: clear BTRFS_ROOT_DEAD_RELOC_TREE before dropping the reloc root\n\nWe were doing the clear dance for the reloc root after doing the drop of\nthe reloc root, which means we have a giant window where we could miss\nhaving BTRFS_ROOT_DEAD_RELOC_TREE unset and the reloc_root \u003d\u003d NULL.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "4202997339f8dda55ed2250d4f985de5384c10b0",
      "tree": "dc2c5d5aa230225284c2d61418efeab7858a587a",
      "parents": [
        "1e2d2400f3b5322e23ef819913ba79fef9dde7da"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 28 15:00:59 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 28 16:46:00 2020 -0500"
      },
      "message": "btrfs: run clean_dirty_subvols if we fail to start a trans\n\nIf we do merge_reloc_roots() we could insert a few roots onto the dirty\nsubvol roots list, where we hold a ref on them.  If we fail to start the\ntransaction we need to run clean_dirty_subvols() in order to cleanup the\nrefs.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "1e2d2400f3b5322e23ef819913ba79fef9dde7da",
      "tree": "6d32e4e0d20a50f1c7ae51bd381e8632061814b7",
      "parents": [
        "bfacd1b8bf312264bd511d58f7dd980734bcf9b0"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 28 14:59:22 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 28 14:59:22 2020 -0500"
      },
      "message": "btrfs: splice rc-\u003ereloc_roots onto reloc roots in recover\n\nIf we have an error while processing the reloc roots we could leak roots\nthat were added to rc-\u003ereloc_roots before we hit the error.  Handle this\nby splicing rc-\u003ereloc_roots onto our local reloc_roots list so they are\nproperly cleaned up.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "bfacd1b8bf312264bd511d58f7dd980734bcf9b0",
      "tree": "4a469e0f744aff3f13ead77f57769293fa4868af",
      "parents": [
        "1bfc23d8eae41161821513a48703ed38d6fd0cff"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 28 14:30:21 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 28 14:30:21 2020 -0500"
      },
      "message": "btrfs: unset reloc control if we fail to recover\n\nIf we fail to load an fs root, or fail to start a transaction we can\nbail without unsetting the reloc control, which leads to problems later\nwhen we free the reloc control but still have it attached to the file\nsystem.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "1bfc23d8eae41161821513a48703ed38d6fd0cff",
      "tree": "29315e85625eb2759a77b5b0deae38d8346286f8",
      "parents": [
        "161c59d18c69947d6feac7181c5bccb7e5d2dc27"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Feb 27 16:12:46 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Feb 27 16:12:46 2020 -0500"
      },
      "message": "btrfs: drop block from cache on error in relocation\n\nIf we have an error while building the backref tree in relocation we\u0027ll\nprocess all the pending edges and then free the node.  This isn\u0027t quite\nright however as the node could be integrated into the existing cache\npartially, linking children within itself into the cache, but not\nproperly linked into the cache itself.  The fix for this is simple, use\nremove_backref_node() instead of free_backref_node(), which will clean\nup the cache related to this node completely.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "161c59d18c69947d6feac7181c5bccb7e5d2dc27",
      "tree": "1d2ae6b60152e23937c4dd8b44d9a86c8e349458",
      "parents": [
        "fe9a530d24d0ee380fd199e97ba0f9e8d25a98c8"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Feb 27 10:04:49 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Feb 27 10:04:49 2020 -0500"
      },
      "message": "btrfs: set root to null in btrfs_search_path_in_tree_user\n\nWe could potentially have root uninitialized in some cases, so this will\ncause problems with btrfs_put_root.\n\nReported-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "fe9a530d24d0ee380fd199e97ba0f9e8d25a98c8",
      "tree": "1c6a82068af4890f9d70eabd7cbacd1c84d935a7",
      "parents": [
        "0e0a9c23836a3f75da5675d3afa94b568257737d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 21 16:37:13 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 21 16:37:13 2020 -0500"
      },
      "message": "btrfs: fix btrfs_calc_reclaim_metadata_size calculation\n\nI noticed while running my snapshot torture test that we were getting a\nlot of metadata chunks allocated with very little actually used.\nDigging into this we would commit the transaction, still not have enough\nspace, and then force a chunk allocation.\n\nI noticed that we were barely flushing any delalloc at all, despite the\nfact that we had around 13gib of outstanding delalloc reservations.  It\nturns out this is because of our btrfs_calc_reclaim_metadata_size()\ncalculation.  It _only_ takes into account the outstanding ticket sizes,\nwhich isn\u0027t the whole story.  In this particular workload we\u0027re slowly\nfilling up the disk, which means our overcommit space will suddenly\nbecome a lot less, and our outstanding reservations will be well more\nthan what we can handle.  However we are only flushing based on our\nticket size, which is much less than we need to actually reclaim.\n\nSo fix btrfs_calc_reclaim_metadata_size() to take into account the\noverage in the case that we\u0027ve gotten less available space suddenly.\nThis makes it so we attempt to reclaim a lot more delalloc space, which\nallows us to make our reservations and we no longer are allocating a\nbunch of needless metadata chunks.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "0e0a9c23836a3f75da5675d3afa94b568257737d",
      "tree": "d17c233939e2fad6a5a16f9023f36b90b22538cb",
      "parents": [
        "750c8f82e75720d697a114fb1b4dca7a178e53b8"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Feb 20 09:21:11 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Feb 20 09:21:11 2020 -0500"
      },
      "message": "btrfs: clear file extent mapping for punch past i_size\n\nIn my stress testing we were still seeing some hole\u0027s with my patches to\nfix missing hole extents.  Turns out we do not fill in holes during hole\npunch if the punch is past i_size.  I incorrectly assumed this was fine,\nbecause anybody extending would use btrfs_cont_expand, however there is\na corner that still can give us trouble.  Start with an empty file and\n\nfallocate KEEP_SIZE 1m-2m\n\nWe now have a 0 length file, and a hole file extent from 0-1m, and a\nprealloc extent from 1m-2m.  Now\n\npunch 1m-1.5m\n\nBecause this is past i_size we have\n\n[HOLE EXTENT][ NOTHING ][PREALLOC]\n[0        1m][1m   1.5m][1.5m  2m]\n\nwith an i_size of 0.  Now if we pwrite 0-1.5m we\u0027ll increas our i_size\nto 1.5m, but our disk_i_size is still 0 until the ordered extent\ncompletes.\n\nHowever if we now immediately truncate 2m on the file we\u0027ll just call\nbtrfs_cont_expand(inode, 1.5m, 2m), since our old i_size is 1.5m.  If we\ncommit the transaction here and crash we\u0027ll expose the gap.\n\nTo fix this we need to clear the file extent mapping for the range that\nwe punched but didn\u0027t insert a corresponding file extent for.  This will\nmean the truncate will only get an disk_i_size set to 1m if we crash\nbefore the finish ordered io happens.\n\nI\u0027ve written an xfstest to reproduce the problem and validate this fix.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "750c8f82e75720d697a114fb1b4dca7a178e53b8",
      "tree": "4ff472608a164f116261d9597c51b786dd061bad",
      "parents": [
        "55aaa556e8f6a69064b17ca9abc02d52c48d5638"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 15:15:37 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 15:21:51 2020 -0500"
      },
      "message": "btrfs: set update the uuid generation as soon as possible\n\nIn my EIO stress testing I noticed I was getting forced to rescan the\nuuid tree pretty often, which was weird.  This is because my error\ninjection stuff would sometimes inject an error after log replay but\nbefore we loaded the UUID tree.  If log replay committed the transaction\nit wouldn\u0027t have updated the uuid tree generation, but the tree was\nvalid and didn\u0027t change, so there\u0027s no reason to not update the\ngeneration here.\n\nFix this by setting the BTRFS_FS_UPDATE_UUID_TREE_GEN bit immediately\nafter reading all the fs roots if the uuid tree generation matches the\nfs generation.  Then any transaction commits that happen during mount\nwon\u0027t screw up our uuid tree state, forcing us to do needless uuid\nrescans.\n\nFixes: 70f801754728 (\"Btrfs: check UUID tree during mount if required\")\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "55aaa556e8f6a69064b17ca9abc02d52c48d5638",
      "tree": "52a1fd9f48feb7124858172da25570574943c6e1",
      "parents": [
        "03e6ada7b55eefbf3fbdf3999c9db2bb79318963"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 15:02:56 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 15:02:56 2020 -0500"
      },
      "message": "btrfs: bail out of uuid tree scanning if we\u0027re closing\n\nIn doing my fsstress+EIO stress testing I started running into issues\nwhere umount would get stuck forever because the uuid checker was\nchewing through the thousands of subvolumes I had created.  We shouldn\u0027t\nblock umount on this, simply bail if we\u0027re unmounting the fs.  We need\nto make sure we don\u0027t mark the UUID tree as ok, so we only set that bit\nif we made it through the whole rescan operation, but otherwise this is\ncompletely safe.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "03e6ada7b55eefbf3fbdf3999c9db2bb79318963",
      "tree": "39621f9a89a6b8a440558525f6bdbd2f35a15726",
      "parents": [
        "f4e9928c71520a1e01b725410d07344c57c3e23d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Wed Feb 12 10:16:07 2020 -0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:08 2020 -0500"
      },
      "message": "btrfs: add a find_contiguous_extent_bit helper and use it for safe isize\n\nFilipe noticed a race where we would sometimes get the wrong answer for\nthe i_disk_size for !NO_HOLES with my patch.  That is because I expected\nthat find_first_extent_bit() would find the contiguous range, since I\u0027m\nonly ever setting EXTENT_DIRTY.  However the way set_extent_bit() works\nis it\u0027ll temporarily split the range, loop around and set our bits, and\nthen merge the state.  When it loops it drops the tree-\u003elock, so there\nis a window where we can have two adjacent states instead of one large\nstate.  Fix this by walking forward until we find a non-contiguous\nstate, and set our end_ret to the end of our logically contiguous area.\nThis fixes the problem without relying on specific behavior from\nset_extent_bit().\n\nFixes: 79ceff7f6e5d (\"btrfs: introduce per-inode file extent tree\")\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "f4e9928c71520a1e01b725410d07344c57c3e23d",
      "tree": "3e162fe68805da09de4d0847a488b798a60659f3",
      "parents": [
        "21c357b63c771859326b581559994c5b489e0ebc"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Feb 11 16:40:42 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:08 2020 -0500"
      },
      "message": "btrfs: fix bytes_may_use underflow in prealloc error condtition\n\nI hit the following warning while running my error injection stress testing\n\n------------[ cut here ]------------\nWARNING: CPU: 3 PID: 1453 at fs/btrfs/space-info.h:108 btrfs_free_reserved_data_space_noquota+0xfd/0x160 [btrfs]\nRIP: 0010:btrfs_free_reserved_data_space_noquota+0xfd/0x160 [btrfs]\nCall Trace:\nbtrfs_free_reserved_data_space+0x4f/0x70 [btrfs]\n__btrfs_prealloc_file_range+0x378/0x470 [btrfs]\nelfcorehdr_read+0x40/0x40\n? elfcorehdr_read+0x40/0x40\n? btrfs_commit_transaction+0xca/0xa50 [btrfs]\n? dput+0xb4/0x2a0\n? btrfs_log_dentry_safe+0x55/0x70 [btrfs]\n? btrfs_sync_file+0x30e/0x420 [btrfs]\n? do_fsync+0x38/0x70\n? __x64_sys_fdatasync+0x13/0x20\n? do_syscall_64+0x5b/0x1b0\n? entry_SYSCALL_64_after_hwframe+0x44/0xa9\n---[ end trace 70ccb5d0fe51151c ]---\n\nThis happens if we fail to insert our reserved file extent.  At this\npoint we\u0027ve already converted our reservation from -\u003ebytes_may_use to\n-\u003ebytes_reserved.  However once we break we will attempt to free\neverything from [cur_offset, end] from -\u003ebytes_may_use, but our extent\nreservation will overlap part of this.\n\nFix this problem by adding ins.offset (our extent allocation size) to\ncur_offset so we remove the actual remaining part from -\u003ebytes_may_use.\n\nI validated this fix using my inject-error.py script\n\npython inject-error.py -o should_fail_bio -t cache_save_setup -t \\\n\t__btrfs_prealloc_file_range \\\n\t-t insert_reserved_file_extent.constprop.0 \\\n\t-r \"-5\" ./run-fsstress.sh\n\nwhere run-fsstress.sh simply mounts and runs fsstress on a disk.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "21c357b63c771859326b581559994c5b489e0ebc",
      "tree": "6c9fd79c96bd441d98d99f06ed6a814460ce4f23",
      "parents": [
        "c4088b475f0ebc656c7bf5718011c98ef329bbb4"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Feb 11 16:40:41 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:08 2020 -0500"
      },
      "message": "btrfs: handle logged extent failure properly\n\nIf we\u0027re allocating a logged extent we attempt to insert an extent\nrecord for the file extent directly.  We increase\nspace_info-\u003ebytes_reserved, because the extent entry addition will call\nbtrfs_update_block_group(), which will convert the -\u003ebytes_reserved to\n-\u003ebytes_used.  However if we fail at any point while inserting the\nextent entry we will bail and leave space on -\u003ebytes_reserved, which\nwill trigger a WARN_ON() on umount.  Fix this by pinning the space if we\nfail to insert, which is what happens in every other failure case that\ninvolves adding the extent entry.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "c4088b475f0ebc656c7bf5718011c98ef329bbb4",
      "tree": "be68ead5dcf0f41ef31268dbe5356d66f4f00ef2",
      "parents": [
        "0f97c17b7082e5cb02a89036a0e679931443cb6d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Feb 11 16:40:40 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:08 2020 -0500"
      },
      "message": "btrfs: do not check delayed items are empty for single trans cleanup\n\nbtrfs_assert_delayed_root_empty() will check if the delayed root is\ncompletely empty, but this is a fs wide check.  On cleanup we may have\nallowed other transactions to begin, for whatever reason, and thus the\ndelayed root is not empty.  So remove this check from\ncleanup_one_transation().  This however can stay in\nbtrfs_cleanup_transaction(), because it checks only after all of the\ntransactions have been properly cleaned up, and thus is valid.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "0f97c17b7082e5cb02a89036a0e679931443cb6d",
      "tree": "90b6a1826e04641dbb19cd896001cccfe9f66abe",
      "parents": [
        "43ca3fed6aae44321e78494f1d4e08a0adfdee11"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Feb 11 16:40:39 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:08 2020 -0500"
      },
      "message": "btrfs: set fs_root \u003d NULL on error\n\nWhile running my error injection script I hit a panic when we tried to\nclean up the fs_root when free\u0027ing the fs_root.  This is because\nfs_info-\u003efs_root \u003d\u003d PTR_ERR(-EIO), which isn\u0027t great.  Fix this by\nsetting fs_info-\u003efs_root \u003d NULL; if we fail to read the root.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "43ca3fed6aae44321e78494f1d4e08a0adfdee11",
      "tree": "a059967ab676bedb878ad69e23c9488f44b0124f",
      "parents": [
        "0819ee425a9276362d384e24e634c67b187f4e92"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Mon Feb 03 14:10:32 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:08 2020 -0500"
      },
      "message": "btrfs: add a comment explaining the data flush steps\n\nThe data flushing steps are not obvious to people other than myself and\nChris.  Write a giant comment explaining the reasoning behind each flush\nstep for data as well as why it is in that particular order.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "0819ee425a9276362d384e24e634c67b187f4e92",
      "tree": "24f7220c1a4515a13591ce34081b86291458dd15",
      "parents": [
        "c3f0207fff2b98d3d393b0bcacff32d5d661893a"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Wed Jan 29 17:43:00 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:07 2020 -0500"
      },
      "message": "btrfs: do async reclaim for data reservations\n\nNow that we have the data ticketing stuff in place, move normal data\nreservations to use an async reclaim helper to satisfy tickets.  Before\nwe could have multiple tasks race in and both allocate chunks, resulting\nin more data chunks than we would necessarily need.  Serializing these\nallocations and making a single thread responsible for flushing will\nonly allocate chunks as needed, as well as cut down on transaction\ncommits and other flush related activities.\n\nPriority reservations will still work as they have before, simply\ntrying to allocate a chunk until they can make their reservation.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "c3f0207fff2b98d3d393b0bcacff32d5d661893a",
      "tree": "7c49b863d35d41ef1ce4f62d174c0b53cf14fec0",
      "parents": [
        "fe7d0b1e3db7ecce4b6c94203495738032d78a3f"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Wed Jan 29 12:02:27 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:07 2020 -0500"
      },
      "message": "btrfs: flush delayed refs when trying to reserve data space\n\nWe can end up with free\u0027d extents in the delayed refs, and thus\nmay_commit_transaction() may not think we have enough pinned space to\ncommit the transaction and we\u0027ll ENOSPC early.  Handle this by running\nthe delayed refs in order to make sure pinned is uptodate before we try\nto commit the transaction.\n\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "fe7d0b1e3db7ecce4b6c94203495738032d78a3f",
      "tree": "6abbde870ae80f4ec3a857109f19b9000974d0f2",
      "parents": [
        "fd504c45fac318f8aae2b21de0b229e328b1c3ed"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 16:00:23 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:07 2020 -0500"
      },
      "message": "btrfs: run delayed iputs before committing the transaction for data\n\nBefore we were waiting on iputs after we committed the transaction, but\nthis doesn\u0027t really make much sense.  We want to reclaim any space we\nmay have in order to be more likely to commit the transaction, due to\npinned space being added by running the delayed iputs.  Fix this by\nmaking delayed iputs run before committing the transaction.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "fd504c45fac318f8aae2b21de0b229e328b1c3ed",
      "tree": "124222bc16db9a589ce1c6a3c1a0f9a36d01c229",
      "parents": [
        "46dfd9151ac07b01d73230492eba6954eb66c3ae"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 31 17:15:34 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:07 2020 -0500"
      },
      "message": "btrfs: don\u0027t force commit if we are data\n\nWe used to unconditionally commit the transaction at least 2 times and\nthen on the 3rd try check against pinned space to make sure committing\nthe transaction was worth the effort.  This is overkill, we know nobody\nis going to steal our reservation, and if we can\u0027t make our reservation\nwith the pinned amount simply bail out.\n\nThis also cleans up the passing of bytes_needed to\nmay_commit_transaction, as that was the thing we added into place in\norder to accomplish this behavior.  We no longer need it so remove that\nmess.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "46dfd9151ac07b01d73230492eba6954eb66c3ae",
      "tree": "208cd2ef8c4a1de23801b93f89541d5da301fd84",
      "parents": [
        "684512afd559694a35e8be67fb3a2ab894285b2d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 16:09:00 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:07 2020 -0500"
      },
      "message": "btrfs: drop the commit_cycles stuff for data reservations\n\nThis was an old wart left over from how we previously did data\nreservations.  Before we could have people race in and take a\nreservation while we were flushing space, so we needed to make sure we\nlooped a few times before giving up.  Now that we\u0027re using the ticketing\ninfrastructure we don\u0027t have to worry about this and can drop the logic\naltogether.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "684512afd559694a35e8be67fb3a2ab894285b2d",
      "tree": "f2ae94ba34619d721870b1b67355f4bbb3c6da2b",
      "parents": [
        "986efba8a940182eb678ac33e998e3466add569e"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 16:18:17 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:07 2020 -0500"
      },
      "message": "btrfs: use the same helper for data and metadata reservations\n\nNow that data reservations follow the same pattern as metadata\nreservations we can simply rename __reserve_metadata_bytes to\n__reserve_bytes and use that helper for data reservations.\n\nThings to keep in mind, btrfs_can_overcommit() returns 0 for data,\nbecause we can never overcommit.  We also will never pass in FLUSH_ALL\nfor data, so we\u0027ll simply be added to the priority list and go straight\ninto handle_reserve_ticket.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "986efba8a940182eb678ac33e998e3466add569e",
      "tree": "0f91409019e2749b6de7ed0383ee8a9d71c3f22b",
      "parents": [
        "3a93ec98764def116148faf4a6d6640fb81f9489"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 16:04:45 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:07 2020 -0500"
      },
      "message": "btrfs: serialize data reservations if we are flushing\n\nNikolay reported a problem where generic/371 would fail sometimes with a\nslow drive.  The gist of the test is that we fallocate a file in\nparallel with a pwrite of a different file.  These two files combined\nare smaller than the file system, but sometimes the pwrite would ENOSPC.\n\nA fair bit of investigation uncovered the fact that the fallocate\nworkload was racing in and grabbing the free space that the pwrite\nworkload was trying to free up so it could make its own reservation.\nAfter a few loops of this eventually the pwrite workload would error out\nwith an ENOSPC.\n\nWe\u0027ve had the same problem with metadata as well, and we serialized all\nmetadata allocations to satisfy this problem.  This wasn\u0027t usually a\nproblem with data because data reservations are more straightforward,\nbut obviously could still happen.\n\nFix this by not allowing reservations to occur if there are any pending\ntickets waiting to be satisfied on the space info.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "3a93ec98764def116148faf4a6d6640fb81f9489",
      "tree": "d53d2e7a908ec1ad5366b0a25ef5be94e2ca28c0",
      "parents": [
        "144a229c2fc04f95e8fd277e657de2b830484e3b"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 15:59:03 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:06 2020 -0500"
      },
      "message": "btrfs: use ticketing for data space reservations\n\nNow that we have all the infrastructure in place, use the ticketing\ninfrastructure to make data allocations.  This still maintains the exact\nsame flushing behavior, but now we\u0027re using tickets to get our\nreservations satisfied.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "144a229c2fc04f95e8fd277e657de2b830484e3b",
      "tree": "618f3bd27e55c703d444beaae95b4eee2d962a4b",
      "parents": [
        "014a86d488112ed3f38d47c3db68be1af0a2db2d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 14:02:12 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:06 2020 -0500"
      },
      "message": "btrfs: add btrfs_reserve_data_bytes and use it\n\nCreate a new function btrfs_reserve_data_bytes() in order to handle data\nreservations.  This uses the new flush types and flush states to handle\nmaking data reservations.\n\nThis patch specifically does not change any functionality, and is\npurposefully not cleaned up in order to make bisection easier for the\nfuture patches.  The new helper is identical to the old helper in how it\nhandles data reservations.  We first try to force a chunk allocation,\nand then we run through the flush states all at once and in the same\norder that they were done with the old helper.\n\nSubsequent patches will clean this up and change the behavior of the\nflushing, and it is important to keep those changes separate so we can\neasily bisect down to the patch that caused the regression, rather than\nthe patch that made us start using the new infrastructure.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "014a86d488112ed3f38d47c3db68be1af0a2db2d",
      "tree": "47bef1717693f36418f7b407124968d8c7b499cd",
      "parents": [
        "e03b7f01232292cd385959d84560b026fac5f2a3"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 31 14:41:11 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:06 2020 -0500"
      },
      "message": "btrfs: add the data transaction commit logic into may_commit_transaction\n\nData space flushing currently unconditionally commits the transaction\ntwice in a row, and the last time it checks if there\u0027s enough pinned\nextents to satisfy it\u0027s reservation before deciding to commit the\ntransaction for the 3rd and final time.\n\nEncode this logic into may_commit_transaction().  In the next patch we\nwill pass in U64_MAX for bytes_needed the first two times, and the final\ntime we will pass in the actual bytes we need so the normal logic will\napply.\n\nThis patch exists soley to make the logical changes I will make to the\nflushing state machine separate to make it easier to bisect any\nperformance related regressions.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "e03b7f01232292cd385959d84560b026fac5f2a3",
      "tree": "5fec2ee6329ff7ac3cb2b9077b379643a2ec68b7",
      "parents": [
        "c06ede350bf5394298a77b03327da3f53d2b1a6c"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 13:25:30 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:06 2020 -0500"
      },
      "message": "btrfs: add flushing states for handling data reservations\n\nCurrently the way we do data reservations is by seeing if we have enough\nspace in our space_info.  If we do not and we\u0027re a normal inode we\u0027ll\n\n1) Attempt to force a chunk allocation until we can\u0027t anymore.\n2) If that fails we\u0027ll flush delalloc, then commit the transaction, then\n   run the delayed iputs.\n\nIf we are a free space inode we\u0027re only allowed to force a chunk\nallocation.  In order to use the normal flushing mechanism we need to\nencode this into a flush state array for normal inodes.  Since both will\nstart with allocating chunks until the space info is full there is no\nneed to add this as a flush state, this will be handled specially.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "c06ede350bf5394298a77b03327da3f53d2b1a6c",
      "tree": "0b1f772dbd4715c23094431c567714264c4dfe4f",
      "parents": [
        "d0dfc759a936ac6bff53c012661915f73a949c1d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 31 14:16:16 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:06 2020 -0500"
      },
      "message": "btrfs: check tickets after waiting on ordered extents\n\nRight now if the space is free\u0027d up after the ordered extents complete\n(which is likely since the reservations are held until they complete),\nwe would do extra delalloc flushing before we\u0027d notice that we didn\u0027t\nhave any more tickets.  Fix this by moving the tickets check after our\nwait_ordered_extents check.\n\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "d0dfc759a936ac6bff53c012661915f73a949c1d",
      "tree": "f7c956832447bce420684c83014348f864636db4",
      "parents": [
        "05b19a942e227375864ddf21cf5b4e71d3dbe11b"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 31 14:13:10 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:06 2020 -0500"
      },
      "message": "btrfs: use btrfs_start_delalloc_roots in shrink_delalloc\n\nThe original iteration of flushing had us flushing delalloc and then\nchecking to see if we could make our reservation, thus we were very\ncareful about how many pages we would flush at once.\n\nBut now that everything is async and we satisfy tickets as the space\nbecomes available we don\u0027t have to keep track of any of this, simply try\nand flush the number of dirty inodes we may have in order to reclaim\nspace to make our reservation.  This cleans up our delalloc flushing\nsignificantly.\n\nThe async_pages stuff is dropped because btrfs_start_delalloc_roots()\nhandles the case that we generate async extents for us, so we no longer\nrequire this extra logic.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "05b19a942e227375864ddf21cf5b4e71d3dbe11b",
      "tree": "d3b1911010e85809d6fbbd9d0f8018bff5c08672",
      "parents": [
        "8d36190269d7a038036ae5e1ed13b359b8ca7e23"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Wed Jan 29 17:07:05 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:06 2020 -0500"
      },
      "message": "btrfs: use the btrfs_space_info_free_bytes_may_use helper for delalloc\n\nWe are going to use the ticket infrastructure for data, so use the\nbtrfs_space_info_free_bytes_may_use() helper in\nbtrfs_free_reserved_data_space_noquota() so we get the\ntry_granting_tickets call when we free our reservation.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "8d36190269d7a038036ae5e1ed13b359b8ca7e23",
      "tree": "1fbb780a57c4724bbe2985a80aad7228483329c1",
      "parents": [
        "357e3ddd7845d3d8e5441d25c6f34f50a93026a6"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Wed Jan 29 17:04:56 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:06 2020 -0500"
      },
      "message": "btrfs: call btrfs_try_granting_tickets when reserving space\n\nIf we have compression on we could free up more space than we reserved,\nand thus be able to make a space reservation.  Add the call for this\nscenario.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "357e3ddd7845d3d8e5441d25c6f34f50a93026a6",
      "tree": "19ebd251e8cb0304064f4b5454c21e4e54210aba",
      "parents": [
        "43b5a87624865a44332027b15915f0c2ab5b9bc1"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Wed Jan 29 11:04:36 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:05 2020 -0500"
      },
      "message": "btrfs: call btrfs_try_granting_tickets when unpinning anything\n\nWhen unpinning we were only calling btrfs_try_granting_tickets() if\nglobal_rsv-\u003espace_info \u003d\u003d space_info, which is problematic because we\nuse ticketing for SYSTEM chunks, and want to use it for DATA as well.\nFix this by moving this call outside of that if statement.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "43b5a87624865a44332027b15915f0c2ab5b9bc1",
      "tree": "74e88e7041bd64792b59a4d7aae89b71c9074547",
      "parents": [
        "9075cf2151892def2457f2f087189b7fc81f6518"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 13:11:37 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:05 2020 -0500"
      },
      "message": "btrfs: call btrfs_try_granting_tickets when freeing reserved bytes\n\nWe were missing a call to btrfs_try_granting_tickets in\nbtrfs_free_reserved_bytes, so add it to handle the case where we\u0027re able\nto satisfy an allocation because we\u0027ve freed a pending reservation.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "9075cf2151892def2457f2f087189b7fc81f6518",
      "tree": "a84d03dbc33bf18b0dd45cfec46f272907a8103c",
      "parents": [
        "108a91de31fe21dfce08823202c0362c03abc1b9"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 13:41:27 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:05 2020 -0500"
      },
      "message": "btrfs: make ALLOC_CHUNK use the space info flags\n\nWe have traditionally used flush_space() to flush metadata space, so\nwe\u0027ve been unconditionally using btrfs_metadata_alloc_profile() for our\nprofile to allocate a chunk.  However if we\u0027re going to use this for\ndata we need to use btrfs_get_alloc_profile() on the space_info we pass\nin.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "108a91de31fe21dfce08823202c0362c03abc1b9",
      "tree": "eb66964acb5b0115f35b0d44f03c6542163a9b74",
      "parents": [
        "ada6b7a3bbadcbf234a7fe5cd8a59d0709e635fa"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Wed Jan 29 12:00:33 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:05 2020 -0500"
      },
      "message": "btrfs: make shrink_delalloc take space_info as an arg\n\nCurrently shrink_delalloc just looks up the metadata space info, but\nthis won\u0027t work if we\u0027re trying to reclaim space for data chunks.  We\nget the right space_info we want passed into flush_space, so simply pass\nthat along to shrink_delalloc.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "ada6b7a3bbadcbf234a7fe5cd8a59d0709e635fa",
      "tree": "097946b8ef5200c32494dd735b7b9c0317ec56cd",
      "parents": [
        "37c91345a82d64306f2a305ba122d5a0ef27a1e8"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Wed Jan 29 11:58:43 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:05 2020 -0500"
      },
      "message": "btrfs: handle U64_MAX for shrink_delalloc\n\nData allocations are going to want to pass in U64_MAX for flushing\nspace, adjust shrink_delalloc to handle this properly.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "37c91345a82d64306f2a305ba122d5a0ef27a1e8",
      "tree": "bdeb80a06554dea7aea089ae2005052da055dd84",
      "parents": [
        "66e02a3db713040b603bdcb5c1104023cf4f9780"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 14:47:41 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:05 2020 -0500"
      },
      "message": "btrfs: remove orig from shrink_delalloc\n\nWe don\u0027t use this anywhere inside of shrink_delalloc, remove it.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "66e02a3db713040b603bdcb5c1104023cf4f9780",
      "tree": "994a46240ec52706d9f146e907f206e9e3f3ec35",
      "parents": [
        "c430d6047795573c11693db69d25170d0c81926b"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Tue Jan 28 14:28:54 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:05 2020 -0500"
      },
      "message": "btrfs: change nr to u64 in btrfs_start_delalloc_roots\n\nWe have btrfs_wait_ordered_roots() which takes a u64 for nr, but\nbtrfs_start_delalloc_roots() that takes an int for nr, which makes using\nthem in conjunction, especially for something like (u64)-1, annoying and\ninconsistent.  Fix btrfs_start_delalloc_roots() to take a u64 for nr and\nadjust start_delalloc_inodes() and it\u0027s callers appropriately.\n\nThis means we\u0027ve adjusted start_delalloc_inodes() to take a pointer of\nnr since we want to preserve the ability for start-delalloc_inodes() to\nreturn an error, so simply make it do the nr adjusting as necessary.\n\nPart of adjusting the callers to this means changing\nbtrfs_writeback_inodes_sb_nr() to take a u64 for items.  This may be\nconfusing because it seems unrelated, but the caller of\nbtrfs_writeback_inodes_sb_nr() already passes in a u64, it\u0027s just the\nfunction variable that needs to be changed.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nTested-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "c430d6047795573c11693db69d25170d0c81926b",
      "tree": "1e07b74a88b0f95e9d00d757d875246849605e0f",
      "parents": [
        "a4c487136b7f3c6b7a946307d8598e687a9b9a6a"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 03 14:10:28 2020 -0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:05 2020 -0500"
      },
      "message": "btrfs: kill update_block_group_flags\n\nbtrfs/061 has been failing consistently for me recently with a\ntransaction abort.  We run out of space in the system chunk array, which\nmeans we\u0027ve allocated way too many system chunks than we need.\n\nChris added this a long time ago for balance as a poor mans restriping.\nIf you had a single disk and then added another disk and then did a\nbalance, update_block_group_flags would then figure out which RAID level\nyou needed.\n\nFast forward to today and we have restriping behavior, so we can\nexplicitly tell the fs that we\u0027re trying to change the raid level.  This\nis accomplished through the normal get_alloc_profile path.\n\nFurthermore this code actually causes btrfs/061 to fail, because we do\nthings like mkfs -m dup -d single with multiple devices.  This trips\nthis check\n\nalloc_flags \u003d update_block_group_flags(fs_info, cache-\u003eflags);\nif (alloc_flags !\u003d cache-\u003eflags) {\n\tret \u003d btrfs_chunk_alloc(trans, alloc_flags, CHUNK_ALLOC_FORCE);\n\nin btrfs_inc_block_group_ro.  Because we\u0027re balancing and scrubbing, but\nnot actually restriping, we keep forcing chunk allocation of RAID1\nchunks.  This eventually causes us to run out of system space and the\nfile system aborts and flips read only.\n\nWe don\u0027t need this poor mans restriping any more, simply use the normal\nget_alloc_profile helper, which will get the correct alloc_flags and\nthus make the right decision for chunk allocation.  This keeps us from\nallocating a billion system chunks and falling over.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "a4c487136b7f3c6b7a946307d8598e687a9b9a6a",
      "tree": "c83d4e03b8a3a15f51f97f9a0df78582be1c466d",
      "parents": [
        "15a6d6c043e39dcbbf8ba8a488440ab5b197eabe"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Mon Dec 16 08:08:48 2019 -0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 10:04:02 2020 -0500"
      },
      "message": "btrfs: kill the subvol_srcu\n\nNow that we have proper root ref counting everywhere we can kill the\nsubvol_srcu.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "15a6d6c043e39dcbbf8ba8a488440ab5b197eabe",
      "tree": "9bffad484822ef11bef42793b944f8eec139fe5e",
      "parents": [
        "ea7cd99f993bdf7c9bcbf99a43f43956d26bb163"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Mon Dec 16 07:47:33 2019 -0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 09:47:41 2020 -0500"
      },
      "message": "btrfs: make btrfs_cleanup_fs_roots use the fs_roots_radix_lock\n\nThe radix root is primarily protected by the fs_roots_radix_lock, so use\nthat to lookup and get a ref on all of our fs roots in\nbtrfs_cleanup_fs_roots.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "ea7cd99f993bdf7c9bcbf99a43f43956d26bb163",
      "tree": "ef440647f304fd35f4b7ff11a0ef951afa1fb900",
      "parents": [
        "499ce8dece1b77ee83cd3b90765eb6352fd10229"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Mon Dec 16 06:48:15 2019 -0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 09:47:40 2020 -0500"
      },
      "message": "btrfs: don\u0027t take an extra root ref at allocation time\n\nNow that all the users of roots take references for them we can drop the\nextra root ref we\u0027ve been taking.  Before we had roots at 2 refs for the\nlife of the file system, one for the radix tree, and one simply for\nexisting.  Now that we have proper ref accounting in all places that use\nroots we can drop this extra ref simply for existing as we no longer\nneed it.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "499ce8dece1b77ee83cd3b90765eb6352fd10229",
      "tree": "8a24b0590d8f6a2e41b5de7d0b4b84a268799d17",
      "parents": [
        "f280746de1992cebcf0a2b16ad5c0a52f6c5dc5c"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Mon Dec 16 06:44:09 2019 -0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 09:47:39 2020 -0500"
      },
      "message": "btrfs: hold a ref on the root on the dead roots list\n\nAt the point we add a root to the dead roots list we have no open inodes\nfor that root, so we need to hold a ref on that root to keep it from\ndisappearing.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "f280746de1992cebcf0a2b16ad5c0a52f6c5dc5c",
      "tree": "98c5d956b8ab1ce6d662807e3ce63523db92e6f5",
      "parents": [
        "f5191a03771f278532c695473df5a0d3cdbe8350"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Dec 13 11:38:49 2019 -0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 09:47:38 2020 -0500"
      },
      "message": "btrfs: make inodes hold a ref on their roots\n\nIf we make sure all the inodes have refs on their root we don\u0027t have to\nworry about the root disappearing while we have open inodes.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "f5191a03771f278532c695473df5a0d3cdbe8350",
      "tree": "878657b9cfe18c7de3c2fff90a0ceb3f1163ff93",
      "parents": [
        "e6e9d586df68bceacaab834caf6c20df3530fc0d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Dec 13 10:23:43 2019 -0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 09:47:09 2020 -0500"
      },
      "message": "btrfs: move the root freeing stuff into btrfs_put_root\n\nThere are a few different ways to free roots, either you allocated them\nyourself and you just do\n\nfree_extent_buffer(root-\u003enode);\nfree_extent_buffer(root-\u003ecommit_node);\nbtrfs_put_root(root);\n\nWhich is the pattern for log roots.  Or for snapshots/subvolumes that\nare being dropped you simply call btrfs_free_fs_root() which does all\nthe cleanup for you.\n\nUnify this all into btrfs_put_root(), so that we don\u0027t free up things\nassociated with the root until the last reference is dropped.  This\nmakes the root freeing code much more significant.\n\nThe only caveat is at close_ctree() time we have to free the extent\nbuffers for all of our main roots (extent_root, chunk_root, etc) because\nwe have to drop the btree_inode and we\u0027ll run into issues if we hold\nonto those nodes until -\u003ekill_sb() time.  This will be addressed in the\nfuture when we kill the btree_inode.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "e6e9d586df68bceacaab834caf6c20df3530fc0d",
      "tree": "2b65d17a3bb34d9378b9b771f852e73e197a2ba9",
      "parents": [
        "45644a3334bfeac13ad76c9d69bbef23bfbf7066"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Jan 16 19:12:15 2020 -0500"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 09:43:06 2020 -0500"
      },
      "message": "btrfs: move ino_cache_inode dropping\n\nWe are going to make root life be controlled soley by refcounting, and\ninodes will be one of the things that hold a ref on the root.  This\nmeans we need to handle dropping the ino_cache_inode outside of the root\nfreeing logic, so move it into btrfs_drop_and_free_fs_root() so it is\ncleaned up properly on unmount.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "45644a3334bfeac13ad76c9d69bbef23bfbf7066",
      "tree": "6081b788ed85e383ee96b710f27e47c35dd8c30b",
      "parents": [
        "e64b6107687cfd15ca6fbd73da23dcd5e4b0f5ad"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Dec 05 06:38:18 2019 -0800"
      },
      "committer": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Feb 14 09:43:02 2020 -0500"
      },
      "message": "btrfs: make the extent buffer leak check per fs info\n\nI\u0027m going to make the entire destruction of btrfs_root\u0027s controlled by\ntheir refcount, so it will be helpful to notice if we\u0027re leaking their\neb\u0027s on umount.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\n"
    },
    {
      "commit": "e64b6107687cfd15ca6fbd73da23dcd5e4b0f5ad",
      "tree": "8bed1bb9ef1072e874d0cc7139f4195822c8e43d",
      "parents": [
        "77509263aebb5dc1b03fcc2581e0db321502d919"
      ],
      "author": {
        "name": "Anand Jain",
        "email": "anand.jain@oracle.com",
        "time": "Thu Feb 13 16:40:53 2020 +0800"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Feb 14 14:29:17 2020 +0100"
      },
      "message": "btrfs: sysfs, unify handler name of devinfo/missing\n\nThe devinfo attribute handlers were added in 668e48af7a94 (\"btrfs:\nsysfs, add devid/dev_state kobject and device attributes\") and the name\nshould contain _devinfo_, there\u0027s one that does not conform, so unify it\nwith the rest.\n\nSigned-off-by: Anand Jain \u003canand.jain@oracle.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "77509263aebb5dc1b03fcc2581e0db321502d919",
      "tree": "9798a7de31cf082613d4b1a8c14a49c515b65977",
      "parents": [
        "0707a9b781c640de6661539eca2e969fb1c858fb"
      ],
      "author": {
        "name": "Anand Jain",
        "email": "anand.jain@oracle.com",
        "time": "Wed Feb 12 17:28:13 2020 +0800"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Feb 14 14:27:34 2020 +0100"
      },
      "message": "btrfs: sysfs, rename device_link add/remove functions\n\nSince commit 668e48af7a94 (\"btrfs: sysfs, add devid/dev_state kobject and\ndevice attributes\"), the functions btrfs_sysfs_add_device_link() and\nbtrfs_sysfs_rm_device_link() do more than just adding and removing the\ndevice link as its name indicated. Rename them to be more specific\nthat\u0027s about the directory with the attirbutes\n\nSigned-off-by: Anand Jain \u003canand.jain@oracle.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "0707a9b781c640de6661539eca2e969fb1c858fb",
      "tree": "e8f1f22e56fea7ba00cacda22990b105d9680a68",
      "parents": [
        "fb39389594b26a7b56c2caa6f0cbb2916b1171bd"
      ],
      "author": {
        "name": "Anand Jain",
        "email": "anand.jain@oracle.com",
        "time": "Wed Feb 12 17:28:12 2020 +0800"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Feb 14 14:13:27 2020 +0100"
      },
      "message": "btrfs: sysfs, use btrfs_sysfs_remove_fsid to celanup errors in add_fsid\n\nWe have one simple function btrfs_sysfs_remove_fsid() to undo\nbtrfs_sysfs_add_fsid(), which also does proper checks before releasing\nobjects.\n\nOne difference, if btrfs_sysfs_remove_fsid is used that now we also call\nkobject_del() which was missing before. This was tested (with kobject\ndebug turned on) and no change in behaviour was found.\n\nThis is a cleanup patch.\n\nSigned-off-by: Anand Jain \u003canand.jain@oracle.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "fb39389594b26a7b56c2caa6f0cbb2916b1171bd",
      "tree": "372943be1ad438af0e8c23a611920b48c2daba3c",
      "parents": [
        "9f4420d60215636af0a48b1bbac3434fec3a562d"
      ],
      "author": {
        "name": "Anand Jain",
        "email": "anand.jain@oracle.com",
        "time": "Wed Feb 12 17:28:11 2020 +0800"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 12 18:23:45 2020 +0100"
      },
      "message": "btrfs: sysfs, move device id directories to UUID/devinfo\n\nOriginally it was planned to create device id directories under\nUUID/devinfo, but it got under UUID/devices by mistake. We really want\nit under definfo so the bare device node names are not mixed with device\nids and are easy to enumerate.\n\nFixes: 668e48af7a94 (\"btrfs: sysfs, add devid/dev_state kobject and device attributes\")\nSigned-off-by: Anand Jain \u003canand.jain@oracle.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "9f4420d60215636af0a48b1bbac3434fec3a562d",
      "tree": "7f72aec798993c6eaa8259617ada9a7027ffe435",
      "parents": [
        "b053f3eda6f3cf8ca6c08445b3b7926f48bb5ecb"
      ],
      "author": {
        "name": "Anand Jain",
        "email": "anand.jain@oracle.com",
        "time": "Wed Feb 12 17:28:10 2020 +0800"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 12 18:19:44 2020 +0100"
      },
      "message": "btrfs: sysfs, add UUID/devinfo kobject\n\nCreate directory /sys/fs/btrfs/UUID/devinfo to hold devices directories\nby the id (unlike /devices).\n\nSigned-off-by: Anand Jain \u003canand.jain@oracle.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "b053f3eda6f3cf8ca6c08445b3b7926f48bb5ecb",
      "tree": "a019b65bd673f488651481d431e45785a03d4dbf",
      "parents": [
        "df475ad8da574c67ebfc1fe593a7f89df7a0e4b2"
      ],
      "author": {
        "name": "Filipe Manana",
        "email": "fdmanana@suse.com",
        "time": "Fri Feb 07 12:23:09 2020 +0000"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 20:40:21 2020 +0100"
      },
      "message": "Btrfs: fix race between shrinking truncate and fiemap\n\nWhen there is a fiemap executing in parallel with a shrinking truncate\nwe can end up in a situation where we have extent maps for which we no\nlonger have corresponding file extent items. This is generally harmless\nand at the moment the only consequences are missing file extent items\nrepresenting holes after we expand the file size again after the\ntruncate operation removed the prealloc extent items, and stale\ninformation for future fiemap calls (reporting extents that no longer\nexist or may have been reallocated to other files for example).\n\nConsider the following example:\n\n1) Our inode has a size of 128KiB, one 128KiB extent at file offset 0\n   and a 1MiB prealloc extent at file offset 128KiB;\n\n2) Task A starts doing a shrinking truncate of our inode to reduce it to\n   a size of 64KiB. Before it searches the subvolume tree for file\n   extent items to delete, it drops all the extent maps in the range\n   from 64KiB to (u64)-1 by calling btrfs_drop_extent_cache();\n\n3) Task B starts doing a fiemap against our inode. When looking up for\n   the inode\u0027s extent maps in the range from 128KiB to (u64)-1, it\n   doesn\u0027t find any in the inode\u0027s extent map tree, since they were\n   removed by task A.  Because it didn\u0027t find any in the extent map\n   tree, it scans the inode\u0027s subvolume tree for file extent items, and\n   it finds the 1MiB prealloc extent at file offset 128KiB, then it\n   creates an extent map based on that file extent item and adds it to\n   inode\u0027s extent map tree (this ends up being done by\n   btrfs_get_extent() \u003c- btrfs_get_extent_fiemap() \u003c-\n   get_extent_skip_holes());\n\n4) Task A then drops the prealloc extent at file offset 128KiB and\n   shrinks the 128KiB extent file offset 0 to a length of 64KiB. The\n   truncation operation finishes and we end up with an extent map\n   representing a 1MiB prealloc extent at file offset 128KiB, despite we\n   don\u0027t have any more that extent;\n\nAfter this the two types of problems we have are:\n\n1) Future calls to fiemap always report that a 1MiB prealloc extent\n   exists at file offset 128KiB. This is stale information, no longer\n   correct;\n\n2) If the size of the file is increased, by a truncate operation that\n   increases the file size or by a write into a file offset \u003e 64KiB for\n   example, we end up not inserting file extent items to represent holes\n   for any range between 128KiB and 128KiB + 1MiB, since the hole\n   expansion function, btrfs_cont_expand() will skip hole insertion for\n   any range for which an extent map exists that represents a prealloc\n   extent. This causes fsck to complain about missing file extent items\n   when not using the NO_HOLES feature.\n\nThe second issue could be often triggered by test case generic/561 from\nfstests, which runs fsstress and duperemove in parallel, and duperemove\ndoes frequent fiemap calls.\n\nEssentially the problems happens because fiemap does not acquire the\ninode\u0027s lock while truncate does, and fiemap locks the file range in the\ninode\u0027s iotree while truncate does not. So fix the issue by making\nbtrfs_truncate_inode_items() lock the file range from the new file size\nto (u64)-1, so that it serializes with fiemap.\n\nCC: stable@vger.kernel.org # 4.4+\nReviewed-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nSigned-off-by: Filipe Manana \u003cfdmanana@suse.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "df475ad8da574c67ebfc1fe593a7f89df7a0e4b2",
      "tree": "e311a2b0fe378b2db362076bbc3841efd08ac408",
      "parents": [
        "3e906fb0ee40b5ae066db7b1b2ee212734a1d01a"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 19:09:42 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:42:16 2020 +0100"
      },
      "message": "btrfs: sink argument tree to __do_readpage\n\nThe tree pointer can be safely read from the inode, use it and drop the\nredundant argument.\n\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "3e906fb0ee40b5ae066db7b1b2ee212734a1d01a",
      "tree": "3535510011148049de13ffb0c1e01d6d54087f60",
      "parents": [
        "68913c89425764e70d51ff90af29c3990fbce662"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 19:09:40 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:42:15 2020 +0100"
      },
      "message": "btrfs: sink arugment tree to contiguous_readpages\n\nThe tree pointer can be safely read from the inode, use it and drop the\nredundant argument.\n\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "68913c89425764e70d51ff90af29c3990fbce662",
      "tree": "e1d21bd82e59244008abc23cee0e0105eb90ad44",
      "parents": [
        "096d0c20fb1fe0d8d4fb898cbfc159b6f01df8b3"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 19:09:37 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:42:15 2020 +0100"
      },
      "message": "btrfs: sink argument tree to __extent_read_full_page\n\nThe tree pointer can be safely read from the inode, use it and drop the\nredundant argument.\n\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "096d0c20fb1fe0d8d4fb898cbfc159b6f01df8b3",
      "tree": "f0a23364d50bc73831d40c58b11a01aff56c1220",
      "parents": [
        "6990553ba73817ad13bde178420ff59d42dfc016"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 19:09:35 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:42:14 2020 +0100"
      },
      "message": "btrfs: sink argument tree to extent_read_full_page\n\nThe tree pointer can be safely read from the page\u0027s inode, use it and\ndrop the redundant argument.\n\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "6990553ba73817ad13bde178420ff59d42dfc016",
      "tree": "7af96dbff35713f5ad326a6b1275e92a08d321d1",
      "parents": [
        "cf6f1f5a7cb2fecb42624feb6c5402fda5260f67"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 19:09:33 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:42:14 2020 +0100"
      },
      "message": "btrfs: drop argument tree from btrfs_lock_and_flush_ordered_range\n\nThe tree pointer can be safely read from the inode so we can drop the\nredundant argument from btrfs_lock_and_flush_ordered_range.\n\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "cf6f1f5a7cb2fecb42624feb6c5402fda5260f67",
      "tree": "45964bda4472f7005340fb31b5480770b94af03e",
      "parents": [
        "c266526695855098fc65af52754c6fe22155a7e2"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 19:09:30 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:42:13 2020 +0100"
      },
      "message": "btrfs: add assertions for tree \u003d\u003d inode-\u003eio_tree to extent IO helpers\n\nAdd assertions to all helpers that get tree as argument and verify that\nit\u0027s the same that can be obtained from the inode or from its pages. In\nfollowup patches the redundant arguments and assertions will be removed\none by one.\n\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "c266526695855098fc65af52754c6fe22155a7e2",
      "tree": "3345a1e7d3cab19fdc277877de8eb59f598a3093",
      "parents": [
        "fd6bc156d1648b0af8054465924322cfa327e416"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 19:09:28 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:42:10 2020 +0100"
      },
      "message": "btrfs: drop argument tree from submit_extent_page\n\nNow that we\u0027re sure the tree from argument is same as the one we can get\nfrom the page\u0027s inode io_tree, drop the redundant argument.\n\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nReviewed-by: Anand Jain \u003canand.jain@oracle.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "fd6bc156d1648b0af8054465924322cfa327e416",
      "tree": "3ace1867d3f142c2b46e2b82258f8c274b701365",
      "parents": [
        "6d895dba7befc2d1fab3dcdd6bbe287e7149fb22"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 19:09:26 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:41:11 2020 +0100"
      },
      "message": "btrfs: remove extent_page_data::tree\n\nAll functions that set up extent_page_data::tree set it to the inode\nio_tree. That\u0027s passed down the callstack that accesses either the same\ninode or its pages. In the end submit_extent_page can pull the tree out\nof the page and we don\u0027t have to store it in the structure.\n\nReviewed-by: Anand Jain \u003canand.jain@oracle.com\u003e\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "6d895dba7befc2d1fab3dcdd6bbe287e7149fb22",
      "tree": "639df784d577ce4cf22fb5ce8f64538a36f37e12",
      "parents": [
        "c7a969aaf9c98a23f792792c9a57a973760f8667"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 17:12:28 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:41:11 2020 +0100"
      },
      "message": "btrfs: log message when rw remount is attempted with unclean tree-log\n\nA remount to a read-write filesystem is not safe when there\u0027s tree-log\nto be replayed. Files that could be opened until now might be affected\nby the changes in the tree-log.\n\nA regular mount is needed to replay the log so the filesystem presents\nthe consistent view with the pending changes included.\n\nCC: stable@vger.kernel.org # 4.4+\nReviewed-by: Anand Jain \u003canand.jain@oracle.com\u003e\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "c7a969aaf9c98a23f792792c9a57a973760f8667",
      "tree": "3f0a82c4fd593038f36e8e9f356953214118415d",
      "parents": [
        "843e7d694dfaed0d74360eed723f0daafd859905"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 17:12:16 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Feb 11 18:41:06 2020 +0100"
      },
      "message": "btrfs: print message when tree-log replay starts\n\nThere\u0027s no logged information about tree-log replay although this is\nsomething that points to previous unclean unmount. Other filesystems\nreport that as well.\n\nSuggested-by: Chris Murphy \u003clists@colorremedies.com\u003e\nCC: stable@vger.kernel.org # 4.4+\nReviewed-by: Anand Jain \u003canand.jain@oracle.com\u003e\nReviewed-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "843e7d694dfaed0d74360eed723f0daafd859905",
      "tree": "fc314283ffcd2dcfad43c39f35f40656b64f2f1b",
      "parents": [
        "e42d97f8934fceb8d948ad3a82f7ada5d8177a58"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 17:34:34 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:35 2020 +0100"
      },
      "message": "btrfs: add wrapper for transaction abort predicate\n\nThe status of aborted transaction can change between calls and it needs\nto be accessed by READ_ONCE. Add a helper that also wraps the unlikely\nhint.\n\nReviewed-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "e42d97f8934fceb8d948ad3a82f7ada5d8177a58",
      "tree": "f5f8294af1e1be9622cd7ead08b2eec9ebe1cdf5",
      "parents": [
        "08dd2728caf6e974c860bf259a4b1fa63e45d861"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 05 17:26:51 2020 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:35 2020 +0100"
      },
      "message": "btrfs: move root node locking helpers to locking.c\n\nThe helpers are related to locking so move them there, update comments.\n\nReviewed-by: Anand Jain \u003canand.jain@oracle.com\u003e\nReviewed-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "08dd2728caf6e974c860bf259a4b1fa63e45d861",
      "tree": "5b36d2bb17b0f0c70dcf29e238e35825780749f4",
      "parents": [
        "1258bf0895f4f3f7be5973e07809854f81557fbb"
      ],
      "author": {
        "name": "Filipe Manana",
        "email": "fdmanana@suse.com",
        "time": "Fri Jan 31 14:06:07 2020 +0000"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:35 2020 +0100"
      },
      "message": "Btrfs: fix race between using extent maps and merging them\n\nWe have a few cases where we allow an extent map that is in an extent map\ntree to be merged with other extents in the tree. Such cases include the\nunpinning of an extent after the respective ordered extent completed or\nafter logging an extent during a fast fsync. This can lead to subtle and\ndangerous problems because when doing the merge some other task might be\nusing the same extent map and as consequence see an inconsistent state of\nthe extent map - for example sees the new length but has seen the old start\noffset.\n\nWith luck this triggers a BUG_ON(), and not some silent bug, such as the\nfollowing one in __do_readpage():\n\n  $ cat -n fs/btrfs/extent_io.c\n  3061  static int __do_readpage(struct extent_io_tree *tree,\n  3062                           struct page *page,\n  (...)\n  3127                  em \u003d __get_extent_map(inode, page, pg_offset, cur,\n  3128                                        end - cur + 1, get_extent, em_cached);\n  3129                  if (IS_ERR_OR_NULL(em)) {\n  3130                          SetPageError(page);\n  3131                          unlock_extent(tree, cur, end);\n  3132                          break;\n  3133                  }\n  3134                  extent_offset \u003d cur - em-\u003estart;\n  3135                  BUG_ON(extent_map_end(em) \u003c\u003d cur);\n  (...)\n\nConsider the following example scenario, where we end up hitting the\nBUG_ON() in __do_readpage().\n\nWe have an inode with a size of 8KiB and 2 extent maps:\n\n  extent A: file offset 0, length 4KiB, disk_bytenr \u003d X, persisted on disk by\n            a previous transaction\n\n  extent B: file offset 4KiB, length 4KiB, disk_bytenr \u003d X + 4KiB, not yet\n            persisted but writeback started for it already. The extent map\n\t    is pinned since there\u0027s writeback and an ordered extent in\n\t    progress, so it can not be merged with extent map A yet\n\nThe following sequence of steps leads to the BUG_ON():\n\n1) The ordered extent for extent B completes, the respective page gets its\n   writeback bit cleared and the extent map is unpinned, at that point it\n   is not yet merged with extent map A because it\u0027s in the list of modified\n   extents;\n\n2) Due to memory pressure, or some other reason, the MM subsystem releases\n   the page corresponding to extent B - btrfs_releasepage() is called and\n   returns 1, meaning the page can be released as it\u0027s not dirty, not under\n   writeback anymore and the extent range is not locked in the inode\u0027s\n   iotree. However the extent map is not released, either because we are\n   not in a context that allows memory allocations to block or because the\n   inode\u0027s size is smaller than 16MiB - in this case our inode has a size\n   of 8KiB;\n\n3) Task B needs to read extent B and ends up __do_readpage() through the\n   btrfs_readpage() callback. At __do_readpage() it gets a reference to\n   extent map B;\n\n4) Task A, doing a fast fsync, calls clear_em_loggin() against extent map B\n   while holding the write lock on the inode\u0027s extent map tree - this\n   results in try_merge_map() being called and since it\u0027s possible to merge\n   extent map B with extent map A now (the extent map B was removed from\n   the list of modified extents), the merging begins - it sets extent map\n   B\u0027s start offset to 0 (was 4KiB), but before it increments the map\u0027s\n   length to 8KiB (4kb + 4KiB), task A is at:\n\n   BUG_ON(extent_map_end(em) \u003c\u003d cur);\n\n   The call to extent_map_end() sees the extent map has a start of 0\n   and a length still at 4KiB, so it returns 4KiB and \u0027cur\u0027 is 4KiB, so\n   the BUG_ON() is triggered.\n\nSo it\u0027s dangerous to modify an extent map that is in the tree, because some\nother task might have got a reference to it before and still using it, and\nneeds to see a consistent map while using it. Generally this is very rare\nsince most paths that lookup and use extent maps also have the file range\nlocked in the inode\u0027s iotree. The fsync path is pretty much the only\nexception where we don\u0027t do it to avoid serialization with concurrent\nreads.\n\nFix this by not allowing an extent map do be merged if if it\u0027s being used\nby tasks other then the one attempting to merge the extent map (when the\nreference count of the extent map is greater than 2).\n\nReported-by: ryusuke1925 \u003cst13s20@gm.ibaraki-ct.ac.jp\u003e\nReported-by: Koki Mitani \u003ckoki.mitani.xg@hco.ntt.co.jp\u003e\nBugzilla: https://bugzilla.kernel.org/show_bug.cgi?id\u003d206211\nCC: stable@vger.kernel.org # 4.4+\nReviewed-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nSigned-off-by: Filipe Manana \u003cfdmanana@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "1258bf0895f4f3f7be5973e07809854f81557fbb",
      "tree": "a46c1a37f7769d4d3310c78a032a8e352015d148",
      "parents": [
        "6b25570c66207a4e195a9bdf7f03a6013ff95da3"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:33:01 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:35 2020 +0100"
      },
      "message": "btrfs: rename btrfs_put_fs_root and btrfs_grab_fs_root\n\nWe are now using these for all roots, rename them to btrfs_put_root()\nand btrfs_grab_root();\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "6b25570c66207a4e195a9bdf7f03a6013ff95da3",
      "tree": "09b82d2c8c53effc82c5a0241fa68d545299f09e",
      "parents": [
        "25b569c39e670b0d7bf18fba1e4eff6733ac90ef"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:33:00 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:35 2020 +0100"
      },
      "message": "btrfs: add a leak check for roots\n\nNow that we\u0027re going to start relying on getting ref counting right for\nroots, add a list to track allocated roots and print out any roots that\naren\u0027t freed up at free_fs_info time.\n\nHide this behind CONFIG_BTRFS_DEBUG because this will just be used for\ndevelopers to verify they aren\u0027t breaking things.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "25b569c39e670b0d7bf18fba1e4eff6733ac90ef",
      "tree": "efc80af5f1798b8730653b32f7f84729b6c52b7f",
      "parents": [
        "3eb35b78df5279edb500454f5207be12c099648c"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:59 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:34 2020 +0100"
      },
      "message": "btrfs: make the init of static elements in fs_info separate\n\nIn adding things like eb leak checking and root leak checking there were\na lot of weird corner cases that come from the fact that\n\n  1) We do not init the fs_info until we get to open_ctree time in the\n     normal case and\n\n  2) The test infrastructure half-init\u0027s the fs_info for things that it\n     needs.\n\nThis makes it really annoying to make changes because you have to add\ninit in two different places, have special cases for testing fs_info\u0027s\nthat may not have certain things initialized, and cases for fs_info\u0027s\nthat didn\u0027t make it to open_ctree and thus are not fully set up.\n\nFix this by extracting out the non-allocating init of the fs info into\nit\u0027s own public function and use that to make sure we\u0027re all getting\nconsistent views of an allocated fs_info.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "3eb35b78df5279edb500454f5207be12c099648c",
      "tree": "1cfaba80dd0a199dd8b0e5b7b7e6fbaaa6cee80c",
      "parents": [
        "d8df614e68debeae4272ecc77ca94427e11cecb8"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:58 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:34 2020 +0100"
      },
      "message": "btrfs: move fs_info init work into it\u0027s own helper function\n\nopen_ctree mixes initialization of fs stuff and fs_info stuff, which\nmakes it confusing when doing things like adding the root leak\ndetection.  Make a separate function that inits all the static\nstructures inside of the fs_info needed for the fs to operate, and then\ncall that before we start setting up the fs_info to be mounted.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "d8df614e68debeae4272ecc77ca94427e11cecb8",
      "tree": "9bc993fbc2341a5948344db78729f688b6fb3b40",
      "parents": [
        "3bd3423f860fd747b4f0b8a0623438531f304d00"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:57 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:34 2020 +0100"
      },
      "message": "btrfs: free more things in btrfs_free_fs_info\n\nThings like the percpu_counters, the mapping_tree, and the csum hash can\nall be freed at btrfs_free_fs_info time, since the helpers all check if\nthe structure has been initialized already.  This significantly cleans\nup the error cases in open_ctree.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "3bd3423f860fd747b4f0b8a0623438531f304d00",
      "tree": "b705f9ae94fd674f0ff50cc1227cf25493501109",
      "parents": [
        "8afd7af7536689126de20300eb90bf53277ccb0f"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:56 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:34 2020 +0100"
      },
      "message": "btrfs: push btrfs_grab_fs_root into btrfs_get_fs_root\n\nNow that all callers of btrfs_get_fs_root are subsequently calling\nbtrfs_grab_fs_root and handling dropping the ref when they are done\nappropriately, go ahead and push btrfs_grab_fs_root up into\nbtrfs_get_fs_root.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "8afd7af7536689126de20300eb90bf53277ccb0f",
      "tree": "cbdfc655ebcdb00e805dfbf032b8f1bfa77589ba",
      "parents": [
        "86aa7c0756c0247cbdd18d7342da4e06716e7120"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:55 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:34 2020 +0100"
      },
      "message": "btrfs: use btrfs_put_fs_root to free roots always\n\nIf we are going to track leaked roots we need to free them all the same\nway, so don\u0027t kfree() roots directly, use btrfs_put_fs_root.\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "86aa7c0756c0247cbdd18d7342da4e06716e7120",
      "tree": "702bb8362a21b55d28fff55459943dead73ad73c",
      "parents": [
        "f00d1c7ee80476b0cc6e846ac851a7b18cb1aace"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:54 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:34 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in open_ctree\n\nWe lookup the fs_root and put it in our fs_info directly, we should hold\na ref on this root for the lifetime of the fs_info.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "f00d1c7ee80476b0cc6e846ac851a7b18cb1aace",
      "tree": "cd2a1f47681fcd926abb5d312a88d72ab56366ab",
      "parents": [
        "c15e9d94d33a382389c000c4b9f0869d3b2e8ac9"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:53 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:33 2020 +0100"
      },
      "message": "btrfs: export and rename free_fs_info\n\nWe\u0027re going to start freeing roots and doing other complicated things in\nfree_fs_info, so we need to move it to disk-io.c and export it in order\nto use things lik btrfs_put_fs_root().\n\nReviewed-by: Nikolay Borisov \u003cnborisov@suse.com\u003e\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "c15e9d94d33a382389c000c4b9f0869d3b2e8ac9",
      "tree": "02fedad1d064e48846d19710df0389fa74b594c7",
      "parents": [
        "060027bf6fc5ced196224c9c6448f5090c33f2bf"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:52 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:33 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in btrfs_check_uuid_tree_entry\n\nWe lookup the uuid of arbitrary subvolumes, hold a ref on the root while\nwe\u0027re doing this.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "060027bf6fc5ced196224c9c6448f5090c33f2bf",
      "tree": "e362a7e98a1bdd829cf2859a241ebc69b0e62bf2",
      "parents": [
        "72936a13b4871577d774136ddb707c7f6f1a8784"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:51 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:33 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in btrfs_recover_log_trees\n\nWe replay the log into arbitrary fs roots, hold a ref on the root while\nwe\u0027re doing this.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "72936a13b4871577d774136ddb707c7f6f1a8784",
      "tree": "880d0531d614990aaf70c39d4c988f1413d59893",
      "parents": [
        "1b5c3c79284af2c16004578bcd74727057a93807"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:50 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:33 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in create_pending_snapshot\n\nWe create the snapshot and then use it for a bunch of things, we need to\nhold a ref on it while we\u0027re messing with it.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "1b5c3c79284af2c16004578bcd74727057a93807",
      "tree": "68f1a6f870229bf127dd8ee9de111b34fbad2a48",
      "parents": [
        "fdce8e08cbce29dec973ec8ffd205f03838ae0bc"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Thu Feb 06 10:24:26 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:33 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in get_subvol_name_from_objectid\n\nWe lookup the name of a subvol which means we\u0027ll cross into different\nroots.  Hold a ref while we\u0027re doing the look ups in the fs_root we\u0027re\nsearching.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "fdce8e08cbce29dec973ec8ffd205f03838ae0bc",
      "tree": "5d1ca4ef2b523f55156676fbda9d0c973a337787",
      "parents": [
        "c388b5effb6cdf249aea067037952762cd8ea661"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:48 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:33 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in btrfs_ioctl_send\n\nWe lookup all the clone roots and the parent root for send, so we need\nto hold refs on all of these roots while we\u0027re processing them.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "c388b5effb6cdf249aea067037952762cd8ea661",
      "tree": "ef3a3f37981d5162cbc0bd09934cedb1c897fb09",
      "parents": [
        "63fdd9ee72727bfaa2464c579cf46762e109ad99"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:47 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:32 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in scrub_print_warning_inode\n\nWe look up the root for the bytenr that is failing, so we need to hold a\nref on the root for that operation.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "63fdd9ee72727bfaa2464c579cf46762e109ad99",
      "tree": "811cf45b3c6619849fc6c98d800c4960b8aee158",
      "parents": [
        "a774641bd8fca715af2f1b3bf678aa10f6f8d531"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:46 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:32 2020 +0100"
      },
      "message": "btrfs: hold a ref for the root in btrfs_find_orphan_roots\n\nWe lookup roots for every orphan item we have, we need to hold a ref on\nthe root while we\u0027re doing this work.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "a774641bd8fca715af2f1b3bf678aa10f6f8d531",
      "tree": "f98ac5a16dbd644e4815d2832fb9faee6b43fbca",
      "parents": [
        "9c68e0447bb8470db89fa41cc102d553a0e005cb"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:45 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:32 2020 +0100"
      },
      "message": "btrfs: push grab_fs_root into read_fs_root\n\nAll of relocation uses read_fs_root to lookup fs roots, so push the\nbtrfs_grab_fs_root() up into that helper and remove the individual\ncalls.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "9c68e0447bb8470db89fa41cc102d553a0e005cb",
      "tree": "4b87fa8430e86bea61c78150948a39948d491644",
      "parents": [
        "e3635b23d5c66371e1284a0e244dba61ef87d090"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:44 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:32 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in btrfs_recover_relocation\n\nWe look up the fs root in various places in here when recovering from a\ncrashed relcoation.  Make sure we hold a ref on the root whenever we\nlook them up.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "e3635b23d5c66371e1284a0e244dba61ef87d090",
      "tree": "6aa32dc4b39fa2cf6bba49a9aaa253344ca8a307",
      "parents": [
        "075b1004cdd88bf0aedfd6dc5c508a5d62804376"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:43 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:32 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in create_reloc_inode\n\nWe\u0027re creating a reloc inode in the data reloc tree, we need to hold a\nref on the root while we\u0027re doing that.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "075b1004cdd88bf0aedfd6dc5c508a5d62804376",
      "tree": "5c3d8a968f4b1be7557c6d2dd238cf3f0eddcee9",
      "parents": [
        "189ee7f34a948a2cc049a55a9e10170bc663fa1b"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:42 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:31 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in find_data_references\n\nWe\u0027re looking up the data references for the bytenr in a root, we need\nto hold a ref on that root while we\u0027re doing that.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "189ee7f34a948a2cc049a55a9e10170bc663fa1b",
      "tree": "f2d7163b02546d5e534adf299581b76c5f11ff68",
      "parents": [
        "cd8c1866a6ffb0db2d175f221d440516a583d68e"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:41 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:31 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in record_reloc_root_in_trans\n\nWe are recording this root in the transaction, so we need to hold a ref\non it until we do that.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "cd8c1866a6ffb0db2d175f221d440516a583d68e",
      "tree": "77245383fb7b1bcbd9f448f51683c511bb64dcce",
      "parents": [
        "5dd9754002c91758bf7732716f4101407551580a"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:40 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:31 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in merge_reloc_roots\n\nWe look up the corresponding root for the reloc root, we need to hold a\nref while we\u0027re messing with it.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "5dd9754002c91758bf7732716f4101407551580a",
      "tree": "363760f0a0f41f7357243c07412f4ea9d1217248",
      "parents": [
        "06717d1e6aed4719cc6ea3c9f38e1698a1327848"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:39 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:31 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in prepare_to_merge\n\nWe look up the reloc roots corresponding root, we need to hold a ref on\nthat root.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "06717d1e6aed4719cc6ea3c9f38e1698a1327848",
      "tree": "9a48b1f46f9072ab0f946ff08013ecd5944d62af",
      "parents": [
        "3e1c23d7e008b027fed6488ea8647f10be69f981"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:38 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:31 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in build_backref_tree\n\nThis is trickier than the previous conversions.  We have backref_node\u0027s\nthat need to hold onto their root for their lifetime.  Do the read of\nthe root and grab the ref.  If at any point we don\u0027t use the root we\ndiscard it, however if we use it in our backref node we don\u0027t free it\nuntil we free the backref node.  Any time we switch the root\u0027s for the\nbackref node we need to drop our ref on the old root and grab the ref on\nthe new root, and if we dupe a node we need to get a ref on the root\nthere as well.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "3e1c23d7e008b027fed6488ea8647f10be69f981",
      "tree": "d259c3bd9840444f4d3ebba49d658937a5986aff",
      "parents": [
        "8c319b625e0ae86e01bf09ecd6c21201cf3e8bb9"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:37 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:31 2020 +0100"
      },
      "message": "btrfs: hold ref on root in btrfs_ioctl_default_subvol\n\nWe look up an arbitrary fs root here, we need to hold a ref on the root\nfor the duration.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "8c319b625e0ae86e01bf09ecd6c21201cf3e8bb9",
      "tree": "0672b423d9b0172047f1497ad89d3c6e9ffbd82a",
      "parents": [
        "b38d0eba0d98b4ebcd390fc381ea05d733af075d"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:36 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:30 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in btrfs_ioctl_get_subvol_info\n\nWe look up whatever root userspace has given us, we need to hold a ref\nthroughout this operation.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "b38d0eba0d98b4ebcd390fc381ea05d733af075d",
      "tree": "aa0368b51cdad2ce937285bf9facf7736d470485",
      "parents": [
        "8577929f293bc98c9d3df2c252af3c4805b163c7"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:35 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:30 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in btrfs_search_path_in_tree_user\n\nWe can wander into a different root, so grab a ref on the root we look\nup.  Later on we make root \u003d fs_info-\u003etree_root so we need this separate\nout label to make sure we do the right cleanup only in the case we\u0027re\nlooking up a different root.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "8577929f293bc98c9d3df2c252af3c4805b163c7",
      "tree": "6070b6b39f993f6a0ad67fcd115369c8b4b98fbc",
      "parents": [
        "921e58a0a892651dea80e79c3706e1a013431667"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:34 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:30 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in btrfs_search_path_in_tree\n\nWe look up an arbitrary fs root, we need to hold a ref on it while we\u0027re\ndoing our search.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "921e58a0a892651dea80e79c3706e1a013431667",
      "tree": "cd08cacaa71bebaf74c5d38faed34e207e3d4c88",
      "parents": [
        "60e400697a4e6dca29ae0b471578c72184ddd98a"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:33 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:30 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in search_ioctl\n\nWe lookup a arbitrary fs root, we need to hold a ref on that root.  If\nwe\u0027re using our own inodes root then grab a ref on that as well to make\nthe cleanup easier.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "60e400697a4e6dca29ae0b471578c72184ddd98a",
      "tree": "e24741d6af0ccf9c7011f81eb6e03eecdb2c41c7",
      "parents": [
        "cb59b067893eb52ff698fd8e4d41bfafc0626d12"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:32 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:30 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in create_subvol\n\nWe\u0027re creating the new root here, but we should hold the ref until after\nwe\u0027ve initialized the inode for it.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "cb59b067893eb52ff698fd8e4d41bfafc0626d12",
      "tree": "571bc63c4ae6752d550bd69e52f11cbdf3375ed7",
      "parents": [
        "5f526def3313a6f2536b1fb27f721f6f67288496"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:31 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:30 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in fixup_tree_root_location\n\nLooking up the inode from an arbitrary tree means we need to hold a ref\non that root.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "5f526def3313a6f2536b1fb27f721f6f67288496",
      "tree": "1022d3605dae64ba6ec33c843a5ec6176cce2ea6",
      "parents": [
        "bf34b1a99de01cf4580e4dd7aeec58d1c1e58da0"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com",
        "time": "Fri Jan 24 09:32:30 2020 -0500"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 10 14:40:29 2020 +0100"
      },
      "message": "btrfs: hold a ref on the root in __btrfs_run_defrag_inode\n\nWe are looking up an arbitrary inode, we need to hold a ref on the root\nwhile we\u0027re doing this.\n\nSigned-off-by: Josef Bacik \u003cjosef@toxicpanda.com\u003e\nReviewed-by: David Sterba \u003cdsterba@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    }
  ],
  "next": "bf34b1a99de01cf4580e4dd7aeec58d1c1e58da0"
}
