mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-21 01:51:18 +00:00
xfs: actually check xfs_btree_check_block return in xfs_btree_islastblock
Coverity points out that xfs_btree_islastblock doesn't check the return value of xfs_btree_check_block. Since the question "Does the cursor point to the last block in this level?" only makes sense if the caller previously performed a lookup or seek operation, the block should already have been checked. Therefore, check the return value in an ASSERT and turn the whole thing into a static inline predicate. Coverity-id: 114069 Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
23220fe260
commit
27d9ee577d
2 changed files with 17 additions and 27 deletions
|
@ -716,25 +716,6 @@ xfs_btree_get_bufs(
|
||||||
return xfs_trans_get_buf(tp, mp->m_ddev_targp, d, mp->m_bsize, 0);
|
return xfs_trans_get_buf(tp, mp->m_ddev_targp, d, mp->m_bsize, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Check for the cursor referring to the last block at the given level.
|
|
||||||
*/
|
|
||||||
int /* 1=is last block, 0=not last block */
|
|
||||||
xfs_btree_islastblock(
|
|
||||||
xfs_btree_cur_t *cur, /* btree cursor */
|
|
||||||
int level) /* level to check */
|
|
||||||
{
|
|
||||||
struct xfs_btree_block *block; /* generic btree block pointer */
|
|
||||||
xfs_buf_t *bp; /* buffer containing block */
|
|
||||||
|
|
||||||
block = xfs_btree_get_block(cur, level, &bp);
|
|
||||||
xfs_btree_check_block(cur, block, level, bp);
|
|
||||||
if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
|
|
||||||
return block->bb_u.l.bb_rightsib == cpu_to_be64(NULLFSBLOCK);
|
|
||||||
else
|
|
||||||
return block->bb_u.s.bb_rightsib == cpu_to_be32(NULLAGBLOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Change the cursor to point to the first record at the given level.
|
* Change the cursor to point to the first record at the given level.
|
||||||
* Other levels are unaffected.
|
* Other levels are unaffected.
|
||||||
|
|
|
@ -317,14 +317,6 @@ xfs_btree_get_bufs(
|
||||||
xfs_agnumber_t agno, /* allocation group number */
|
xfs_agnumber_t agno, /* allocation group number */
|
||||||
xfs_agblock_t agbno); /* allocation group block number */
|
xfs_agblock_t agbno); /* allocation group block number */
|
||||||
|
|
||||||
/*
|
|
||||||
* Check for the cursor referring to the last block at the given level.
|
|
||||||
*/
|
|
||||||
int /* 1=is last block, 0=not last block */
|
|
||||||
xfs_btree_islastblock(
|
|
||||||
xfs_btree_cur_t *cur, /* btree cursor */
|
|
||||||
int level); /* level to check */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute first and last byte offsets for the fields given.
|
* Compute first and last byte offsets for the fields given.
|
||||||
* Interprets the offsets table, which contains struct field offsets.
|
* Interprets the offsets table, which contains struct field offsets.
|
||||||
|
@ -524,4 +516,21 @@ int xfs_btree_has_record(struct xfs_btree_cur *cur, union xfs_btree_irec *low,
|
||||||
union xfs_btree_irec *high, bool *exists);
|
union xfs_btree_irec *high, bool *exists);
|
||||||
bool xfs_btree_has_more_records(struct xfs_btree_cur *cur);
|
bool xfs_btree_has_more_records(struct xfs_btree_cur *cur);
|
||||||
|
|
||||||
|
/* Does this cursor point to the last block in the given level? */
|
||||||
|
static inline bool
|
||||||
|
xfs_btree_islastblock(
|
||||||
|
xfs_btree_cur_t *cur,
|
||||||
|
int level)
|
||||||
|
{
|
||||||
|
struct xfs_btree_block *block;
|
||||||
|
struct xfs_buf *bp;
|
||||||
|
|
||||||
|
block = xfs_btree_get_block(cur, level, &bp);
|
||||||
|
ASSERT(block && xfs_btree_check_block(cur, block, level, bp) == 0);
|
||||||
|
|
||||||
|
if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
|
||||||
|
return block->bb_u.l.bb_rightsib == cpu_to_be64(NULLFSBLOCK);
|
||||||
|
return block->bb_u.s.bb_rightsib == cpu_to_be32(NULLAGBLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __XFS_BTREE_H__ */
|
#endif /* __XFS_BTREE_H__ */
|
||||||
|
|
Loading…
Reference in a new issue