From 92a069bc96aa20ebcbbd8fca2e1329fa76fe100c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 13 Feb 2020 14:59:27 -0800 Subject: [PATCH] btrfs fixups --- ...e-bio-if-we-loop-in-extent_write_cac.patch | 2 +- ...e-bio-if-we-loop-in-extent_write_cac.patch | 2 +- ...e-bio-if-we-loop-in-extent_write_cac.patch | 2 +- ...block-groups-after-free-ing-fs-trees.patch | 52 ------------------- queue-4.9/series | 1 - 5 files changed, 3 insertions(+), 56 deletions(-) delete mode 100644 queue-4.9/btrfs-free-block-groups-after-free-ing-fs-trees.patch diff --git a/queue-4.14/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch b/queue-4.14/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch index 89808b7f9cd..c82f361cf16 100644 --- a/queue-4.14/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch +++ b/queue-4.14/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch @@ -5,7 +5,7 @@ Subject: btrfs: flush write bio if we loop in extent_write_cache_pages From: Josef Bacik -[ Upstream commit 96bf313ecb33567af4cb53928b0c951254a02759 ] +[ Upstream commit 42ffb0bf584ae5b6b38f72259af1e0ee417ac77f ] There exists a deadlock with range_cyclic that has existed forever. If we loop around with a bio already built we could deadlock with a writer diff --git a/queue-4.4/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch b/queue-4.4/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch index 0e5ca917517..5bed3691b09 100644 --- a/queue-4.4/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch +++ b/queue-4.4/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch @@ -5,7 +5,7 @@ Subject: btrfs: flush write bio if we loop in extent_write_cache_pages From: Josef Bacik -[ Upstream commit 96bf313ecb33567af4cb53928b0c951254a02759 ] +[ Upstream commit 42ffb0bf584ae5b6b38f72259af1e0ee417ac77f ] There exists a deadlock with range_cyclic that has existed forever. If we loop around with a bio already built we could deadlock with a writer diff --git a/queue-4.9/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch b/queue-4.9/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch index 5628eedc356..a562341195a 100644 --- a/queue-4.9/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch +++ b/queue-4.9/btrfs-flush-write-bio-if-we-loop-in-extent_write_cac.patch @@ -5,7 +5,7 @@ Subject: btrfs: flush write bio if we loop in extent_write_cache_pages From: Josef Bacik -[ Upstream commit 96bf313ecb33567af4cb53928b0c951254a02759 ] +[ Upstream commit 42ffb0bf584ae5b6b38f72259af1e0ee417ac77f] There exists a deadlock with range_cyclic that has existed forever. If we loop around with a bio already built we could deadlock with a writer diff --git a/queue-4.9/btrfs-free-block-groups-after-free-ing-fs-trees.patch b/queue-4.9/btrfs-free-block-groups-after-free-ing-fs-trees.patch deleted file mode 100644 index 3c864446ea5..00000000000 --- a/queue-4.9/btrfs-free-block-groups-after-free-ing-fs-trees.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 4435b00db74bc79a6dac9a50a6d20538347076ec Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 21 Jan 2020 09:17:06 -0500 -Subject: btrfs: free block groups after free'ing fs trees - -From: Josef Bacik - -[ Upstream commit 4e19443da1941050b346f8fc4c368aa68413bc88 ] - -Sometimes when running generic/475 we would trip the -WARN_ON(cache->reserved) check when free'ing the block groups on umount. -This is because sometimes we don't commit the transaction because of IO -errors and thus do not cleanup the tree logs until at umount time. - -These blocks are still reserved until they are cleaned up, but they -aren't cleaned up until _after_ we do the free block groups work. Fix -this by moving the free after free'ing the fs roots, that way all of the -tree logs are cleaned up and we have a properly cleaned fs. A bunch of -loops of generic/475 confirmed this fixes the problem. - -CC: stable@vger.kernel.org # 4.9+ -Signed-off-by: Josef Bacik -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Signed-off-by: Sasha Levin ---- - fs/btrfs/disk-io.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c -index eab5a9065f093..439b5f5dc3274 100644 ---- a/fs/btrfs/disk-io.c -+++ b/fs/btrfs/disk-io.c -@@ -3864,6 +3864,15 @@ void close_ctree(struct btrfs_root *root) - clear_bit(BTRFS_FS_OPEN, &fs_info->flags); - free_root_pointers(fs_info, true); - -+ /* -+ * We must free the block groups after dropping the fs_roots as we could -+ * have had an IO error and have left over tree log blocks that aren't -+ * cleaned up until the fs roots are freed. This makes the block group -+ * accounting appear to be wrong because there's pending reserved bytes, -+ * so make sure we do the block group cleanup afterwards. -+ */ -+ btrfs_free_block_groups(fs_info); -+ - iput(fs_info->btree_inode); - - #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY --- -2.20.1 - diff --git a/queue-4.9/series b/queue-4.9/series index 58564265b1a..a709ba00b4d 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -80,7 +80,6 @@ nfs-directory-page-cache-pages-need-to-be-locked-whe.patch ext4-fix-deadlock-allocating-crypto-bounce-page-from.patch btrfs-fix-assertion-failure-on-fsync-with-no_holes-e.patch btrfs-use-bool-argument-in-free_root_pointers.patch -btrfs-free-block-groups-after-free-ing-fs-trees.patch btrfs-remove-trivial-locking-wrappers-of-tree-mod-lo.patch btrfs-fix-race-between-adding-and-putting-tree-mod-s.patch drm-atmel-hlcdc-enable-clock-before-configuring-timi.patch -- 2.47.3