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>
This commit is contained in:
Mark Tinguely 2024-12-05 17:16:50 +00:00 committed by Andrew Morton
parent abe7077e35
commit 2cb6a96674

View File

@ -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)