/* readpages.c */
 extern int ext4_mpage_readpages(struct address_space *mapping,
                                struct list_head *pages, struct page *page,
-                               unsigned nr_pages);
+                               unsigned nr_pages, bool is_readahead);
 
 /* symlink.c */
 extern const struct inode_operations ext4_encrypted_symlink_inode_operations;
 
                ret = ext4_readpage_inline(inode, page);
 
        if (ret == -EAGAIN)
-               return ext4_mpage_readpages(page->mapping, NULL, page, 1);
+               return ext4_mpage_readpages(page->mapping, NULL, page, 1,
+                                               false);
 
        return ret;
 }
        if (ext4_has_inline_data(inode))
                return 0;
 
-       return ext4_mpage_readpages(mapping, pages, NULL, nr_pages);
+       return ext4_mpage_readpages(mapping, pages, NULL, nr_pages, true);
 }
 
 static void ext4_invalidatepage(struct page *page, unsigned int offset,
 
 
 int ext4_mpage_readpages(struct address_space *mapping,
                         struct list_head *pages, struct page *page,
-                        unsigned nr_pages)
+                        unsigned nr_pages, bool is_readahead)
 {
        struct bio *bio = NULL;
        sector_t last_block_in_bio = 0;
                        bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9);
                        bio->bi_end_io = mpage_end_io;
                        bio->bi_private = ctx;
-                       bio_set_op_attrs(bio, REQ_OP_READ, 0);
+                       bio_set_op_attrs(bio, REQ_OP_READ,
+                                               is_readahead ? REQ_RAHEAD : 0);
                }
 
                length = first_hole << blkbits;