]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
erofs: allow large folios for compressed files
authorGao Xiang <hsiangkao@linux.alibaba.com>
Mon, 19 Aug 2024 02:52:07 +0000 (10:52 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Mon, 19 Aug 2024 08:10:04 +0000 (16:10 +0800)
As commit 2e6506e1c4ee ("mm/migrate: fix deadlock in
migrate_pages_batch() on large folios") has landed upstream, large
folios can be safely enabled for compressed inodes since all
prerequisites have already landed in 6.11-rc1.

Stress tests has been running on my fleet for over 20 days without any
regression.  Additionally, users [1] have requested it for months.
Let's allow large folios for EROFS full cases upstream now for wider
testing.

[1] https://lore.kernel.org/r/CAGsJ_4wtE8OcpinuqVwG4jtdx6Qh5f+TON6wz+4HMCq=A2qFcA@mail.gmail.com

Cc: Barry Song <21cnbao@gmail.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
[ Gao Xiang: minor commit typo fixes. ]
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20240819025207.3808649-1-hsiangkao@linux.alibaba.com
Documentation/filesystems/erofs.rst
fs/erofs/inode.c

index cc4626d6ee4f836b50dcb8b3e85de56d01da968f..c293f8e37468cddacafb5d3edc615134408d6b3b 100644 (file)
@@ -75,7 +75,7 @@ Here are the main features of EROFS:
 
  - Support merging tail-end data into a special inode as fragments.
 
- - Support large folios for uncompressed files.
+ - Support large folios to make use of THPs (Transparent Hugepages);
 
  - Support direct I/O on uncompressed files to avoid double caching for loop
    devices;
index 43c09aae2afcd19aa01c0380f06120535c8d78c7..419432be3223b72bb4cf7d3da550697c06ae9306 100644 (file)
@@ -257,25 +257,23 @@ static int erofs_fill_inode(struct inode *inode)
                goto out_unlock;
        }
 
+       mapping_set_large_folios(inode->i_mapping);
        if (erofs_inode_is_data_compressed(vi->datalayout)) {
 #ifdef CONFIG_EROFS_FS_ZIP
                DO_ONCE_LITE_IF(inode->i_blkbits != PAGE_SHIFT,
                          erofs_info, inode->i_sb,
                          "EXPERIMENTAL EROFS subpage compressed block support in use. Use at your own risk!");
                inode->i_mapping->a_ops = &z_erofs_aops;
-               err = 0;
-               goto out_unlock;
-#endif
+#else
                err = -EOPNOTSUPP;
-               goto out_unlock;
-       }
-       inode->i_mapping->a_ops = &erofs_raw_access_aops;
-       mapping_set_large_folios(inode->i_mapping);
+#endif
+       } else {
+               inode->i_mapping->a_ops = &erofs_raw_access_aops;
 #ifdef CONFIG_EROFS_FS_ONDEMAND
-       if (erofs_is_fscache_mode(inode->i_sb))
-               inode->i_mapping->a_ops = &erofs_fscache_access_aops;
+               if (erofs_is_fscache_mode(inode->i_sb))
+                       inode->i_mapping->a_ops = &erofs_fscache_access_aops;
 #endif
-
+       }
 out_unlock:
        erofs_put_metabuf(&buf);
        return err;