Commit 96debe8c authored by Gao Xiang's avatar Gao Xiang
Browse files

erofs: get rid of {get,put}_page() for ztailpacking data



The compressed data for the ztailpacking feature is fetched from
the metadata inode (e.g., bd_inode), which is folio-based.

Therefore, the folio interface should be used instead.

Signed-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20250626085459.339830-1-hsiangkao@linux.alibaba.com
parent 89be9a83
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -805,6 +805,7 @@ static int z_erofs_pcluster_begin(struct z_erofs_frontend *fe)
	struct erofs_map_blocks *map = &fe->map;
	struct super_block *sb = fe->inode->i_sb;
	struct z_erofs_pcluster *pcl = NULL;
	void *ptr;
	int ret;

	DBG_BUGON(fe->pcl);
@@ -854,15 +855,13 @@ static int z_erofs_pcluster_begin(struct z_erofs_frontend *fe)
		/* bind cache first when cached decompression is preferred */
		z_erofs_bind_cache(fe);
	} else {
		void *mptr;

		mptr = erofs_read_metabuf(&map->buf, sb, map->m_pa, false);
		if (IS_ERR(mptr)) {
			ret = PTR_ERR(mptr);
		ptr = erofs_read_metabuf(&map->buf, sb, map->m_pa, false);
		if (IS_ERR(ptr)) {
			ret = PTR_ERR(ptr);
			erofs_err(sb, "failed to get inline data %d", ret);
			return ret;
		}
		get_page(map->buf.page);
		folio_get(page_folio(map->buf.page));
		WRITE_ONCE(fe->pcl->compressed_bvecs[0].page, map->buf.page);
		fe->pcl->pageofs_in = map->m_pa & ~PAGE_MASK;
		fe->mode = Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE;
@@ -1325,9 +1324,8 @@ static int z_erofs_decompress_pcluster(struct z_erofs_backend *be, int err)

	/* must handle all compressed pages before actual file pages */
	if (pcl->from_meta) {
		page = pcl->compressed_bvecs[0].page;
		folio_put(page_folio(pcl->compressed_bvecs[0].page));
		WRITE_ONCE(pcl->compressed_bvecs[0].page, NULL);
		put_page(page);
	} else {
		/* managed folios are still left in compressed_bvecs[] */
		for (i = 0; i < pclusterpages; ++i) {