[PATCH 1/2] readahead: split ondemand readahead interface into two functions
Split ondemand readahead interface into two functions. I think this makes it a little clearer for non-readahead experts (like Rusty). Internally they both call ondemand_readahead(), but the page argument is changed to an obvious boolean flag. Signed-off-by: Rusty Russell <[EMAIL PROTECTED]> Signed-off-by: Fengguang Wu <[EMAIL PROTECTED]> --- fs/ext3/dir.c |4 - fs/ext4/dir.c |4 - fs/splice.c|6 +- include/linux/mm.h | 20 ++--- mm/filemap.c | 10 ++-- mm/readahead.c | 95 ++- 6 files changed, 84 insertions(+), 55 deletions(-) --- linux-2.6.22-rc4-mm2.orig/fs/ext3/dir.c +++ linux-2.6.22-rc4-mm2/fs/ext3/dir.c @@ -139,10 +139,10 @@ static int ext3_readdir(struct file * fi pgoff_t index = map_bh.b_blocknr >> (PAGE_CACHE_SHIFT - inode->i_blkbits); if (!ra_has_index(&filp->f_ra, index)) - page_cache_readahead_ondemand( + page_cache_sync_readahead( sb->s_bdev->bd_inode->i_mapping, &filp->f_ra, filp, - NULL, index, 1); + index, 1); filp->f_ra.prev_index = index; bh = ext3_bread(NULL, inode, blk, 0, &err); } --- linux-2.6.22-rc4-mm2.orig/fs/ext4/dir.c +++ linux-2.6.22-rc4-mm2/fs/ext4/dir.c @@ -138,10 +138,10 @@ static int ext4_readdir(struct file * fi pgoff_t index = map_bh.b_blocknr >> (PAGE_CACHE_SHIFT - inode->i_blkbits); if (!ra_has_index(&filp->f_ra, index)) - page_cache_readahead_ondemand( + page_cache_sync_readahead( sb->s_bdev->bd_inode->i_mapping, &filp->f_ra, filp, - NULL, index, 1); + index, 1); filp->f_ra.prev_index = index; bh = ext4_bread(NULL, inode, blk, 0, &err); } --- linux-2.6.22-rc4-mm2.orig/fs/splice.c +++ linux-2.6.22-rc4-mm2/fs/splice.c @@ -304,8 +304,8 @@ __generic_file_splice_read(struct file * * readahead/allocate the rest. */ if (spd.nr_pages < nr_pages) - page_cache_readahead_ondemand(mapping, &in->f_ra, in, - NULL, index, req_pages - spd.nr_pages); + page_cache_sync_readahead(mapping, &in->f_ra, in, + index, req_pages - spd.nr_pages); while (spd.nr_pages < nr_pages) { /* @@ -360,7 +360,7 @@ __generic_file_splice_read(struct file * page = pages[page_nr]; if (PageReadahead(page)) - page_cache_readahead_ondemand(mapping, &in->f_ra, in, + page_cache_async_readahead(mapping, &in->f_ra, in, page, index, req_pages - page_nr); /* --- linux-2.6.22-rc4-mm2.orig/include/linux/mm.h +++ linux-2.6.22-rc4-mm2/include/linux/mm.h @@ -1146,12 +1146,20 @@ int do_page_cache_readahead(struct addre pgoff_t offset, unsigned long nr_to_read); int force_page_cache_readahead(struct address_space *mapping, struct file *filp, pgoff_t offset, unsigned long nr_to_read); -unsigned long page_cache_readahead_ondemand(struct address_space *mapping, - struct file_ra_state *ra, - struct file *filp, - struct page *page, - pgoff_t offset, - unsigned long size); + +void page_cache_sync_readahead(struct address_space *mapping, + struct file_ra_state *ra, + struct file *filp, + pgoff_t offset, + unsigned long size); + +void page_cache_async_readahead(struct address_space *mapping, + struct file_ra_state *ra, + struct file *filp, + struct page *pg, + pgoff_t offset, + unsigned long size); + unsigned long max_sane_readahead(unsigned long nr); /* Do stack extension */ --- linux-2.6.22-rc4-mm2.orig/mm/filemap.c +++ linux-2.6.22-rc4-mm2/mm/filemap.c @@ -913,15 +913,15 @@ void do_generic_mapping_read(struct addr find_page: page = find_get_page(mapping, index); if (!page) { - page_cache_readahead_ondemand(mapping, - &ra, fil
[PATCH 1/2] readahead: split ondemand readahead interface into two functions
Split ondemand readahead interface into two functions. I think this makes it a little clearer for non-readahead experts (like Rusty). Internally they both call ondemand_readahead(), but the page argument is changed to an obvious boolean flag. Signed-off-by: Rusty Russell <[EMAIL PROTECTED]> Signed-off-by: Fengguang Wu <[EMAIL PROTECTED]> --- fs/ext3/dir.c |4 - fs/ext4/dir.c |4 - fs/splice.c|6 +- include/linux/mm.h | 20 ++--- mm/filemap.c | 10 ++-- mm/readahead.c | 95 ++- 6 files changed, 84 insertions(+), 55 deletions(-) --- linux-2.6.22-rc4-mm2.orig/fs/ext3/dir.c +++ linux-2.6.22-rc4-mm2/fs/ext3/dir.c @@ -139,10 +139,10 @@ static int ext3_readdir(struct file * fi pgoff_t index = map_bh.b_blocknr >> (PAGE_CACHE_SHIFT - inode->i_blkbits); if (!ra_has_index(&filp->f_ra, index)) - page_cache_readahead_ondemand( + page_cache_sync_readahead( sb->s_bdev->bd_inode->i_mapping, &filp->f_ra, filp, - NULL, index, 1); + index, 1); filp->f_ra.prev_index = index; bh = ext3_bread(NULL, inode, blk, 0, &err); } --- linux-2.6.22-rc4-mm2.orig/fs/ext4/dir.c +++ linux-2.6.22-rc4-mm2/fs/ext4/dir.c @@ -138,10 +138,10 @@ static int ext4_readdir(struct file * fi pgoff_t index = map_bh.b_blocknr >> (PAGE_CACHE_SHIFT - inode->i_blkbits); if (!ra_has_index(&filp->f_ra, index)) - page_cache_readahead_ondemand( + page_cache_sync_readahead( sb->s_bdev->bd_inode->i_mapping, &filp->f_ra, filp, - NULL, index, 1); + index, 1); filp->f_ra.prev_index = index; bh = ext4_bread(NULL, inode, blk, 0, &err); } --- linux-2.6.22-rc4-mm2.orig/fs/splice.c +++ linux-2.6.22-rc4-mm2/fs/splice.c @@ -304,8 +304,8 @@ __generic_file_splice_read(struct file * * readahead/allocate the rest. */ if (spd.nr_pages < nr_pages) - page_cache_readahead_ondemand(mapping, &in->f_ra, in, - NULL, index, req_pages - spd.nr_pages); + page_cache_sync_readahead(mapping, &in->f_ra, in, + index, req_pages - spd.nr_pages); while (spd.nr_pages < nr_pages) { /* @@ -360,7 +360,7 @@ __generic_file_splice_read(struct file * page = pages[page_nr]; if (PageReadahead(page)) - page_cache_readahead_ondemand(mapping, &in->f_ra, in, + page_cache_async_readahead(mapping, &in->f_ra, in, page, index, req_pages - page_nr); /* --- linux-2.6.22-rc4-mm2.orig/include/linux/mm.h +++ linux-2.6.22-rc4-mm2/include/linux/mm.h @@ -1146,12 +1146,20 @@ int do_page_cache_readahead(struct addre pgoff_t offset, unsigned long nr_to_read); int force_page_cache_readahead(struct address_space *mapping, struct file *filp, pgoff_t offset, unsigned long nr_to_read); -unsigned long page_cache_readahead_ondemand(struct address_space *mapping, - struct file_ra_state *ra, - struct file *filp, - struct page *page, - pgoff_t offset, - unsigned long size); + +void page_cache_sync_readahead(struct address_space *mapping, + struct file_ra_state *ra, + struct file *filp, + pgoff_t offset, + unsigned long size); + +void page_cache_async_readahead(struct address_space *mapping, + struct file_ra_state *ra, + struct file *filp, + struct page *pg, + pgoff_t offset, + unsigned long size); + unsigned long max_sane_readahead(unsigned long nr); /* Do stack extension */ --- linux-2.6.22-rc4-mm2.orig/mm/filemap.c +++ linux-2.6.22-rc4-mm2/mm/filemap.c @@ -913,15 +913,15 @@ void do_generic_mapping_read(struct addr find_page: page = find_get_page(mapping, index); if (!page) { - page_cache_readahead_ondemand(mapping, - &ra, fil