Re: A regression in recent 3.2 kernel: bdi_dirty_limit() divideerror

From: Wu Fengguang
Date: Tue Jan 10 2012 - 09:38:52 EST


On Tue, Jan 10, 2012 at 06:32:25AM -0800, ÐÐÑÑ ÐÑÐÐÐÐÐÐ wrote:
> Hello, Mr. Fengguang.
>
> This latter patch fixed the problem completely! I've tested vanilla 3.2 with both patches applied and with only the latter one, results are the same:
> - first of all the initial problem solved. I have no "divide error" (not sure if this panic) now.
> - doing daily desktop stuff (e.g. web browsing, movie playback, book reading etc) also without any errors as well as compiling packages.
>
> So, I can confirm the problem is solved completely.
> Thank you and your colleagues very much for you fast response and active help! I am very grateful!

Ilya, thank you too for your report and testing! I'll submit the patch right now.

Thanks,
Fengguang

> --- ÐÐ, 9.1.12, Wu Fengguang <wfg@xxxxxxxxxxxxxxx> ÐÐÑÐÑ:
>
> > ÐÑ: Wu Fengguang <wfg@xxxxxxxxxxxxxxx>
> > ÐÐÐÐ: Re: A regression in recent 3.2 kernel: bdi_dirty_limit() divide error
> > ÐÐÐÑ: "Peter Zijlstra" <a.p.zijlstra@xxxxxxxxx>
> > ÐÐÐÐÑ: "ÐÐÑÑ ÐÑÐÐÐÐÐÐ" <librarian_rus@xxxxxxxxx>, "LKML" <linux-kernel@xxxxxxxxxxxxxxx>, linux-fsdevel@xxxxxxxxxxxxxxx
> > ÐÐÑÐ: ÐÐÐÐÐÐÐÑÐÐÐ, 9 ÑÐÐÐÑÑ 2012, 7:04
> > On Sun, Jan 08, 2012 at 11:19:14AM
> > +0100, Peter Zijlstra wrote:
> >
> > > But even then, we limit PROP_MAX_SHIFT to
> > 3*BITS_PER_LONG/4, I don't
> > > think that could ever overflow.
> >
> > do_div() only uses the lower 32 bit value of the 64 bit
> > denominator,
> > which may happen to be 0.
> >
> > The denominator is not really 64 bit, but limited by
> > PROP_MAX_SHIFT =
> > 48 bit, however that upper limit looks not enough.
> >
> > Ilya, would you help try the attached patch instead?
> >
> > Thanks,
> > Fengguang
> >
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/