All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nick Piggin <nickpiggin@yahoo.com.au>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: David Chinner <dgc@sgi.com>,
	linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@osdl.org
Subject: Re: [PATCH 1/2]: Fix BUG in cancel_dirty_pages on XFS
Date: Thu, 25 Jan 2007 11:05:15 +1100	[thread overview]
Message-ID: <45B7F43B.9060905@yahoo.com.au> (raw)
In-Reply-To: <1169649604.6189.27.camel@twins>

Peter Zijlstra wrote:
> On Thu, 2007-01-25 at 00:43 +1100, Nick Piggin wrote:
> 
> 
>>>Have you seen the new launder_page() a_op? called from
>>>invalidate_inode_pages2_range()
>>
>>It would have been nice to make that one into a more potentially
>>useful generic callback.
> 
> 
> That can still be done when the need arises, right?

Yeah I guess so.

>>But why was it introduced, exactly? I can't tell from the code or
>>the discussion why NFS couldn't start the IO, and signal the caller
>>to wait_on_page_writeback and retry? That seemed to me like the
>>convetional fix.
> 
> 
> to quote a bit:
> 
> 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.
> 
> 
> and:
> 
> 
>>>Now, arguably the VM shouldn't be calling try_to_release_page() with
>>>__GFP_FS when it's holding a lock on a page.
>>>
>>>But otoh, NFS should never be running lock_page() within nfs_release_page()
>>>against the page which was passed into nfs_release_page().  It'll deadlock
>>>for sure.
>>
>>The reason why it is happening is that the last dirty page from that
>>inode gets cleaned, resulting in a call to dput().

OK but what's the problem with just failing to release the page if it
is dirty, I wonder? In the worst case, page reclaim will just end up
doing a writeout to clean it.

-- 
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com 

  reply	other threads:[~2007-01-25  0:06 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-23 22:37 [PATCH 1/2]: Fix BUG in cancel_dirty_pages on XFS David Chinner
2007-01-24 12:13 ` Peter Zijlstra
2007-01-24 13:43   ` Nick Piggin
2007-01-24 14:40     ` Peter Zijlstra
2007-01-25  0:05       ` Nick Piggin [this message]
2007-01-24 22:46     ` David Chinner
2007-01-25  0:12       ` Nick Piggin
2007-01-25  0:35         ` David Chinner
2007-01-25  0:47           ` Nick Piggin
2007-01-25  1:52             ` David Chinner
2007-01-25  2:01               ` Nick Piggin
2007-01-25  3:42                 ` David Chinner
2007-01-25  4:25                   ` Nick Piggin
2007-01-25  7:40                     ` David Chinner
2007-01-25 10:26                       ` Nick Piggin
2007-01-24 22:24   ` David Chinner

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=45B7F43B.9060905@yahoo.com.au \
    --to=nickpiggin@yahoo.com.au \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@osdl.org \
    --cc=dgc@sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=xfs@oss.sgi.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.