Re: 2.6.16-rc6-mm2

Trond Myklebust
2006-06-14T21:56:41Z

On Mon, 2006-06-12 at 17:24 -0700, Christoph Lameter wrote:
> I guess this is correct. nfs_clear_page_writeback also ignores the page
> if req->wb_page == NULL. Trond?

Sorry I'm late in responding. I'm currently on vacation in Iceland.

This is most probably an issue with nfs_cancel_requests(). We shouldn't
be calling nfs_clear_page_writeback() without _first_ decrementing
NR_UNSTABLE. I'll have a look, but I may be a bit unresponsive until I
get to a new place with an internet connection.

Cheers,
Trond

> On Mon, 12 Jun 2006, Christoph Lameter wrote:
>
> > On Mon, 12 Jun 2006, Cedric Le Goater wrote:
> >
> > > Unable to handle kernel NULL pointer dereference at 0000000000000007 RIP:
> > > [<ffffffff8025b017>] dec_zone_page_state+0x1/0x5b
> >
> > Seems that req->wb_page may be NULL.
> >
> > This patch may fix it but we may miss an unstable page then. We may
> > have to move the decrement of NR_UNSTABLE to a different location when
> > wb_page is still valid.
> >
> > Index: linux-2.6.17-rc6-cl/fs/nfs/write.c
> > ===================================================================
> > --- linux-2.6.17-rc6-cl.orig/fs/nfs/write.c 2006-06-12 13:37:47.321243148 -0700
> > +++ linux-2.6.17-rc6-cl/fs/nfs/write.c 2006-06-12 15:13:48.020908204 -0700
> > @@ -1419,7 +1419,8 @@ static void nfs_commit_done(struct rpc_t
> > nfs_mark_request_dirty(req);
> > next:
> > nfs_clear_page_writeback(req);
> > - dec_zone_page_state(req->wb_page, NR_UNSTABLE);
> > + if (req->wb_page)
> > + dec_zone_page_state(req->wb_page, NR_UNSTABLE);
> > }
> > }
> >
> >
> >