]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
erofs: get rid of {get,put}_page() for ztailpacking data
authorGao Xiang <hsiangkao@linux.alibaba.com>
Thu, 26 Jun 2025 08:54:59 +0000 (16:54 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 19 Sep 2025 14:37:38 +0000 (16:37 +0200)
[ Upstream commit 96debe8c27ee2494bbd78abf3744745a84a745f1 ]

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: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20250626085459.339830-1-hsiangkao@linux.alibaba.com
Stable-dep-of: 131897c65e2b ("erofs: fix invalid algorithm for encoded extents")
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/erofs/zdata.c

index 9bb53f00c2c62925060da9f3f56039f80dcb9944..33c61f3b667c33efd16edfd9cd9b58e216427816 100644 (file)
@@ -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) {