xfs: cleanup struct xfs_dir2_free
Christoph Hellwig [Wed, 13 Jul 2011 11:43:48 +0000 (13:43 +0200)]
Change the bests array to be a proper variable sized entry.  This is done
easily as no one relies on the size of the structure.  Also change
XFS_DIR2_MAX_FREE_BESTS to an inline function while we're at it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Alex Elder <aelder@sgi.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>

fs/xfs/xfs_dir2_format.h
fs/xfs/xfs_dir2_node.c

index c3c4839..0727098 100644 (file)
@@ -516,13 +516,15 @@ typedef   struct xfs_dir2_free_hdr {
 
 typedef struct xfs_dir2_free {
        xfs_dir2_free_hdr_t     hdr;            /* block header */
-       __be16                  bests[1];       /* best free counts */
+       __be16                  bests[];        /* best free counts */
                                                /* unused entries are -1 */
 } xfs_dir2_free_t;
 
-#define        XFS_DIR2_MAX_FREE_BESTS(mp)     \
-       (((mp)->m_dirblksize - (uint)sizeof(struct xfs_dir2_free_hdr)) / \
-        (uint)sizeof(xfs_dir2_data_off_t))
+static inline int xfs_dir2_free_max_bests(struct xfs_mount *mp)
+{
+       return (mp->m_dirblksize - sizeof(struct xfs_dir2_free_hdr)) /
+               sizeof(xfs_dir2_data_off_t);
+}
 
 /*
  * Convert data space db to the corresponding free db.
@@ -530,7 +532,7 @@ typedef struct xfs_dir2_free {
 static inline xfs_dir2_db_t
 xfs_dir2_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db)
 {
-       return XFS_DIR2_FREE_FIRSTDB(mp) + db / XFS_DIR2_MAX_FREE_BESTS(mp);
+       return XFS_DIR2_FREE_FIRSTDB(mp) + db / xfs_dir2_free_max_bests(mp);
 }
 
 /*
@@ -539,7 +541,7 @@ xfs_dir2_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db)
 static inline int
 xfs_dir2_db_to_fdindex(struct xfs_mount *mp, xfs_dir2_db_t db)
 {
-       return db % XFS_DIR2_MAX_FREE_BESTS(mp);
+       return db % xfs_dir2_free_max_bests(mp);
 }
 
 /*
index ec0a23e..084b324 100644 (file)
@@ -408,7 +408,7 @@ xfs_dir2_leafn_lookup_for_addname(
                                ASSERT(be32_to_cpu(free->hdr.magic) ==
                                        XFS_DIR2_FREE_MAGIC);
                                ASSERT((be32_to_cpu(free->hdr.firstdb) %
-                                       XFS_DIR2_MAX_FREE_BESTS(mp)) == 0);
+                                       xfs_dir2_free_max_bests(mp)) == 0);
                                ASSERT(be32_to_cpu(free->hdr.firstdb) <= curdb);
                                ASSERT(curdb < be32_to_cpu(free->hdr.firstdb) +
                                        be32_to_cpu(free->hdr.nvalid));
@@ -924,7 +924,7 @@ xfs_dir2_leafn_remove(
                free = fbp->data;
                ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
                ASSERT(be32_to_cpu(free->hdr.firstdb) ==
-                      XFS_DIR2_MAX_FREE_BESTS(mp) *
+                      xfs_dir2_free_max_bests(mp) *
                       (fdb - XFS_DIR2_FREE_FIRSTDB(mp)));
                /*
                 * Calculate which entry we need to fix.
@@ -1603,7 +1603,7 @@ xfs_dir2_node_addname_int(
                        free->hdr.magic = cpu_to_be32(XFS_DIR2_FREE_MAGIC);
                        free->hdr.firstdb = cpu_to_be32(
                                (fbno - XFS_DIR2_FREE_FIRSTDB(mp)) *
-                               XFS_DIR2_MAX_FREE_BESTS(mp));
+                               xfs_dir2_free_max_bests(mp));
                        free->hdr.nvalid = 0;
                        free->hdr.nused = 0;
                } else {
@@ -1620,7 +1620,7 @@ xfs_dir2_node_addname_int(
                 * freespace block, extend that table.
                 */
                if (findex >= be32_to_cpu(free->hdr.nvalid)) {
-                       ASSERT(findex < XFS_DIR2_MAX_FREE_BESTS(mp));
+                       ASSERT(findex < xfs_dir2_free_max_bests(mp));
                        free->hdr.nvalid = cpu_to_be32(findex + 1);
                        /*
                         * Tag new entry so nused will go up.