)]}'
{
  "commit": "46ca5f5dc4f1c9b5ac02c0090ae8ff4ac8560446",
  "tree": "314b4ec3bfb52d536dff6e9cb201b76571e0d502",
  "parents": [
    "d5c42c0ec4f7fd5a4e19e33a2d561758b67c55c8"
  ],
  "author": {
    "name": "Arnaldo Carvalho de Melo",
    "email": "acme@mandriva.com",
    "time": "Mon Nov 27 17:58:59 2006 -0200"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@sunset.davemloft.net",
    "time": "Sat Dec 02 21:30:48 2006 -0800"
  },
  "message": "[XFRM]: Pack struct xfrm_policy\n\n[acme@newtoy net-2.6.20]$ pahole net/ipv4/tcp.o xfrm_policy\n/* /pub/scm/linux/kernel/git/acme/net-2.6.20/include/linux/security.h:67 */\nstruct xfrm_policy {\n        struct xfrm_policy *       next;                 /*     0     4 */\n        struct hlist_node          bydst;                /*     4     8 */\n        struct hlist_node          byidx;                /*    12     8 */\n        rwlock_t                   lock;                 /*    20    36 */\n        atomic_t                   refcnt;               /*    56     4 */\n        struct timer_list          timer;                /*    60    24 */\n        u8                         type;                 /*    84     1 */\n\n        /* XXX 3 bytes hole, try to pack */\n\n        u32                        priority;             /*    88     4 */\n        u32                        index;                /*    92     4 */\n        struct xfrm_selector       selector;             /*    96    56 */\n        struct xfrm_lifetime_cfg   lft;                  /*   152    64 */\n        struct xfrm_lifetime_cur   curlft;               /*   216    32 */\n        struct dst_entry *         bundles;              /*   248     4 */\n        __u16                      family;               /*   252     2 */\n        __u8                       action;               /*   254     1 */\n        __u8                       flags;                /*   255     1 */\n        __u8                       dead;                 /*   256     1 */\n        __u8                       xfrm_nr;              /*   257     1 */\n\n        /* XXX 2 bytes hole, try to pack */\n\n        struct xfrm_sec_ctx *      security;             /*   260     4 */\n        struct xfrm_tmpl           xfrm_vec[6];          /*   264   360 */\n}; /* size: 624, sum members: 619, holes: 2, sum holes: 5 */\n\nSo lets have just one hole instead of two, by moving \u0027type\u0027 to just before \u0027action\u0027,\nend result:\n\n[acme@newtoy net-2.6.20]$ codiff -s /tmp/tcp.o.before net/ipv4/tcp.o\n/pub/scm/linux/kernel/git/acme/net-2.6.20/net/ipv4/tcp.c:\n  struct xfrm_policy |   -4\n 1 struct changed\n[acme@newtoy net-2.6.20]$\n\n[acme@newtoy net-2.6.20]$ pahole -c 64 net/ipv4/tcp.o xfrm_policy\n/* /pub/scm/linux/kernel/git/acme/net-2.6.20/include/linux/security.h:67 */\nstruct xfrm_policy {\n        struct xfrm_policy *       next;                 /*     0     4 */\n        struct hlist_node          bydst;                /*     4     8 */\n        struct hlist_node          byidx;                /*    12     8 */\n        rwlock_t                   lock;                 /*    20    36 */\n        atomic_t                   refcnt;               /*    56     4 */\n        struct timer_list          timer;                /*    60    24 */\n        u32                        priority;             /*    84     4 */\n        u32                        index;                /*    88     4 */\n        struct xfrm_selector       selector;             /*    92    56 */\n        struct xfrm_lifetime_cfg   lft;                  /*   148    64 */\n        struct xfrm_lifetime_cur   curlft;               /*   212    32 */\n        struct dst_entry *         bundles;              /*   244     4 */\n        u16                        family;               /*   248     2 */\n        u8                         type;                 /*   250     1 */\n        u8                         action;               /*   251     1 */\n        u8                         flags;                /*   252     1 */\n        u8                         dead;                 /*   253     1 */\n        u8                         xfrm_nr;              /*   254     1 */\n\n        /* XXX 1 byte hole, try to pack */\n\n        struct xfrm_sec_ctx *      security;             /*   256     4 */\n        struct xfrm_tmpl           xfrm_vec[6];          /*   260   360 */\n}; /* size: 620, sum members: 619, holes: 1, sum holes: 1 */\n\nAre there any fugly data dependencies here? None that I know.\n\nIn the process changed the removed the __ prefixed types, that are just for\nuserspace visible headers.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@mandriva.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3878a88ff61838e44440a9ebadd4d8c37d23b2a0",
      "old_mode": 33188,
      "old_path": "include/net/xfrm.h",
      "new_id": "984e5c45265c44e9ed9fcca42fbe6c98bc3de383",
      "new_mode": 33188,
      "new_path": "include/net/xfrm.h"
    }
  ]
}
