diff options
author | Andrew Morton <akpm@osdl.org> | 2005-11-07 03:59:28 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 10:53:37 -0500 |
commit | 7361f4d8ca65d23a18ba009b4484612183332c2f (patch) | |
tree | 7e3dcf22f7d191bcbeb78eb633ae067a76163124 | |
parent | bf8f972d3a1daf969cf44f64cc36d53bfd76441f (diff) |
[PATCH] readahead commentary
Add a few comments surrounding the generic readahead API.
Also convert some ulongs into pgoff_t: the identifier for PAGE_CACHE_SIZE
offsets into pagecache.
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | include/linux/mm.h | 8 | ||||
-rw-r--r-- | mm/readahead.c | 31 |
2 files changed, 26 insertions, 13 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h index 5c1fb0a2e806..7b115feca4df 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -932,13 +932,13 @@ int write_one_page(struct page *page, int wait); | |||
932 | * turning readahead off */ | 932 | * turning readahead off */ |
933 | 933 | ||
934 | int do_page_cache_readahead(struct address_space *mapping, struct file *filp, | 934 | int do_page_cache_readahead(struct address_space *mapping, struct file *filp, |
935 | unsigned long offset, unsigned long nr_to_read); | 935 | pgoff_t offset, unsigned long nr_to_read); |
936 | int force_page_cache_readahead(struct address_space *mapping, struct file *filp, | 936 | int force_page_cache_readahead(struct address_space *mapping, struct file *filp, |
937 | unsigned long offset, unsigned long nr_to_read); | 937 | pgoff_t offset, unsigned long nr_to_read); |
938 | unsigned long page_cache_readahead(struct address_space *mapping, | 938 | unsigned long page_cache_readahead(struct address_space *mapping, |
939 | struct file_ra_state *ra, | 939 | struct file_ra_state *ra, |
940 | struct file *filp, | 940 | struct file *filp, |
941 | unsigned long offset, | 941 | pgoff_t offset, |
942 | unsigned long size); | 942 | unsigned long size); |
943 | void handle_ra_miss(struct address_space *mapping, | 943 | void handle_ra_miss(struct address_space *mapping, |
944 | struct file_ra_state *ra, pgoff_t offset); | 944 | struct file_ra_state *ra, pgoff_t offset); |
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; |