btrfs: ignore incorrect btrfs_file_extent_item::ram_bytes
[HICCUP] Kernels can create file extent items with incorrect ram_bytes like this: item 6 key (257 EXTENT_DATA 0) itemoff 15816 itemsize 53 generation 7 type 1 (regular) extent data disk byte 13631488 nr 32768 extent data offset 0 nr 4096 ram 4096 extent compression 0 (none) Thankfully kernel can handle them properly, as in that case ram_bytes is not utilized at all. [ENHANCEMENT] Since the hiccup is not going to cause any data-loss and is only a minor violation of on-disk format, here we only need to ignore the incorrect ram_bytes value, and use the correct one from btrfs_file_extent_item::disk_num_bytes. Reviewed-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
0edeb6ea46
commit
88e2e6d724
@ -1306,6 +1306,13 @@ void btrfs_extent_item_to_extent_map(struct btrfs_inode *inode,
|
||||
if (compress_type != BTRFS_COMPRESS_NONE) {
|
||||
extent_map_set_compression(em, compress_type);
|
||||
} else {
|
||||
/*
|
||||
* Older kernels can create regular non-hole data
|
||||
* extents with ram_bytes smaller than disk_num_bytes.
|
||||
* Not a big deal, just always use disk_num_bytes
|
||||
* for ram_bytes.
|
||||
*/
|
||||
em->ram_bytes = em->disk_num_bytes;
|
||||
if (type == BTRFS_FILE_EXTENT_PREALLOC)
|
||||
em->flags |= EXTENT_FLAG_PREALLOC;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user