From: Andrew Morton <akpm@linux-foundation.org>
To: Glauber Costa <glommer@parallels.com>
Cc: linux-kernel@vger.kernel.org, devel@openvz.org,
linux-mm@kvack.org, cgroups@vger.kernel.org,
Michal Hocko <mhocko@suse.cz>,
Johannes Weiner <hannes@cmpxchg.org>,
kamezawa.hiroyu@jp.fujitsu.com, Greg Thelen <gthelen@google.com>,
Suleiman Souhlal <suleiman@google.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH] remove BUG() in possible but rare condition
Date: Wed, 11 Apr 2012 13:26:35 -0700 [thread overview]
Message-ID: <20120411132635.bfddc6bd.akpm@linux-foundation.org> (raw)
In-Reply-To: <1334167824-19142-1-git-send-email-glommer@parallels.com>
On Wed, 11 Apr 2012 15:10:24 -0300
Glauber Costa <glommer@parallels.com> wrote:
> 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: Glauber Costa <glommer@parallels.com>
> CC: Linus Torvalds <torvalds@linux-foundation.org>
> CC: Andrew Morton <akpm@linux-foundation.org>
> ---
> fs/buffer.c | 1 -
> 1 files changed, 0 insertions(+), 1 deletions(-)
>
> diff --git a/fs/buffer.c b/fs/buffer.c
> index 36d6665..351e18e 100644
> --- a/fs/buffer.c
> +++ b/fs/buffer.c
> @@ -985,7 +985,6 @@ grow_dev_page(struct block_device *bdev, sector_t block,
> return page;
>
> failed:
> - BUG();
> unlock_page(page);
> page_cache_release(page);
> return NULL;
Cute.
AFAICT what happened was that in my April 2002 rewrite of this code I
put a non-fatal buffer_error() warning in that case to tell us that
something bad happened.
Years later we removed the temporary buffer_error() and mistakenly
replaced that warning with a BUG(). Only it *can* happen.
We can remove the BUG() and fix up callers, or we can pass retry=1 into
alloc_page_buffers(), so grow_dev_page() "cannot fail". Immortal
functions are a silly fiction, so we should remove the BUG() and fix up
callers.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: Glauber Costa <glommer@parallels.com>
Cc: <linux-kernel@vger.kernel.org>, <devel@openvz.org>,
<linux-mm@kvack.org>, <cgroups@vger.kernel.org>,
Michal Hocko <mhocko@suse.cz>,
Johannes Weiner <hannes@cmpxchg.org>,
<kamezawa.hiroyu@jp.fujitsu.com>,
Greg Thelen <gthelen@google.com>,
Suleiman Souhlal <suleiman@google.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH] remove BUG() in possible but rare condition
Date: Wed, 11 Apr 2012 13:26:35 -0700 [thread overview]
Message-ID: <20120411132635.bfddc6bd.akpm@linux-foundation.org> (raw)
In-Reply-To: <1334167824-19142-1-git-send-email-glommer@parallels.com>
On Wed, 11 Apr 2012 15:10:24 -0300
Glauber Costa <glommer@parallels.com> wrote:
> 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: Glauber Costa <glommer@parallels.com>
> CC: Linus Torvalds <torvalds@linux-foundation.org>
> CC: Andrew Morton <akpm@linux-foundation.org>
> ---
> fs/buffer.c | 1 -
> 1 files changed, 0 insertions(+), 1 deletions(-)
>
> diff --git a/fs/buffer.c b/fs/buffer.c
> index 36d6665..351e18e 100644
> --- a/fs/buffer.c
> +++ b/fs/buffer.c
> @@ -985,7 +985,6 @@ grow_dev_page(struct block_device *bdev, sector_t block,
> return page;
>
> failed:
> - BUG();
> unlock_page(page);
> page_cache_release(page);
> return NULL;
Cute.
AFAICT what happened was that in my April 2002 rewrite of this code I
put a non-fatal buffer_error() warning in that case to tell us that
something bad happened.
Years later we removed the temporary buffer_error() and mistakenly
replaced that warning with a BUG(). Only it *can* happen.
We can remove the BUG() and fix up callers, or we can pass retry=1 into
alloc_page_buffers(), so grow_dev_page() "cannot fail". Immortal
functions are a silly fiction, so we should remove the BUG() and fix up
callers.
next prev parent reply other threads:[~2012-04-11 20:26 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-11 18:10 [PATCH] remove BUG() in possible but rare condition Glauber Costa
2012-04-11 18:10 ` Glauber Costa
2012-04-11 18:10 ` Glauber Costa
2012-04-11 20:26 ` Andrew Morton [this message]
2012-04-11 20:26 ` Andrew Morton
2012-04-11 20:51 ` Glauber Costa
2012-04-11 20:51 ` Glauber Costa
[not found] ` <4F85EEED.1090906-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-04-11 21:12 ` Andrew Morton
2012-04-11 21:12 ` Andrew Morton
2012-04-11 21:12 ` Andrew Morton
[not found] ` <20120411141244.2839d9a8.akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2012-04-11 21:26 ` Michal Hocko
2012-04-11 21:26 ` Michal Hocko
2012-04-11 21:26 ` Michal Hocko
[not found] ` <1334167824-19142-1-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-04-11 18:48 ` Michal Hocko
2012-04-11 18:48 ` Michal Hocko
2012-04-11 18:48 ` Michal Hocko
[not found] ` <20120411184845.GA24831-VqjxzfR4DlwKmadIfiO5sKVXKuFTiq87@public.gmane.org>
2012-04-11 18:57 ` Linus Torvalds
2012-04-11 18:57 ` Linus Torvalds
2012-04-11 18:57 ` Linus Torvalds
[not found] ` <CA+55aFx1GMWGgh0sTAzvvVSzPQsQ_4NKeaNv1zpKrP4fg1dG+Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-11 19:02 ` Glauber Costa
2012-04-11 19:02 ` Glauber Costa
2012-04-11 19:02 ` Glauber Costa
[not found] ` <4F85D53B.1070806-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-04-11 19:25 ` Michal Hocko
2012-04-11 19:25 ` Michal Hocko
2012-04-11 19:25 ` Michal Hocko
2012-04-11 19:20 ` Michal Hocko
2012-04-11 19:20 ` Michal Hocko
2012-04-11 19:20 ` Michal Hocko
2012-04-11 19:48 ` Don Morris
2012-04-11 21:33 ` Jiri Kosina
2012-04-11 21:33 ` Jiri Kosina
2012-04-11 21:33 ` Jiri Kosina
2012-04-11 18:59 ` Glauber Costa
2012-04-11 18:59 ` Glauber Costa
2012-04-11 18:59 ` Glauber Costa
2012-04-12 9:24 ` Michal Hocko
2012-04-12 9:24 ` Michal Hocko
2012-04-12 9:24 ` Michal Hocko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120411132635.bfddc6bd.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=cgroups@vger.kernel.org \
--cc=devel@openvz.org \
--cc=glommer@parallels.com \
--cc=gthelen@google.com \
--cc=hannes@cmpxchg.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.cz \
--cc=suleiman@google.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.