aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_dir2_data.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2011-07-08 08:35:42 -0400
committerChristoph Hellwig <hch@lst.de>2011-07-08 08:35:42 -0400
commit0ba9cd84ef2af58645333a86f9c901684ab1fef6 (patch)
tree0c25f43b83bb77ceb44cf29d207a295ac0b77b31 /fs/xfs/xfs_dir2_data.c
parentc2066e2662070e794f57a96a129c42575e77cfcb (diff)
xfs: kill struct xfs_dir2_data
Remove the confusing xfs_dir2_data structure. It is supposed to describe an XFS dir2 data btree block, but due to the variable sized nature of almost all elements in it it can't actuall do anything close to that job. In addition to accessing the fixed offset header structure it was only used to get a pointer to the first dir or unused entry after it, which can be trivially replaced by pointer arithmetics on the header pointer. For most users that is actually more natural anyway, as they don't use a typed pointer but rather a character pointer for further arithmetics. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Alex Elder <aelder@sgi.com> Reviewed-by: Dave Chinner <dchinner@redhat.com>
Diffstat (limited to 'fs/xfs/xfs_dir2_data.c')
-rw-r--r--fs/xfs/xfs_dir2_data.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/fs/xfs/xfs_dir2_data.c b/fs/xfs/xfs_dir2_data.c
index 2bbc21696944..8e47ac3a3b9d 100644
--- a/fs/xfs/xfs_dir2_data.c
+++ b/fs/xfs/xfs_dir2_data.c
@@ -53,7 +53,6 @@ xfs_dir2_data_check(
53 xfs_dir2_data_free_t *bf; /* bestfree table */ 53 xfs_dir2_data_free_t *bf; /* bestfree table */
54 xfs_dir2_block_tail_t *btp=NULL; /* block tail */ 54 xfs_dir2_block_tail_t *btp=NULL; /* block tail */
55 int count; /* count of entries found */ 55 int count; /* count of entries found */
56 xfs_dir2_data_t *d; /* data block pointer */
57 xfs_dir2_data_hdr_t *hdr; /* data block header */ 56 xfs_dir2_data_hdr_t *hdr; /* data block header */
58 xfs_dir2_data_entry_t *dep; /* data entry */ 57 xfs_dir2_data_entry_t *dep; /* data entry */
59 xfs_dir2_data_free_t *dfp; /* bestfree entry */ 58 xfs_dir2_data_free_t *dfp; /* bestfree entry */
@@ -70,10 +69,9 @@ xfs_dir2_data_check(
70 struct xfs_name name; 69 struct xfs_name name;
71 70
72 mp = dp->i_mount; 71 mp = dp->i_mount;
73 d = bp->data; 72 hdr = bp->data;
74 hdr = &d->hdr;
75 bf = hdr->bestfree; 73 bf = hdr->bestfree;
76 p = (char *)d->u; 74 p = (char *)(hdr + 1);
77 75
78 if (be32_to_cpu(hdr->magic) == XFS_DIR2_BLOCK_MAGIC) { 76 if (be32_to_cpu(hdr->magic) == XFS_DIR2_BLOCK_MAGIC) {
79 btp = xfs_dir2_block_tail_p(mp, hdr); 77 btp = xfs_dir2_block_tail_p(mp, hdr);
@@ -336,7 +334,6 @@ xfs_dir2_data_freescan(
336 xfs_dir2_data_hdr_t *hdr, /* data block header */ 334 xfs_dir2_data_hdr_t *hdr, /* data block header */
337 int *loghead) /* out: log data header */ 335 int *loghead) /* out: log data header */
338{ 336{
339 xfs_dir2_data_t *d = (xfs_dir2_data_t *)hdr;
340 xfs_dir2_block_tail_t *btp; /* block tail */ 337 xfs_dir2_block_tail_t *btp; /* block tail */
341 xfs_dir2_data_entry_t *dep; /* active data entry */ 338 xfs_dir2_data_entry_t *dep; /* active data entry */
342 xfs_dir2_data_unused_t *dup; /* unused data entry */ 339 xfs_dir2_data_unused_t *dup; /* unused data entry */
@@ -355,7 +352,7 @@ xfs_dir2_data_freescan(
355 /* 352 /*
356 * Set up pointers. 353 * Set up pointers.
357 */ 354 */
358 p = (char *)d->u; 355 p = (char *)(hdr + 1);
359 if (be32_to_cpu(hdr->magic) == XFS_DIR2_BLOCK_MAGIC) { 356 if (be32_to_cpu(hdr->magic) == XFS_DIR2_BLOCK_MAGIC) {
360 btp = xfs_dir2_block_tail_p(mp, hdr); 357 btp = xfs_dir2_block_tail_p(mp, hdr);
361 endp = (char *)xfs_dir2_block_leaf_p(btp); 358 endp = (char *)xfs_dir2_block_leaf_p(btp);
@@ -398,7 +395,6 @@ xfs_dir2_data_init(
398 xfs_dabuf_t **bpp) /* output block buffer */ 395 xfs_dabuf_t **bpp) /* output block buffer */
399{ 396{
400 xfs_dabuf_t *bp; /* block buffer */ 397 xfs_dabuf_t *bp; /* block buffer */
401 xfs_dir2_data_t *d; /* pointer to block */
402 xfs_dir2_data_hdr_t *hdr; /* data block header */ 398 xfs_dir2_data_hdr_t *hdr; /* data block header */
403 xfs_inode_t *dp; /* incore directory inode */ 399 xfs_inode_t *dp; /* incore directory inode */
404 xfs_dir2_data_unused_t *dup; /* unused entry pointer */ 400 xfs_dir2_data_unused_t *dup; /* unused entry pointer */
@@ -424,8 +420,7 @@ xfs_dir2_data_init(
424 /* 420 /*
425 * Initialize the header. 421 * Initialize the header.
426 */ 422 */
427 d = bp->data; 423 hdr = bp->data;
428 hdr = &d->hdr;
429 hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); 424 hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC);
430 hdr->bestfree[0].offset = cpu_to_be16(sizeof(*hdr)); 425 hdr->bestfree[0].offset = cpu_to_be16(sizeof(*hdr));
431 for (i = 1; i < XFS_DIR2_DATA_FD_COUNT; i++) { 426 for (i = 1; i < XFS_DIR2_DATA_FD_COUNT; i++) {
@@ -436,7 +431,7 @@ xfs_dir2_data_init(
436 /* 431 /*
437 * Set up an unused entry for the block's body. 432 * Set up an unused entry for the block's body.
438 */ 433 */
439 dup = &d->u[0].unused; 434 dup = (xfs_dir2_data_unused_t *)(hdr + 1);
440 dup->freetag = cpu_to_be16(XFS_DIR2_DATA_FREE_TAG); 435 dup->freetag = cpu_to_be16(XFS_DIR2_DATA_FREE_TAG);
441 436
442 t = mp->m_dirblksize - (uint)sizeof(*hdr); 437 t = mp->m_dirblksize - (uint)sizeof(*hdr);