| Date | Sat, 27 May 2006 16:04:43 +0800 | From | Wu Fengguang <> | Subject | Re: [PATCH 17/33] readahead: context based method |
| |
On Fri, May 26, 2006 at 10:27:16AM -0700, Andrew Morton wrote: > Wu Fengguang <wfg@mail.ustc.edu.cn> wrote: > > > > This is the slow code path of adaptive read-ahead. > > > > ... > > > > + > > +/* > > + * Count/estimate cache hits in range [first_index, last_index]. > > + * The estimation is simple and optimistic. > > + */ > > +static int count_cache_hit(struct address_space *mapping, > > + pgoff_t first_index, pgoff_t last_index) > > +{ > > + struct page *page; > > + int size = last_index - first_index + 1; > > `size' might overflow.
It does. Fixed the caller: @@query_page_cache_segment() index = radix_tree_scan_hole_backward(&mapping->page_tree, - offset, ra_max); + offset - 1, ra_max); Here (offset >= 1) always holds.
> > + int count = 0; > > + int i; > > + > > + cond_resched(); > > + read_lock_irq(&mapping->tree_lock); > > + > > + /* > > + * The first page may well is chunk head and has been accessed, > > + * so it is index 0 that makes the estimation optimistic. This > > + * behavior guarantees a readahead when (size < ra_max) and > > + * (readahead_hit_rate >= 16). > > + */ > > + for (i = 0; i < 16;) { > > + page = __find_page(mapping, first_index + > > + size * ((i++ * 29) & 15) / 16); > > 29?
It's a prime number. Should be made obvious by the following macro:
#define CACHE_HIT_HASH_KEY 29 /* some prime number */ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|