From 0c1ef34b699716a0f91e6214d3023ef26fc62910 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Thu, 12 Nov 2020 12:05:31 -0500 Subject: [PATCH] Fixes for 4.19 Signed-off-by: Sasha Levin --- ...g-error-return-if-writeback-for-exte.patch | 47 +++++++++++++++++++ queue-4.19/series | 1 + 2 files changed, 48 insertions(+) create mode 100644 queue-4.19/btrfs-fix-missing-error-return-if-writeback-for-exte.patch diff --git a/queue-4.19/btrfs-fix-missing-error-return-if-writeback-for-exte.patch b/queue-4.19/btrfs-fix-missing-error-return-if-writeback-for-exte.patch new file mode 100644 index 00000000000..64055cb7964 --- /dev/null +++ b/queue-4.19/btrfs-fix-missing-error-return-if-writeback-for-exte.patch @@ -0,0 +1,47 @@ +From 3780fb9ca62594567db873b171ab98637d178fda Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 11 Sep 2019 17:42:28 +0100 +Subject: Btrfs: fix missing error return if writeback for extent buffer never + started + +From: Filipe Manana + +[ Upstream commit 0607eb1d452d45c5ac4c745a9e9e0d95152ea9d0 ] + +If lock_extent_buffer_for_io() fails, it returns a negative value, but its +caller btree_write_cache_pages() ignores such error. This means that a +call to flush_write_bio(), from lock_extent_buffer_for_io(), might have +failed. We should make btree_write_cache_pages() notice such error values +and stop immediatelly, making sure filemap_fdatawrite_range() returns an +error to the transaction commit path. A failure from flush_write_bio() +should also result in the endio callback end_bio_extent_buffer_writepage() +being invoked, which sets the BTRFS_FS_*_ERR bits appropriately, so that +there's no risk a transaction or log commit doesn't catch a writeback +failure. + +Reviewed-by: Josef Bacik +Signed-off-by: Filipe Manana +Signed-off-by: David Sterba +Signed-off-by: Sasha Levin +--- + fs/btrfs/extent_io.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c +index 301111922a1a2..dabf153843e90 100644 +--- a/fs/btrfs/extent_io.c ++++ b/fs/btrfs/extent_io.c +@@ -3913,6 +3913,10 @@ int btree_write_cache_pages(struct address_space *mapping, + if (!ret) { + free_extent_buffer(eb); + continue; ++ } else if (ret < 0) { ++ done = 1; ++ free_extent_buffer(eb); ++ break; + } + + ret = write_one_eb(eb, fs_info, wbc, &epd); +-- +2.27.0 + diff --git a/queue-4.19/series b/queue-4.19/series index c4680c6063e..65bbced3220 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -23,3 +23,4 @@ can-flexcan-remove-flexcan_quirk_disable_mecr-quirk-.patch xfs-flush-new-eof-page-on-truncate-to-avoid-post-eof.patch xfs-fix-scrub-flagging-rtinherit-even-if-there-is-no.patch tpm-efi-don-t-create-binary_bios_measurements-file-f.patch +btrfs-fix-missing-error-return-if-writeback-for-exte.patch -- 2.47.3