mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 16:52:18 +00:00
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:
parent
abe7077e35
commit
2cb6a96674
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user