diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/xfs/xfs_alloc.c | 21 | ||||
| -rw-r--r-- | fs/xfs/xfs_alloc_btree.c | 44 | ||||
| -rw-r--r-- | fs/xfs/xfs_alloc_btree.h | 6 | ||||
| -rw-r--r-- | fs/xfs/xfs_btree.c | 41 | ||||
| -rw-r--r-- | fs/xfs/xfs_btree.h | 1 | ||||
| -rw-r--r-- | fs/xfs/xfs_ialloc.c | 23 | ||||
| -rw-r--r-- | fs/xfs/xfs_ialloc.h | 5 | ||||
| -rw-r--r-- | fs/xfs/xfs_ialloc_btree.c | 44 | ||||
| -rw-r--r-- | fs/xfs/xfs_ialloc_btree.h | 7 | 
9 files changed, 91 insertions, 101 deletions
diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c index e9c70249d2c..54fa69e2776 100644 --- a/fs/xfs/xfs_alloc.c +++ b/fs/xfs/xfs_alloc.c @@ -155,6 +155,27 @@ xfs_alloc_update(  }  /* + * Get the data from the pointed-to record. + */ +STATIC int				/* error */ +xfs_alloc_get_rec( +	struct xfs_btree_cur	*cur,	/* btree cursor */ +	xfs_agblock_t		*bno,	/* output: starting block of extent */ +	xfs_extlen_t		*len,	/* output: length of extent */ +	int			*stat)	/* output: success/failure */ +{ +	union xfs_btree_rec	*rec; +	int			error; + +	error = xfs_btree_get_rec(cur, &rec, stat); +	if (!error && *stat == 1) { +		*bno = be32_to_cpu(rec->alloc.ar_startblock); +		*len = be32_to_cpu(rec->alloc.ar_blockcount); +	} +	return error; +} + +/*   * Compute aligned version of the found extent.   * Takes alignment and min length into account.   */ diff --git a/fs/xfs/xfs_alloc_btree.c b/fs/xfs/xfs_alloc_btree.c index d256b51f913..4d44f03858b 100644 --- a/fs/xfs/xfs_alloc_btree.c +++ b/fs/xfs/xfs_alloc_btree.c @@ -41,50 +41,6 @@  #include "xfs_error.h" -/* - * Get the data from the pointed-to record. - */ -int					/* error */ -xfs_alloc_get_rec( -	xfs_btree_cur_t		*cur,	/* btree cursor */ -	xfs_agblock_t		*bno,	/* output: starting block of extent */ -	xfs_extlen_t		*len,	/* output: length of extent */ -	int			*stat)	/* output: success/failure */ -{ -	xfs_alloc_block_t	*block;	/* btree block */ -#ifdef DEBUG -	int			error;	/* error return value */ -#endif -	int			ptr;	/* record number */ - -	ptr = cur->bc_ptrs[0]; -	block = XFS_BUF_TO_ALLOC_BLOCK(cur->bc_bufs[0]); -#ifdef DEBUG -	if ((error = xfs_btree_check_sblock(cur, block, 0, cur->bc_bufs[0]))) -		return error; -#endif -	/* -	 * Off the right end or left end, return failure. -	 */ -	if (ptr > be16_to_cpu(block->bb_numrecs) || ptr <= 0) { -		*stat = 0; -		return 0; -	} -	/* -	 * Point to the record and extract its data. -	 */ -	{ -		xfs_alloc_rec_t		*rec;	/* record data */ - -		rec = XFS_ALLOC_REC_ADDR(block, ptr, cur); -		*bno = be32_to_cpu(rec->ar_startblock); -		*len = be32_to_cpu(rec->ar_blockcount); -	} -	*stat = 1; -	return 0; -} - -  STATIC struct xfs_btree_cur *  xfs_allocbt_dup_cursor(  	struct xfs_btree_cur	*cur) diff --git a/fs/xfs/xfs_alloc_btree.h b/fs/xfs/xfs_alloc_btree.h index 8d2e3ec21fd..22f1d709af7 100644 --- a/fs/xfs/xfs_alloc_btree.h +++ b/fs/xfs/xfs_alloc_btree.h @@ -94,12 +94,6 @@ typedef	struct xfs_btree_sblock xfs_alloc_block_t;  #define	XFS_ALLOC_PTR_ADDR(bb,i,cur)	\  	XFS_BTREE_PTR_ADDR(xfs_alloc, bb, i, XFS_ALLOC_BLOCK_MAXRECS(1, cur)) -/* - * Get the data from the pointed-to record. - */ -extern int xfs_alloc_get_rec(struct xfs_btree_cur *cur,	xfs_agblock_t *bno, -				xfs_extlen_t *len, int *stat); -  extern struct xfs_btree_cur *xfs_allocbt_init_cursor(struct xfs_mount *,  		struct xfs_trans *, struct xfs_buf *, diff --git a/fs/xfs/xfs_btree.c b/fs/xfs/xfs_btree.c index 28cc7681834..8503ed5d10a 100644 --- a/fs/xfs/xfs_btree.c +++ b/fs/xfs/xfs_btree.c @@ -3764,3 +3764,44 @@ error0:  	XFS_BTREE_TRACE_CURSOR(cur, XBT_ERROR);  	return error;  } + +/* + * Get the data from the pointed-to record. + */ +int					/* error */ +xfs_btree_get_rec( +	struct xfs_btree_cur	*cur,	/* btree cursor */ +	union xfs_btree_rec	**recp,	/* output: btree record */ +	int			*stat)	/* output: success/failure */ +{ +	struct xfs_btree_block	*block;	/* btree block */ +	struct xfs_buf		*bp;	/* buffer pointer */ +	int			ptr;	/* record number */ +#ifdef DEBUG +	int			error;	/* error return value */ +#endif + +	ptr = cur->bc_ptrs[0]; +	block = xfs_btree_get_block(cur, 0, &bp); + +#ifdef DEBUG +	error = xfs_btree_check_block(cur, block, 0, bp); +	if (error) +		return error; +#endif + +	/* +	 * Off the right end or left end, return failure. +	 */ +	if (ptr > xfs_btree_get_numrecs(block) || ptr <= 0) { +		*stat = 0; +		return 0; +	} + +	/* +	 * Point to the record and extract its data. +	 */ +	*recp = xfs_btree_rec_addr(cur, ptr, block); +	*stat = 1; +	return 0; +} diff --git a/fs/xfs/xfs_btree.h b/fs/xfs/xfs_btree.h index 06ef792e0aa..cee3684d871 100644 --- a/fs/xfs/xfs_btree.h +++ b/fs/xfs/xfs_btree.h @@ -567,6 +567,7 @@ int xfs_btree_new_iroot(struct xfs_btree_cur *, int *, int *);  int xfs_btree_kill_iroot(struct xfs_btree_cur *);  int xfs_btree_insert(struct xfs_btree_cur *, int *);  int xfs_btree_delete(struct xfs_btree_cur *, int *); +int xfs_btree_get_rec(struct xfs_btree_cur *, union xfs_btree_rec **, int *);  /*   * Helpers. diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c index f13f59b13cc..c8a56c52964 100644 --- a/fs/xfs/xfs_ialloc.c +++ b/fs/xfs/xfs_ialloc.c @@ -192,6 +192,29 @@ xfs_inobt_update(  }  /* + * Get the data from the pointed-to record. + */ +int					/* error */ +xfs_inobt_get_rec( +	struct xfs_btree_cur	*cur,	/* btree cursor */ +	xfs_agino_t		*ino,	/* output: starting inode of chunk */ +	__int32_t		*fcnt,	/* output: number of free inodes */ +	xfs_inofree_t		*free,	/* output: free inode mask */ +	int			*stat)	/* output: success/failure */ +{ +	union xfs_btree_rec	*rec; +	int			error; + +	error = xfs_btree_get_rec(cur, &rec, stat); +	if (!error && *stat == 1) { +		*ino = be32_to_cpu(rec->inobt.ir_startino); +		*fcnt = be32_to_cpu(rec->inobt.ir_freecount); +		*free = be64_to_cpu(rec->inobt.ir_free); +	} +	return error; +} + +/*   * Allocate new inodes in the allocation group specified by agbp.   * Return 0 for success, else error code.   */ diff --git a/fs/xfs/xfs_ialloc.h b/fs/xfs/xfs_ialloc.h index 4026578bc26..c5745f6d94e 100644 --- a/fs/xfs/xfs_ialloc.h +++ b/fs/xfs/xfs_ialloc.h @@ -168,6 +168,11 @@ int xfs_inobt_lookup_ge(struct xfs_btree_cur *cur, xfs_agino_t ino,  int xfs_inobt_lookup_le(struct xfs_btree_cur *cur, xfs_agino_t ino,  		__int32_t fcnt,	xfs_inofree_t free, int *stat); +/* + * Get the data from the pointed-to record. + */ +extern int xfs_inobt_get_rec(struct xfs_btree_cur *cur, xfs_agino_t *ino, +			     __int32_t *fcnt, xfs_inofree_t *free, int *stat);  #endif	/* __KERNEL__ */ diff --git a/fs/xfs/xfs_ialloc_btree.c b/fs/xfs/xfs_ialloc_btree.c index 6c0a07d1fed..9f4e33c945c 100644 --- a/fs/xfs/xfs_ialloc_btree.c +++ b/fs/xfs/xfs_ialloc_btree.c @@ -41,50 +41,6 @@  #include "xfs_error.h" -/* - * Get the data from the pointed-to record. - */ -int					/* error */ -xfs_inobt_get_rec( -	xfs_btree_cur_t		*cur,	/* btree cursor */ -	xfs_agino_t		*ino,	/* output: starting inode of chunk */ -	__int32_t		*fcnt,	/* output: number of free inodes */ -	xfs_inofree_t		*free,	/* output: free inode mask */ -	int			*stat)	/* output: success/failure */ -{ -	xfs_inobt_block_t	*block;	/* btree block */ -	xfs_buf_t		*bp;	/* buffer containing btree block */ -#ifdef DEBUG -	int			error;	/* error return value */ -#endif -	int			ptr;	/* record number */ -	xfs_inobt_rec_t		*rec;	/* record data */ - -	bp = cur->bc_bufs[0]; -	ptr = cur->bc_ptrs[0]; -	block = XFS_BUF_TO_INOBT_BLOCK(bp); -#ifdef DEBUG -	if ((error = xfs_btree_check_sblock(cur, block, 0, bp))) -		return error; -#endif -	/* -	 * Off the right end or left end, return failure. -	 */ -	if (ptr > be16_to_cpu(block->bb_numrecs) || ptr <= 0) { -		*stat = 0; -		return 0; -	} -	/* -	 * Point to the record and extract its data. -	 */ -	rec = XFS_INOBT_REC_ADDR(block, ptr, cur); -	*ino = be32_to_cpu(rec->ir_startino); -	*fcnt = be32_to_cpu(rec->ir_freecount); -	*free = be64_to_cpu(rec->ir_free); -	*stat = 1; -	return 0; -} -  STATIC int  xfs_inobt_get_minrecs(  	struct xfs_btree_cur	*cur, diff --git a/fs/xfs/xfs_ialloc_btree.h b/fs/xfs/xfs_ialloc_btree.h index 3eff3b6e5fa..ff7406b4bac 100644 --- a/fs/xfs/xfs_ialloc_btree.h +++ b/fs/xfs/xfs_ialloc_btree.h @@ -116,13 +116,6 @@ typedef	struct xfs_btree_sblock xfs_inobt_block_t;  	(XFS_BTREE_PTR_ADDR(xfs_inobt, bb, \  				i, XFS_INOBT_BLOCK_MAXRECS(1, cur))) -/* - * Get the data from the pointed-to record. - */ -extern int xfs_inobt_get_rec(struct xfs_btree_cur *cur, xfs_agino_t *ino, -			     __int32_t *fcnt, xfs_inofree_t *free, int *stat); - -  extern struct xfs_btree_cur *xfs_inobt_init_cursor(struct xfs_mount *,  		struct xfs_trans *, struct xfs_buf *, xfs_agnumber_t);  |