kernfs: Rearrange kernfs_node fields to reduce its size on 64bit
authorTejun Heo <tj@kernel.org>
Wed, 10 Jan 2024 18:28:16 +0000 (08:28 -1000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 30 Jan 2024 23:53:59 +0000 (15:53 -0800)
Moving .flags and .mode right below .hash makes kernfs_node smaller by 8
bytes on 64bit. To avoid creating a hole from 8 bytes alignment on 32bit
archs, .priv is moved below so that there are two 32bit pointers after the
64bit .id field.

v2: Updated to avoid size increase on 32bit noticed by Geert.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/ZZ7hwA18nfmFjYpj@slm.duckdns.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/linux/kernfs.h

index 99aaa050ccb767954ebcbb0fc47dd522987582e5..82e1ce79a70c3a58877a40c8d2f4d53570bedfbe 100644 (file)
@@ -206,22 +206,22 @@ struct kernfs_node {
 
        const void              *ns;    /* namespace tag */
        unsigned int            hash;   /* ns + name hash */
+       unsigned short          flags;
+       umode_t                 mode;
+
        union {
                struct kernfs_elem_dir          dir;
                struct kernfs_elem_symlink      symlink;
                struct kernfs_elem_attr         attr;
        };
 
-       void                    *priv;
-
        /*
         * 64bit unique ID.  On 64bit ino setups, id is the ino.  On 32bit,
         * the low 32bits are ino and upper generation.
         */
        u64                     id;
 
-       unsigned short          flags;
-       umode_t                 mode;
+       void                    *priv;
        struct kernfs_iattrs    *iattr;
 };