diff options
| author | Christoph Hellwig <hch@infradead.org> | 2008-10-30 16:56:09 +1100 | 
|---|---|---|
| committer | Lachlan McIlroy <lachlan@sgi.com> | 2008-10-30 16:56:09 +1100 | 
| commit | fe033cc848489851f0c7de48f0b1bab5d744ad8a (patch) | |
| tree | f69709f4e9c125c528a699c32f439b53ea0969f3 /fs/xfs/xfs_alloc.c | |
| parent | 8df4da4a0a642d3a016028c0d922bcb4d5a4a6d7 (diff) | |
| download | olio-linux-3.10-fe033cc848489851f0c7de48f0b1bab5d744ad8a.tar.xz olio-linux-3.10-fe033cc848489851f0c7de48f0b1bab5d744ad8a.zip  | |
[XFS] implement generic xfs_btree_lookup
From: Dave Chinner <dgc@sgi.com>
[hch: split out from bigger patch and minor adaptions]
SGI-PV: 985583
SGI-Modid: xfs-linux-melb:xfs-kern:32192a
Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Signed-off-by: Bill O'Donnell <billodo@sgi.com>
Signed-off-by: David Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/xfs/xfs_alloc.c')
| -rw-r--r-- | fs/xfs/xfs_alloc.c | 48 | 
1 files changed, 48 insertions, 0 deletions
diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c index 7ca6903e235..6bda0ae26c2 100644 --- a/fs/xfs/xfs_alloc.c +++ b/fs/xfs/xfs_alloc.c @@ -90,6 +90,54 @@ STATIC int xfs_alloc_ag_vextent_small(xfs_alloc_arg_t *,   */  /* + * Lookup the record equal to [bno, len] in the btree given by cur. + */ +STATIC int				/* error */ +xfs_alloc_lookup_eq( +	struct xfs_btree_cur	*cur,	/* btree cursor */ +	xfs_agblock_t		bno,	/* starting block of extent */ +	xfs_extlen_t		len,	/* length of extent */ +	int			*stat)	/* success/failure */ +{ +	cur->bc_rec.a.ar_startblock = bno; +	cur->bc_rec.a.ar_blockcount = len; +	return xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat); +} + +/* + * Lookup the first record greater than or equal to [bno, len] + * in the btree given by cur. + */ +STATIC int				/* error */ +xfs_alloc_lookup_ge( +	struct xfs_btree_cur	*cur,	/* btree cursor */ +	xfs_agblock_t		bno,	/* starting block of extent */ +	xfs_extlen_t		len,	/* length of extent */ +	int			*stat)	/* success/failure */ +{ +	cur->bc_rec.a.ar_startblock = bno; +	cur->bc_rec.a.ar_blockcount = len; +	return xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat); +} + +/* + * Lookup the first record less than or equal to [bno, len] + * in the btree given by cur. + */ +STATIC int				/* error */ +xfs_alloc_lookup_le( +	struct xfs_btree_cur	*cur,	/* btree cursor */ +	xfs_agblock_t		bno,	/* starting block of extent */ +	xfs_extlen_t		len,	/* length of extent */ +	int			*stat)	/* success/failure */ +{ +	cur->bc_rec.a.ar_startblock = bno; +	cur->bc_rec.a.ar_blockcount = len; +	return xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat); +} + + +/*   * Compute aligned version of the found extent.   * Takes alignment and min length into account.   */  |