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> _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs