On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote: > Support arbitrary size folios and remove a few hidden calls to > compound_head(). Also remove an unnecessary test of the uptodaate flag; > if mapping_read_folio_gfp() cannot bring the folio uptodate, it will > return an error. > > Signed-off-by: Matthew Wilcox (Oracle) <wi...@infradead.org> > --- > fs/f2fs/super.c | 36 ++++++++++++++++-------------------- > 1 file changed, 16 insertions(+), 20 deletions(-) > > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c > index f087b2b71c89..fd93581bee89 100644 > --- a/fs/f2fs/super.c > +++ b/fs/f2fs/super.c > @@ -2689,12 +2689,9 @@ static ssize_t f2fs_quota_read(struct super_block *sb, > int type, char *data, > { > struct inode *inode = sb_dqopt(sb)->files[type]; > struct address_space *mapping = inode->i_mapping; > - block_t blkidx = F2FS_BYTES_TO_BLK(off); > - int offset = off & (sb->s_blocksize - 1); > int tocopy; > size_t toread; > loff_t i_size = i_size_read(inode); > - struct page *page; > > if (off > i_size) > return 0; > @@ -2703,37 +2700,36 @@ static ssize_t f2fs_quota_read(struct super_block > *sb, int type, char *data, > len = i_size - off; > toread = len; > while (toread > 0) { > - tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread); > + struct folio *folio; > + size_t offset; > + > repeat: > - page = read_cache_page_gfp(mapping, blkidx, GFP_NOFS); > - if (IS_ERR(page)) { > - if (PTR_ERR(page) == -ENOMEM) { > + folio = mapping_read_folio_gfp(mapping, off >> PAGE_SHIFT, > + GFP_NOFS); > + if (IS_ERR(folio)) { > + if (PTR_ERR(folio) == -ENOMEM) { > memalloc_retry_wait(GFP_NOFS); > goto repeat; > } > set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR); > - return PTR_ERR(page); > + return PTR_ERR(folio); > } > + offset = offset_in_folio(folio, off); > + tocopy = min(folio_size(folio) - offset, toread); > > - lock_page(page); > + folio_lock(folio); > > - if (unlikely(page->mapping != mapping)) { > - f2fs_put_page(page, 1); > + if (unlikely(folio->mapping != mapping)) { > + f2fs_folio_put(folio, true); > goto repeat; > } > - if (unlikely(!PageUptodate(page))) {
How about adding f2fs_bug_on(, !folio_test_uptodate(folio)) here to detect any potential bug? Thanks, > - f2fs_put_page(page, 1); > - set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR); > - return -EIO; > - } > > - memcpy_from_page(data, page, offset, tocopy); > - f2fs_put_page(page, 1); > + memcpy_from_folio(data, folio, offset, tocopy); > + f2fs_folio_put(folio, true); > > - offset = 0; > toread -= tocopy; > data += tocopy; > - blkidx++; > + off += tocopy; > } > return len; > } _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel