From: Andrew Morton <akpm@zip.com.au>
To: Dave Hansen <haveblue@us.ibm.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: truncate_list_pages() page lock confusion and BUG
Date: Sun, 07 Jul 2002 16:21:25 -0700 [thread overview]
Message-ID: <3D28CCF5.197E909C@zip.com.au> (raw)
In-Reply-To: 3C88087A.2030704@us.ibm.com
Dave Hansen wrote:
>
> I'm getting BUG()s from page_alloc.c:109 in 2.5.6-pre2
>
> truncate_list_pages() contains
>
> failed = TryLockPage(page);
>
> The page should always be locked when I get past there
>
> shortly after this, truncate_complete_page() can be called
>
> truncate_complete_page() calls:
> remove_inode_page(page);
> if (!PageLocked(page))
> PAGE_BUG(page);
> followed immediately by
> page_cache_release(page);
> calls __free_pages_ok(page, 0);
> if (PageLocked(page))
> BUG();
>
> So, it appears that when truncate_complete_page() is called, it is a BUG
> if the page is unlocked in remove_inode_page(), or locked in
> page_cache_release(). What am I missing? Actual bug follows:
>
The page should not be actually freed by truncate_complete_page().
See how truncate_list_pages() has bumped its refcount?
If the page is successfully truncated then the actual freeing
occurs in the page_cache_release() in truncate_list_pages(),
after the page has been unlocked.
Looks like the page refcount has suffered an extra decrement
somewhere. You're hitting this on the not-very-tested
generic_file_write() error path. But it all looks to be OK.
2.5.6 is awfully ancient.
-
next prev parent reply other threads:[~2002-07-07 23:12 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-03-08 0:40 truncate_list_pages() page lock confusion and BUG Dave Hansen
2002-07-07 23:21 ` Andrew Morton [this message]
2002-07-07 23:19 ` Dave Hansen
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=3D28CCF5.197E909C@zip.com.au \
--to=akpm@zip.com.au \
--cc=haveblue@us.ibm.com \
--cc=linux-kernel@vger.kernel.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.