From: Daniel Phillips <phillips@innominate.de>
To: Linus Torvalds <torvalds@transmeta.com>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Re: innd mmap bug in 2.4.0-test12
Date: Thu, 28 Dec 2000 21:36:46 +0100 [thread overview]
Message-ID: <3A4BA45E.4ADEB2DF@innominate.de> (raw)
In-Reply-To: <3A4B8895.CEDA8311@innominate.de> <Pine.LNX.4.10.10012281051480.12260-100000@penguin.transmeta.com>
Linus Torvalds wrote:
> We don't want to lose dirty bits by mistake. The only cases where it's ok
> to clear the dirty bit is when we truncate a page completely (so it won't
> be needed and obviously really shouldn't be written out) and when we've
> lost the last user of a swap cache entry.
>
> Any other cases might be bugs, where we remove a page from a mapping
> without noticing that it is dirty (we had this bug in reclaim_pages(), for
> example).
I tried to go the lazy way the first time. This time I put the BUG in
there and then went chasing all the places that do
(__)remove_inode_page. There are tentacles all over the place but I
*think* I found them all. That turned up one more place needing
changing, and this is one you already spotted a couple of days ago, in
reclaim_page. I subjected this patch to some dbenching without
triggering the BUG.
The try_to_unuse function calls delete_from_swap_cache and this is
pretty unfamiliar stuff for me, but it looks like the page is just
freshly read and couldn't be dirty. There's one more case in
arch/68K/atari/stram.c (unswap_by_read), similar to try_to_unuse.
OK, I see you just posted -pre5 while I was making the patch, but here
it is anyway, as a cross-check.
--- 2.4.0-test13-pre4.clean/mm/filemap.c Fri Dec 29 03:14:58 2000
+++ 2.4.0-test13-pre4/mm/filemap.c Fri Dec 29 04:29:09 2000
@@ -96,6 +96,7 @@
remove_page_from_inode_queue(page);
remove_page_from_hash_queue(page);
page->mapping = NULL;
+ if (PageDirty(page)) BUG();
}
void remove_inode_page(struct page *page)
@@ -132,7 +133,7 @@
curr = curr->next;
/* We cannot invalidate a locked page */
- if (TryLockPage(page))
+ if (PageDirty(page) || TryLockPage(page))
continue;
/* Neither can we invalidate something in use.. */
--- 2.4.0-test13-pre4.clean/mm/vmscan.c Fri Dec 29 03:14:58 2000
+++ 2.4.0-test13-pre4/mm/vmscan.c Fri Dec 29 04:30:48 2000
@@ -484,7 +484,7 @@
}
/* The page is dirty, or locked, move to inactive_dirty list. */
- if (page->buffers || TryLockPage(page)) {
+ if (page->buffers || PageDirty(page) || TryLockPage(page)) {
del_page_from_inactive_clean_list(page);
add_page_to_inactive_dirty_list(page);
continue;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2000-12-28 21:09 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-12-24 8:28 innd mmap bug in 2.4.0-test12 Marco d'Itri
2000-12-24 13:05 ` Jeff Lightfoot
[not found] ` <Pine.GSO.4.21.0012240330370.13109-100000@weyl.math.psu.edu>
2000-12-24 16:00 ` Marco d'Itri
2000-12-24 17:57 ` Linus Torvalds
2000-12-24 18:10 ` Linus Torvalds
2000-12-24 19:19 ` Dietmar Kling
2000-12-24 23:23 ` Zlatko Calusic
2000-12-25 2:26 ` Dan Aloni
2000-12-27 19:20 ` Rik van Riel
2000-12-27 22:04 ` Zlatko Calusic
[not found] ` <3A4A758F.98EBC605@innominate.de>
2000-12-28 14:29 ` Daniel Phillips
2000-12-28 18:38 ` [PATCH] " Daniel Phillips
2000-12-28 18:54 ` Linus Torvalds
2000-12-28 19:17 ` Daniel Phillips
2000-12-28 20:36 ` Daniel Phillips [this message]
2000-12-28 20:42 ` Linus Torvalds
2000-12-28 23:50 ` Daniel Phillips
2000-12-27 23:41 ` Linus Torvalds
2000-12-27 23:55 ` Philipp Rumpf
2000-12-28 0:27 ` Linus Torvalds
2000-12-28 3:00 ` Chris Wedgwood
2000-12-28 5:06 ` Ari Heitner
2000-12-28 6:01 ` Chris Wedgwood
2000-12-28 12:14 ` Alan Cox
2000-12-28 21:36 ` Mo McKinlay
2000-12-28 18:50 ` Linus Torvalds
2000-12-28 18:57 ` Alan Cox
2000-12-29 8:03 ` innd mmap bug in 2.4.0-test12 (UNIMPORTANT) Pau
2000-12-29 1:32 ` innd mmap bug in 2.4.0-test12 Chris Wedgwood
2000-12-29 9:39 ` Christoph Rohland
2000-12-28 15:03 ` Daniel Phillips
2000-12-28 15:12 ` Rik van Riel
2000-12-28 15:15 ` Daniel Phillips
2000-12-28 17:44 ` Chris Mason
2000-12-28 17:51 ` Rik van Riel
2000-12-28 18:18 ` Chris Mason
2000-12-28 17:49 ` Linus Torvalds
2000-12-28 0:43 ` Dan Aloni
2000-12-28 1:41 ` Dan Aloni
2000-12-28 14:14 ` Rik van Riel
2000-12-28 14:33 ` Rik van Riel
2000-12-28 16:03 ` Daniel Phillips
2000-12-28 17:47 ` Linus Torvalds
2000-12-28 18:02 ` Rik van Riel
2000-12-26 23:02 ` Michael Peddemors
2000-12-27 18:39 ` Alan Cox
2000-12-24 20:07 ` Daniel Phillips
2000-12-24 22:08 ` Linus Torvalds
2000-12-24 23:53 ` Marco d'Itri
2000-12-25 3:10 ` Augusto César Radtke
2000-12-25 9:19 ` Linus Torvalds
2000-12-25 9:42 ` Linus Torvalds
2000-12-26 1:45 ` Alan Cox
2000-12-26 18:17 ` Linus Torvalds
2000-12-26 4:50 ` Chris Wedgwood
2000-12-26 5:26 ` controllerless pci device support Eric Shattow
2000-12-27 0:39 ` Alan Cox
2000-12-26 5:37 ` innd mmap bug in 2.4.0-test12 Linus Torvalds
2000-12-27 10:29 ` Anton Blanchard
2001-01-04 20:44 ` Ralf Gerbig
2000-12-25 18:44 ` Marco d'Itri
2000-12-26 2:20 ` Linus Torvalds
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=3A4BA45E.4ADEB2DF@innominate.de \
--to=phillips@innominate.de \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/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.