lkml.org 
[lkml]   [2006]   [Dec]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: 2.6.18 mmap hangs unrelated apps
    From
    Date
    On Tue, 2006-12-19 at 16:03 -0800, Andrew Morton wrote:
    > On Tue, 19 Dec 2006 18:19:38 -0500
    > Trond Myklebust <trond.myklebust@fys.uio.no> wrote:
    >
    > > NFS: Fix race in nfs_release_page()
    > >
    > > invalidate_inode_pages2() may set the dirty bit on a page owing to the call
    > > to unmap_mapping_range() after the page was locked. In order to fix this,
    > > NFS has hooked the releasepage() method. This, however leads to deadlocks
    > > in other parts of the VM.
    >
    > hmm, subtle.
    >
    > > Fix is to add a new callback: flushpage(), which will write out a dirty
    > > page that is under the page lock.
    > >
    >
    > I guess this might permit us to clean up some of the nasties in
    > invalidate_inode_pages2() - if the page comes dirty again, write it again.
    > But the requirement that the page remain locked makes it hard. Need to
    > think about it some more.

    This was one of the reasons why I had to introduce
    nfs_writepage_locked() for 2.6.20 (the other reason being readpage()).

    The problem is that you can only protect against redirtying of the page
    by holding the page lock across the call to unmap_mapping_range(), the
    page writeout and the page removal.

    > Are you sure this is the cause of the NFS problem?
    >
    > > .prepare_write = nfs_prepare_write,
    > > .commit_write = nfs_commit_write,
    > > .invalidatepage = nfs_invalidate_page,
    > > - .releasepage = nfs_release_page,
    >
    > A NULL ->releasepage means that try_to_release_page() will call
    > try_to_free_buffers() if PagePrivate(). I suspect you'll need a stub to
    > prevent this.

    Ack, I'll add one in. If PagePrivate() is set during the call to
    try_to_release_page(), then the page should never be freeable.

    > (We were supposed to stop doing that about four years ago - change it so
    > that all a_ops must implement ->releasepage, but nobody got around to it).

    Would you still be interested in seeing this done?


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-12-20 01:21    [W:6.914 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site