diff options
Diffstat (limited to 'mm/readahead.c')
| -rw-r--r-- | mm/readahead.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/mm/readahead.c b/mm/readahead.c index d0b50034e245..72e7adbb87c7 100644 --- a/mm/readahead.c +++ b/mm/readahead.c | |||
| @@ -254,7 +254,7 @@ out: | |||
| 254 | */ | 254 | */ |
| 255 | static int | 255 | static int |
| 256 | __do_page_cache_readahead(struct address_space *mapping, struct file *filp, | 256 | __do_page_cache_readahead(struct address_space *mapping, struct file *filp, |
| 257 | unsigned long offset, unsigned long nr_to_read) | 257 | pgoff_t offset, unsigned long nr_to_read) |
| 258 | { | 258 | { |
| 259 | struct inode *inode = mapping->host; | 259 | struct inode *inode = mapping->host; |
| 260 | struct page *page; | 260 | struct page *page; |
| @@ -274,7 +274,7 @@ __do_page_cache_readahead(struct address_space *mapping, struct file *filp, | |||
| 274 | */ | 274 | */ |
| 275 | read_lock_irq(&mapping->tree_lock); | 275 | read_lock_irq(&mapping->tree_lock); |
| 276 | for (page_idx = 0; page_idx < nr_to_read; page_idx++) { | 276 | for (page_idx = 0; page_idx < nr_to_read; page_idx++) { |
| 277 | unsigned long page_offset = offset + page_idx; | 277 | pgoff_t page_offset = offset + page_idx; |
| 278 | 278 | ||
| 279 | if (page_offset > end_index) | 279 | if (page_offset > end_index) |
| 280 | break; | 280 | break; |
| @@ -311,7 +311,7 @@ out: | |||
| 311 | * memory at once. | 311 | * memory at once. |
| 312 | */ | 312 | */ |
| 313 | int force_page_cache_readahead(struct address_space *mapping, struct file *filp, | 313 | int force_page_cache_readahead(struct address_space *mapping, struct file *filp, |
| 314 | unsigned long offset, unsigned long nr_to_read) | 314 | pgoff_t offset, unsigned long nr_to_read) |
| 315 | { | 315 | { |
| 316 | int ret = 0; | 316 | int ret = 0; |
| 317 | 317 | ||
| @@ -368,7 +368,7 @@ static inline int check_ra_success(struct file_ra_state *ra, | |||
| 368 | * request queues. | 368 | * request queues. |
| 369 | */ | 369 | */ |
| 370 | int do_page_cache_readahead(struct address_space *mapping, struct file *filp, | 370 | int do_page_cache_readahead(struct address_space *mapping, struct file *filp, |
| 371 | unsigned long offset, unsigned long nr_to_read) | 371 | pgoff_t offset, unsigned long nr_to_read) |
| 372 | { | 372 | { |
| 373 | if (bdi_read_congested(mapping->backing_dev_info)) | 373 | if (bdi_read_congested(mapping->backing_dev_info)) |
| 374 | return -1; | 374 | return -1; |
| @@ -385,7 +385,7 @@ int do_page_cache_readahead(struct address_space *mapping, struct file *filp, | |||
| 385 | */ | 385 | */ |
| 386 | static int | 386 | static int |
| 387 | blockable_page_cache_readahead(struct address_space *mapping, struct file *filp, | 387 | blockable_page_cache_readahead(struct address_space *mapping, struct file *filp, |
| 388 | unsigned long offset, unsigned long nr_to_read, | 388 | pgoff_t offset, unsigned long nr_to_read, |
| 389 | struct file_ra_state *ra, int block) | 389 | struct file_ra_state *ra, int block) |
| 390 | { | 390 | { |
| 391 | int actual; | 391 | int actual; |
| @@ -430,14 +430,27 @@ static int make_ahead_window(struct address_space *mapping, struct file *filp, | |||
| 430 | return ret; | 430 | return ret; |
| 431 | } | 431 | } |
| 432 | 432 | ||
| 433 | /* | 433 | /** |
| 434 | * page_cache_readahead is the main function. If performs the adaptive | 434 | * page_cache_readahead - generic adaptive readahead |
| 435 | * @mapping: address_space which holds the pagecache and I/O vectors | ||
| 436 | * @ra: file_ra_state which holds the readahead state | ||
| 437 | * @filp: passed on to ->readpage() and ->readpages() | ||
| 438 | * @offset: start offset into @mapping, in PAGE_CACHE_SIZE units | ||
| 439 | * @req_size: hint: total size of the read which the caller is performing in | ||
| 440 | * PAGE_CACHE_SIZE units | ||
| 441 | * | ||
| 442 | * page_cache_readahead() is the main function. If performs the adaptive | ||
| 435 | * readahead window size management and submits the readahead I/O. | 443 | * readahead window size management and submits the readahead I/O. |
| 444 | * | ||
| 445 | * Note that @filp is purely used for passing on to the ->readpage[s]() | ||
| 446 | * handler: it may refer to a different file from @mapping (so we may not use | ||
| 447 | * @filp->f_mapping or @filp->f_dentry->d_inode here). | ||
| 448 | * Also, @ra may not be equal to &@filp->f_ra. | ||
| 449 | * | ||
| 436 | */ | 450 | */ |
| 437 | unsigned long | 451 | unsigned long |
| 438 | page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra, | 452 | page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra, |
| 439 | struct file *filp, unsigned long offset, | 453 | struct file *filp, pgoff_t offset, unsigned long req_size) |
| 440 | unsigned long req_size) | ||
| 441 | { | 454 | { |
| 442 | unsigned long max, newsize; | 455 | unsigned long max, newsize; |
| 443 | int sequential; | 456 | int sequential; |
