xfs
[Top] [All Lists]

Re: [PATCH] xfs: don't account buffer cancellation during log recovery r

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: [PATCH] xfs: don't account buffer cancellation during log recovery readahead
From: Ben Myers <bpm@xxxxxxx>
Date: Thu, 29 Aug 2013 10:13:24 -0500
Cc: xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1377555053-23000-1-git-send-email-david@xxxxxxxxxxxxx>
References: <1377555053-23000-1-git-send-email-david@xxxxxxxxxxxxx>
User-agent: Mutt/1.5.20 (2009-06-14)
On Tue, Aug 27, 2013 at 08:10:53AM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@xxxxxxxxxx>
> 
> When doing readhaead in log recovery, we check to see if buffers are
> cancelled before doing readahead. If we find a cancelled buffer,
> however, we always decrement the reference count we have on it, and
> that means that readahead is causing a double decrement of the
> cancelled buffer reference count.
> 
> This results in log recovery *replaying cancelled buffers* as the
> actual recovery pass does not find the cancelled buffer entry in the
> commit phase of the second pass across a transaction. On debug
> kernels, this results in an ASSERT failure like so:
> 
> XFS: Assertion failed: !(flags & XFS_BLF_CANCEL), file: 
> fs/xfs/xfs_log_recover.c, line: 1815
> 
> xfstests generic/311 reproduces this ASSERT failure with 100%
> reproducability.
> 
> Fix it by making readahead only peek at the buffer cancelled state
> rather than the full accounting that xlog_check_buffer_cancelled()
> does.
> 
> Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>

Nice work Dave!
Reviewed-by: Ben Myers <bpm@xxxxxxx>

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