summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGoldwyn Rodrigues <rgoldwyn@suse.de>2022-04-26 08:47:34 -0500
committerDavid Sterba <dsterba@suse.com>2022-05-16 17:17:31 +0200
commit1d8fa2e29bc851ca66f680040fc74294df961bd4 (patch)
treeeb0fc22f642105f84425b422aac58943f561b057
parenta13467ee7ae3742f23f0bef0cafa168312a94cb4 (diff)
downloadlinux-1d8fa2e29bc851ca66f680040fc74294df961bd4.tar.gz
linux-1d8fa2e29bc851ca66f680040fc74294df961bd4.tar.bz2
linux-1d8fa2e29bc851ca66f680040fc74294df961bd4.zip
btrfs: derive compression type from extent map during reads
Derive the compression type from extent map as opposed to the bio flags passed. This makes it more precise and not reliant on function parameters. Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--fs/btrfs/compression.c10
-rw-r--r--fs/btrfs/compression.h2
-rw-r--r--fs/btrfs/inode.c3
3 files changed, 7 insertions, 8 deletions
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index 8fda38a58706..f4564f32f6d9 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -802,7 +802,7 @@ static noinline int add_ra_bio_pages(struct inode *inode,
* bio we were passed and then call the bio end_io calls
*/
void btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
- int mirror_num, unsigned long bio_flags)
+ int mirror_num)
{
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct extent_map_tree *em_tree;
@@ -853,14 +853,14 @@ void btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
em_len = em->len;
em_start = em->start;
- free_extent_map(em);
- em = NULL;
-
cb->len = bio->bi_iter.bi_size;
cb->compressed_len = compressed_len;
- cb->compress_type = extent_compress_type(bio_flags);
+ cb->compress_type = em->compress_type;
cb->orig_bio = bio;
+ free_extent_map(em);
+ em = NULL;
+
cb->nr_pages = DIV_ROUND_UP(compressed_len, PAGE_SIZE);
cb->compressed_pages = kcalloc(cb->nr_pages, sizeof(struct page *), GFP_NOFS);
if (!cb->compressed_pages) {
diff --git a/fs/btrfs/compression.h b/fs/btrfs/compression.h
index ac3c79f8c349..2707404389a5 100644
--- a/fs/btrfs/compression.h
+++ b/fs/btrfs/compression.h
@@ -103,7 +103,7 @@ blk_status_t btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start,
struct cgroup_subsys_state *blkcg_css,
bool writeback);
void btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
- int mirror_num, unsigned long bio_flags);
+ int mirror_num);
unsigned int btrfs_compress_str2level(unsigned int type, const char *str);
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index a907b3ba7d62..e6be5ebe7611 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2606,8 +2606,7 @@ void btrfs_submit_data_bio(struct inode *inode, struct bio *bio,
* the bio if there were any errors, so just return
* here.
*/
- btrfs_submit_compressed_read(inode, bio, mirror_num,
- bio_flags);
+ btrfs_submit_compressed_read(inode, bio, mirror_num);
return;
} else {
/*