On Wed, Jan 21, 2015 at 11:39:38AM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@xxxxxxxxxx>
>
> Jan Kara reported that log recovery was finding buffers with invalid
> types in them. This should not happen, and indicates a bug in the
> logging of buffers. To catch this, add asserts to the buffer
> formatting code to ensure that the buffer type is in range when the
> transaction is committed.
>
> We don't set a type on buffers being marked stale - they are not
> going to get replayed, the format item exists only for recovery to
> be able to prevent replay of the buffer, so the type does not
> matter. Hence that needs special casing here.
>
> Reported-by: Jan Kara <jack@xxxxxxx>
> Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
> ---
Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx>
> fs/xfs/xfs_buf_item.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
> index 925ead2..507d96a 100644
> --- a/fs/xfs/xfs_buf_item.c
> +++ b/fs/xfs/xfs_buf_item.c
> @@ -319,6 +319,10 @@ xfs_buf_item_format(
> ASSERT(atomic_read(&bip->bli_refcount) > 0);
> ASSERT((bip->bli_flags & XFS_BLI_LOGGED) ||
> (bip->bli_flags & XFS_BLI_STALE));
> + ASSERT((bip->bli_flags & XFS_BLI_STALE) ||
> + (xfs_blft_from_flags(&bip->__bli_format) > XFS_BLFT_UNKNOWN_BUF
> + && xfs_blft_from_flags(&bip->__bli_format) < XFS_BLFT_MAX_BUF));
> +
>
> /*
> * If it is an inode buffer, transfer the in-memory state to the
> --
> 2.0.0
>
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs
|