summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Tinguely <mark.tinguely@oracle.com>2024-12-05 17:16:50 +0000
committerAndrew Morton <akpm@linux-foundation.org>2025-01-12 20:21:14 -0800
commit2ebe9efc3f455876489ad6ed65b9bf4db292dd35 (patch)
tree4636db8850ddda151c35d02868abdd8837eefa65
parent9d063ebc7f830a8203535e8e45516f4c05deb307 (diff)
ocfs2: support large folios in ocfs2_zero_cluster_folios()
Remove assumptions that a folio is one page in size. Link: https://lkml.kernel.org/r/20241205171653.3179945-23-willy@infradead.org Signed-off-by: Mark Tinguely <mark.tinguely@oracle.com> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Joel Becker <jlbec@evilplan.org> Cc: Jun Piao <piaojun@huawei.com> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Mark Fasheh <mark@fasheh.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--fs/ocfs2/alloc.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 453be2d2c124..5cf698785fae 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -6851,7 +6851,6 @@ static void ocfs2_zero_cluster_folios(struct inode *inode, loff_t start,
u64 phys, handle_t *handle)
{
int i;
- unsigned int from, to = PAGE_SIZE;
struct super_block *sb = inode->i_sb;
BUG_ON(!ocfs2_sparse_alloc(OCFS2_SB(sb)));
@@ -6859,21 +6858,18 @@ static void ocfs2_zero_cluster_folios(struct inode *inode, loff_t start,
if (numfolios == 0)
goto out;
- to = PAGE_SIZE;
for (i = 0; i < numfolios; i++) {
struct folio *folio = folios[i];
+ size_t to = folio_size(folio);
+ size_t from = offset_in_folio(folio, start);
- from = start & (PAGE_SIZE - 1);
- if ((end >> PAGE_SHIFT) == folio->index)
- to = end & (PAGE_SIZE - 1);
-
- BUG_ON(from > PAGE_SIZE);
- BUG_ON(to > PAGE_SIZE);
+ if (to > end - folio_pos(folio))
+ to = end - folio_pos(folio);
ocfs2_map_and_dirty_folio(inode, handle, from, to, folio, 1,
&phys);
- start = (folio->index + 1) << PAGE_SHIFT;
+ start = folio_next_index(folio) << PAGE_SHIFT;
}
out:
if (folios)