Files
ubports_kernel_google_msm/include/linux
Arnaldo Carvalho de Melo 12d40e43d2 [PATCH] Save some bytes in struct inode
[acme@newtoy net-2.6.20]$ pahole --cacheline 64 fs/inode.o inode
/* /pub/scm/linux/kernel/git/acme/net-2.6.20/include/linux/dcache.h:86 */
struct inode {
        struct hlist_node          i_hash;               /*     0     8 */
        struct list_head           i_list;               /*     8     8 */
        struct list_head           i_sb_list;            /*    16     8 */
        struct list_head           i_dentry;             /*    24     8 */
        long unsigned int          i_ino;                /*    32     4 */
        atomic_t                   i_count;              /*    36     4 */
        umode_t                    i_mode;               /*    40     2 */

        /* XXX 2 bytes hole, try to pack */

        unsigned int               i_nlink;              /*    44     4 */
        uid_t                      i_uid;                /*    48     4 */
        gid_t                      i_gid;                /*    52     4 */
        dev_t                      i_rdev;               /*    56     4 */
        loff_t                     i_size;               /*    60     8 */
        struct timespec            i_atime;              /*    68     8 */
        struct timespec            i_mtime;              /*    76     8 */
        struct timespec            i_ctime;              /*    84     8 */
        unsigned int               i_blkbits;            /*    92     4 */
        long unsigned int          i_version;            /*    96     4 */
        blkcnt_t                   i_blocks;             /*   100     4 */
        short unsigned int         i_bytes;              /*   104     2 */

        /* XXX 2 bytes hole, try to pack */

        spinlock_t                 i_lock;               /*   108    40 */
        struct mutex               i_mutex;              /*   148    76 */
        struct rw_semaphore        i_alloc_sem;          /*   224    64 */
        struct inode_operations *  i_op;                 /*   288     4 */
        const struct file_operations  * i_fop;           /*   292     4 */
        struct super_block *       i_sb;                 /*   296     4 */
        struct file_lock *         i_flock;              /*   300     4 */
        struct address_space *     i_mapping;            /*   304     4 */
        struct address_space       i_data;               /*   308   188 */
        struct list_head           i_devices;            /*   496     8 */
        union                      ;                     /*   504     4 */
        int                        i_cindex;             /*   508     4 */
        __u32                      i_generation;         /*   512     4 */
        /* ---------- cacheline 8 boundary ---------- */
        long unsigned int          i_dnotify_mask;       /*   516     4 */
        struct dnotify_struct *    i_dnotify;            /*   520     4 */
        struct list_head           inotify_watches;      /*   524     8 */
        struct mutex               inotify_mutex;        /*   532    76 */
        long unsigned int          i_state;              /*   608     4 */
        long unsigned int          dirtied_when;         /*   612     4 */
        unsigned int               i_flags;              /*   616     4 */
        atomic_t                   i_writecount;         /*   620     4 */
        void *                     i_security;           /*   624     4 */
        void *                     i_private;            /*   628     4 */
}; /* size: 632, sum members: 628, holes: 2, sum holes: 4 */

[acme@newtoy net-2.6.20]$

So just moving i_mode to after i_bytes we save 4 bytes by nuking both holes:

[acme@newtoy net-2.6.20]$ codiff -V /tmp/inode.o.before fs/inode.o
/pub/scm/linux/kernel/git/acme/net-2.6.20/fs/inode.c:
  struct inode |   -4
    i_mode;
     from: umode_t               /*    40(0)     2(0) */
     to:   umode_t               /*   102(0)     2(0) */
 1 struct changed
[acme@newtoy net-2.6.20]$

I've prunned all the other offset changes, only this one is of interest here.

So now we have:

[acme@newtoy net-2.6.20]$ pahole --cacheline 64 ../OUTPUT/qemu/net-2.6.20/fs/inode.o inode
/* /pub/scm/linux/kernel/git/acme/net-2.6.20/include/linux/dcache.h:86 */
struct inode {
        struct hlist_node          i_hash;               /*     0     8 */
        struct list_head           i_list;               /*     8     8 */
        struct list_head           i_sb_list;            /*    16     8 */
        struct list_head           i_dentry;             /*    24     8 */
        long unsigned int          i_ino;                /*    32     4 */
        atomic_t                   i_count;              /*    36     4 */
        unsigned int               i_nlink;              /*    40     4 */
        uid_t                      i_uid;                /*    44     4 */
        gid_t                      i_gid;                /*    48     4 */
        dev_t                      i_rdev;               /*    52     4 */
        loff_t                     i_size;               /*    56     8 */
        /* ---------- cacheline 1 boundary ---------- */
        struct timespec            i_atime;              /*    64     8 */
        struct timespec            i_mtime;              /*    72     8 */
        struct timespec            i_ctime;              /*    80     8 */
        unsigned int               i_blkbits;            /*    88     4 */
        long unsigned int          i_version;            /*    92     4 */
        blkcnt_t                   i_blocks;             /*    96     4 */
        short unsigned int         i_bytes;              /*   100     2 */
        umode_t                    i_mode;               /*   102     2 */
        spinlock_t                 i_lock;               /*   104    40 */
        struct mutex               i_mutex;              /*   144    76 */
        struct rw_semaphore        i_alloc_sem;          /*   220    64 */
        struct inode_operations *  i_op;                 /*   284     4 */
        const struct file_operations  * i_fop;           /*   288     4 */
        struct super_block *       i_sb;                 /*   292     4 */
        struct file_lock *         i_flock;              /*   296     4 */
        struct address_space *     i_mapping;            /*   300     4 */
        struct address_space       i_data;               /*   304   188 */
        struct list_head           i_devices;            /*   492     8 */
        union                      ;                     /*   500     4 */
        int                        i_cindex;             /*   504     4 */
        __u32                      i_generation;         /*   508     4 */
        /* ---------- cacheline 8 boundary ---------- */
        long unsigned int          i_dnotify_mask;       /*   512     4 */
        struct dnotify_struct *    i_dnotify;            /*   516     4 */
        struct list_head           inotify_watches;      /*   520     8 */
        struct mutex               inotify_mutex;        /*   528    76 */
        long unsigned int          i_state;              /*   604     4 */
        long unsigned int          dirtied_when;         /*   608     4 */
        unsigned int               i_flags;              /*   612     4 */
        atomic_t                   i_writecount;         /*   616     4 */
        void *                     i_security;           /*   620     4 */
        void *                     i_private;            /*   624     4 */
}; /* size: 628 */

[acme@newtoy net-2.6.20]$

Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-12-07 08:39:43 -08:00
..
2006-09-26 17:40:24 -04:00
2006-12-07 08:39:25 -08:00
2006-12-04 02:00:22 -05:00
2006-10-03 23:01:26 +02:00
2006-09-28 17:53:58 -07:00
2006-12-02 21:22:55 -08:00
2006-12-02 21:22:55 -08:00
2006-12-02 21:22:55 -08:00
2006-10-04 08:31:24 -04:00
2006-10-03 23:01:26 +02:00
2006-10-04 19:32:09 +02:00
2006-12-07 08:39:37 -08:00
2006-12-07 08:39:20 -08:00
2006-11-22 14:57:56 +00:00
2006-12-02 21:30:59 -08:00
2006-12-07 08:39:25 -08:00
2006-06-09 16:14:20 -04:00
2006-10-03 08:04:16 -07:00
2006-07-03 19:44:51 -07:00
2006-05-08 16:32:05 -07:00
2006-09-26 08:48:54 -07:00
2006-06-23 02:07:36 -07:00
2006-03-31 12:18:54 -08:00
2006-09-22 15:18:47 -07:00
2006-12-07 08:39:43 -08:00
2006-12-07 08:39:32 -08:00
2006-07-28 21:02:00 -07:00
2006-10-02 07:57:12 -07:00
2006-12-07 08:39:21 -08:00
2006-09-26 17:40:24 -04:00
2006-09-26 15:38:52 -07:00
2006-09-28 18:02:13 -07:00
2006-12-02 21:21:24 -08:00
2006-12-02 21:21:17 -08:00
2006-12-04 02:00:34 -05:00
2006-12-02 21:21:21 -08:00
2006-09-28 18:02:29 -07:00
2006-12-07 08:39:20 -08:00
2006-10-11 11:14:23 -07:00
2006-10-10 15:37:22 -07:00
2006-08-21 10:02:50 +02:00
2006-12-02 21:21:21 -08:00
2006-10-04 07:55:12 -07:00
2006-10-04 00:31:09 -07:00
2006-12-02 21:21:21 -08:00
2006-06-21 12:40:49 -07:00
2006-11-30 05:24:39 +01:00
2006-11-30 04:53:49 +01:00
2006-11-30 01:14:44 +00:00
2006-07-31 15:44:29 -04:00
2006-06-05 12:29:17 -07:00
2006-10-11 11:14:15 -07:00
2006-12-04 02:00:22 -05:00
2006-11-30 04:40:22 +01:00
2006-09-28 18:02:22 -07:00
2006-11-16 11:43:38 -08:00
2006-10-01 00:39:19 -07:00
2006-11-22 14:57:56 +00:00
2006-12-02 21:22:57 -08:00
2006-12-04 02:00:34 -05:00
2006-12-02 21:22:56 -08:00
2006-08-27 11:01:32 -07:00
2006-12-02 21:21:18 -08:00
2006-03-27 08:44:48 -08:00
2006-10-03 08:03:40 -07:00
2006-05-04 06:55:12 +02:00
2006-06-28 15:54:27 -07:00
2006-11-03 12:27:58 -08:00
2006-07-03 19:48:25 -07:00
2006-12-04 02:00:36 -05:00
2006-10-03 23:01:26 +02:00
2006-12-07 08:39:36 -08:00
2006-10-02 07:57:15 -07:00
2006-06-25 10:01:06 -07:00
2006-11-22 14:57:56 +00:00
2006-06-25 10:01:06 -07:00
2006-09-26 08:49:04 -07:00
2006-12-07 08:39:25 -08:00
2006-06-25 10:01:14 -07:00
2006-12-02 21:26:16 -08:00
2006-12-02 21:21:34 -08:00
2006-12-07 08:39:35 -08:00
2006-12-07 08:39:30 -08:00
2006-10-11 01:45:31 -04:00
2006-12-07 08:39:25 -08:00
2006-12-07 08:39:25 -08:00
2006-10-10 16:15:34 -07:00
2006-12-07 08:39:20 -08:00
2006-10-01 00:39:18 -07:00
2006-10-01 00:39:19 -07:00
2006-10-11 11:14:21 -07:00
2006-11-30 05:32:19 +01:00
2006-10-06 08:53:40 -07:00
2006-03-31 12:18:56 -08:00
2006-12-02 21:21:08 -08:00
2006-09-28 17:53:59 -07:00
2006-10-01 00:39:19 -07:00
2006-10-04 07:55:12 -07:00
2006-09-29 09:18:13 -07:00
2006-12-02 00:11:58 -05:00
2006-10-09 14:20:38 -07:00