From: Greg Kroah-Hartman Date: Thu, 15 Feb 2018 10:08:33 +0000 (+0100) Subject: 4.4-stable patches X-Git-Tag: v4.15.4~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b2a9aa3d18025add466922bc01412eb76b565603;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: btrfs-handle-btrfs_set_extent_delalloc-failure-in-fixup-worker.patch --- diff --git a/queue-4.4/btrfs-handle-btrfs_set_extent_delalloc-failure-in-fixup-worker.patch b/queue-4.4/btrfs-handle-btrfs_set_extent_delalloc-failure-in-fixup-worker.patch new file mode 100644 index 00000000000..20b81e2ed32 --- /dev/null +++ b/queue-4.4/btrfs-handle-btrfs_set_extent_delalloc-failure-in-fixup-worker.patch @@ -0,0 +1,44 @@ +From f3038ee3a3f1017a1cbe9907e31fa12d366c5dcb Mon Sep 17 00:00:00 2001 +From: Nikolay Borisov +Date: Tue, 5 Dec 2017 09:29:19 +0200 +Subject: btrfs: Handle btrfs_set_extent_delalloc failure in fixup worker + +From: Nikolay Borisov + +commit f3038ee3a3f1017a1cbe9907e31fa12d366c5dcb upstream. + +This function was introduced by 247e743cbe6e ("Btrfs: Use async helpers +to deal with pages that have been improperly dirtied") and it didn't do +any error handling then. This function might very well fail in ENOMEM +situation, yet it's not handled, this could lead to inconsistent state. +So let's handle the failure by setting the mapping error bit. + +Signed-off-by: Nikolay Borisov +Reviewed-by: Qu Wenruo +Reviewed-by: David Sterba +Signed-off-by: David Sterba +Signed-off-by: Greg Kroah-Hartman + +--- + fs/btrfs/inode.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +--- a/fs/btrfs/inode.c ++++ b/fs/btrfs/inode.c +@@ -2015,7 +2015,15 @@ again: + goto out; + } + +- btrfs_set_extent_delalloc(inode, page_start, page_end, &cached_state); ++ ret = btrfs_set_extent_delalloc(inode, page_start, page_end, ++ &cached_state); ++ if (ret) { ++ mapping_set_error(page->mapping, ret); ++ end_extent_writepage(page, ret, page_start, page_end); ++ ClearPageChecked(page); ++ goto out; ++ } ++ + ClearPageChecked(page); + set_page_dirty(page); + out: diff --git a/queue-4.4/series b/queue-4.4/series index ba417e12982..0d73eefb453 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -100,3 +100,4 @@ alpha-fix-reboot-on-avanti-platform.patch xtensa-fix-futex_atomic_cmpxchg_inatomic.patch edac-octeon-fix-an-uninitialized-variable-warning.patch pktcdvd-fix-pkt_setup_dev-error-path.patch +btrfs-handle-btrfs_set_extent_delalloc-failure-in-fixup-worker.patch