xfs: RT bitmap and summary buffers are not typed
When logging buffers, we attach a type to them that follows the buffer all the way into the log and is used to identify the buffer contents in log recovery. Both the realtime summary buffers and the bitmap buffers do not have types defined or set, so when we try to log them we see assert failure: XFS: Assertion failed: (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), file: fs/xfs/xfs_buf_item.c, line: 294 Fix this by adding buffer log format types for these buffers, and add identification support into log recovery for them. Only build the log recovery support if CONFIG_XFS_RT=y - we can't get into log recovery for real time filesystems if support is not built into the kernel, and this avoids potential build problems. Signed-off-by: Dave Chinner <dchinner@redhat.com> Tested-by: Ross Zwisler <ross.zwisler@linux.intel.com> Reviewed-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
4b680afb42
commit
f67ca6eca8
3 changed files with 12 additions and 0 deletions
|
@ -495,6 +495,8 @@ enum xfs_blft {
|
|||
XFS_BLFT_ATTR_LEAF_BUF,
|
||||
XFS_BLFT_ATTR_RMT_BUF,
|
||||
XFS_BLFT_SB_BUF,
|
||||
XFS_BLFT_RTBITMAP_BUF,
|
||||
XFS_BLFT_RTSUMMARY_BUF,
|
||||
XFS_BLFT_MAX_BUF = (1 << XFS_BLFT_BITS),
|
||||
};
|
||||
|
||||
|
|
|
@ -71,6 +71,9 @@ xfs_rtbuf_get(
|
|||
mp->m_bsize, 0, &bp, NULL);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
xfs_trans_buf_set_type(tp, bp, issum ? XFS_BLFT_RTSUMMARY_BUF
|
||||
: XFS_BLFT_RTBITMAP_BUF);
|
||||
*bpp = bp;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -2473,6 +2473,13 @@ xlog_recover_validate_buf_type(
|
|||
}
|
||||
bp->b_ops = &xfs_sb_buf_ops;
|
||||
break;
|
||||
#ifdef CONFIG_XFS_RT
|
||||
case XFS_BLFT_RTBITMAP_BUF:
|
||||
case XFS_BLFT_RTSUMMARY_BUF:
|
||||
/* no verification of RT buffers is done */
|
||||
bp->b_ops = NULL;
|
||||
break;
|
||||
#endif /* CONFIG_XFS_RT */
|
||||
default:
|
||||
xfs_warn(mp, "Unknown buffer type %d!",
|
||||
xfs_blft_from_flags(buf_f));
|
||||
|
|
Loading…
Reference in a new issue