mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
xfs: add support for large btree blocks
Add support for larger btree blocks that contains a CRC32C checksum, a filesystem uuid and block number for detecting filesystem consistency and out of place writes. [dchinner@redhat.com] Also include an owner field to allow reverse mappings to be implemented for improved repairability and a LSN field to so that log recovery can easily determine the last modification that made it to disk for each buffer. [dchinner@redhat.com] Add buffer log format flags to indicate the type of buffer to recovery so that we don't have to do blind magic number tests to determine what the buffer is. [dchinner@redhat.com] Modified to fit into the verifier structure. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Ben Myers <bpm@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
a2050646f6
commit
ee1a47ab0e
17 changed files with 642 additions and 206 deletions
|
@ -659,6 +659,7 @@ xfs_trans_binval(
|
|||
ASSERT(XFS_BUF_ISSTALE(bp));
|
||||
ASSERT(!(bip->bli_flags & (XFS_BLI_LOGGED | XFS_BLI_DIRTY)));
|
||||
ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_INODE_BUF));
|
||||
ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_TYPE_MASK));
|
||||
ASSERT(bip->__bli_format.blf_flags & XFS_BLF_CANCEL);
|
||||
ASSERT(bip->bli_item.li_desc->lid_flags & XFS_LID_DIRTY);
|
||||
ASSERT(tp->t_flags & XFS_TRANS_DIRTY);
|
||||
|
@ -671,6 +672,7 @@ xfs_trans_binval(
|
|||
bip->bli_flags &= ~(XFS_BLI_INODE_BUF | XFS_BLI_LOGGED | XFS_BLI_DIRTY);
|
||||
bip->__bli_format.blf_flags &= ~XFS_BLF_INODE_BUF;
|
||||
bip->__bli_format.blf_flags |= XFS_BLF_CANCEL;
|
||||
bip->__bli_format.blf_flags &= ~XFS_BLF_TYPE_MASK;
|
||||
for (i = 0; i < bip->bli_format_count; i++) {
|
||||
memset(bip->bli_formats[i].blf_data_map, 0,
|
||||
(bip->bli_formats[i].blf_map_size * sizeof(uint)));
|
||||
|
@ -751,6 +753,26 @@ xfs_trans_inode_alloc_buf(
|
|||
bip->bli_flags |= XFS_BLI_INODE_ALLOC_BUF;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the type of the buffer for log recovery so that it can correctly identify
|
||||
* and hence attach the correct buffer ops to the buffer after replay.
|
||||
*/
|
||||
void
|
||||
xfs_trans_buf_set_type(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_buf *bp,
|
||||
uint type)
|
||||
{
|
||||
struct xfs_buf_log_item *bip = bp->b_fspriv;
|
||||
|
||||
ASSERT(bp->b_transp == tp);
|
||||
ASSERT(bip != NULL);
|
||||
ASSERT(atomic_read(&bip->bli_refcount) > 0);
|
||||
ASSERT((type & XFS_BLF_TYPE_MASK) != 0);
|
||||
|
||||
bip->__bli_format.blf_flags &= ~XFS_BLF_TYPE_MASK;
|
||||
bip->__bli_format.blf_flags |= type;
|
||||
}
|
||||
|
||||
/*
|
||||
* Similar to xfs_trans_inode_buf(), this marks the buffer as a cluster of
|
||||
|
@ -769,14 +791,9 @@ xfs_trans_dquot_buf(
|
|||
xfs_buf_t *bp,
|
||||
uint type)
|
||||
{
|
||||
xfs_buf_log_item_t *bip = bp->b_fspriv;
|
||||
|
||||
ASSERT(bp->b_transp == tp);
|
||||
ASSERT(bip != NULL);
|
||||
ASSERT(type == XFS_BLF_UDQUOT_BUF ||
|
||||
type == XFS_BLF_PDQUOT_BUF ||
|
||||
type == XFS_BLF_GDQUOT_BUF);
|
||||
ASSERT(atomic_read(&bip->bli_refcount) > 0);
|
||||
|
||||
bip->__bli_format.blf_flags |= type;
|
||||
xfs_trans_buf_set_type(tp, bp, type);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue