On Tue, 29 Nov 2011 11:23:23 +0800 Wu Fengguang <fengguang.wu@xxxxxxxxx> wrote: > > > +{ > > > +#ifdef CONFIG_READAHEAD_STATS > > > + if (readahead_stats_enable) { > > > + readahead_stats(mapping, offset, req_size, ra_flags, > > > + start, size, async_size, actual); > > > + readahead_stats(mapping, offset, req_size, > > > + RA_PATTERN_ALL << READAHEAD_PATTERN_SHIFT, > > > + start, size, async_size, actual); > > > + } > > > +#endif > > > +} > > > > The stub should be inlined, methinks. The overhead of evaluating and > > preparing eight arguments is significant. I don't think the compiler > > is yet smart enough to save us. > > The parameter list actually becomes even out of control when doing the > bit fields: > > + readahead_event(mapping, offset, req_size, > + ra->pattern, ra->for_mmap, ra->for_metadata, > + ra->start + ra->size >= eof, > + ra->start, ra->size, ra->async_size, actual); > > So I end up passing file_ra_state around. The added cost is, I'll have > to dynamically create a file_ra_state for the fadvise case, which > should be acceptable since it's a cold path. That will reduce the cost of something which would have zero cost by making this function a static inline when CONFIG_READAHEAD_STATS=n. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html