On Mon, Aug 08, 2011 at 09:46:33PM +0800, Peter Zijlstra wrote: > On Sat, 2011-08-06 at 16:44 +0800, Wu Fengguang wrote: > > +static unsigned long bdi_position_ratio(struct backing_dev_info *bdi, > > + unsigned long thresh, > > + unsigned long dirty, > > + unsigned long bdi_thresh, > > + unsigned long bdi_dirty) > > +{ > > + unsigned long limit = hard_dirty_limit(thresh); > > + unsigned long origin; > > + unsigned long goal; > > + unsigned long long span; > > + unsigned long long pos_ratio; /* for scaling up/down the rate limit */ > > + > > + if (unlikely(dirty >= limit)) > > + return 0; > > + > > + /* > > + * global setpoint > > + */ > > + goal = thresh - thresh / DIRTY_SCOPE; > > + origin = 4 * thresh; > > + > > + if (unlikely(origin < limit && dirty > (goal + origin) / 2)) { > > + origin = limit; /* auxiliary control line */ > > + goal = (goal + origin) / 2; > > + pos_ratio >>= 1; > > use before init? Yeah it's embarrassing, I find this bug all the way back to the initial version... It's actually dead code because (origin < limit) should never happen. I feel so good being able to drop 5 more lines of code :) Thanks, Fengguang --- --- linux-next.orig/mm/page-writeback.c 2011-08-08 21:56:11.000000000 +0800 +++ linux-next/mm/page-writeback.c 2011-08-08 22:04:48.000000000 +0800 @@ -538,11 +538,6 @@ static unsigned long bdi_position_ratio( goal = thresh - thresh / DIRTY_SCOPE; origin = 4 * thresh; - if (unlikely(origin < limit && dirty > (goal + origin) / 2)) { - origin = limit; /* auxiliary control line */ - goal = (goal + origin) / 2; - pos_ratio >>= 1; - } pos_ratio = origin - dirty; pos_ratio <<= BANDWIDTH_CALC_SHIFT; do_div(pos_ratio, origin - goal + 1); -- 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