diff options
Diffstat (limited to 'fs/btrfs/compression.c')
| -rw-r--r-- | fs/btrfs/compression.c | 25 | 
1 files changed, 13 insertions, 12 deletions
| diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c index 6441e47d8a5e..a8e2c461aff7 100644 --- a/fs/btrfs/compression.c +++ b/fs/btrfs/compression.c @@ -261,7 +261,7 @@ void btrfs_free_compr_folio(struct folio *folio)  	folio_put(folio);  } -static void end_bbio_comprssed_read(struct btrfs_bio *bbio) +static void end_bbio_compressed_read(struct btrfs_bio *bbio)  {  	struct compressed_bio *cb = to_compressed_bio(bbio);  	blk_status_t status = bbio->bio.bi_status; @@ -334,7 +334,7 @@ static void btrfs_finish_compressed_write_work(struct work_struct *work)   * This also calls the writeback end hooks for the file pages so that metadata   * and checksums can be updated in the file.   */ -static void end_bbio_comprssed_write(struct btrfs_bio *bbio) +static void end_bbio_compressed_write(struct btrfs_bio *bbio)  {  	struct compressed_bio *cb = to_compressed_bio(bbio);  	struct btrfs_fs_info *fs_info = bbio->inode->root->fs_info; @@ -374,7 +374,7 @@ void btrfs_submit_compressed_write(struct btrfs_ordered_extent *ordered,  				   blk_opf_t write_flags,  				   bool writeback)  { -	struct btrfs_inode *inode = BTRFS_I(ordered->inode); +	struct btrfs_inode *inode = ordered->inode;  	struct btrfs_fs_info *fs_info = inode->root->fs_info;  	struct compressed_bio *cb; @@ -383,7 +383,7 @@ void btrfs_submit_compressed_write(struct btrfs_ordered_extent *ordered,  	cb = alloc_compressed_bio(inode, ordered->file_offset,  				  REQ_OP_WRITE | write_flags, -				  end_bbio_comprssed_write); +				  end_bbio_compressed_write);  	cb->start = ordered->file_offset;  	cb->len = ordered->num_bytes;  	cb->compressed_folios = compressed_folios; @@ -507,13 +507,15 @@ static noinline int add_ra_bio_pages(struct inode *inode,  		 */  		if (!em || cur < em->start ||  		    (cur + fs_info->sectorsize > extent_map_end(em)) || -		    (em->block_start >> SECTOR_SHIFT) != orig_bio->bi_iter.bi_sector) { +		    (extent_map_block_start(em) >> SECTOR_SHIFT) != +		    orig_bio->bi_iter.bi_sector) {  			free_extent_map(em);  			unlock_extent(tree, cur, page_end, NULL);  			unlock_page(page);  			put_page(page);  			break;  		} +		add_size = min(em->start + em->len, page_end + 1) - cur;  		free_extent_map(em);  		if (page->index == end_index) { @@ -526,7 +528,6 @@ static noinline int add_ra_bio_pages(struct inode *inode,  			}  		} -		add_size = min(em->start + em->len, page_end + 1) - cur;  		ret = bio_add_page(orig_bio, page, add_size, offset_in_page(cur));  		if (ret != add_size) {  			unlock_extent(tree, cur, page_end, NULL); @@ -585,12 +586,12 @@ void btrfs_submit_compressed_read(struct btrfs_bio *bbio)  	}  	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, -				  end_bbio_comprssed_read); +				  end_bbio_compressed_read); -	cb->start = em->orig_start; +	cb->start = em->start - em->offset;  	em_len = em->len;  	em_start = em->start; @@ -608,7 +609,7 @@ void btrfs_submit_compressed_read(struct btrfs_bio *bbio)  		goto out_free_bio;  	} -	ret2 = btrfs_alloc_folio_array(cb->nr_folios, cb->compressed_folios, 0); +	ret2 = btrfs_alloc_folio_array(cb->nr_folios, cb->compressed_folios);  	if (ret2) {  		ret = BLK_STS_RESOURCE;  		goto out_free_compressed_pages; @@ -1506,7 +1507,7 @@ static void heuristic_collect_sample(struct inode *inode, u64 start, u64 end,   *   * Return non-zero if the compression should be done, 0 otherwise.   */ -int btrfs_compress_heuristic(struct inode *inode, u64 start, u64 end) +int btrfs_compress_heuristic(struct btrfs_inode *inode, u64 start, u64 end)  {  	struct list_head *ws_list = get_workspace(0, 0);  	struct heuristic_ws *ws; @@ -1516,7 +1517,7 @@ int btrfs_compress_heuristic(struct inode *inode, u64 start, u64 end)  	ws = list_entry(ws_list, struct heuristic_ws, list); -	heuristic_collect_sample(inode, start, end, ws); +	heuristic_collect_sample(&inode->vfs_inode, start, end, ws);  	if (sample_repeated_patterns(ws)) {  		ret = 1; |