]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[XFS] Dynamically allocate the xfs_dinode_core_t structure to reduce our
authorNathan Scott <nathans@sgi.com>
Tue, 14 Mar 2006 03:07:36 +0000 (14:07 +1100)
committerNathan Scott <nathans@sgi.com>
Tue, 14 Mar 2006 03:07:36 +0000 (14:07 +1100)
stack footprint in xfs_ialloc_ag_alloc.

SGI-PV: 947312
SGI-Modid: xfs-linux-melb:xfs-kern:25420a

Signed-off-by: Nathan Scott <nathans@sgi.com>
fs/xfs/xfs_ialloc.c

index 8f3fae1aa98a5bd8df833ccd7efc78e5828408b1..0024892841a312cd6993916203f4a36a2d2f8e11 100644 (file)
@@ -138,8 +138,6 @@ xfs_ialloc_ag_alloc(
        int             version;        /* inode version number to use */
        int             isaligned;      /* inode allocation at stripe unit */
                                        /* boundary */
-       xfs_dinode_core_t dic;          /* a dinode_core to copy to new */
-                                       /* inodes */
 
        args.tp = tp;
        args.mp = tp->t_mountp;
@@ -250,10 +248,6 @@ xfs_ialloc_ag_alloc(
        else
                version = XFS_DINODE_VERSION_1;
 
-       memset(&dic, 0, sizeof(xfs_dinode_core_t));
-       INT_SET(dic.di_magic, ARCH_CONVERT, XFS_DINODE_MAGIC);
-       INT_SET(dic.di_version, ARCH_CONVERT, version);
-
        for (j = 0; j < nbufs; j++) {
                /*
                 * Get the block.
@@ -266,12 +260,13 @@ xfs_ialloc_ag_alloc(
                ASSERT(fbuf);
                ASSERT(!XFS_BUF_GETERROR(fbuf));
                /*
-                * Loop over the inodes in this buffer.
+                * Set initial values for the inodes in this buffer.
                 */
-
+               xfs_biozero(fbuf, 0, ninodes << args.mp->m_sb.sb_inodelog);
                for (i = 0; i < ninodes; i++) {
                        free = XFS_MAKE_IPTR(args.mp, fbuf, i);
-                       memcpy(&(free->di_core), &dic, sizeof(xfs_dinode_core_t));
+                       INT_SET(free->di_core.di_magic, ARCH_CONVERT, XFS_DINODE_MAGIC);
+                       INT_SET(free->di_core.di_version, ARCH_CONVERT, version);
                        INT_SET(free->di_next_unlinked, ARCH_CONVERT, NULLAGINO);
                        xfs_ialloc_log_di(tp, fbuf, i,
                                XFS_DI_CORE_BITS | XFS_DI_NEXT_UNLINKED);