On 04/27, Chao Yu wrote: > 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?
It seems we can add f2fs_bug_on() separately. > > 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