Messages in this thread | | | Date | Wed, 18 Nov 2015 09:32:27 -0800 | From | "Shi, Yang" <> | Subject | Re: [PATCH] writeback: initialize m_dirty to avoid compile warning |
| |
On 11/18/2015 1:53 AM, Arnd Bergmann wrote: > On Tuesday 17 November 2015 15:38:55 Andrew Morton wrote: >> On Fri, 13 Nov 2015 10:26:41 -0800 Yang Shi <yang.shi@linaro.org> wrote: >> >>> When building kernel with gcc 5.2, the below warning is raised: >>> >>> mm/page-writeback.c: In function 'balance_dirty_pages.isra.10': >>> mm/page-writeback.c:1545:17: warning: 'm_dirty' may be used uninitialized in this function [-Wmaybe-uninitialized] >>> unsigned long m_dirty, m_thresh, m_bg_thresh; >>> >>> The m_dirty{thresh, bg_thresh} are initialized in the block of "if (mdtc)", >>> so if mdts is null, they won't be initialized before being used. >>> Initialize m_dirty to zero, also initialize m_thresh and m_bg_thresh to keep >>> consistency. >>> >>> They are used later by if condition: >>> !mdtc || m_dirty <= dirty_freerun_ceiling(m_thresh, m_bg_thresh) >>> >>> If mdtc is null, dirty_freerun_ceiling will not be called at all, so the >>> initialization will not change any behavior other than just ceasing the compile >>> warning. >> >> Geeze I hate that warning. gcc really could be a bit smarter about it >> and this is such a case. >> >>> --- a/mm/page-writeback.c >>> +++ b/mm/page-writeback.c >>> @@ -1542,7 +1542,7 @@ static void balance_dirty_pages(struct address_space *mapping, >>> for (;;) { >>> unsigned long now = jiffies; >>> unsigned long dirty, thresh, bg_thresh; >>> - unsigned long m_dirty, m_thresh, m_bg_thresh; >>> + unsigned long m_dirty = 0, m_thresh = 0, m_bg_thresh = 0; >>> >>> /* >>> * Unstable writes are a feature of certain networked >> >> Adding runtime overhead to suppress a compile-time warning is Just >> Wrong. >> >> With gcc-4.4.4 the above patch actually reduces page-writeback.o's >> .text by 36 bytes, lol. With gcc-4.8.4 the patch saves 19 bytes. No >> idea what's going on there... > > I've done tons of build tests and never got the warning for the variables > other than m_dirty, and that one also just with very few configurations > (e.g. ARM omap2plus_defconfig).
Yes, I just got the warning for m_dirty too. Just initialize m_thresh and m_bg_thresh to keep consistency (not sure if it is necessary). And, I'm a little bit confused why gcc just reports m_dirty but ignore others.
> > How about initializing only m_dirty but not the others?
Fine to me.
Thanks, Yang
> > Arnd >
| |