aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_alloc_btree.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2008-10-30 01:58:32 -0400
committerLachlan McIlroy <lachlan@sgi.com>2008-10-30 01:58:32 -0400
commit4a26e66e7728112f0e1cd7eca3bcc430b3a221c9 (patch)
tree1944f9aa65476c963658b7b4679f7a64287adfb6 /fs/xfs/xfs_alloc_btree.c
parentfd6bcc5b63051392ba709a8fd33173b263669e0a (diff)
[XFS] add keys_inorder and recs_inorder btree methods
Add methods to check whether two keys/records are in the righ order. This replaces the xfs_btree_check_key and xfs_btree_check_rec methods. For the callers from xfs_bmap.c just opencode the bmbt-specific asserts. SGI-PV: 985583 SGI-Modid: xfs-linux-melb:xfs-kern:32208a 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_btree.c')
-rw-r--r--fs/xfs/xfs_alloc_btree.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/fs/xfs/xfs_alloc_btree.c b/fs/xfs/xfs_alloc_btree.c
index 4d44f03858b0..9e63f8c180d9 100644
--- a/fs/xfs/xfs_alloc_btree.c
+++ b/fs/xfs/xfs_alloc_btree.c
@@ -311,6 +311,45 @@ xfs_allocbt_kill_root(
311 return 0; 311 return 0;
312} 312}
313 313
314#ifdef DEBUG
315STATIC int
316xfs_allocbt_keys_inorder(
317 struct xfs_btree_cur *cur,
318 union xfs_btree_key *k1,
319 union xfs_btree_key *k2)
320{
321 if (cur->bc_btnum == XFS_BTNUM_BNO) {
322 return be32_to_cpu(k1->alloc.ar_startblock) <
323 be32_to_cpu(k2->alloc.ar_startblock);
324 } else {
325 return be32_to_cpu(k1->alloc.ar_blockcount) <
326 be32_to_cpu(k2->alloc.ar_blockcount) ||
327 (k1->alloc.ar_blockcount == k2->alloc.ar_blockcount &&
328 be32_to_cpu(k1->alloc.ar_startblock) <
329 be32_to_cpu(k2->alloc.ar_startblock));
330 }
331}
332
333STATIC int
334xfs_allocbt_recs_inorder(
335 struct xfs_btree_cur *cur,
336 union xfs_btree_rec *r1,
337 union xfs_btree_rec *r2)
338{
339 if (cur->bc_btnum == XFS_BTNUM_BNO) {
340 return be32_to_cpu(r1->alloc.ar_startblock) +
341 be32_to_cpu(r1->alloc.ar_blockcount) <=
342 be32_to_cpu(r2->alloc.ar_startblock);
343 } else {
344 return be32_to_cpu(r1->alloc.ar_blockcount) <
345 be32_to_cpu(r2->alloc.ar_blockcount) ||
346 (r1->alloc.ar_blockcount == r2->alloc.ar_blockcount &&
347 be32_to_cpu(r1->alloc.ar_startblock) <
348 be32_to_cpu(r2->alloc.ar_startblock));
349 }
350}
351#endif /* DEBUG */
352
314#ifdef XFS_BTREE_TRACE 353#ifdef XFS_BTREE_TRACE
315ktrace_t *xfs_allocbt_trace_buf; 354ktrace_t *xfs_allocbt_trace_buf;
316 355
@@ -395,6 +434,11 @@ static const struct xfs_btree_ops xfs_allocbt_ops = {
395 .init_ptr_from_cur = xfs_allocbt_init_ptr_from_cur, 434 .init_ptr_from_cur = xfs_allocbt_init_ptr_from_cur,
396 .key_diff = xfs_allocbt_key_diff, 435 .key_diff = xfs_allocbt_key_diff,
397 436
437#ifdef DEBUG
438 .keys_inorder = xfs_allocbt_keys_inorder,
439 .recs_inorder = xfs_allocbt_recs_inorder,
440#endif
441
398#ifdef XFS_BTREE_TRACE 442#ifdef XFS_BTREE_TRACE
399 .trace_enter = xfs_allocbt_trace_enter, 443 .trace_enter = xfs_allocbt_trace_enter,
400 .trace_cursor = xfs_allocbt_trace_cursor, 444 .trace_cursor = xfs_allocbt_trace_cursor,