* [PATCH 24/26] implement generic xfs_btree_getrec
@ 2008-08-04 1:35 Christoph Hellwig
2008-08-05 1:43 ` Dave Chinner
0 siblings, 1 reply; 3+ messages in thread
From: Christoph Hellwig @ 2008-08-04 1:35 UTC (permalink / raw)
To: xfs
[-- Attachment #1: xfs-common-btree-get_rec --]
[-- Type: text/plain, Size: 9304 bytes --]
Not really much reason to make it generic given that it's so small,
but this is the last non-method in xfs_alloc_btree.c and xfs_ialloc_btree.c,
so it makes the whole btree implementation more structured.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Index: linux-2.6-xfs/fs/xfs/xfs_btree.c
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_btree.c 2008-08-04 01:07:19.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_btree.c 2008-08-04 01:11:38.000000000 +0200
@@ -3579,3 +3579,43 @@ error0:
XFS_BTREE_TRACE_CURSOR(cur, XBT_ERROR);
return error;
}
+
+/*
+ * Get the data from the pointed-to record.
+ */
+int /* error */
+xfs_btree_getrec(
+ 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 */
+ int ptr; /* record number */
+#ifdef DEBUG
+ int error; /* error return value */
+#endif
+
+ ptr = cur->bc_ptrs[0];
+ block = XFS_BUF_TO_BLOCK(cur->bc_bufs[0]);
+
+#ifdef DEBUG
+ error = xfs_btree_check_block(cur, block, 0, cur->bc_bufs[0]);
+ 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 = cur->bc_ops->rec_addr(cur, ptr, block);
+ *stat = 1;
+ return 0;
+}
Index: linux-2.6-xfs/fs/xfs/xfs_btree.h
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_btree.h 2008-08-04 01:04:14.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_btree.h 2008-08-04 01:11:38.000000000 +0200
@@ -603,6 +603,7 @@ int xfs_btree_iroot_to_root(struct xfs_b
int xfs_btree_root_to_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_getrec(struct xfs_btree_cur *, union xfs_btree_rec **, int *);
/*
Index: linux-2.6-xfs/fs/xfs/xfs_alloc_btree.c
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_alloc_btree.c 2008-08-04 01:03:15.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_alloc_btree.c 2008-08-04 01:11:38.000000000 +0200
@@ -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)
Index: linux-2.6-xfs/fs/xfs/xfs_alloc.c
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_alloc.c 2008-08-04 01:03:01.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_alloc.c 2008-08-04 01:11:38.000000000 +0200
@@ -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_getrec(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.
*/
Index: linux-2.6-xfs/fs/xfs/xfs_alloc_btree.h
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_alloc_btree.h 2008-08-04 01:03:01.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_alloc_btree.h 2008-08-04 01:11:38.000000000 +0200
@@ -94,12 +94,6 @@ typedef struct xfs_btree_sblock xfs_allo
#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 *,
Index: linux-2.6-xfs/fs/xfs/xfs_ialloc.c
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_ialloc.c 2008-08-04 01:03:01.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_ialloc.c 2008-08-04 01:11:38.000000000 +0200
@@ -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_getrec(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.
*/
Index: linux-2.6-xfs/fs/xfs/xfs_ialloc_btree.c
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_ialloc_btree.c 2008-08-04 01:03:31.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_ialloc_btree.c 2008-08-04 01:11:38.000000000 +0200
@@ -41,51 +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 struct xfs_btree_cur *
xfs_inobt_dup_cursor(
struct xfs_btree_cur *cur)
Index: linux-2.6-xfs/fs/xfs/xfs_ialloc_btree.h
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_ialloc_btree.h 2008-08-04 01:03:01.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_ialloc_btree.h 2008-08-04 01:11:38.000000000 +0200
@@ -116,13 +116,6 @@ typedef struct xfs_btree_sblock xfs_inob
(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);
Index: linux-2.6-xfs/fs/xfs/xfs_ialloc.h
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_ialloc.h 2008-08-04 00:11:07.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_ialloc.h 2008-08-04 01:11:38.000000000 +0200
@@ -168,6 +168,11 @@ int xfs_inobt_lookup_ge(struct xfs_btree
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__ */
--
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH 24/26] implement generic xfs_btree_getrec
2008-08-04 1:35 [PATCH 24/26] implement generic xfs_btree_getrec Christoph Hellwig
@ 2008-08-05 1:43 ` Dave Chinner
2008-08-05 1:47 ` Christoph Hellwig
0 siblings, 1 reply; 3+ messages in thread
From: Dave Chinner @ 2008-08-05 1:43 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: xfs
On Mon, Aug 04, 2008 at 03:35:56AM +0200, Christoph Hellwig wrote:
> Not really much reason to make it generic given that it's so small,
> but this is the last non-method in xfs_alloc_btree.c and xfs_ialloc_btree.c,
> so it makes the whole btree implementation more structured.
....
> +int /* error */
> +xfs_btree_getrec(
> + 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 */
> + int ptr; /* record number */
> +#ifdef DEBUG
> + int error; /* error return value */
> +#endif
> +
> + ptr = cur->bc_ptrs[0];
> + block = XFS_BUF_TO_BLOCK(cur->bc_bufs[0]);
Would it make more sense to use:
block = xfs_btree_get_block(cur, 0, &bp);
> +
> +#ifdef DEBUG
> + error = xfs_btree_check_block(cur, block, 0, cur->bc_bufs[0]);
and then pass bp here? I'd rather use the helpers to do this than
open code it like everything else does....
Otherwise it looks good.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH 24/26] implement generic xfs_btree_getrec
2008-08-05 1:43 ` Dave Chinner
@ 2008-08-05 1:47 ` Christoph Hellwig
0 siblings, 0 replies; 3+ messages in thread
From: Christoph Hellwig @ 2008-08-05 1:47 UTC (permalink / raw)
To: Christoph Hellwig, xfs
On Tue, Aug 05, 2008 at 11:43:06AM +1000, Dave Chinner wrote:
> On Mon, Aug 04, 2008 at 03:35:56AM +0200, Christoph Hellwig wrote:
> > Not really much reason to make it generic given that it's so small,
> > but this is the last non-method in xfs_alloc_btree.c and xfs_ialloc_btree.c,
> > so it makes the whole btree implementation more structured.
> ....
> > +int /* error */
> > +xfs_btree_getrec(
> > + 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 */
> > + int ptr; /* record number */
> > +#ifdef DEBUG
> > + int error; /* error return value */
> > +#endif
> > +
> > + ptr = cur->bc_ptrs[0];
> > + block = XFS_BUF_TO_BLOCK(cur->bc_bufs[0]);
>
> Would it make more sense to use:
>
> block = xfs_btree_get_block(cur, 0, &bp);
>
> > +
> > +#ifdef DEBUG
> > + error = xfs_btree_check_block(cur, block, 0, cur->bc_bufs[0]);
>
> and then pass bp here? I'd rather use the helpers to do this than
> open code it like everything else does....
Thanks, updated.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-08-05 1:45 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-04 1:35 [PATCH 24/26] implement generic xfs_btree_getrec Christoph Hellwig
2008-08-05 1:43 ` Dave Chinner
2008-08-05 1:47 ` Christoph Hellwig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox