mm: add readahead address space operation
This replaces ->readpages with a saner interface: - Return void instead of an ignored error code. - Page cache is already populated with locked pages when ->readahead is called. - New arguments can be passed to the implementation without changing all the filesystems that use a common helper function like mpage_readahead(). Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: William Kucharski <william.kucharski@oracle.com> Cc: Chao Yu <yuchao0@huawei.com> Cc: Cong Wang <xiyou.wangcong@gmail.com> Cc: Darrick J. Wong <darrick.wong@oracle.com> Cc: Dave Chinner <dchinner@redhat.com> Cc: Eric Biggers <ebiggers@google.com> Cc: Gao Xiang <gaoxiang25@huawei.com> Cc: Jaegeuk Kim <jaegeuk@kernel.org> Cc: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Zi Yan <ziy@nvidia.com> Cc: Johannes Thumshirn <johannes.thumshirn@wdc.com> Cc: Miklos Szeredi <mszeredi@redhat.com> Link: http://lkml.kernel.org/r/20200414150233.24495-12-willy@infradead.org Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
c1f6925e10
commit
8151b4c8be
@@ -125,7 +125,14 @@ static void read_pages(struct readahead_control *rac, struct list_head *pages,
|
||||
|
||||
blk_start_plug(&plug);
|
||||
|
||||
if (aops->readpages) {
|
||||
if (aops->readahead) {
|
||||
aops->readahead(rac);
|
||||
/* Clean up the remaining pages */
|
||||
while ((page = readahead_page(rac))) {
|
||||
unlock_page(page);
|
||||
put_page(page);
|
||||
}
|
||||
} else if (aops->readpages) {
|
||||
aops->readpages(rac->file, rac->mapping, pages,
|
||||
readahead_count(rac));
|
||||
/* Clean up the remaining pages */
|
||||
@@ -233,7 +240,8 @@ void force_page_cache_readahead(struct address_space *mapping,
|
||||
struct file_ra_state *ra = &filp->f_ra;
|
||||
unsigned long max_pages;
|
||||
|
||||
if (unlikely(!mapping->a_ops->readpage && !mapping->a_ops->readpages))
|
||||
if (unlikely(!mapping->a_ops->readpage && !mapping->a_ops->readpages &&
|
||||
!mapping->a_ops->readahead))
|
||||
return;
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user