xfs: add buffer types to directory and attribute buffers
Add buffer types to the buffer log items so that log recovery can validate the buffers and calculate CRCs correctly after the buffers are recovered. 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:
@@ -147,7 +147,7 @@ xfs_dir3_free_write_verify(
|
||||
xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), XFS_DIR3_FREE_CRC_OFF);
|
||||
}
|
||||
|
||||
static const struct xfs_buf_ops xfs_dir3_free_buf_ops = {
|
||||
const struct xfs_buf_ops xfs_dir3_free_buf_ops = {
|
||||
.verify_read = xfs_dir3_free_read_verify,
|
||||
.verify_write = xfs_dir3_free_write_verify,
|
||||
};
|
||||
@@ -161,8 +161,15 @@ __xfs_dir3_free_read(
|
||||
xfs_daddr_t mappedbno,
|
||||
struct xfs_buf **bpp)
|
||||
{
|
||||
return xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp,
|
||||
int err;
|
||||
|
||||
err = xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp,
|
||||
XFS_DATA_FORK, &xfs_dir3_free_buf_ops);
|
||||
|
||||
/* try read returns without an error or *bpp if it lands in a hole */
|
||||
if (!err && tp && *bpp)
|
||||
xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_FREE_BUF);
|
||||
return err;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -249,6 +256,7 @@ xfs_dir3_free_get_buf(
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_FREE_BUF);
|
||||
bp->b_ops = &xfs_dir3_free_buf_ops;
|
||||
|
||||
/*
|
||||
@@ -396,6 +404,7 @@ xfs_dir2_leaf_to_node(
|
||||
else
|
||||
leaf->hdr.info.magic = cpu_to_be16(XFS_DIR3_LEAFN_MAGIC);
|
||||
lbp->b_ops = &xfs_dir3_leafn_buf_ops;
|
||||
xfs_trans_buf_set_type(tp, lbp, XFS_BLF_DIR_LEAFN_BUF);
|
||||
xfs_dir3_leaf_log_header(tp, lbp);
|
||||
xfs_dir3_leaf_check(mp, lbp);
|
||||
return 0;
|
||||
@@ -811,6 +820,7 @@ xfs_dir2_leafn_lookup_for_entry(
|
||||
(char *)curbp->b_addr);
|
||||
state->extrablk.magic = XFS_DIR2_DATA_MAGIC;
|
||||
curbp->b_ops = &xfs_dir3_data_buf_ops;
|
||||
xfs_trans_buf_set_type(tp, curbp, XFS_BLF_DIR_DATA_BUF);
|
||||
if (cmp == XFS_CMP_EXACT)
|
||||
return XFS_ERROR(EEXIST);
|
||||
}
|
||||
@@ -825,6 +835,7 @@ xfs_dir2_leafn_lookup_for_entry(
|
||||
state->extrablk.blkno = curdb;
|
||||
state->extrablk.magic = XFS_DIR2_DATA_MAGIC;
|
||||
curbp->b_ops = &xfs_dir3_data_buf_ops;
|
||||
xfs_trans_buf_set_type(tp, curbp, XFS_BLF_DIR_DATA_BUF);
|
||||
} else {
|
||||
/* If the curbp is not the CI match block, drop it */
|
||||
if (state->extrablk.bp != curbp)
|
||||
|
Reference in New Issue
Block a user