summaryrefslogtreecommitdiff
path: root/cmds-check.c
diff options
context:
space:
mode:
authorQu Wenruo <quwenruo@cn.fujitsu.com>2016-03-31 10:19:34 +0800
committerDavid Sterba <dsterba@suse.com>2016-05-02 14:40:05 +0200
commit12234d0202a30fb225ebae817b5eb2e80b641d4c (patch)
tree18caf1953fbff72e274ec0fdb8720e580f11fd7e /cmds-check.c
parent1a9df1c68b1e2f479d6b73e96951ca708740c3f9 (diff)
btrfs-progs: fsck: Fix a false metadata extent warning
At least 2 user from mail list reported btrfsck reported false alert of "bad metadata [XXXX,YYYY) crossing stripe boundary". While the reported number are all inside the same 64K boundary. After some check, all the false alert have the same bytenr feature, which can be divided by stripe size (64K). The result seems to be initial 'max_size' can be 0, causing 'start' + 'max_size' - 1, to cross the stripe boundary. Fix it by always update extent_record->cross_stripe when the extent_record is updated, to avoid temporary false alert to be reported. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'cmds-check.c')
-rw-r--r--cmds-check.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/cmds-check.c b/cmds-check.c
index d1570751..ef23ddbe 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -4579,9 +4579,9 @@ static int add_extent_rec(struct cache_tree *extent_cache,
* As now stripe_len is fixed to BTRFS_STRIPE_LEN, just check
* it.
*/
- if (metadata && check_crossing_stripes(rec->start,
- rec->max_size))
- rec->crossing_stripes = 1;
+ if (metadata)
+ rec->crossing_stripes = check_crossing_stripes(
+ rec->start, rec->max_size);
check_extent_type(rec);
maybe_free_extent_rec(extent_cache, rec);
return ret;
@@ -4641,8 +4641,8 @@ static int add_extent_rec(struct cache_tree *extent_cache,
}
if (metadata)
- if (check_crossing_stripes(rec->start, rec->max_size))
- rec->crossing_stripes = 1;
+ rec->crossing_stripes = check_crossing_stripes(rec->start,
+ rec->max_size);
check_extent_type(rec);
return ret;
}