Re: [patch] mm, mempolicy: make mempolicies robust against errors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 7 Mar 2012, KOSAKI Motohiro wrote:

> > It's unnecessary to BUG() in situations when a mempolicy has an
> > unsupported mode, it just means that a mode doesn't have complete coverage
> > in all mempolicy functions -- which is an error, but not a fatal error --
> > or that a bit has flipped.  Regardless, it's sufficient to warn the user
> > in the kernel log of the situation once and then proceed without crashing
> > the system.
> >
> > This patch converts nearly all the BUG()'s in mm/mempolicy.c to
> > WARN_ON_ONCE(1) and provides the necessary code to return successfully.
> 
> I'm sorry. I simple don't understand the purpose of this patch. every
> mem policy  syscalls have input check then we can't hit BUG()s in
> mempolicy.c. To me, BUG() is obvious notation than WARN_ON_ONCE().
> 

Right, this patch doesn't functionally change anything except it will (1) 
continue to warn users when there's a legitimate mempolicy code error by 
way of WARN_ON_ONCE() (which is good), just without crashing the machine 
unnecessarily and (2) allow the system to stay alive since no mempolicy 
error changed by this bug is fatal.  We should only be using BUG() when 
the side-effects of continuing are fatal; doing WARN_ON_ONCE(1) is 
sufficient annotation, I think, that this code should never be reached -- 
BUG() has no advantage here.

> We usually use WARN_ON_ONCE() for hw drivers code. Because of, the
> warn-on mean "we believe this route never reach, but we afraid there
> is crazy buggy hardware".
> 
> And, now BUG() has renreachable() annotation. why don't it work?
> 
> 
> #define BUG()                                                   \
> do {                                                            \
>         asm volatile("ud2");                                    \
>         unreachable();                                          \
> } while (0)
> 

That's not compiled for CONFIG_BUG=n; such a config fallsback to 
include/asm-generic/bug.h which just does

	#define BUG()	do {} while (0)

because CONFIG_BUG specifically _wants_ to bypass BUG()s and is reasonably 
protected by CONFIG_EXPERT.

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]