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