diff options
Diffstat (limited to 'fs/xfs/libxfs/xfs_btree.h')
| -rw-r--r-- | fs/xfs/libxfs/xfs_btree.h | 37 | 
1 files changed, 28 insertions, 9 deletions
diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h index ced1e65d1483..fb9b2121c628 100644 --- a/fs/xfs/libxfs/xfs_btree.h +++ b/fs/xfs/libxfs/xfs_btree.h @@ -183,6 +183,9 @@ union xfs_btree_cur_private {  		unsigned long	nr_ops;		/* # record updates */  		int		shape_changes;	/* # of extent splits */  	} refc; +	struct { +		bool		active;		/* allocation cursor state */ +	} abt;  };  /* @@ -315,14 +318,6 @@ xfs_btree_get_bufs(  	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.   */ @@ -482,8 +477,15 @@ int xfs_btree_query_all(struct xfs_btree_cur *cur, xfs_btree_query_range_fn fn,  typedef int (*xfs_btree_visit_blocks_fn)(struct xfs_btree_cur *cur, int level,  		void *data); +/* Visit record blocks. */ +#define XFS_BTREE_VISIT_RECORDS		(1 << 0) +/* Visit leaf blocks. */ +#define XFS_BTREE_VISIT_LEAVES		(1 << 1) +/* Visit all blocks. */ +#define XFS_BTREE_VISIT_ALL		(XFS_BTREE_VISIT_RECORDS | \ +					 XFS_BTREE_VISIT_LEAVES)  int xfs_btree_visit_blocks(struct xfs_btree_cur *cur, -		xfs_btree_visit_blocks_fn fn, void *data); +		xfs_btree_visit_blocks_fn fn, unsigned int flags, void *data);  int xfs_btree_count_blocks(struct xfs_btree_cur *cur, xfs_extlen_t *blocks); @@ -514,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__ */  |