From: Matthew Wilcox <willy@infradead.org> To: linux-fsdevel@vger.kernel.org Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-erofs@lists.ozlabs.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, ocfs2-devel@oss.oracle.com, linux-xfs@vger.kernel.org Subject: [PATCH v6 12/16] ext4: Convert from readpages to readahead Date: Mon, 17 Feb 2020 10:46:02 -0800 Message-ID: <20200217184613.19668-22-willy@infradead.org> (raw) In-Reply-To: <20200217184613.19668-1-willy@infradead.org> From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Use the new readahead operation in ext4 Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- fs/ext4/ext4.h | 3 +-- fs/ext4/inode.c | 23 ++++++++++------------- fs/ext4/readpage.c | 22 ++++++++-------------- 3 files changed, 19 insertions(+), 29 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 9a2ee2428ecc..3af755da101d 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -3276,8 +3276,7 @@ static inline void ext4_set_de_type(struct super_block *sb, /* readpages.c */ extern int ext4_mpage_readpages(struct address_space *mapping, - struct list_head *pages, struct page *page, - unsigned nr_pages, bool is_readahead); + struct readahead_control *rac, struct page *page); extern int __init ext4_init_post_read_processing(void); extern void ext4_exit_post_read_processing(void); diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 1305b810c44a..7770e38e17e7 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3218,7 +3218,7 @@ static sector_t ext4_bmap(struct address_space *mapping, sector_t block) static int ext4_readpage(struct file *file, struct page *page) { int ret = -EAGAIN; - struct inode *inode = page->mapping->host; + struct inode *inode = file_inode(file); trace_ext4_readpage(page); @@ -3226,23 +3226,20 @@ static int ext4_readpage(struct file *file, struct page *page) ret = ext4_readpage_inline(inode, page); if (ret == -EAGAIN) - return ext4_mpage_readpages(page->mapping, NULL, page, 1, - false); + return ext4_mpage_readpages(page->mapping, NULL, page); return ret; } -static int -ext4_readpages(struct file *file, struct address_space *mapping, - struct list_head *pages, unsigned nr_pages) +static void ext4_readahead(struct readahead_control *rac) { - struct inode *inode = mapping->host; + struct inode *inode = rac->mapping->host; - /* If the file has inline data, no need to do readpages. */ + /* If the file has inline data, no need to do readahead. */ if (ext4_has_inline_data(inode)) - return 0; + return; - return ext4_mpage_readpages(mapping, pages, NULL, nr_pages, true); + ext4_mpage_readpages(rac->mapping, rac, NULL); } static void ext4_invalidatepage(struct page *page, unsigned int offset, @@ -3587,7 +3584,7 @@ static int ext4_set_page_dirty(struct page *page) static const struct address_space_operations ext4_aops = { .readpage = ext4_readpage, - .readpages = ext4_readpages, + .readahead = ext4_readahead, .writepage = ext4_writepage, .writepages = ext4_writepages, .write_begin = ext4_write_begin, @@ -3604,7 +3601,7 @@ static const struct address_space_operations ext4_aops = { static const struct address_space_operations ext4_journalled_aops = { .readpage = ext4_readpage, - .readpages = ext4_readpages, + .readahead = ext4_readahead, .writepage = ext4_writepage, .writepages = ext4_writepages, .write_begin = ext4_write_begin, @@ -3620,7 +3617,7 @@ static const struct address_space_operations ext4_journalled_aops = { static const struct address_space_operations ext4_da_aops = { .readpage = ext4_readpage, - .readpages = ext4_readpages, + .readahead = ext4_readahead, .writepage = ext4_writepage, .writepages = ext4_writepages, .write_begin = ext4_da_write_begin, diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c index c1769afbf799..e14841ade612 100644 --- a/fs/ext4/readpage.c +++ b/fs/ext4/readpage.c @@ -7,8 +7,8 @@ * * This was originally taken from fs/mpage.c * - * The intent is the ext4_mpage_readpages() function here is intended - * to replace mpage_readpages() in the general case, not just for + * The ext4_mpage_readahead() function here is intended to + * replace mpage_readahead() in the general case, not just for * encrypted files. It has some limitations (see below), where it * will fall back to read_block_full_page(), but these limitations * should only be hit when page_size != block_size. @@ -222,8 +222,7 @@ static inline loff_t ext4_readpage_limit(struct inode *inode) } int ext4_mpage_readpages(struct address_space *mapping, - struct list_head *pages, struct page *page, - unsigned nr_pages, bool is_readahead) + struct readahead_control *rac, struct page *page) { struct bio *bio = NULL; sector_t last_block_in_bio = 0; @@ -241,6 +240,7 @@ int ext4_mpage_readpages(struct address_space *mapping, int length; unsigned relative_block = 0; struct ext4_map_blocks map; + unsigned int nr_pages = rac ? readahead_count(rac) : 1; map.m_pblk = 0; map.m_lblk = 0; @@ -251,14 +251,9 @@ int ext4_mpage_readpages(struct address_space *mapping, int fully_mapped = 1; unsigned first_hole = blocks_per_page; - if (pages) { - page = lru_to_page(pages); - + if (rac) { + page = readahead_page(rac); prefetchw(&page->flags); - list_del(&page->lru); - if (add_to_page_cache_lru(page, mapping, page->index, - readahead_gfp_mask(mapping))) - goto next_page; } if (page_has_buffers(page)) @@ -381,7 +376,7 @@ int ext4_mpage_readpages(struct address_space *mapping, bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9); bio->bi_end_io = mpage_end_io; bio_set_op_attrs(bio, REQ_OP_READ, - is_readahead ? REQ_RAHEAD : 0); + rac ? REQ_RAHEAD : 0); } length = first_hole << blkbits; @@ -406,10 +401,9 @@ int ext4_mpage_readpages(struct address_space *mapping, else unlock_page(page); next_page: - if (pages) + if (rac) put_page(page); } - BUG_ON(pages && !list_empty(pages)); if (bio) submit_bio(bio); return 0; -- 2.25.0
next prev parent reply index Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-17 18:45 [PATCH v6 00/19] Change readahead API Matthew Wilcox 2020-02-17 18:45 ` [PATCH v6 01/19] mm: Return void from various readahead functions Matthew Wilcox 2020-02-18 4:47 ` Dave Chinner 2020-02-18 21:05 ` John Hubbard 2020-02-18 21:21 ` Matthew Wilcox 2020-02-18 21:52 ` John Hubbard 2020-02-17 18:45 ` [PATCH v6 02/19] mm: Ignore return value of ->readpages Matthew Wilcox 2020-02-18 4:48 ` Dave Chinner 2020-02-18 21:33 ` John Hubbard 2020-02-17 18:45 ` [PATCH v6 03/19] mm: Use readahead_control to pass arguments Matthew Wilcox 2020-02-18 5:03 ` Dave Chinner 2020-02-18 13:56 ` Matthew Wilcox 2020-02-18 22:46 ` Dave Chinner 2020-02-18 22:52 ` Matthew Wilcox 2020-02-18 22:22 ` John Hubbard 2020-02-17 18:45 ` [PATCH v6 04/19] mm: Rearrange readahead loop Matthew Wilcox 2020-02-18 5:08 ` Dave Chinner 2020-02-18 13:57 ` Matthew Wilcox 2020-02-18 22:48 ` Dave Chinner 2020-02-18 22:33 ` John Hubbard 2020-02-17 18:45 ` [PATCH v6 04/16] mm: Tweak readahead loop slightly Matthew Wilcox 2020-02-18 22:57 ` John Hubbard 2020-02-18 23:00 ` John Hubbard 2020-02-17 18:45 ` [PATCH v6 05/16] mm: Put readahead pages in cache earlier Matthew Wilcox 2020-02-17 18:45 ` [PATCH v6 05/19] mm: Remove 'page_offset' from readahead loop Matthew Wilcox 2020-02-18 5:14 ` Dave Chinner 2020-02-18 23:08 ` John Hubbard 2020-02-17 18:45 ` [PATCH v6 06/16] mm: Add readahead address space operation Matthew Wilcox 2020-02-17 18:45 ` [PATCH v6 06/19] mm: rename readahead loop variable to 'i' Matthew Wilcox 2020-02-18 5:33 ` Dave Chinner 2020-02-18 23:11 ` John Hubbard 2020-02-17 18:45 ` [PATCH v6 07/16] mm: Add page_cache_readahead_limit Matthew Wilcox 2020-02-17 18:45 ` [PATCH v6 07/19] mm: Put readahead pages in cache earlier Matthew Wilcox 2020-02-18 6:14 ` Dave Chinner 2020-02-18 15:42 ` Matthew Wilcox 2020-02-19 0:59 ` Dave Chinner 2020-02-19 0:01 ` John Hubbard 2020-02-19 1:02 ` Matthew Wilcox 2020-02-19 1:13 ` John Hubbard 2020-02-19 3:24 ` John Hubbard 2020-02-19 14:41 ` Matthew Wilcox 2020-02-19 14:52 ` Christoph Hellwig 2020-02-19 15:01 ` Matthew Wilcox 2020-02-19 20:24 ` John Hubbard 2020-02-17 18:45 ` [PATCH v6 08/16] fs: Convert mpage_readpages to mpage_readahead Matthew Wilcox 2020-02-17 18:45 ` [PATCH v6 08/19] mm: Add readahead address space operation Matthew Wilcox 2020-02-18 6:21 ` Dave Chinner 2020-02-18 16:10 ` Matthew Wilcox 2020-02-19 1:04 ` Dave Chinner 2020-02-19 0:12 ` John Hubbard 2020-02-19 3:10 ` Eric Biggers 2020-02-19 3:35 ` Eric Biggers 2020-02-19 16:52 ` Matthew Wilcox 2020-02-17 18:45 ` [PATCH v6 09/16] btrfs: Convert from readpages to readahead Matthew Wilcox 2020-02-17 18:45 ` [PATCH v6 09/19] mm: Add page_cache_readahead_limit Matthew Wilcox 2020-02-18 6:31 ` Dave Chinner 2020-02-18 19:54 ` Matthew Wilcox 2020-02-19 1:08 ` Dave Chinner 2020-02-19 1:32 ` John Hubbard 2020-02-19 2:23 ` Matthew Wilcox 2020-02-19 2:46 ` John Hubbard 2020-02-17 18:45 ` [PATCH v6 10/16] erofs: Convert uncompressed files from readpages to readahead Matthew Wilcox 2020-02-17 18:45 ` [PATCH v6 10/19] fs: Convert mpage_readpages to mpage_readahead Matthew Wilcox 2020-02-18 1:51 ` [Ocfs2-devel] " Joseph Qi 2020-02-18 6:37 ` Dave Chinner 2020-02-19 2:48 ` John Hubbard 2020-02-19 3:28 ` Eric Biggers 2020-02-19 3:47 ` Matthew Wilcox 2020-02-19 3:55 ` Eric Biggers 2020-02-17 18:45 ` [PATCH v6 11/19] btrfs: Convert from readpages to readahead Matthew Wilcox 2020-02-18 6:57 ` Dave Chinner 2020-02-18 21:12 ` Matthew Wilcox 2020-02-19 1:23 ` Dave Chinner 2020-02-17 18:46 ` [PATCH v6 11/16] erofs: Convert compressed files " Matthew Wilcox 2020-02-19 2:34 ` Gao Xiang 2020-02-17 18:46 ` [PATCH v6 12/19] erofs: Convert uncompressed " Matthew Wilcox 2020-02-19 2:39 ` Gao Xiang 2020-02-19 3:04 ` Dave Chinner 2020-02-17 18:46 ` Matthew Wilcox [this message] 2020-02-17 18:46 ` [PATCH v6 13/19] erofs: Convert compressed " Matthew Wilcox 2020-02-19 3:08 ` Dave Chinner 2020-02-17 18:46 ` [PATCH v6 13/16] f2fs: Convert " Matthew Wilcox 2020-02-17 18:46 ` [PATCH v6 14/19] ext4: " Matthew Wilcox 2020-02-19 3:16 ` Dave Chinner 2020-02-19 3:29 ` Eric Biggers 2020-02-17 18:46 ` [PATCH v6 14/16] fuse: " Matthew Wilcox 2020-02-17 18:46 ` [PATCH v6 15/19] f2fs: " Matthew Wilcox 2020-02-17 18:46 ` [PATCH v6 15/16] iomap: " Matthew Wilcox 2020-02-17 18:46 ` [PATCH v6 16/19] fuse: " Matthew Wilcox 2020-02-19 3:22 ` Dave Chinner 2020-02-17 18:46 ` [PATCH v6 16/16] mm: Use memalloc_nofs_save in readahead path Matthew Wilcox 2020-02-17 18:46 ` [PATCH v6 17/19] iomap: Restructure iomap_readpages_actor Matthew Wilcox 2020-02-19 3:17 ` John Hubbard 2020-02-19 5:35 ` Matthew Wilcox 2020-02-19 3:29 ` Dave Chinner 2020-02-19 6:04 ` Matthew Wilcox 2020-02-19 6:40 ` Dave Chinner 2020-02-19 17:06 ` Matthew Wilcox 2020-02-17 18:46 ` [PATCH v6 18/19] iomap: Convert from readpages to readahead Matthew Wilcox 2020-02-19 3:40 ` Dave Chinner 2020-02-17 18:46 ` [PATCH v6 19/19] mm: Use memalloc_nofs_save in readahead path Matthew Wilcox 2020-02-19 3:43 ` Dave Chinner 2020-02-19 5:22 ` Matthew Wilcox 2020-02-17 18:48 ` [PATCH v6 00/19] Change readahead API Matthew Wilcox 2020-02-18 4:56 ` Dave Chinner 2020-02-18 13:42 ` Matthew Wilcox 2020-02-18 21:26 ` Dave Chinner 2020-02-19 3:45 ` Dave Chinner 2020-02-19 3:48 ` Matthew Wilcox 2020-02-19 3:57 ` Dave Chinner 2020-02-18 20:49 ` John Hubbard
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200217184613.19668-22-willy@infradead.org \ --to=willy@infradead.org \ --cc=cluster-devel@redhat.com \ --cc=linux-btrfs@vger.kernel.org \ --cc=linux-erofs@lists.ozlabs.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-f2fs-devel@lists.sourceforge.net \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-xfs@vger.kernel.org \ --cc=ocfs2-devel@oss.oracle.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-BTRFS Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-btrfs/0 linux-btrfs/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-btrfs linux-btrfs/ https://lore.kernel.org/linux-btrfs \ linux-btrfs@vger.kernel.org public-inbox-index linux-btrfs Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-btrfs AGPL code for this site: git clone https://public-inbox.org/public-inbox.git