Re: innd mmap bug in 2.4.0-test12

Rik van Riel
2000-12-27T19:53:58Z

On Mon, 25 Dec 2000, Dan Aloni wrote:
> On 25 Dec 2000, Zlatko Calusic wrote:
>
> > Speaking of page_launder() I just stumbled upon two oopsen today on
> > the UP build. Maybe it could give a hint to someone, I'm not that good
> > at Oops decoding.
>
> I've decoded the Oops I got, and found that the problem is in
> vmscan.c:line-605, where page->mapping is NULL and a_ops gets
> resolved and dereferenced at 0x0000000c.

The code assumes that every page which has the PG_dirty
bit set also has page->mapping set to a valid value.

The BUG() people are getting confirms that this assumption
is not necessarily true and the VM work that's going on will
most likely make it not be true either in some cases.

The (trivial) patch below should fix this problem.

Linus and/or Alan, could you please apply this for the next
pre-patch ?

regards,

Rik
--
Hollywood goes for world dumbination,
Trailer at 11.

http://www.surriel.com/
http://www.conectiva.com/ http://distro.conectiva.com.br/

--- vmscan.c.orig Wed Dec 27 16:48:24 2000
+++ vmscan.c Wed Dec 27 17:14:32 2000
@@ -601,7 +601,7 @@
* Dirty swap-cache page? Write it out if
* last copy..
*/
- if (PageDirty(page)) {
+ if (PageDirty(page) && page->mapping) {
int (*writepage)(struct page *) = page->mapping->a_ops->writepage;
int result;