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