)]}'
{
  "commit": "b79eeeb9e48457579cb742cd02e162fcd673c4a3",
  "tree": "e804011ae95b5f21eb01732e4b0d768691cfd89d",
  "parents": [
    "75a9cd524c6bb441c61c85bae7020ce5e8b2e807"
  ],
  "author": {
    "name": "Ilpo Järvinen",
    "email": "ilpo.jarvinen@helsinki.fi",
    "time": "Thu May 29 03:25:23 2008 -0700"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Thu May 29 03:25:23 2008 -0700"
  },
  "message": "tcp: Reorganize tcp_sock to fill 64-bit holes \u0026 improve locality\n\nI tried to group recovery related fields nearby (non-CA_Open related\nvariables, to be more accurate) so that one to three cachelines would\nnot be necessary in CA_Open. These are now contiguously deployed:\n\n  struct sk_buff_head        out_of_order_queue;   /*  1968    80 */\n  /* --- cacheline 32 boundary (2048 bytes) --- */\n  struct tcp_sack_block      duplicate_sack[1];    /*  2048     8 */\n  struct tcp_sack_block      selective_acks[4];    /*  2056    32 */\n  struct tcp_sack_block      recv_sack_cache[4];   /*  2088    32 */\n  /* --- cacheline 33 boundary (2112 bytes) was 8 bytes ago --- */\n  struct sk_buff *           highest_sack;         /*  2120     8 */\n  int                        lost_cnt_hint;        /*  2128     4 */\n  int                        retransmit_cnt_hint;  /*  2132     4 */\n  u32                        lost_retrans_low;     /*  2136     4 */\n  u8                         reordering;           /*  2140     1 */\n  u8                         keepalive_probes;     /*  2141     1 */\n\n  /* XXX 2 bytes hole, try to pack */\n\n  u32                        prior_ssthresh;       /*  2144     4 */\n  u32                        high_seq;             /*  2148     4 */\n  u32                        retrans_stamp;        /*  2152     4 */\n  u32                        undo_marker;          /*  2156     4 */\n  int                        undo_retrans;         /*  2160     4 */\n  u32                        total_retrans;        /*  2164     4 */\n\n...and they\u0027re then followed by URG slowpath \u0026 keepalive related\nvariables.\n\nHead of the out_of_order_queue always needed for empty checks, if\nthat\u0027s empty (and TCP is in CA_Open), following ~200 bytes (in 64-bit)\nshouldn\u0027t be necessary for anything. If only OFO queue exists but TCP\nis in CA_Open, selective_acks (and possibly duplicate_sack) are\nnecessary besides the out_of_order_queue but the rest of the block\nagain shouldn\u0027t be (ie., the other direction had losses).\n\nAs the cacheline boundaries depend on many factors in the preceeding\nstuff, trying to align considering them doesn\u0027t make too much sense.\n\nCommented one ordering hazard.\n\nThere are number of low utilized u8/16s that could be combined get 2\nbytes less in total so that the hole could be made to vanish (includes\nat least ecn_flags, urg_data, urg_mode, frto_counter, nonagle).\n\nSigned-off-by: Ilpo Järvinen \u003cilpo.jarvinen@helsinki.fi\u003e\nAcked-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "18e62e3d406fe86a83e03a8a34257b54fd069ba7",
      "old_mode": 33188,
      "old_path": "include/linux/tcp.h",
      "new_id": "9881295f38570b8c4b6a98d56f517b564a97dc7d",
      "new_mode": 33188,
      "new_path": "include/linux/tcp.h"
    }
  ]
}
