mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 00:24:12 +08: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
@ -716,25 +716,6 @@ xfs_btree_get_bufs(
|
||||
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.
|
||||
* Other levels are unaffected.
|
||||
|
@ -317,14 +317,6 @@ xfs_btree_get_bufs(
|
||||
xfs_agnumber_t agno, /* allocation group 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.
|
||||
* 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);
|
||||
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__ */
|
||||
|
Loading…
Reference in New Issue
Block a user