Message ID | 20241205171653.3179945-23-willy@infradead.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Convert ocfs2 to use folios | expand |
On 2024/12/6 01:16, Matthew Wilcox (Oracle) wrote: > From: Mark Tinguely <mark.tinguely@oracle.com> > > Remove assumptions that a folio is one page in size. > > Signed-off-by: Mark Tinguely <mark.tinguely@oracle.com> > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Looks good. Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com> > --- > fs/ocfs2/alloc.c | 14 +++++--------- > 1 file changed, 5 insertions(+), 9 deletions(-) > > diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c > index 36b536b54a2d..3bff9314f8e0 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)
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c index 36b536b54a2d..3bff9314f8e0 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)