xfs
[Top] [All Lists]

Re: [RFC]xfs: using GFP_NOFS for blkdev_issue_flush

To: Shaohua Li <shli@xxxxxxxxxx>
Subject: Re: [RFC]xfs: using GFP_NOFS for blkdev_issue_flush
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Wed, 25 Apr 2012 10:25:52 +1000
Cc: xfs@xxxxxxxxxxx, hch@xxxxxxxxxxxxx
In-reply-to: <20120424132346.GA24575@xxxxxxxxxx>
References: <4F8BC112.9090508@xxxxxxxxxxxx> <4F8BC30D.5040601@xxxxxxxxxx> <20120418013746.GL6734@dastard> <20120424132346.GA24575@xxxxxxxxxx>
User-agent: Mutt/1.5.21 (2010-09-15)
On Tue, Apr 24, 2012 at 09:23:46PM +0800, Shaohua Li wrote:
> On Wed, Apr 18, 2012 at 11:37:46AM +1000, Dave Chinner wrote:
> > On Mon, Apr 16, 2012 at 02:58:21PM +0800, Shaohua Li wrote:
> > > On 4/16/12 2:49 PM, Shaohua Li wrote:
> > > >
> > > >flush request is issued in transaction commit code path usually, so
> > > >looks using
> > > >GFP_KERNEL to allocate memory for flush request bio falls into the 
> > > >classic
> > > >deadlock issue (memory reclaim recursion). Use GFP_NOFS to avoid 
> > > >recursion
> > > >from reclaim context. Per Dave Chinner, there is only blkdev_issue_flush
> > > >might
> > > >be buggy here. But using GFP_NOFS by default for all calls should not
> > > >matter.
> > 
> > Can you update the commit message like I suggested previously?
> Copied exactly.
> 
> 
> Issuing a block device flush request in transaction context using GFP_KERNEL
> directly can cause deadlocks due to memory reclaim recursion. Use GFP_NOFS to
> avoid recursion from reclaim context.
> 
> Signed-off-by: Shaohua Li <shli@xxxxxxxxxxxx>
> Reviewed-by: Mark Tinguely <tinguely@xxxxxxx>
> ---
>  fs/xfs/xfs_super.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> Index: linux/fs/xfs/xfs_super.c
> ===================================================================
> --- linux.orig/fs/xfs/xfs_super.c     2012-04-13 10:08:26.095496072 +0800
> +++ linux/fs/xfs/xfs_super.c  2012-04-13 10:08:42.555496865 +0800
> @@ -622,7 +622,7 @@ void
>  xfs_blkdev_issue_flush(
>       xfs_buftarg_t           *buftarg)
>  {
> -     blkdev_issue_flush(buftarg->bt_bdev, GFP_KERNEL, NULL);
> +     blkdev_issue_flush(buftarg->bt_bdev, GFP_NOFS, NULL);
>  }
>  
>  STATIC void

Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>

-- 
Dave Chinner
david@xxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>