mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-20 19:43:58 +08:00
xfs: factor dir2 leaf read
Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Phil White <pwhite@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
e481357264
commit
e6f7667c4e
@ -48,6 +48,62 @@ static void xfs_dir2_leaf_log_bests(struct xfs_trans *tp, struct xfs_buf *bp,
|
||||
int first, int last);
|
||||
static void xfs_dir2_leaf_log_tail(struct xfs_trans *tp, struct xfs_buf *bp);
|
||||
|
||||
static void
|
||||
xfs_dir2_leaf_verify(
|
||||
struct xfs_buf *bp,
|
||||
__be16 magic)
|
||||
{
|
||||
struct xfs_mount *mp = bp->b_target->bt_mount;
|
||||
struct xfs_dir2_leaf_hdr *hdr = bp->b_addr;
|
||||
int block_ok = 0;
|
||||
|
||||
block_ok = hdr->info.magic == magic;
|
||||
if (!block_ok) {
|
||||
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, hdr);
|
||||
xfs_buf_ioerror(bp, EFSCORRUPTED);
|
||||
}
|
||||
|
||||
bp->b_iodone = NULL;
|
||||
xfs_buf_ioend(bp, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
xfs_dir2_leaf1_verify(
|
||||
struct xfs_buf *bp)
|
||||
{
|
||||
xfs_dir2_leaf_verify(bp, cpu_to_be16(XFS_DIR2_LEAF1_MAGIC));
|
||||
}
|
||||
|
||||
static void
|
||||
xfs_dir2_leafn_verify(
|
||||
struct xfs_buf *bp)
|
||||
{
|
||||
xfs_dir2_leaf_verify(bp, cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
|
||||
}
|
||||
|
||||
static int
|
||||
xfs_dir2_leaf_read(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_inode *dp,
|
||||
xfs_dablk_t fbno,
|
||||
xfs_daddr_t mappedbno,
|
||||
struct xfs_buf **bpp)
|
||||
{
|
||||
return xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp,
|
||||
XFS_DATA_FORK, xfs_dir2_leaf1_verify);
|
||||
}
|
||||
|
||||
int
|
||||
xfs_dir2_leafn_read(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_inode *dp,
|
||||
xfs_dablk_t fbno,
|
||||
xfs_daddr_t mappedbno,
|
||||
struct xfs_buf **bpp)
|
||||
{
|
||||
return xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp,
|
||||
XFS_DATA_FORK, xfs_dir2_leafn_verify);
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a block form directory to a leaf form directory.
|
||||
@ -311,14 +367,11 @@ xfs_dir2_leaf_addname(
|
||||
dp = args->dp;
|
||||
tp = args->trans;
|
||||
mp = dp->i_mount;
|
||||
/*
|
||||
* Read the leaf block.
|
||||
*/
|
||||
error = xfs_da_read_buf(tp, dp, mp->m_dirleafblk, -1, &lbp,
|
||||
XFS_DATA_FORK, NULL);
|
||||
|
||||
error = xfs_dir2_leaf_read(tp, dp, mp->m_dirleafblk, -1, &lbp);
|
||||
if (error)
|
||||
return error;
|
||||
ASSERT(lbp != NULL);
|
||||
|
||||
/*
|
||||
* Look up the entry by hash value and name.
|
||||
* We know it's not there, our caller has already done a lookup.
|
||||
@ -1369,13 +1422,11 @@ xfs_dir2_leaf_lookup_int(
|
||||
dp = args->dp;
|
||||
tp = args->trans;
|
||||
mp = dp->i_mount;
|
||||
/*
|
||||
* Read the leaf block into the buffer.
|
||||
*/
|
||||
error = xfs_da_read_buf(tp, dp, mp->m_dirleafblk, -1, &lbp,
|
||||
XFS_DATA_FORK, NULL);
|
||||
|
||||
error = xfs_dir2_leaf_read(tp, dp, mp->m_dirleafblk, -1, &lbp);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
*lbpp = lbp;
|
||||
leaf = lbp->b_addr;
|
||||
xfs_dir2_leaf_check(dp, lbp);
|
||||
|
@ -1232,11 +1232,11 @@ xfs_dir2_leafn_toosmall(
|
||||
/*
|
||||
* Read the sibling leaf block.
|
||||
*/
|
||||
error = xfs_da_read_buf(state->args->trans, state->args->dp,
|
||||
blkno, -1, &bp, XFS_DATA_FORK, NULL);
|
||||
error = xfs_dir2_leafn_read(state->args->trans, state->args->dp,
|
||||
blkno, -1, &bp);
|
||||
if (error)
|
||||
return error;
|
||||
ASSERT(bp != NULL);
|
||||
|
||||
/*
|
||||
* Count bytes in the two blocks combined.
|
||||
*/
|
||||
|
@ -70,6 +70,8 @@ extern void xfs_dir2_data_use_free(struct xfs_trans *tp, struct xfs_buf *bp,
|
||||
xfs_dir2_data_aoff_t len, int *needlogp, int *needscanp);
|
||||
|
||||
/* xfs_dir2_leaf.c */
|
||||
extern int xfs_dir2_leafn_read(struct xfs_trans *tp, struct xfs_inode *dp,
|
||||
xfs_dablk_t fbno, xfs_daddr_t mappedbno, struct xfs_buf **bpp);
|
||||
extern int xfs_dir2_block_to_leaf(struct xfs_da_args *args,
|
||||
struct xfs_buf *dbp);
|
||||
extern int xfs_dir2_leaf_addname(struct xfs_da_args *args);
|
||||
|
Loading…
Reference in New Issue
Block a user