From 294be9c757937b3d7696e4f41691697ac8a01a5c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 21 Feb 2019 13:35:51 +0100 Subject: [PATCH] 4.9-stable patches added patches: btrfs-remove-false-alert-when-fiemap-range-is-smaller-than-on-disk-extent.patch --- ...range-is-smaller-than-on-disk-extent.patch | 91 +++++++++++++++++++ queue-4.9/series | 1 + 2 files changed, 92 insertions(+) create mode 100644 queue-4.9/btrfs-remove-false-alert-when-fiemap-range-is-smaller-than-on-disk-extent.patch diff --git a/queue-4.9/btrfs-remove-false-alert-when-fiemap-range-is-smaller-than-on-disk-extent.patch b/queue-4.9/btrfs-remove-false-alert-when-fiemap-range-is-smaller-than-on-disk-extent.patch new file mode 100644 index 00000000000..a483ceb0255 --- /dev/null +++ b/queue-4.9/btrfs-remove-false-alert-when-fiemap-range-is-smaller-than-on-disk-extent.patch @@ -0,0 +1,91 @@ +From 848c23b78fafdcd3270b06a30737f8dbd70c347f Mon Sep 17 00:00:00 2001 +From: Qu Wenruo +Date: Thu, 22 Jun 2017 10:01:21 +0800 +Subject: btrfs: Remove false alert when fiemap range is smaller than on-disk extent + +From: Qu Wenruo + +commit 848c23b78fafdcd3270b06a30737f8dbd70c347f upstream. + +Commit 4751832da990 ("btrfs: fiemap: Cache and merge fiemap extent before +submit it to user") introduced a warning to catch unemitted cached +fiemap extent. + +However such warning doesn't take the following case into consideration: + +0 4K 8K +|<---- fiemap range --->| +|<----------- On-disk extent ------------------>| + +In this case, the whole 0~8K is cached, and since it's larger than +fiemap range, it break the fiemap extent emit loop. +This leaves the fiemap extent cached but not emitted, and caught by the +final fiemap extent sanity check, causing kernel warning. + +This patch removes the kernel warning and renames the sanity check to +emit_last_fiemap_cache() since it's possible and valid to have cached +fiemap extent. + +Reported-by: David Sterba +Reported-by: Adam Borowski +Fixes: 4751832da990 ("btrfs: fiemap: Cache and merge fiemap extent ...") +Signed-off-by: Qu Wenruo +Signed-off-by: David Sterba +Signed-off-by: Greg Kroah-Hartman + +--- + fs/btrfs/extent_io.c | 28 ++++++++++++---------------- + 1 file changed, 12 insertions(+), 16 deletions(-) + +--- a/fs/btrfs/extent_io.c ++++ b/fs/btrfs/extent_io.c +@@ -4463,29 +4463,25 @@ try_submit_last: + } + + /* +- * Sanity check for fiemap cache ++ * Emit last fiemap cache + * +- * All fiemap cache should be submitted by emit_fiemap_extent() +- * Iteration should be terminated either by last fiemap extent or +- * fieinfo->fi_extents_max. +- * So no cached fiemap should exist. ++ * The last fiemap cache may still be cached in the following case: ++ * 0 4k 8k ++ * |<- Fiemap range ->| ++ * |<------------ First extent ----------->| ++ * ++ * In this case, the first extent range will be cached but not emitted. ++ * So we must emit it before ending extent_fiemap(). + */ +-static int check_fiemap_cache(struct btrfs_fs_info *fs_info, +- struct fiemap_extent_info *fieinfo, +- struct fiemap_cache *cache) ++static int emit_last_fiemap_cache(struct btrfs_fs_info *fs_info, ++ struct fiemap_extent_info *fieinfo, ++ struct fiemap_cache *cache) + { + int ret; + + if (!cache->cached) + return 0; + +- /* Small and recoverbale problem, only to info developer */ +-#ifdef CONFIG_BTRFS_DEBUG +- WARN_ON(1); +-#endif +- btrfs_warn(fs_info, +- "unhandled fiemap cache detected: offset=%llu phys=%llu len=%llu flags=0x%x", +- cache->offset, cache->phys, cache->len, cache->flags); + ret = fiemap_fill_next_extent(fieinfo, cache->offset, cache->phys, + cache->len, cache->flags); + cache->cached = false; +@@ -4701,7 +4697,7 @@ int extent_fiemap(struct inode *inode, s + } + out_free: + if (!ret) +- ret = check_fiemap_cache(root->fs_info, fieinfo, &cache); ++ ret = emit_last_fiemap_cache(root->fs_info, fieinfo, &cache); + free_extent_map(em); + out: + btrfs_free_path(path); diff --git a/queue-4.9/series b/queue-4.9/series index ace384169be..f0e519ca6f0 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -14,4 +14,5 @@ tcp-clear-icsk_backoff-in-tcp_write_queue_purge.patch vxlan-test-dev-flags-iff_up-before-calling-netif_rx.patch net-stmmac-fix-a-race-in-eee-enable-callback.patch net-ipv4-use-a-dedicated-counter-for-icmp_v4-redirect-packets.patch +btrfs-remove-false-alert-when-fiemap-range-is-smaller-than-on-disk-extent.patch x86-livepatch-treat-r_x86_64_plt32-as-r_x86_64_pc32.patch -- 2.47.2