On Wed, Jan 23, 2013 at 12:54:38AM +0100, Jan Kara wrote: > On Sun 20-01-13 11:02:10, [email protected] wrote: > > In bdi_position_ratio(), get difference (setpoint-dirty) right even when > > negative. Both setpoint and dirty are unsigned long, the difference was > > zero-padded thus wrongly sign-extended to s64. This issue affects all > > 32-bit architectures, does not affect 64-bit architectures where long > > and s64 are equivalent. > > > > In this function, dirty is between freerun and limit, the pseudo-float x > > is between [-1,1], expected to be negative about half the time. With > > zero-padding, instead of a small negative x we obtained a large positive > > one so bdi_position_ratio() returned garbage. > > > > Casting the difference to s64 also prevents overflow with left-shift; > > though normally these numbers are small and I never observed a 32-bit > > overflow there. > > > > (This patch does not solve the PAE OOM issue.) > > > > Paul Szabo [email protected] http://www.maths.usyd.edu.au/u/psz/ > > School of Mathematics and Statistics University of Sydney Australia > > > > Reported-by: Paul Szabo <[email protected]> > > Reference: http://bugs.debian.org/695182 > > Signed-off-by: Paul Szabo <[email protected]> > Ah, good catch. Thanks for the patch. You can add: > Reviewed-by: Jan Kara <[email protected]> > > I've also added CC to writeback maintainer.
Applied. Thanks! It's a good fix. Thanks, Fengguang -- 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/

