• Glauber Costa's avatar
    fs/buffer.c: remove BUG() in possible but rare condition · 61065a30
    Glauber Costa authored
    While stressing the kernel with with failing allocations today, I hit the
    following chain of events:
    
    alloc_page_buffers():
    
    	bh = alloc_buffer_head(GFP_NOFS);
    	if (!bh)
    		goto no_grow; <= path taken
    
    grow_dev_page():
            bh = alloc_page_buffers(page, size, 0);
            if (!bh)
                    goto failed;  <= taken, consequence of the above
    
    and then the failed path BUG()s the kernel.
    
    The failure is inserted a litte bit artificially, but even then, I see no
    reason why it should be deemed impossible in a real box.
    
    Even though this is not a condition that we expect to see around every
    time, failed allocations are expected to be handled, and BUG() sounds just
    too much.  As a matter of fact, grow_dev_page() can return NULL just fine
    in other circumstances, so I propose we just remove it, then.
    Signed-off-by: default avatarGlauber Costa <glommer@parallels.com>
    Cc: Michal Hocko <mhocko@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    61065a30
buffer.c 85.4 KB