Commit e28b851e authored by Qu Wenruo's avatar Qu Wenruo Committed by David Sterba

btrfs: remove extent_map::block_len member

The extent_map::block_len is either extent_map::len (non-compressed
extent) or extent_map::disk_num_bytes (compressed extent).

Since we already have sanity checks to do the cross-checks between the
new and old members, we can drop the old extent_map::block_len now.

For most call sites, they can manually select extent_map::len or
extent_map::disk_num_bytes, since most if not all of them have checked
if the extent is compressed.
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 4aa7b5d1
...@@ -585,7 +585,7 @@ void btrfs_submit_compressed_read(struct btrfs_bio *bbio) ...@@ -585,7 +585,7 @@ void btrfs_submit_compressed_read(struct btrfs_bio *bbio)
} }
ASSERT(extent_map_is_compressed(em)); ASSERT(extent_map_is_compressed(em));
compressed_len = em->block_len; compressed_len = em->disk_num_bytes;
cb = alloc_compressed_bio(inode, file_offset, REQ_OP_READ, cb = alloc_compressed_bio(inode, file_offset, REQ_OP_READ,
end_bbio_compressed_read); end_bbio_compressed_read);
......
...@@ -183,11 +183,18 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 offset, ...@@ -183,11 +183,18 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 offset,
return NULL; return NULL;
} }
static inline u64 extent_map_block_len(const struct extent_map *em)
{
if (extent_map_is_compressed(em))
return em->disk_num_bytes;
return em->len;
}
static inline u64 extent_map_block_end(const struct extent_map *em) static inline u64 extent_map_block_end(const struct extent_map *em)
{ {
if (em->block_start + em->block_len < em->block_start) if (em->block_start + extent_map_block_len(em) < em->block_start)
return (u64)-1; return (u64)-1;
return em->block_start + em->block_len; return em->block_start + extent_map_block_len(em);
} }
static bool can_merge_extent_map(const struct extent_map *em) static bool can_merge_extent_map(const struct extent_map *em)
...@@ -290,10 +297,9 @@ static void dump_extent_map(struct btrfs_fs_info *fs_info, const char *prefix, ...@@ -290,10 +297,9 @@ static void dump_extent_map(struct btrfs_fs_info *fs_info, const char *prefix,
if (!IS_ENABLED(CONFIG_BTRFS_DEBUG)) if (!IS_ENABLED(CONFIG_BTRFS_DEBUG))
return; return;
btrfs_crit(fs_info, btrfs_crit(fs_info,
"%s, start=%llu len=%llu disk_bytenr=%llu disk_num_bytes=%llu ram_bytes=%llu offset=%llu block_start=%llu block_len=%llu flags=0x%x", "%s, start=%llu len=%llu disk_bytenr=%llu disk_num_bytes=%llu ram_bytes=%llu offset=%llu block_start=%llu flags=0x%x",
prefix, em->start, em->len, em->disk_bytenr, em->disk_num_bytes, prefix, em->start, em->len, em->disk_bytenr, em->disk_num_bytes,
em->ram_bytes, em->offset, em->block_start, em->ram_bytes, em->offset, em->block_start, em->flags);
em->block_len, em->flags);
ASSERT(0); ASSERT(0);
} }
...@@ -315,9 +321,6 @@ static void validate_extent_map(struct btrfs_fs_info *fs_info, struct extent_map ...@@ -315,9 +321,6 @@ static void validate_extent_map(struct btrfs_fs_info *fs_info, struct extent_map
if (em->block_start != em->disk_bytenr) if (em->block_start != em->disk_bytenr)
dump_extent_map(fs_info, dump_extent_map(fs_info,
"mismatch block_start/disk_bytenr/offset", em); "mismatch block_start/disk_bytenr/offset", em);
if (em->disk_num_bytes != em->block_len)
dump_extent_map(fs_info,
"mismatch disk_num_bytes/block_len", em);
} else if (em->block_start != em->disk_bytenr + em->offset) { } else if (em->block_start != em->disk_bytenr + em->offset) {
dump_extent_map(fs_info, dump_extent_map(fs_info,
"mismatch block_start/disk_bytenr/offset", em); "mismatch block_start/disk_bytenr/offset", em);
...@@ -355,7 +358,6 @@ static void try_merge_map(struct btrfs_inode *inode, struct extent_map *em) ...@@ -355,7 +358,6 @@ static void try_merge_map(struct btrfs_inode *inode, struct extent_map *em)
if (rb && can_merge_extent_map(merge) && mergeable_maps(merge, em)) { if (rb && can_merge_extent_map(merge) && mergeable_maps(merge, em)) {
em->start = merge->start; em->start = merge->start;
em->len += merge->len; em->len += merge->len;
em->block_len += merge->block_len;
em->block_start = merge->block_start; em->block_start = merge->block_start;
em->generation = max(em->generation, merge->generation); em->generation = max(em->generation, merge->generation);
...@@ -376,7 +378,6 @@ static void try_merge_map(struct btrfs_inode *inode, struct extent_map *em) ...@@ -376,7 +378,6 @@ static void try_merge_map(struct btrfs_inode *inode, struct extent_map *em)
merge = rb_entry(rb, struct extent_map, rb_node); merge = rb_entry(rb, struct extent_map, rb_node);
if (rb && can_merge_extent_map(merge) && mergeable_maps(em, merge)) { if (rb && can_merge_extent_map(merge) && mergeable_maps(em, merge)) {
em->len += merge->len; em->len += merge->len;
em->block_len += merge->block_len;
if (em->disk_bytenr < EXTENT_MAP_LAST_BYTE) if (em->disk_bytenr < EXTENT_MAP_LAST_BYTE)
merge_ondisk_extents(em, merge); merge_ondisk_extents(em, merge);
validate_extent_map(fs_info, em); validate_extent_map(fs_info, em);
...@@ -670,7 +671,6 @@ static noinline int merge_extent_mapping(struct btrfs_inode *inode, ...@@ -670,7 +671,6 @@ static noinline int merge_extent_mapping(struct btrfs_inode *inode,
if (em->block_start < EXTENT_MAP_LAST_BYTE && if (em->block_start < EXTENT_MAP_LAST_BYTE &&
!extent_map_is_compressed(em)) { !extent_map_is_compressed(em)) {
em->block_start += start_diff; em->block_start += start_diff;
em->block_len = em->len;
em->offset += start_diff; em->offset += start_diff;
} }
return add_extent_mapping(inode, em, 0); return add_extent_mapping(inode, em, 0);
...@@ -890,17 +890,11 @@ void btrfs_drop_extent_map_range(struct btrfs_inode *inode, u64 start, u64 end, ...@@ -890,17 +890,11 @@ void btrfs_drop_extent_map_range(struct btrfs_inode *inode, u64 start, u64 end,
if (em->block_start < EXTENT_MAP_LAST_BYTE) { if (em->block_start < EXTENT_MAP_LAST_BYTE) {
split->block_start = em->block_start; split->block_start = em->block_start;
if (compressed)
split->block_len = em->block_len;
else
split->block_len = split->len;
split->disk_bytenr = em->disk_bytenr; split->disk_bytenr = em->disk_bytenr;
split->disk_num_bytes = max(split->block_len, split->disk_num_bytes = em->disk_num_bytes;
em->disk_num_bytes);
split->offset = em->offset; split->offset = em->offset;
split->ram_bytes = em->ram_bytes; split->ram_bytes = em->ram_bytes;
} else { } else {
split->block_len = 0;
split->block_start = em->block_start; split->block_start = em->block_start;
split->disk_bytenr = em->disk_bytenr; split->disk_bytenr = em->disk_bytenr;
split->disk_num_bytes = 0; split->disk_num_bytes = 0;
...@@ -930,23 +924,18 @@ void btrfs_drop_extent_map_range(struct btrfs_inode *inode, u64 start, u64 end, ...@@ -930,23 +924,18 @@ void btrfs_drop_extent_map_range(struct btrfs_inode *inode, u64 start, u64 end,
split->generation = gen; split->generation = gen;
if (em->block_start < EXTENT_MAP_LAST_BYTE) { if (em->block_start < EXTENT_MAP_LAST_BYTE) {
split->disk_num_bytes = max(em->block_len, split->disk_num_bytes = em->disk_num_bytes;
em->disk_num_bytes);
split->offset = em->offset + end - em->start; split->offset = em->offset + end - em->start;
split->ram_bytes = em->ram_bytes; split->ram_bytes = em->ram_bytes;
if (compressed) { if (!compressed) {
split->block_len = em->block_len;
} else {
const u64 diff = end - em->start; const u64 diff = end - em->start;
split->block_len = split->len;
split->block_start += diff; split->block_start += diff;
} }
} else { } else {
split->disk_num_bytes = 0; split->disk_num_bytes = 0;
split->offset = 0; split->offset = 0;
split->ram_bytes = split->len; split->ram_bytes = split->len;
split->block_len = 0;
} }
if (extent_map_in_tree(em)) { if (extent_map_in_tree(em)) {
...@@ -1104,7 +1093,6 @@ int split_extent_map(struct btrfs_inode *inode, u64 start, u64 len, u64 pre, ...@@ -1104,7 +1093,6 @@ int split_extent_map(struct btrfs_inode *inode, u64 start, u64 len, u64 pre,
split_pre->disk_num_bytes = split_pre->len; split_pre->disk_num_bytes = split_pre->len;
split_pre->offset = 0; split_pre->offset = 0;
split_pre->block_start = new_logical; split_pre->block_start = new_logical;
split_pre->block_len = split_pre->len;
split_pre->ram_bytes = split_pre->len; split_pre->ram_bytes = split_pre->len;
split_pre->flags = flags; split_pre->flags = flags;
split_pre->generation = em->generation; split_pre->generation = em->generation;
...@@ -1123,7 +1111,6 @@ int split_extent_map(struct btrfs_inode *inode, u64 start, u64 len, u64 pre, ...@@ -1123,7 +1111,6 @@ int split_extent_map(struct btrfs_inode *inode, u64 start, u64 len, u64 pre,
split_mid->disk_num_bytes = split_mid->len; split_mid->disk_num_bytes = split_mid->len;
split_mid->offset = 0; split_mid->offset = 0;
split_mid->block_start = em->block_start + pre; split_mid->block_start = em->block_start + pre;
split_mid->block_len = split_mid->len;
split_mid->ram_bytes = split_mid->len; split_mid->ram_bytes = split_mid->len;
split_mid->flags = flags; split_mid->flags = flags;
split_mid->generation = em->generation; split_mid->generation = em->generation;
......
...@@ -102,15 +102,6 @@ struct extent_map { ...@@ -102,15 +102,6 @@ struct extent_map {
*/ */
u64 block_start; u64 block_start;
/*
* The on-disk length for the file extent.
*
* For compressed extents it matches btrfs_file_extent_item::disk_num_bytes.
* For uncompressed extents it matches extent_map::len.
* For holes and inline extents it's -1 and shouldn't be used.
*/
u64 block_len;
/* /*
* Generation of the extent map, for merged em it's the highest * Generation of the extent map, for merged em it's the highest
* generation of all merged ems. * generation of all merged ems.
......
...@@ -1307,11 +1307,9 @@ void btrfs_extent_item_to_extent_map(struct btrfs_inode *inode, ...@@ -1307,11 +1307,9 @@ void btrfs_extent_item_to_extent_map(struct btrfs_inode *inode,
if (compress_type != BTRFS_COMPRESS_NONE) { if (compress_type != BTRFS_COMPRESS_NONE) {
extent_map_set_compression(em, compress_type); extent_map_set_compression(em, compress_type);
em->block_start = bytenr; em->block_start = bytenr;
em->block_len = em->disk_num_bytes;
} else { } else {
bytenr += btrfs_file_extent_offset(leaf, fi); bytenr += btrfs_file_extent_offset(leaf, fi);
em->block_start = bytenr; em->block_start = bytenr;
em->block_len = em->len;
if (type == BTRFS_FILE_EXTENT_PREALLOC) if (type == BTRFS_FILE_EXTENT_PREALLOC)
em->flags |= EXTENT_FLAG_PREALLOC; em->flags |= EXTENT_FLAG_PREALLOC;
} }
...@@ -1324,11 +1322,6 @@ void btrfs_extent_item_to_extent_map(struct btrfs_inode *inode, ...@@ -1324,11 +1322,6 @@ void btrfs_extent_item_to_extent_map(struct btrfs_inode *inode,
em->start = 0; em->start = 0;
em->len = fs_info->sectorsize; em->len = fs_info->sectorsize;
em->offset = 0; em->offset = 0;
/*
* Initialize block_len with the same values
* as in inode.c:btrfs_get_extent().
*/
em->block_len = (u64)-1;
extent_map_set_compression(em, compress_type); extent_map_set_compression(em, compress_type);
} else { } else {
btrfs_err(fs_info, btrfs_err(fs_info,
......
...@@ -2349,7 +2349,6 @@ static int fill_holes(struct btrfs_trans_handle *trans, ...@@ -2349,7 +2349,6 @@ static int fill_holes(struct btrfs_trans_handle *trans,
hole_em->block_start = EXTENT_MAP_HOLE; hole_em->block_start = EXTENT_MAP_HOLE;
hole_em->disk_bytenr = EXTENT_MAP_HOLE; hole_em->disk_bytenr = EXTENT_MAP_HOLE;
hole_em->block_len = 0;
hole_em->disk_num_bytes = 0; hole_em->disk_num_bytes = 0;
hole_em->generation = trans->transid; hole_em->generation = trans->transid;
......
...@@ -140,7 +140,7 @@ static noinline int run_delalloc_cow(struct btrfs_inode *inode, ...@@ -140,7 +140,7 @@ static noinline int run_delalloc_cow(struct btrfs_inode *inode,
bool pages_dirty); bool pages_dirty);
static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start, static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start,
u64 len, u64 block_start, u64 len, u64 block_start,
u64 block_len, u64 disk_num_bytes, u64 disk_num_bytes,
u64 ram_bytes, int compress_type, u64 ram_bytes, int compress_type,
const struct btrfs_file_extent *file_extent, const struct btrfs_file_extent *file_extent,
int type); int type);
...@@ -1211,7 +1211,6 @@ static void submit_one_async_extent(struct async_chunk *async_chunk, ...@@ -1211,7 +1211,6 @@ static void submit_one_async_extent(struct async_chunk *async_chunk,
em = create_io_em(inode, start, em = create_io_em(inode, start,
async_extent->ram_size, /* len */ async_extent->ram_size, /* len */
ins.objectid, /* block_start */ ins.objectid, /* block_start */
ins.offset, /* block_len */
ins.offset, /* orig_block_len */ ins.offset, /* orig_block_len */
async_extent->ram_size, /* ram_bytes */ async_extent->ram_size, /* ram_bytes */
async_extent->compress_type, async_extent->compress_type,
...@@ -1454,7 +1453,6 @@ static noinline int cow_file_range(struct btrfs_inode *inode, ...@@ -1454,7 +1453,6 @@ static noinline int cow_file_range(struct btrfs_inode *inode,
em = create_io_em(inode, start, ins.offset, /* len */ em = create_io_em(inode, start, ins.offset, /* len */
ins.objectid, /* block_start */ ins.objectid, /* block_start */
ins.offset, /* block_len */
ins.offset, /* orig_block_len */ ins.offset, /* orig_block_len */
ram_size, /* ram_bytes */ ram_size, /* ram_bytes */
BTRFS_COMPRESS_NONE, /* compress_type */ BTRFS_COMPRESS_NONE, /* compress_type */
...@@ -2192,7 +2190,6 @@ static noinline int run_delalloc_nocow(struct btrfs_inode *inode, ...@@ -2192,7 +2190,6 @@ static noinline int run_delalloc_nocow(struct btrfs_inode *inode,
em = create_io_em(inode, cur_offset, nocow_args.num_bytes, em = create_io_em(inode, cur_offset, nocow_args.num_bytes,
nocow_args.disk_bytenr, /* block_start */ nocow_args.disk_bytenr, /* block_start */
nocow_args.num_bytes, /* block_len */
nocow_args.disk_num_bytes, /* orig_block_len */ nocow_args.disk_num_bytes, /* orig_block_len */
ram_bytes, BTRFS_COMPRESS_NONE, ram_bytes, BTRFS_COMPRESS_NONE,
&nocow_args.file_extent, &nocow_args.file_extent,
...@@ -5028,7 +5025,6 @@ int btrfs_cont_expand(struct btrfs_inode *inode, loff_t oldsize, loff_t size) ...@@ -5028,7 +5025,6 @@ int btrfs_cont_expand(struct btrfs_inode *inode, loff_t oldsize, loff_t size)
hole_em->block_start = EXTENT_MAP_HOLE; hole_em->block_start = EXTENT_MAP_HOLE;
hole_em->disk_bytenr = EXTENT_MAP_HOLE; hole_em->disk_bytenr = EXTENT_MAP_HOLE;
hole_em->block_len = 0;
hole_em->disk_num_bytes = 0; hole_em->disk_num_bytes = 0;
hole_em->ram_bytes = hole_size; hole_em->ram_bytes = hole_size;
hole_em->generation = btrfs_get_fs_generation(fs_info); hole_em->generation = btrfs_get_fs_generation(fs_info);
...@@ -6897,7 +6893,6 @@ struct extent_map *btrfs_get_extent(struct btrfs_inode *inode, ...@@ -6897,7 +6893,6 @@ struct extent_map *btrfs_get_extent(struct btrfs_inode *inode,
em->start = EXTENT_MAP_HOLE; em->start = EXTENT_MAP_HOLE;
em->disk_bytenr = EXTENT_MAP_HOLE; em->disk_bytenr = EXTENT_MAP_HOLE;
em->len = (u64)-1; em->len = (u64)-1;
em->block_len = (u64)-1;
path = btrfs_alloc_path(); path = btrfs_alloc_path();
if (!path) { if (!path) {
...@@ -7055,7 +7050,6 @@ static struct extent_map *btrfs_create_dio_extent(struct btrfs_inode *inode, ...@@ -7055,7 +7050,6 @@ static struct extent_map *btrfs_create_dio_extent(struct btrfs_inode *inode,
const u64 start, const u64 start,
const u64 len, const u64 len,
const u64 block_start, const u64 block_start,
const u64 block_len,
const u64 orig_block_len, const u64 orig_block_len,
const u64 ram_bytes, const u64 ram_bytes,
const int type, const int type,
...@@ -7066,14 +7060,14 @@ static struct extent_map *btrfs_create_dio_extent(struct btrfs_inode *inode, ...@@ -7066,14 +7060,14 @@ static struct extent_map *btrfs_create_dio_extent(struct btrfs_inode *inode,
if (type != BTRFS_ORDERED_NOCOW) { if (type != BTRFS_ORDERED_NOCOW) {
em = create_io_em(inode, start, len, block_start, em = create_io_em(inode, start, len, block_start,
block_len, orig_block_len, ram_bytes, orig_block_len, ram_bytes,
BTRFS_COMPRESS_NONE, /* compress_type */ BTRFS_COMPRESS_NONE, /* compress_type */
file_extent, type); file_extent, type);
if (IS_ERR(em)) if (IS_ERR(em))
goto out; goto out;
} }
ordered = btrfs_alloc_ordered_extent(inode, start, len, len, ordered = btrfs_alloc_ordered_extent(inode, start, len, len,
block_start, block_len, 0, block_start, len, 0,
(1 << type) | (1 << type) |
(1 << BTRFS_ORDERED_DIRECT), (1 << BTRFS_ORDERED_DIRECT),
BTRFS_COMPRESS_NONE); BTRFS_COMPRESS_NONE);
...@@ -7125,7 +7119,7 @@ static struct extent_map *btrfs_new_extent_direct(struct btrfs_inode *inode, ...@@ -7125,7 +7119,7 @@ static struct extent_map *btrfs_new_extent_direct(struct btrfs_inode *inode,
file_extent.offset = 0; file_extent.offset = 0;
file_extent.compression = BTRFS_COMPRESS_NONE; file_extent.compression = BTRFS_COMPRESS_NONE;
em = btrfs_create_dio_extent(inode, dio_data, start, ins.offset, em = btrfs_create_dio_extent(inode, dio_data, start, ins.offset,
ins.objectid, ins.offset, ins.offset, ins.objectid, ins.offset,
ins.offset, BTRFS_ORDERED_REGULAR, ins.offset, BTRFS_ORDERED_REGULAR,
&file_extent); &file_extent);
btrfs_dec_block_group_reservations(fs_info, ins.objectid); btrfs_dec_block_group_reservations(fs_info, ins.objectid);
...@@ -7365,7 +7359,7 @@ static int lock_extent_direct(struct inode *inode, u64 lockstart, u64 lockend, ...@@ -7365,7 +7359,7 @@ static int lock_extent_direct(struct inode *inode, u64 lockstart, u64 lockend,
/* The callers of this must take lock_extent() */ /* The callers of this must take lock_extent() */
static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start, static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start,
u64 len, u64 block_start, u64 len, u64 block_start,
u64 block_len, u64 disk_num_bytes, u64 disk_num_bytes,
u64 ram_bytes, int compress_type, u64 ram_bytes, int compress_type,
const struct btrfs_file_extent *file_extent, const struct btrfs_file_extent *file_extent,
int type) int type)
...@@ -7387,16 +7381,10 @@ static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start, ...@@ -7387,16 +7381,10 @@ static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start,
switch (type) { switch (type) {
case BTRFS_ORDERED_PREALLOC: case BTRFS_ORDERED_PREALLOC:
/* Uncompressed extents. */
ASSERT(block_len == len);
/* We're only referring part of a larger preallocated extent. */ /* We're only referring part of a larger preallocated extent. */
ASSERT(block_len <= ram_bytes); ASSERT(len <= ram_bytes);
break; break;
case BTRFS_ORDERED_REGULAR: case BTRFS_ORDERED_REGULAR:
/* Uncompressed extents. */
ASSERT(block_len == len);
/* COW results a new extent matching our file extent size. */ /* COW results a new extent matching our file extent size. */
ASSERT(disk_num_bytes == len); ASSERT(disk_num_bytes == len);
ASSERT(ram_bytes == len); ASSERT(ram_bytes == len);
...@@ -7422,7 +7410,6 @@ static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start, ...@@ -7422,7 +7410,6 @@ static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start,
em->start = start; em->start = start;
em->len = len; em->len = len;
em->block_len = block_len;
em->block_start = block_start; em->block_start = block_start;
em->disk_bytenr = file_extent->disk_bytenr; em->disk_bytenr = file_extent->disk_bytenr;
em->disk_num_bytes = disk_num_bytes; em->disk_num_bytes = disk_num_bytes;
...@@ -7511,7 +7498,7 @@ static int btrfs_get_blocks_direct_write(struct extent_map **map, ...@@ -7511,7 +7498,7 @@ static int btrfs_get_blocks_direct_write(struct extent_map **map,
em2 = btrfs_create_dio_extent(BTRFS_I(inode), dio_data, start, len, em2 = btrfs_create_dio_extent(BTRFS_I(inode), dio_data, start, len,
block_start, block_start,
len, orig_block_len, orig_block_len,
ram_bytes, type, ram_bytes, type,
&file_extent); &file_extent);
btrfs_dec_nocow_writers(bg); btrfs_dec_nocow_writers(bg);
...@@ -9606,7 +9593,6 @@ static int __btrfs_prealloc_file_range(struct inode *inode, int mode, ...@@ -9606,7 +9593,6 @@ static int __btrfs_prealloc_file_range(struct inode *inode, int mode,
em->block_start = ins.objectid; em->block_start = ins.objectid;
em->disk_bytenr = ins.objectid; em->disk_bytenr = ins.objectid;
em->offset = 0; em->offset = 0;
em->block_len = ins.offset;
em->disk_num_bytes = ins.offset; em->disk_num_bytes = ins.offset;
em->ram_bytes = ins.offset; em->ram_bytes = ins.offset;
em->flags |= EXTENT_FLAG_PREALLOC; em->flags |= EXTENT_FLAG_PREALLOC;
...@@ -10103,12 +10089,12 @@ ssize_t btrfs_encoded_read(struct kiocb *iocb, struct iov_iter *iter, ...@@ -10103,12 +10089,12 @@ ssize_t btrfs_encoded_read(struct kiocb *iocb, struct iov_iter *iter,
* Bail if the buffer isn't large enough to return the whole * Bail if the buffer isn't large enough to return the whole
* compressed extent. * compressed extent.
*/ */
if (em->block_len > count) { if (em->disk_num_bytes > count) {
ret = -ENOBUFS; ret = -ENOBUFS;
goto out_em; goto out_em;
} }
disk_io_size = em->block_len; disk_io_size = em->disk_num_bytes;
count = em->block_len; count = em->disk_num_bytes;
encoded->unencoded_len = em->ram_bytes; encoded->unencoded_len = em->ram_bytes;
encoded->unencoded_offset = iocb->ki_pos - (em->start - em->offset); encoded->unencoded_offset = iocb->ki_pos - (em->start - em->offset);
ret = btrfs_encoded_io_compression_from_extent(fs_info, ret = btrfs_encoded_io_compression_from_extent(fs_info,
...@@ -10356,7 +10342,7 @@ ssize_t btrfs_do_encoded_write(struct kiocb *iocb, struct iov_iter *from, ...@@ -10356,7 +10342,7 @@ ssize_t btrfs_do_encoded_write(struct kiocb *iocb, struct iov_iter *from,
file_extent.compression = compression; file_extent.compression = compression;
em = create_io_em(inode, start, num_bytes, em = create_io_em(inode, start, num_bytes,
ins.objectid, ins.objectid,
ins.offset, ins.offset, ram_bytes, compression, ins.offset, ram_bytes, compression,
&file_extent, BTRFS_ORDERED_COMPRESSED); &file_extent, BTRFS_ORDERED_COMPRESSED);
if (IS_ERR(em)) { if (IS_ERR(em)) {
ret = PTR_ERR(em); ret = PTR_ERR(em);
......
...@@ -2912,7 +2912,6 @@ static noinline_for_stack int setup_relocation_extent_mapping(struct inode *inod ...@@ -2912,7 +2912,6 @@ static noinline_for_stack int setup_relocation_extent_mapping(struct inode *inod
em->start = start; em->start = start;
em->len = end + 1 - start; em->len = end + 1 - start;
em->block_len = em->len;
em->block_start = block_start; em->block_start = block_start;
em->disk_bytenr = block_start; em->disk_bytenr = block_start;
em->disk_num_bytes = em->len; em->disk_num_bytes = em->len;
......
...@@ -28,9 +28,10 @@ static int free_extent_map_tree(struct btrfs_inode *inode) ...@@ -28,9 +28,10 @@ static int free_extent_map_tree(struct btrfs_inode *inode)
if (refcount_read(&em->refs) != 1) { if (refcount_read(&em->refs) != 1) {
ret = -EINVAL; ret = -EINVAL;
test_err( test_err(
"em leak: em (start %llu len %llu block_start %llu block_len %llu) refs %d", "em leak: em (start %llu len %llu block_start %llu disk_num_bytes %llu offset %llu) refs %d",
em->start, em->len, em->block_start, em->start, em->len, em->block_start,
em->block_len, refcount_read(&em->refs)); em->disk_num_bytes, em->offset,
refcount_read(&em->refs));
refcount_set(&em->refs, 1); refcount_set(&em->refs, 1);
} }
...@@ -77,7 +78,6 @@ static int test_case_1(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -77,7 +78,6 @@ static int test_case_1(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
em->start = 0; em->start = 0;
em->len = SZ_16K; em->len = SZ_16K;
em->block_start = 0; em->block_start = 0;
em->block_len = SZ_16K;
em->disk_bytenr = 0; em->disk_bytenr = 0;
em->disk_num_bytes = SZ_16K; em->disk_num_bytes = SZ_16K;
em->ram_bytes = SZ_16K; em->ram_bytes = SZ_16K;
...@@ -101,7 +101,6 @@ static int test_case_1(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -101,7 +101,6 @@ static int test_case_1(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
em->start = SZ_16K; em->start = SZ_16K;
em->len = SZ_4K; em->len = SZ_4K;
em->block_start = SZ_32K; /* avoid merging */ em->block_start = SZ_32K; /* avoid merging */
em->block_len = SZ_4K;
em->disk_bytenr = SZ_32K; /* avoid merging */ em->disk_bytenr = SZ_32K; /* avoid merging */
em->disk_num_bytes = SZ_4K; em->disk_num_bytes = SZ_4K;
em->ram_bytes = SZ_4K; em->ram_bytes = SZ_4K;
...@@ -125,7 +124,6 @@ static int test_case_1(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -125,7 +124,6 @@ static int test_case_1(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
em->start = start; em->start = start;
em->len = len; em->len = len;
em->block_start = start; em->block_start = start;
em->block_len = len;
em->disk_bytenr = start; em->disk_bytenr = start;
em->disk_num_bytes = len; em->disk_num_bytes = len;
em->ram_bytes = len; em->ram_bytes = len;
...@@ -143,11 +141,11 @@ static int test_case_1(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -143,11 +141,11 @@ static int test_case_1(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
goto out; goto out;
} }
if (em->start != 0 || extent_map_end(em) != SZ_16K || if (em->start != 0 || extent_map_end(em) != SZ_16K ||
em->block_start != 0 || em->block_len != SZ_16K) { em->block_start != 0 || em->disk_num_bytes != SZ_16K) {
test_err( test_err(
"case1 [%llu %llu]: ret %d return a wrong em (start %llu len %llu block_start %llu block_len %llu", "case1 [%llu %llu]: ret %d return a wrong em (start %llu len %llu block_start %llu disk_num_bytes %llu",
start, start + len, ret, em->start, em->len, start, start + len, ret, em->start, em->len,
em->block_start, em->block_len); em->block_start, em->disk_num_bytes);
ret = -EINVAL; ret = -EINVAL;
} }
free_extent_map(em); free_extent_map(em);
...@@ -182,7 +180,6 @@ static int test_case_2(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -182,7 +180,6 @@ static int test_case_2(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
em->start = 0; em->start = 0;
em->len = SZ_1K; em->len = SZ_1K;
em->block_start = EXTENT_MAP_INLINE; em->block_start = EXTENT_MAP_INLINE;
em->block_len = (u64)-1;
em->disk_bytenr = EXTENT_MAP_INLINE; em->disk_bytenr = EXTENT_MAP_INLINE;
em->disk_num_bytes = 0; em->disk_num_bytes = 0;
em->ram_bytes = SZ_1K; em->ram_bytes = SZ_1K;
...@@ -206,7 +203,6 @@ static int test_case_2(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -206,7 +203,6 @@ static int test_case_2(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
em->start = SZ_4K; em->start = SZ_4K;
em->len = SZ_4K; em->len = SZ_4K;
em->block_start = SZ_4K; em->block_start = SZ_4K;
em->block_len = SZ_4K;
em->disk_bytenr = SZ_4K; em->disk_bytenr = SZ_4K;
em->disk_num_bytes = SZ_4K; em->disk_num_bytes = SZ_4K;
em->ram_bytes = SZ_4K; em->ram_bytes = SZ_4K;
...@@ -230,7 +226,6 @@ static int test_case_2(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -230,7 +226,6 @@ static int test_case_2(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
em->start = 0; em->start = 0;
em->len = SZ_1K; em->len = SZ_1K;
em->block_start = EXTENT_MAP_INLINE; em->block_start = EXTENT_MAP_INLINE;
em->block_len = (u64)-1;
em->disk_bytenr = EXTENT_MAP_INLINE; em->disk_bytenr = EXTENT_MAP_INLINE;
em->disk_num_bytes = 0; em->disk_num_bytes = 0;
em->ram_bytes = SZ_1K; em->ram_bytes = SZ_1K;
...@@ -247,11 +242,10 @@ static int test_case_2(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -247,11 +242,10 @@ static int test_case_2(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
goto out; goto out;
} }
if (em->start != 0 || extent_map_end(em) != SZ_1K || if (em->start != 0 || extent_map_end(em) != SZ_1K ||
em->block_start != EXTENT_MAP_INLINE || em->block_len != (u64)-1) { em->block_start != EXTENT_MAP_INLINE) {
test_err( test_err(
"case2 [0 1K]: ret %d return a wrong em (start %llu len %llu block_start %llu block_len %llu", "case2 [0 1K]: ret %d return a wrong em (start %llu len %llu block_start %llu",
ret, em->start, em->len, em->block_start, ret, em->start, em->len, em->block_start);
em->block_len);
ret = -EINVAL; ret = -EINVAL;
} }
free_extent_map(em); free_extent_map(em);
...@@ -282,7 +276,6 @@ static int __test_case_3(struct btrfs_fs_info *fs_info, ...@@ -282,7 +276,6 @@ static int __test_case_3(struct btrfs_fs_info *fs_info,
em->start = SZ_4K; em->start = SZ_4K;
em->len = SZ_4K; em->len = SZ_4K;
em->block_start = SZ_4K; em->block_start = SZ_4K;
em->block_len = SZ_4K;
em->disk_bytenr = SZ_4K; em->disk_bytenr = SZ_4K;
em->disk_num_bytes = SZ_4K; em->disk_num_bytes = SZ_4K;
em->ram_bytes = SZ_4K; em->ram_bytes = SZ_4K;
...@@ -306,7 +299,6 @@ static int __test_case_3(struct btrfs_fs_info *fs_info, ...@@ -306,7 +299,6 @@ static int __test_case_3(struct btrfs_fs_info *fs_info,
em->start = 0; em->start = 0;
em->len = SZ_16K; em->len = SZ_16K;
em->block_start = 0; em->block_start = 0;
em->block_len = SZ_16K;
em->disk_bytenr = 0; em->disk_bytenr = 0;
em->disk_num_bytes = SZ_16K; em->disk_num_bytes = SZ_16K;
em->ram_bytes = SZ_16K; em->ram_bytes = SZ_16K;
...@@ -329,11 +321,11 @@ static int __test_case_3(struct btrfs_fs_info *fs_info, ...@@ -329,11 +321,11 @@ static int __test_case_3(struct btrfs_fs_info *fs_info,
* em->start. * em->start.
*/ */
if (start < em->start || start + len > extent_map_end(em) || if (start < em->start || start + len > extent_map_end(em) ||
em->start != em->block_start || em->len != em->block_len) { em->start != em->block_start) {
test_err( test_err(
"case3 [%llu %llu): ret %d em (start %llu len %llu block_start %llu block_len %llu)", "case3 [%llu %llu): ret %d em (start %llu len %llu block_start %llu block_len %llu)",
start, start + len, ret, em->start, em->len, start, start + len, ret, em->start, em->len,
em->block_start, em->block_len); em->block_start, em->disk_num_bytes);
ret = -EINVAL; ret = -EINVAL;
} }
free_extent_map(em); free_extent_map(em);
...@@ -395,7 +387,6 @@ static int __test_case_4(struct btrfs_fs_info *fs_info, ...@@ -395,7 +387,6 @@ static int __test_case_4(struct btrfs_fs_info *fs_info,
em->start = 0; em->start = 0;
em->len = SZ_8K; em->len = SZ_8K;
em->block_start = 0; em->block_start = 0;
em->block_len = SZ_8K;
em->disk_bytenr = 0; em->disk_bytenr = 0;
em->disk_num_bytes = SZ_8K; em->disk_num_bytes = SZ_8K;
em->ram_bytes = SZ_8K; em->ram_bytes = SZ_8K;
...@@ -419,7 +410,6 @@ static int __test_case_4(struct btrfs_fs_info *fs_info, ...@@ -419,7 +410,6 @@ static int __test_case_4(struct btrfs_fs_info *fs_info,
em->start = SZ_8K; em->start = SZ_8K;
em->len = 24 * SZ_1K; em->len = 24 * SZ_1K;
em->block_start = SZ_16K; /* avoid merging */ em->block_start = SZ_16K; /* avoid merging */
em->block_len = 24 * SZ_1K;
em->disk_bytenr = SZ_16K; /* avoid merging */ em->disk_bytenr = SZ_16K; /* avoid merging */
em->disk_num_bytes = 24 * SZ_1K; em->disk_num_bytes = 24 * SZ_1K;
em->ram_bytes = 24 * SZ_1K; em->ram_bytes = 24 * SZ_1K;
...@@ -442,7 +432,6 @@ static int __test_case_4(struct btrfs_fs_info *fs_info, ...@@ -442,7 +432,6 @@ static int __test_case_4(struct btrfs_fs_info *fs_info,
em->start = 0; em->start = 0;
em->len = SZ_32K; em->len = SZ_32K;
em->block_start = 0; em->block_start = 0;
em->block_len = SZ_32K;
em->disk_bytenr = 0; em->disk_bytenr = 0;
em->disk_num_bytes = SZ_32K; em->disk_num_bytes = SZ_32K;
em->ram_bytes = SZ_32K; em->ram_bytes = SZ_32K;
...@@ -462,9 +451,9 @@ static int __test_case_4(struct btrfs_fs_info *fs_info, ...@@ -462,9 +451,9 @@ static int __test_case_4(struct btrfs_fs_info *fs_info,
} }
if (start < em->start || start + len > extent_map_end(em)) { if (start < em->start || start + len > extent_map_end(em)) {
test_err( test_err(
"case4 [%llu %llu): ret %d, added wrong em (start %llu len %llu block_start %llu block_len %llu)", "case4 [%llu %llu): ret %d, added wrong em (start %llu len %llu block_start %llu disk_num_bytes %llu)",
start, start + len, ret, em->start, em->len, em->block_start, start, start + len, ret, em->start, em->len, em->block_start,
em->block_len); em->disk_num_bytes);
ret = -EINVAL; ret = -EINVAL;
} }
free_extent_map(em); free_extent_map(em);
...@@ -529,7 +518,6 @@ static int add_compressed_extent(struct btrfs_inode *inode, ...@@ -529,7 +518,6 @@ static int add_compressed_extent(struct btrfs_inode *inode,
em->start = start; em->start = start;
em->len = len; em->len = len;
em->block_start = block_start; em->block_start = block_start;
em->block_len = SZ_4K;
em->disk_bytenr = block_start; em->disk_bytenr = block_start;
em->disk_num_bytes = SZ_4K; em->disk_num_bytes = SZ_4K;
em->ram_bytes = len; em->ram_bytes = len;
...@@ -753,7 +741,6 @@ static int test_case_6(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -753,7 +741,6 @@ static int test_case_6(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
em->start = SZ_4K; em->start = SZ_4K;
em->len = SZ_4K; em->len = SZ_4K;
em->block_start = SZ_16K; em->block_start = SZ_16K;
em->block_len = SZ_16K;
em->disk_bytenr = SZ_16K; em->disk_bytenr = SZ_16K;
em->disk_num_bytes = SZ_16K; em->disk_num_bytes = SZ_16K;
em->ram_bytes = SZ_16K; em->ram_bytes = SZ_16K;
...@@ -809,7 +796,6 @@ static int test_case_7(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -809,7 +796,6 @@ static int test_case_7(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
em->start = 0; em->start = 0;
em->len = SZ_16K; em->len = SZ_16K;
em->block_start = 0; em->block_start = 0;
em->block_len = SZ_4K;
em->disk_bytenr = 0; em->disk_bytenr = 0;
em->disk_num_bytes = SZ_4K; em->disk_num_bytes = SZ_4K;
em->ram_bytes = SZ_16K; em->ram_bytes = SZ_16K;
...@@ -834,7 +820,6 @@ static int test_case_7(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode) ...@@ -834,7 +820,6 @@ static int test_case_7(struct btrfs_fs_info *fs_info, struct btrfs_inode *inode)
em->start = SZ_32K; em->start = SZ_32K;
em->len = SZ_16K; em->len = SZ_16K;
em->block_start = SZ_32K; em->block_start = SZ_32K;
em->block_len = SZ_16K;
em->disk_bytenr = SZ_32K; em->disk_bytenr = SZ_32K;
em->disk_num_bytes = SZ_16K; em->disk_num_bytes = SZ_16K;
em->ram_bytes = SZ_16K; em->ram_bytes = SZ_16K;
......
...@@ -4670,7 +4670,7 @@ static int log_extent_csums(struct btrfs_trans_handle *trans, ...@@ -4670,7 +4670,7 @@ static int log_extent_csums(struct btrfs_trans_handle *trans,
/* If we're compressed we have to save the entire range of csums. */ /* If we're compressed we have to save the entire range of csums. */
if (extent_map_is_compressed(em)) { if (extent_map_is_compressed(em)) {
csum_offset = 0; csum_offset = 0;
csum_len = max(em->block_len, em->disk_num_bytes); csum_len = em->disk_num_bytes;
} else { } else {
csum_offset = mod_start - em->start; csum_offset = mod_start - em->start;
csum_len = mod_len; csum_len = mod_len;
...@@ -4720,7 +4720,7 @@ static int log_one_extent(struct btrfs_trans_handle *trans, ...@@ -4720,7 +4720,7 @@ static int log_one_extent(struct btrfs_trans_handle *trans,
else else
btrfs_set_stack_file_extent_type(&fi, BTRFS_FILE_EXTENT_REG); btrfs_set_stack_file_extent_type(&fi, BTRFS_FILE_EXTENT_REG);
block_len = max(em->block_len, em->disk_num_bytes); block_len = em->disk_num_bytes;
compress_type = extent_map_compression(em); compress_type = extent_map_compression(em);
if (compress_type != BTRFS_COMPRESS_NONE) { if (compress_type != BTRFS_COMPRESS_NONE) {
btrfs_set_stack_file_extent_disk_bytenr(&fi, em->block_start); btrfs_set_stack_file_extent_disk_bytenr(&fi, em->block_start);
......
...@@ -292,7 +292,6 @@ TRACE_EVENT_CONDITION(btrfs_get_extent, ...@@ -292,7 +292,6 @@ TRACE_EVENT_CONDITION(btrfs_get_extent,
__field( u64, start ) __field( u64, start )
__field( u64, len ) __field( u64, len )
__field( u64, block_start ) __field( u64, block_start )
__field( u64, block_len )
__field( u32, flags ) __field( u32, flags )
__field( int, refs ) __field( int, refs )
), ),
...@@ -303,19 +302,17 @@ TRACE_EVENT_CONDITION(btrfs_get_extent, ...@@ -303,19 +302,17 @@ TRACE_EVENT_CONDITION(btrfs_get_extent,
__entry->start = map->start; __entry->start = map->start;
__entry->len = map->len; __entry->len = map->len;
__entry->block_start = map->block_start; __entry->block_start = map->block_start;
__entry->block_len = map->block_len;
__entry->flags = map->flags; __entry->flags = map->flags;
__entry->refs = refcount_read(&map->refs); __entry->refs = refcount_read(&map->refs);
), ),
TP_printk_btrfs( TP_printk_btrfs(
"root=%llu(%s) ino=%llu start=%llu len=%llu block_start=%llu(%s) block_len=%llu flags=%s refs=%u", "root=%llu(%s) ino=%llu start=%llu len=%llu block_start=%llu(%s) flags=%s refs=%u",
show_root_type(__entry->root_objectid), show_root_type(__entry->root_objectid),
__entry->ino, __entry->ino,
__entry->start, __entry->start,
__entry->len, __entry->len,
show_map_type(__entry->block_start), show_map_type(__entry->block_start),
__entry->block_len,
show_map_flags(__entry->flags), show_map_flags(__entry->flags),
__entry->refs) __entry->refs)
); );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment