diff options
Diffstat (limited to 'fs/f2fs/compress.c')
| -rw-r--r-- | fs/f2fs/compress.c | 38 | 
1 files changed, 23 insertions, 15 deletions
| diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c index 7f26440e8595..985690d81a82 100644 --- a/fs/f2fs/compress.c +++ b/fs/f2fs/compress.c @@ -846,7 +846,7 @@ bool f2fs_cluster_can_merge_page(struct compress_ctx *cc, pgoff_t index)  bool f2fs_all_cluster_page_ready(struct compress_ctx *cc, struct page **pages,  				int index, int nr_pages, bool uptodate)  { -	unsigned long pgidx = pages[index]->index; +	unsigned long pgidx = page_folio(pages[index])->index;  	int i = uptodate ? 0 : 1;  	/* @@ -860,9 +860,11 @@ bool f2fs_all_cluster_page_ready(struct compress_ctx *cc, struct page **pages,  		return false;  	for (; i < cc->cluster_size; i++) { -		if (pages[index + i]->index != pgidx + i) +		struct folio *folio = page_folio(pages[index + i]); + +		if (folio->index != pgidx + i)  			return false; -		if (uptodate && !PageUptodate(pages[index + i])) +		if (uptodate && !folio_test_uptodate(folio))  			return false;  	} @@ -1195,7 +1197,8 @@ bool f2fs_compress_write_end(struct inode *inode, void *fsdata,  		.cluster_size = F2FS_I(inode)->i_cluster_size,  		.rpages = fsdata,  	}; -	bool first_index = (index == cc.rpages[0]->index); +	struct folio *folio = page_folio(cc.rpages[0]); +	bool first_index = (index == folio->index);  	if (copied)  		set_cluster_dirty(&cc); @@ -1239,13 +1242,14 @@ int f2fs_truncate_partial_cluster(struct inode *inode, u64 from, bool lock)  		int i;  		for (i = cluster_size - 1; i >= 0; i--) { -			loff_t start = rpages[i]->index << PAGE_SHIFT; +			struct folio *folio = page_folio(rpages[i]); +			loff_t start = folio->index << PAGE_SHIFT;  			if (from <= start) { -				zero_user_segment(rpages[i], 0, PAGE_SIZE); +				folio_zero_segment(folio, 0, folio_size(folio));  			} else { -				zero_user_segment(rpages[i], from - start, -								PAGE_SIZE); +				folio_zero_segment(folio, from - start, +						folio_size(folio));  				break;  			}  		} @@ -1278,6 +1282,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,  		.encrypted = fscrypt_inode_uses_fs_layer_crypto(cc->inode) ?  									1 : 0,  	}; +	struct folio *folio;  	struct dnode_of_data dn;  	struct node_info ni;  	struct compress_io_ctx *cic; @@ -1289,7 +1294,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,  	/* we should bypass data pages to proceed the kworker jobs */  	if (unlikely(f2fs_cp_error(sbi))) { -		mapping_set_error(cc->rpages[0]->mapping, -EIO); +		mapping_set_error(inode->i_mapping, -EIO);  		goto out_free;  	} @@ -1316,7 +1321,8 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,  			goto out_put_dnode;  	} -	psize = (loff_t)(cc->rpages[last_index]->index + 1) << PAGE_SHIFT; +	folio = page_folio(cc->rpages[last_index]); +	psize = folio_pos(folio) + folio_size(folio);  	err = f2fs_get_node_info(fio.sbi, dn.nid, &ni, false);  	if (err) @@ -1339,7 +1345,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,  	for (i = 0; i < cc->valid_nr_cpages; i++) {  		f2fs_set_compressed_page(cc->cpages[i], inode, -					cc->rpages[i + 1]->index, cic); +				page_folio(cc->rpages[i + 1])->index, cic);  		fio.compressed_page = cc->cpages[i];  		fio.old_blkaddr = data_blkaddr(dn.inode, dn.node_page, @@ -1374,7 +1380,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,  			if (blkaddr == COMPRESS_ADDR)  				fio.compr_blocks++;  			if (__is_valid_data_blkaddr(blkaddr)) -				f2fs_invalidate_blocks(sbi, blkaddr); +				f2fs_invalidate_blocks(sbi, blkaddr, 1);  			f2fs_update_data_blkaddr(&dn, COMPRESS_ADDR);  			goto unlock_continue;  		} @@ -1384,7 +1390,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,  		if (i > cc->valid_nr_cpages) {  			if (__is_valid_data_blkaddr(blkaddr)) { -				f2fs_invalidate_blocks(sbi, blkaddr); +				f2fs_invalidate_blocks(sbi, blkaddr, 1);  				f2fs_update_data_blkaddr(&dn, NEW_ADDR);  			}  			goto unlock_continue; @@ -1545,6 +1551,7 @@ continue_unlock:  		if (!clear_page_dirty_for_io(cc->rpages[i]))  			goto continue_unlock; +		submitted = 0;  		ret = f2fs_write_single_data_page(page_folio(cc->rpages[i]),  						&submitted,  						NULL, NULL, wbc, io_type, @@ -1903,11 +1910,12 @@ struct address_space *COMPRESS_MAPPING(struct f2fs_sb_info *sbi)  	return sbi->compress_inode->i_mapping;  } -void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi, block_t blkaddr) +void f2fs_invalidate_compress_pages_range(struct f2fs_sb_info *sbi, +				block_t blkaddr, unsigned int len)  {  	if (!sbi->compress_inode)  		return; -	invalidate_mapping_pages(COMPRESS_MAPPING(sbi), blkaddr, blkaddr); +	invalidate_mapping_pages(COMPRESS_MAPPING(sbi), blkaddr, blkaddr + len - 1);  }  void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page, | 
