On Wed, Jan 23, 2013 at 12:54:38AM +0100, Jan Kara wrote: > On Sun 20-01-13 11:02:10, paul.szabo@xxxxxxxxxxxxx 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 psz@xxxxxxxxxxxxxxxxx http://www.maths.usyd.edu.au/u/psz/ > > School of Mathematics and Statistics University of Sydney Australia > > > > Reported-by: Paul Szabo <psz@xxxxxxxxxxxxxxxxx> > > Reference: http://bugs.debian.org/695182 > > Signed-off-by: Paul Szabo <psz@xxxxxxxxxxxxxxxxx> > Ah, good catch. Thanks for the patch. You can add: > Reviewed-by: Jan Kara <jack@xxxxxxx> > > I've also added CC to writeback maintainer. Applied. Thanks! It's a good fix. Thanks, Fengguang -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>