Commit 4bb20a83 authored by Dave Chinner's avatar Dave Chinner Committed by Ben Myers

xfs: add verifier callback to directory read code

Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarPhil White <pwhite@sgi.com>
Signed-off-by: default avatarBen Myers <bpm@sgi.com>
parent c6319198
...@@ -904,7 +904,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -904,7 +904,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
dp = args->dp; dp = args->dp;
args->blkno = 0; args->blkno = 0;
error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp, error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -1032,7 +1032,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -1032,7 +1032,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
* remove the "old" attr from that block (neat, huh!) * remove the "old" attr from that block (neat, huh!)
*/ */
error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1,
&bp, XFS_ATTR_FORK); &bp, XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -1101,7 +1101,7 @@ xfs_attr_leaf_removename(xfs_da_args_t *args) ...@@ -1101,7 +1101,7 @@ xfs_attr_leaf_removename(xfs_da_args_t *args)
dp = args->dp; dp = args->dp;
args->blkno = 0; args->blkno = 0;
error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp, error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) { if (error) {
return(error); return(error);
} }
...@@ -1159,7 +1159,7 @@ xfs_attr_leaf_get(xfs_da_args_t *args) ...@@ -1159,7 +1159,7 @@ xfs_attr_leaf_get(xfs_da_args_t *args)
args->blkno = 0; args->blkno = 0;
error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp, error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -1190,7 +1190,8 @@ xfs_attr_leaf_list(xfs_attr_list_context_t *context) ...@@ -1190,7 +1190,8 @@ xfs_attr_leaf_list(xfs_attr_list_context_t *context)
trace_xfs_attr_leaf_list(context); trace_xfs_attr_leaf_list(context);
context->cursor->blkno = 0; context->cursor->blkno = 0;
error = xfs_da_read_buf(NULL, context->dp, 0, -1, &bp, XFS_ATTR_FORK); error = xfs_da_read_buf(NULL, context->dp, 0, -1, &bp, XFS_ATTR_FORK,
NULL);
if (error) if (error)
return XFS_ERROR(error); return XFS_ERROR(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -1605,7 +1606,7 @@ xfs_attr_node_removename(xfs_da_args_t *args) ...@@ -1605,7 +1606,7 @@ xfs_attr_node_removename(xfs_da_args_t *args)
state->path.blk[0].bp = NULL; state->path.blk[0].bp = NULL;
error = xfs_da_read_buf(args->trans, args->dp, 0, -1, &bp, error = xfs_da_read_buf(args->trans, args->dp, 0, -1, &bp,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) if (error)
goto out; goto out;
ASSERT((((xfs_attr_leafblock_t *)bp->b_addr)->hdr.info.magic) == ASSERT((((xfs_attr_leafblock_t *)bp->b_addr)->hdr.info.magic) ==
...@@ -1718,7 +1719,7 @@ xfs_attr_refillstate(xfs_da_state_t *state) ...@@ -1718,7 +1719,7 @@ xfs_attr_refillstate(xfs_da_state_t *state)
error = xfs_da_read_buf(state->args->trans, error = xfs_da_read_buf(state->args->trans,
state->args->dp, state->args->dp,
blk->blkno, blk->disk_blkno, blk->blkno, blk->disk_blkno,
&blk->bp, XFS_ATTR_FORK); &blk->bp, XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
} else { } else {
...@@ -1737,7 +1738,7 @@ xfs_attr_refillstate(xfs_da_state_t *state) ...@@ -1737,7 +1738,7 @@ xfs_attr_refillstate(xfs_da_state_t *state)
error = xfs_da_read_buf(state->args->trans, error = xfs_da_read_buf(state->args->trans,
state->args->dp, state->args->dp,
blk->blkno, blk->disk_blkno, blk->blkno, blk->disk_blkno,
&blk->bp, XFS_ATTR_FORK); &blk->bp, XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
} else { } else {
...@@ -1827,7 +1828,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context) ...@@ -1827,7 +1828,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context)
bp = NULL; bp = NULL;
if (cursor->blkno > 0) { if (cursor->blkno > 0) {
error = xfs_da_read_buf(NULL, context->dp, cursor->blkno, -1, error = xfs_da_read_buf(NULL, context->dp, cursor->blkno, -1,
&bp, XFS_ATTR_FORK); &bp, XFS_ATTR_FORK, NULL);
if ((error != 0) && (error != EFSCORRUPTED)) if ((error != 0) && (error != EFSCORRUPTED))
return(error); return(error);
if (bp) { if (bp) {
...@@ -1870,7 +1871,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context) ...@@ -1870,7 +1871,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context)
for (;;) { for (;;) {
error = xfs_da_read_buf(NULL, context->dp, error = xfs_da_read_buf(NULL, context->dp,
cursor->blkno, -1, &bp, cursor->blkno, -1, &bp,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
if (unlikely(bp == NULL)) { if (unlikely(bp == NULL)) {
...@@ -1937,7 +1938,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context) ...@@ -1937,7 +1938,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context)
cursor->blkno = be32_to_cpu(leaf->hdr.info.forw); cursor->blkno = be32_to_cpu(leaf->hdr.info.forw);
xfs_trans_brelse(NULL, bp); xfs_trans_brelse(NULL, bp);
error = xfs_da_read_buf(NULL, context->dp, cursor->blkno, -1, error = xfs_da_read_buf(NULL, context->dp, cursor->blkno, -1,
&bp, XFS_ATTR_FORK); &bp, XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
if (unlikely((bp == NULL))) { if (unlikely((bp == NULL))) {
......
...@@ -871,7 +871,7 @@ xfs_attr_leaf_to_node(xfs_da_args_t *args) ...@@ -871,7 +871,7 @@ xfs_attr_leaf_to_node(xfs_da_args_t *args)
if (error) if (error)
goto out; goto out;
error = xfs_da_read_buf(args->trans, args->dp, 0, -1, &bp1, error = xfs_da_read_buf(args->trans, args->dp, 0, -1, &bp1,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) if (error)
goto out; goto out;
ASSERT(bp1 != NULL); ASSERT(bp1 != NULL);
...@@ -1642,7 +1642,7 @@ xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action) ...@@ -1642,7 +1642,7 @@ xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action)
if (blkno == 0) if (blkno == 0)
continue; continue;
error = xfs_da_read_buf(state->args->trans, state->args->dp, error = xfs_da_read_buf(state->args->trans, state->args->dp,
blkno, -1, &bp, XFS_ATTR_FORK); blkno, -1, &bp, XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -2519,7 +2519,7 @@ xfs_attr_leaf_clearflag(xfs_da_args_t *args) ...@@ -2519,7 +2519,7 @@ xfs_attr_leaf_clearflag(xfs_da_args_t *args)
* Set up the operation. * Set up the operation.
*/ */
error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp, error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) { if (error) {
return(error); return(error);
} }
...@@ -2584,7 +2584,7 @@ xfs_attr_leaf_setflag(xfs_da_args_t *args) ...@@ -2584,7 +2584,7 @@ xfs_attr_leaf_setflag(xfs_da_args_t *args)
* Set up the operation. * Set up the operation.
*/ */
error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp, error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) { if (error) {
return(error); return(error);
} }
...@@ -2641,7 +2641,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args) ...@@ -2641,7 +2641,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args)
* Read the block containing the "old" attr * Read the block containing the "old" attr
*/ */
error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp1, error = xfs_da_read_buf(args->trans, args->dp, args->blkno, -1, &bp1,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) { if (error) {
return(error); return(error);
} }
...@@ -2652,7 +2652,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args) ...@@ -2652,7 +2652,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args)
*/ */
if (args->blkno2 != args->blkno) { if (args->blkno2 != args->blkno) {
error = xfs_da_read_buf(args->trans, args->dp, args->blkno2, error = xfs_da_read_buf(args->trans, args->dp, args->blkno2,
-1, &bp2, XFS_ATTR_FORK); -1, &bp2, XFS_ATTR_FORK, NULL);
if (error) { if (error) {
return(error); return(error);
} }
...@@ -2753,7 +2753,7 @@ xfs_attr_root_inactive(xfs_trans_t **trans, xfs_inode_t *dp) ...@@ -2753,7 +2753,7 @@ xfs_attr_root_inactive(xfs_trans_t **trans, xfs_inode_t *dp)
* the extents in reverse order the extent containing * the extents in reverse order the extent containing
* block 0 must still be there. * block 0 must still be there.
*/ */
error = xfs_da_read_buf(*trans, dp, 0, -1, &bp, XFS_ATTR_FORK); error = xfs_da_read_buf(*trans, dp, 0, -1, &bp, XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
blkno = XFS_BUF_ADDR(bp); blkno = XFS_BUF_ADDR(bp);
...@@ -2839,7 +2839,7 @@ xfs_attr_node_inactive( ...@@ -2839,7 +2839,7 @@ xfs_attr_node_inactive(
* before we come back to this one. * before we come back to this one.
*/ */
error = xfs_da_read_buf(*trans, dp, child_fsb, -2, &child_bp, error = xfs_da_read_buf(*trans, dp, child_fsb, -2, &child_bp,
XFS_ATTR_FORK); XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
if (child_bp) { if (child_bp) {
...@@ -2880,7 +2880,7 @@ xfs_attr_node_inactive( ...@@ -2880,7 +2880,7 @@ xfs_attr_node_inactive(
*/ */
if ((i+1) < count) { if ((i+1) < count) {
error = xfs_da_read_buf(*trans, dp, 0, parent_blkno, error = xfs_da_read_buf(*trans, dp, 0, parent_blkno,
&bp, XFS_ATTR_FORK); &bp, XFS_ATTR_FORK, NULL);
if (error) if (error)
return(error); return(error);
child_fsb = be32_to_cpu(node->btree[i+1].before); child_fsb = be32_to_cpu(node->btree[i+1].before);
......
...@@ -747,7 +747,7 @@ xfs_da_root_join(xfs_da_state_t *state, xfs_da_state_blk_t *root_blk) ...@@ -747,7 +747,7 @@ xfs_da_root_join(xfs_da_state_t *state, xfs_da_state_blk_t *root_blk)
child = be32_to_cpu(oldroot->btree[0].before); child = be32_to_cpu(oldroot->btree[0].before);
ASSERT(child != 0); ASSERT(child != 0);
error = xfs_da_read_buf(args->trans, args->dp, child, -1, &bp, error = xfs_da_read_buf(args->trans, args->dp, child, -1, &bp,
args->whichfork); args->whichfork, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -838,7 +838,8 @@ xfs_da_node_toosmall(xfs_da_state_t *state, int *action) ...@@ -838,7 +838,8 @@ xfs_da_node_toosmall(xfs_da_state_t *state, int *action)
if (blkno == 0) if (blkno == 0)
continue; continue;
error = xfs_da_read_buf(state->args->trans, state->args->dp, error = xfs_da_read_buf(state->args->trans, state->args->dp,
blkno, -1, &bp, state->args->whichfork); blkno, -1, &bp, state->args->whichfork,
NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -1084,7 +1085,7 @@ xfs_da_node_lookup_int(xfs_da_state_t *state, int *result) ...@@ -1084,7 +1085,7 @@ xfs_da_node_lookup_int(xfs_da_state_t *state, int *result)
*/ */
blk->blkno = blkno; blk->blkno = blkno;
error = xfs_da_read_buf(args->trans, args->dp, blkno, error = xfs_da_read_buf(args->trans, args->dp, blkno,
-1, &blk->bp, args->whichfork); -1, &blk->bp, args->whichfork, NULL);
if (error) { if (error) {
blk->blkno = 0; blk->blkno = 0;
state->path.active--; state->path.active--;
...@@ -1247,7 +1248,7 @@ xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, ...@@ -1247,7 +1248,7 @@ xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk,
if (old_info->back) { if (old_info->back) {
error = xfs_da_read_buf(args->trans, args->dp, error = xfs_da_read_buf(args->trans, args->dp,
be32_to_cpu(old_info->back), be32_to_cpu(old_info->back),
-1, &bp, args->whichfork); -1, &bp, args->whichfork, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -1268,7 +1269,7 @@ xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, ...@@ -1268,7 +1269,7 @@ xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk,
if (old_info->forw) { if (old_info->forw) {
error = xfs_da_read_buf(args->trans, args->dp, error = xfs_da_read_buf(args->trans, args->dp,
be32_to_cpu(old_info->forw), be32_to_cpu(old_info->forw),
-1, &bp, args->whichfork); -1, &bp, args->whichfork, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -1368,7 +1369,7 @@ xfs_da_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, ...@@ -1368,7 +1369,7 @@ xfs_da_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk,
if (drop_info->back) { if (drop_info->back) {
error = xfs_da_read_buf(args->trans, args->dp, error = xfs_da_read_buf(args->trans, args->dp,
be32_to_cpu(drop_info->back), be32_to_cpu(drop_info->back),
-1, &bp, args->whichfork); -1, &bp, args->whichfork, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -1385,7 +1386,7 @@ xfs_da_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, ...@@ -1385,7 +1386,7 @@ xfs_da_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk,
if (drop_info->forw) { if (drop_info->forw) {
error = xfs_da_read_buf(args->trans, args->dp, error = xfs_da_read_buf(args->trans, args->dp,
be32_to_cpu(drop_info->forw), be32_to_cpu(drop_info->forw),
-1, &bp, args->whichfork); -1, &bp, args->whichfork, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -1470,7 +1471,7 @@ xfs_da_path_shift(xfs_da_state_t *state, xfs_da_state_path_t *path, ...@@ -1470,7 +1471,7 @@ xfs_da_path_shift(xfs_da_state_t *state, xfs_da_state_path_t *path,
*/ */
blk->blkno = blkno; blk->blkno = blkno;
error = xfs_da_read_buf(args->trans, args->dp, blkno, -1, error = xfs_da_read_buf(args->trans, args->dp, blkno, -1,
&blk->bp, args->whichfork); &blk->bp, args->whichfork, NULL);
if (error) if (error)
return(error); return(error);
ASSERT(blk->bp != NULL); ASSERT(blk->bp != NULL);
...@@ -1733,7 +1734,8 @@ xfs_da_swap_lastblock( ...@@ -1733,7 +1734,8 @@ xfs_da_swap_lastblock(
* Read the last block in the btree space. * Read the last block in the btree space.
*/ */
last_blkno = (xfs_dablk_t)lastoff - mp->m_dirblkfsbs; last_blkno = (xfs_dablk_t)lastoff - mp->m_dirblkfsbs;
if ((error = xfs_da_read_buf(tp, ip, last_blkno, -1, &last_buf, w))) error = xfs_da_read_buf(tp, ip, last_blkno, -1, &last_buf, w, NULL);
if (error)
return error; return error;
/* /*
* Copy the last block into the dead buffer and log it. * Copy the last block into the dead buffer and log it.
...@@ -1759,7 +1761,9 @@ xfs_da_swap_lastblock( ...@@ -1759,7 +1761,9 @@ xfs_da_swap_lastblock(
* If the moved block has a left sibling, fix up the pointers. * If the moved block has a left sibling, fix up the pointers.
*/ */
if ((sib_blkno = be32_to_cpu(dead_info->back))) { if ((sib_blkno = be32_to_cpu(dead_info->back))) {
if ((error = xfs_da_read_buf(tp, ip, sib_blkno, -1, &sib_buf, w))) error = xfs_da_read_buf(tp, ip, sib_blkno, -1, &sib_buf, w,
NULL);
if (error)
goto done; goto done;
sib_info = sib_buf->b_addr; sib_info = sib_buf->b_addr;
if (unlikely( if (unlikely(
...@@ -1780,7 +1784,9 @@ xfs_da_swap_lastblock( ...@@ -1780,7 +1784,9 @@ xfs_da_swap_lastblock(
* If the moved block has a right sibling, fix up the pointers. * If the moved block has a right sibling, fix up the pointers.
*/ */
if ((sib_blkno = be32_to_cpu(dead_info->forw))) { if ((sib_blkno = be32_to_cpu(dead_info->forw))) {
if ((error = xfs_da_read_buf(tp, ip, sib_blkno, -1, &sib_buf, w))) error = xfs_da_read_buf(tp, ip, sib_blkno, -1, &sib_buf, w,
NULL);
if (error)
goto done; goto done;
sib_info = sib_buf->b_addr; sib_info = sib_buf->b_addr;
if (unlikely( if (unlikely(
...@@ -1803,7 +1809,9 @@ xfs_da_swap_lastblock( ...@@ -1803,7 +1809,9 @@ xfs_da_swap_lastblock(
* Walk down the tree looking for the parent of the moved block. * Walk down the tree looking for the parent of the moved block.
*/ */
for (;;) { for (;;) {
if ((error = xfs_da_read_buf(tp, ip, par_blkno, -1, &par_buf, w))) error = xfs_da_read_buf(tp, ip, par_blkno, -1, &par_buf, w,
NULL);
if (error)
goto done; goto done;
par_node = par_buf->b_addr; par_node = par_buf->b_addr;
if (unlikely(par_node->hdr.info.magic != if (unlikely(par_node->hdr.info.magic !=
...@@ -1853,7 +1861,9 @@ xfs_da_swap_lastblock( ...@@ -1853,7 +1861,9 @@ xfs_da_swap_lastblock(
error = XFS_ERROR(EFSCORRUPTED); error = XFS_ERROR(EFSCORRUPTED);
goto done; goto done;
} }
if ((error = xfs_da_read_buf(tp, ip, par_blkno, -1, &par_buf, w))) error = xfs_da_read_buf(tp, ip, par_blkno, -1, &par_buf, w,
NULL);
if (error)
goto done; goto done;
par_node = par_buf->b_addr; par_node = par_buf->b_addr;
if (unlikely( if (unlikely(
...@@ -2139,7 +2149,8 @@ xfs_da_read_buf( ...@@ -2139,7 +2149,8 @@ xfs_da_read_buf(
xfs_dablk_t bno, xfs_dablk_t bno,
xfs_daddr_t mappedbno, xfs_daddr_t mappedbno,
struct xfs_buf **bpp, struct xfs_buf **bpp,
int whichfork) int whichfork,
xfs_buf_iodone_t verifier)
{ {
struct xfs_buf *bp; struct xfs_buf *bp;
struct xfs_buf_map map; struct xfs_buf_map map;
...@@ -2161,7 +2172,7 @@ xfs_da_read_buf( ...@@ -2161,7 +2172,7 @@ xfs_da_read_buf(
error = xfs_trans_read_buf_map(dp->i_mount, trans, error = xfs_trans_read_buf_map(dp->i_mount, trans,
dp->i_mount->m_ddev_targp, dp->i_mount->m_ddev_targp,
mapp, nmap, 0, &bp, NULL); mapp, nmap, 0, &bp, verifier);
if (error) if (error)
goto out_free; goto out_free;
...@@ -2217,7 +2228,8 @@ xfs_da_reada_buf( ...@@ -2217,7 +2228,8 @@ xfs_da_reada_buf(
struct xfs_trans *trans, struct xfs_trans *trans,
struct xfs_inode *dp, struct xfs_inode *dp,
xfs_dablk_t bno, xfs_dablk_t bno,
int whichfork) int whichfork,
xfs_buf_iodone_t verifier)
{ {
xfs_daddr_t mappedbno = -1; xfs_daddr_t mappedbno = -1;
struct xfs_buf_map map; struct xfs_buf_map map;
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#ifndef __XFS_DA_BTREE_H__ #ifndef __XFS_DA_BTREE_H__
#define __XFS_DA_BTREE_H__ #define __XFS_DA_BTREE_H__
struct xfs_buf;
struct xfs_bmap_free; struct xfs_bmap_free;
struct xfs_inode; struct xfs_inode;
struct xfs_mount; struct xfs_mount;
...@@ -226,9 +225,11 @@ int xfs_da_get_buf(struct xfs_trans *trans, struct xfs_inode *dp, ...@@ -226,9 +225,11 @@ int xfs_da_get_buf(struct xfs_trans *trans, struct xfs_inode *dp,
struct xfs_buf **bp, int whichfork); struct xfs_buf **bp, int whichfork);
int xfs_da_read_buf(struct xfs_trans *trans, struct xfs_inode *dp, int xfs_da_read_buf(struct xfs_trans *trans, struct xfs_inode *dp,
xfs_dablk_t bno, xfs_daddr_t mappedbno, xfs_dablk_t bno, xfs_daddr_t mappedbno,
struct xfs_buf **bpp, int whichfork); struct xfs_buf **bpp, int whichfork,
xfs_buf_iodone_t verifier);
xfs_daddr_t xfs_da_reada_buf(struct xfs_trans *trans, struct xfs_inode *dp, xfs_daddr_t xfs_da_reada_buf(struct xfs_trans *trans, struct xfs_inode *dp,
xfs_dablk_t bno, int whichfork); xfs_dablk_t bno, int whichfork,
xfs_buf_iodone_t verifier);
int xfs_da_shrink_inode(xfs_da_args_t *args, xfs_dablk_t dead_blkno, int xfs_da_shrink_inode(xfs_da_args_t *args, xfs_dablk_t dead_blkno,
struct xfs_buf *dead_buf); struct xfs_buf *dead_buf);
......
...@@ -97,10 +97,10 @@ xfs_dir2_block_addname( ...@@ -97,10 +97,10 @@ xfs_dir2_block_addname(
/* /*
* Read the (one and only) directory block into dabuf bp. * Read the (one and only) directory block into dabuf bp.
*/ */
if ((error = error = xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, &bp,
xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, &bp, XFS_DATA_FORK))) { XFS_DATA_FORK, NULL);
if (error)
return error; return error;
}
ASSERT(bp != NULL); ASSERT(bp != NULL);
hdr = bp->b_addr; hdr = bp->b_addr;
/* /*
...@@ -457,7 +457,7 @@ xfs_dir2_block_getdents( ...@@ -457,7 +457,7 @@ xfs_dir2_block_getdents(
* Can't read the block, give up, else get dabuf in bp. * Can't read the block, give up, else get dabuf in bp.
*/ */
error = xfs_da_read_buf(NULL, dp, mp->m_dirdatablk, -1, error = xfs_da_read_buf(NULL, dp, mp->m_dirdatablk, -1,
&bp, XFS_DATA_FORK); &bp, XFS_DATA_FORK, NULL);
if (error) if (error)
return error; return error;
...@@ -640,10 +640,10 @@ xfs_dir2_block_lookup_int( ...@@ -640,10 +640,10 @@ xfs_dir2_block_lookup_int(
/* /*
* Read the buffer, return error if we can't get it. * Read the buffer, return error if we can't get it.
*/ */
if ((error = error = xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, &bp,
xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, &bp, XFS_DATA_FORK))) { XFS_DATA_FORK, NULL);
if (error)
return error; return error;
}
ASSERT(bp != NULL); ASSERT(bp != NULL);
hdr = bp->b_addr; hdr = bp->b_addr;
xfs_dir2_data_check(dp, bp); xfs_dir2_data_check(dp, bp);
...@@ -917,10 +917,11 @@ xfs_dir2_leaf_to_block( ...@@ -917,10 +917,11 @@ xfs_dir2_leaf_to_block(
/* /*
* Read the data block if we don't already have it, give up if it fails. * Read the data block if we don't already have it, give up if it fails.
*/ */
if (dbp == NULL && if (!dbp) {
(error = xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, &dbp, error = xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, &dbp,
XFS_DATA_FORK))) { XFS_DATA_FORK, NULL);
return error; if (error)
return error;
} }
hdr = dbp->b_addr; hdr = dbp->b_addr;
ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC)); ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC));
......
...@@ -315,10 +315,9 @@ xfs_dir2_leaf_addname( ...@@ -315,10 +315,9 @@ xfs_dir2_leaf_addname(
* Read the leaf block. * Read the leaf block.
*/ */
error = xfs_da_read_buf(tp, dp, mp->m_dirleafblk, -1, &lbp, error = xfs_da_read_buf(tp, dp, mp->m_dirleafblk, -1, &lbp,
XFS_DATA_FORK); XFS_DATA_FORK, NULL);
if (error) { if (error)
return error; return error;
}
ASSERT(lbp != NULL); ASSERT(lbp != NULL);
/* /*
* Look up the entry by hash value and name. * Look up the entry by hash value and name.
...@@ -500,9 +499,9 @@ xfs_dir2_leaf_addname( ...@@ -500,9 +499,9 @@ xfs_dir2_leaf_addname(
* Just read that one in. * Just read that one in.
*/ */
else { else {
if ((error = error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, use_block),
xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, use_block), -1, &dbp, XFS_DATA_FORK, NULL);
-1, &dbp, XFS_DATA_FORK))) { if (error) {
xfs_trans_brelse(tp, lbp); xfs_trans_brelse(tp, lbp);
return error; return error;
} }
...@@ -895,7 +894,7 @@ xfs_dir2_leaf_readbuf( ...@@ -895,7 +894,7 @@ xfs_dir2_leaf_readbuf(
error = xfs_da_read_buf(NULL, dp, map->br_startoff, error = xfs_da_read_buf(NULL, dp, map->br_startoff,
map->br_blockcount >= mp->m_dirblkfsbs ? map->br_blockcount >= mp->m_dirblkfsbs ?
XFS_FSB_TO_DADDR(mp, map->br_startblock) : -1, XFS_FSB_TO_DADDR(mp, map->br_startblock) : -1,
&bp, XFS_DATA_FORK); &bp, XFS_DATA_FORK, NULL);
/* /*
* Should just skip over the data block instead of giving up. * Should just skip over the data block instead of giving up.
...@@ -938,7 +937,7 @@ xfs_dir2_leaf_readbuf( ...@@ -938,7 +937,7 @@ xfs_dir2_leaf_readbuf(
xfs_da_reada_buf(NULL, dp, xfs_da_reada_buf(NULL, dp,
map[mip->ra_index].br_startoff + map[mip->ra_index].br_startoff +
mip->ra_offset, mip->ra_offset,
XFS_DATA_FORK); XFS_DATA_FORK, NULL);
mip->ra_current = i; mip->ra_current = i;
} }
...@@ -1376,7 +1375,7 @@ xfs_dir2_leaf_lookup_int( ...@@ -1376,7 +1375,7 @@ xfs_dir2_leaf_lookup_int(
* Read the leaf block into the buffer. * Read the leaf block into the buffer.
*/ */
error = xfs_da_read_buf(tp, dp, mp->m_dirleafblk, -1, &lbp, error = xfs_da_read_buf(tp, dp, mp->m_dirleafblk, -1, &lbp,
XFS_DATA_FORK); XFS_DATA_FORK, NULL);
if (error) if (error)
return error; return error;
*lbpp = lbp; *lbpp = lbp;
...@@ -1411,7 +1410,7 @@ xfs_dir2_leaf_lookup_int( ...@@ -1411,7 +1410,7 @@ xfs_dir2_leaf_lookup_int(
xfs_trans_brelse(tp, dbp); xfs_trans_brelse(tp, dbp);
error = xfs_da_read_buf(tp, dp, error = xfs_da_read_buf(tp, dp,
xfs_dir2_db_to_da(mp, newdb), xfs_dir2_db_to_da(mp, newdb),
-1, &dbp, XFS_DATA_FORK); -1, &dbp, XFS_DATA_FORK, NULL);
if (error) { if (error) {
xfs_trans_brelse(tp, lbp); xfs_trans_brelse(tp, lbp);
return error; return error;
...@@ -1453,7 +1452,7 @@ xfs_dir2_leaf_lookup_int( ...@@ -1453,7 +1452,7 @@ xfs_dir2_leaf_lookup_int(
xfs_trans_brelse(tp, dbp); xfs_trans_brelse(tp, dbp);
error = xfs_da_read_buf(tp, dp, error = xfs_da_read_buf(tp, dp,
xfs_dir2_db_to_da(mp, cidb), xfs_dir2_db_to_da(mp, cidb),
-1, &dbp, XFS_DATA_FORK); -1, &dbp, XFS_DATA_FORK, NULL);
if (error) { if (error) {
xfs_trans_brelse(tp, lbp); xfs_trans_brelse(tp, lbp);
return error; return error;
...@@ -1738,10 +1737,10 @@ xfs_dir2_leaf_trim_data( ...@@ -1738,10 +1737,10 @@ xfs_dir2_leaf_trim_data(
/* /*
* Read the offending data block. We need its buffer. * Read the offending data block. We need its buffer.
*/ */
if ((error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, db), -1, &dbp, error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, db), -1, &dbp,
XFS_DATA_FORK))) { XFS_DATA_FORK, NULL);
if (error)
return error; return error;
}
leaf = lbp->b_addr; leaf = lbp->b_addr;
ltp = xfs_dir2_leaf_tail_p(mp, leaf); ltp = xfs_dir2_leaf_tail_p(mp, leaf);
...@@ -1864,10 +1863,10 @@ xfs_dir2_node_to_leaf( ...@@ -1864,10 +1863,10 @@ xfs_dir2_node_to_leaf(
/* /*
* Read the freespace block. * Read the freespace block.
*/ */
if ((error = xfs_da_read_buf(tp, dp, mp->m_dirfreeblk, -1, &fbp, error = xfs_da_read_buf(tp, dp, mp->m_dirfreeblk, -1, &fbp,
XFS_DATA_FORK))) { XFS_DATA_FORK, NULL);
if (error)
return error; return error;
}
free = fbp->b_addr; free = fbp->b_addr;
ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
ASSERT(!free->hdr.firstdb); ASSERT(!free->hdr.firstdb);
......
...@@ -399,7 +399,7 @@ xfs_dir2_leafn_lookup_for_addname( ...@@ -399,7 +399,7 @@ xfs_dir2_leafn_lookup_for_addname(
*/ */
error = xfs_da_read_buf(tp, dp, error = xfs_da_read_buf(tp, dp,
xfs_dir2_db_to_da(mp, newfdb), xfs_dir2_db_to_da(mp, newfdb),
-1, &curbp, XFS_DATA_FORK); -1, &curbp, XFS_DATA_FORK, NULL);
if (error) if (error)
return error; return error;
free = curbp->b_addr; free = curbp->b_addr;
...@@ -536,7 +536,7 @@ xfs_dir2_leafn_lookup_for_entry( ...@@ -536,7 +536,7 @@ xfs_dir2_leafn_lookup_for_entry(
} else { } else {
error = xfs_da_read_buf(tp, dp, error = xfs_da_read_buf(tp, dp,
xfs_dir2_db_to_da(mp, newdb), xfs_dir2_db_to_da(mp, newdb),
-1, &curbp, XFS_DATA_FORK); -1, &curbp, XFS_DATA_FORK, NULL);
if (error) if (error)
return error; return error;
} }
...@@ -915,10 +915,10 @@ xfs_dir2_leafn_remove( ...@@ -915,10 +915,10 @@ xfs_dir2_leafn_remove(
* read in the free block. * read in the free block.
*/ */
fdb = xfs_dir2_db_to_fdb(mp, db); fdb = xfs_dir2_db_to_fdb(mp, db);
if ((error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, fdb), error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, fdb),
-1, &fbp, XFS_DATA_FORK))) { -1, &fbp, XFS_DATA_FORK, NULL);
if (error)
return error; return error;
}
free = fbp->b_addr; free = fbp->b_addr;
ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
ASSERT(be32_to_cpu(free->hdr.firstdb) == ASSERT(be32_to_cpu(free->hdr.firstdb) ==
...@@ -1169,11 +1169,10 @@ xfs_dir2_leafn_toosmall( ...@@ -1169,11 +1169,10 @@ xfs_dir2_leafn_toosmall(
/* /*
* Read the sibling leaf block. * Read the sibling leaf block.
*/ */
if ((error = error = xfs_da_read_buf(state->args->trans, state->args->dp,
xfs_da_read_buf(state->args->trans, state->args->dp, blkno, blkno, -1, &bp, XFS_DATA_FORK, NULL);
-1, &bp, XFS_DATA_FORK))) { if (error)
return error; return error;
}
ASSERT(bp != NULL); ASSERT(bp != NULL);
/* /*
* Count bytes in the two blocks combined. * Count bytes in the two blocks combined.
...@@ -1454,14 +1453,13 @@ xfs_dir2_node_addname_int( ...@@ -1454,14 +1453,13 @@ xfs_dir2_node_addname_int(
* This should be really rare, so there's no reason * This should be really rare, so there's no reason
* to avoid it. * to avoid it.
*/ */
if ((error = xfs_da_read_buf(tp, dp, error = xfs_da_read_buf(tp, dp,
xfs_dir2_db_to_da(mp, fbno), -2, &fbp, xfs_dir2_db_to_da(mp, fbno), -2,
XFS_DATA_FORK))) { &fbp, XFS_DATA_FORK, NULL);
if (error)
return error; return error;
} if (!fbp)
if (unlikely(fbp == NULL)) {
continue; continue;
}
free = fbp->b_addr; free = fbp->b_addr;
ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
findex = 0; findex = 0;
...@@ -1520,9 +1518,9 @@ xfs_dir2_node_addname_int( ...@@ -1520,9 +1518,9 @@ xfs_dir2_node_addname_int(
* that was just allocated. * that was just allocated.
*/ */
fbno = xfs_dir2_db_to_fdb(mp, dbno); fbno = xfs_dir2_db_to_fdb(mp, dbno);
if (unlikely(error = xfs_da_read_buf(tp, dp, error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, fbno), -2,
xfs_dir2_db_to_da(mp, fbno), -2, &fbp, &fbp, XFS_DATA_FORK, NULL);
XFS_DATA_FORK))) if (error)
return error; return error;
/* /*
...@@ -1631,7 +1629,7 @@ xfs_dir2_node_addname_int( ...@@ -1631,7 +1629,7 @@ xfs_dir2_node_addname_int(
* Read the data block in. * Read the data block in.
*/ */
error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, dbno), error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, dbno),
-1, &dbp, XFS_DATA_FORK); -1, &dbp, XFS_DATA_FORK, NULL);
if (error) if (error)
return error; return error;
hdr = dbp->b_addr; hdr = dbp->b_addr;
...@@ -1917,11 +1915,10 @@ xfs_dir2_node_trim_free( ...@@ -1917,11 +1915,10 @@ xfs_dir2_node_trim_free(
/* /*
* Read the freespace block. * Read the freespace block.
*/ */
if (unlikely(error = xfs_da_read_buf(tp, dp, (xfs_dablk_t)fo, -2, &bp, error = xfs_da_read_buf(tp, dp, (xfs_dablk_t)fo, -2, &bp,
XFS_DATA_FORK))) { XFS_DATA_FORK, NULL);
if (error)
return error; return error;
}
/* /*
* There can be holes in freespace. If fo is a hole, there's * There can be holes in freespace. If fo is a hole, there's
* nothing to do. * nothing to do.
......
...@@ -891,7 +891,7 @@ xfs_dir_open( ...@@ -891,7 +891,7 @@ xfs_dir_open(
*/ */
mode = xfs_ilock_map_shared(ip); mode = xfs_ilock_map_shared(ip);
if (ip->i_d.di_nextents > 0) if (ip->i_d.di_nextents > 0)
xfs_da_reada_buf(NULL, ip, 0, XFS_DATA_FORK); xfs_da_reada_buf(NULL, ip, 0, XFS_DATA_FORK, NULL);
xfs_iunlock(ip, mode); xfs_iunlock(ip, mode);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment