On Tue, Jul 24, 2007 at 12:32:15PM +0800, Fengguang Wu wrote: > On Mon, Jul 23, 2007 at 08:55:35PM -0700, Andrew Morton wrote: > > On Tue, 24 Jul 2007 10:00:12 +0800 Fengguang Wu <[EMAIL PROTECTED]> wrote: > > > > > @@ -342,11 +342,9 @@ ondemand_readahead(struct address_space > > > bool hit_readahead_marker, pgoff_t offset, > > > unsigned long req_size) > > > { > > > - int max; /* max readahead pages */ > > > - int sequential; > > > - > > > - max = ra->ra_pages; > > > - sequential = (offset - ra->prev_index <= 1UL) || (req_size > max); > > > + int max = ra->ra_pages; /* max readahead pages */ > > > + pgoff_t prev_offset; > > > + int sequential; > > > > > > /* > > > * It's the expected callback offset, assume sequential access. > > > @@ -360,6 +358,9 @@ ondemand_readahead(struct address_space > > > goto readit; > > > } > > > > > > + prev_offset = ra->prev_pos >> PAGE_CACHE_SHIFT; > > > + sequential = offset - prev_offset <= 1UL || req_size > max; > > > > It's a bit pointless using an opaque type for prev_offset here, and then > > encoding the knowledge that it is implemented as "unsigned long". > > > > It's a minor thing, but perhaps just "<= 1" would make more sense here. > > Yeah, "<= 1" is OK. But the expression still requires pgoff_t to be > 'unsigned' to work correctly. > > So what about "<= 1U"?
I wrote a test case and find that if pgoff_t is 'signed long', "<= 1U" still yields the wrong result. Only "<= 1UL" does the trick :( - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/