)]}'
{
  "log": [
    {
      "commit": "b3613118eb30a589d971e4eccbbb2a1314f5dfd4",
      "tree": "868c1ee59e1b5c19a4f2e43716400d0001a994e5",
      "parents": [
        "7505afe28c16a8d386624930a018d0052c75d687",
        "5983fe2b29df5885880d7fa3b91aca306c7564ef"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Dec 02 13:49:21 2011 -0500"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Dec 02 13:49:21 2011 -0500"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net\n"
    },
    {
      "commit": "de68dca1816660b0d3ac89fa59ffb410007a143f",
      "tree": "9a31e87c6e0504627df25d3a1d39ca7825dcd779",
      "parents": [
        "0884d7aa24e15e72b3c07f7da910a13bb7df3592"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Sat Nov 26 12:13:44 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sat Nov 26 19:16:37 2011 -0500"
      },
      "message": "inet: add a redirect generation id in inetpeer\n\nNow inetpeer is the place where we cache redirect information for ipv4\ndestinations, we must be able to invalidate informations when a route is\nadded/removed on host.\n\nAs inetpeer is not yet namespace aware, this patch adds a shared\nredirect_genid, and a per inetpeer redirect_genid. This might be changed\nlater if inetpeer becomes ns aware.\n\nCache information for one inerpeer is valid as long as its\nredirect_genid has the same value than global redirect_genid.\n\nReported-by: Arkadiusz Miśkiewicz \u003ca.miskiewicz@gmail.com\u003e\nTested-by: Arkadiusz Miśkiewicz \u003ca.miskiewicz@gmail.com\u003e\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "4e3fd7a06dc20b2d8ec6892233ad2012968fe7b6",
      "tree": "da3fbec7672ac6b967dfa31cec6c88f468a57fa2",
      "parents": [
        "40ba84993d66469d336099c5af74c3da5b73e28d"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Nov 21 03:39:03 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Nov 22 16:43:32 2011 -0500"
      },
      "message": "net: remove ipv6_addr_copy()\n\nC assignment can handle struct in6_addr copying.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "60063497a95e716c9a689af3be2687d261f115b4",
      "tree": "6ce0d68db76982c53df46aee5f29f944ebf2c320",
      "parents": [
        "148817ba092f9f6edd35bad3c6c6b8e8f90fe2ed"
      ],
      "author": {
        "name": "Arun Sharma",
        "email": "asharma@fb.com",
        "time": "Tue Jul 26 16:09:06 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:47 2011 -0700"
      },
      "message": "atomic: use \u003clinux/atomic.h\u003e\n\nThis allows us to move duplicated code in \u003casm/atomic.h\u003e\n(atomic_inc_not_zero() for now) to \u003clinux/atomic.h\u003e\n\nSigned-off-by: Arun Sharma \u003casharma@fb.com\u003e\nReviewed-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nAcked-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "87c48fa3b4630905f98268dde838ee43626a060c",
      "tree": "1374b52ed0514682f836cfa0a6a683eb549c9613",
      "parents": [
        "21efcfa0ff27776902a8a15e810147be4d937d69"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Thu Jul 21 21:25:58 2011 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jul 21 21:25:58 2011 -0700"
      },
      "message": "ipv6: make fragment identifications less predictable\n\nIPv6 fragment identification generation is way beyond what we use for\nIPv4 : It uses a single generator. Its not scalable and allows DOS\nattacks.\n\nNow inetpeer is IPv6 aware, we can use it to provide a more secure and\nscalable frag ident generator (per destination, instead of system wide)\n\nThis patch :\n1) defines a new secure_ipv6_id() helper\n2) extends inet_getid() to provide 32bit results\n3) extends ipv6_select_ident() with a new dest parameter\n\nReported-by: Fernando Gont \u003cfernando@gont.com.ar\u003e\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "2b77bdde97ae8241dcc23110a4e837acfbc83438",
      "tree": "a9af81a3ed7b6ee04e7c1b38c3bc77ec295562c8",
      "parents": [
        "1a7a10325d370e2cbed0c5bb7313904545f6dac8"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Wed Jun 08 23:31:27 2011 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Jun 08 23:31:27 2011 -0700"
      },
      "message": "inetpeer: lower false sharing effect\n\nProfiles show false sharing in addr_compare() because refcnt/dtime\nchanges dirty the first inet_peer cache line, where are lying the keys\nused at lookup time. If many cpus are calling inet_getpeer() and\ninet_putpeer(), or need frag ids, addr_compare() is in 2nd position in\n\"perf top\".\n\nBefore patch, my udpflood bench (16 threads) on my 2x4x2 machine :\n\n             5784.00  9.7% csum_partial_copy_generic [kernel]\n             3356.00  5.6% addr_compare              [kernel]\n             2638.00  4.4% fib_table_lookup          [kernel]\n             2625.00  4.4% ip_fragment               [kernel]\n             1934.00  3.2% neigh_lookup              [kernel]\n             1617.00  2.7% udp_sendmsg               [kernel]\n             1608.00  2.7% __ip_route_output_key     [kernel]\n             1480.00  2.5% __ip_append_data          [kernel]\n             1396.00  2.3% kfree                     [kernel]\n             1195.00  2.0% kmem_cache_free           [kernel]\n             1157.00  1.9% inet_getpeer              [kernel]\n             1121.00  1.9% neigh_resolve_output      [kernel]\n             1012.00  1.7% dev_queue_xmit            [kernel]\n# time ./udpflood.sh\n\nreal\t0m44.511s\nuser\t0m20.020s\nsys\t11m22.780s\n\n# time ./udpflood.sh\n\nreal\t0m44.099s\nuser\t0m20.140s\nsys\t11m15.870s\n\nAfter patch, no more addr_compare() in profiles :\n\n             4171.00 10.7% csum_partial_copy_generic   [kernel]\n             1787.00  4.6% fib_table_lookup            [kernel]\n             1756.00  4.5% ip_fragment                 [kernel]\n             1234.00  3.2% udp_sendmsg                 [kernel]\n             1191.00  3.0% neigh_lookup                [kernel]\n             1118.00  2.9% __ip_append_data            [kernel]\n             1022.00  2.6% kfree                       [kernel]\n              993.00  2.5% __ip_route_output_key       [kernel]\n              841.00  2.2% neigh_resolve_output        [kernel]\n              816.00  2.1% kmem_cache_free             [kernel]\n              658.00  1.7% ia32_sysenter_target        [kernel]\n              632.00  1.6% kmem_cache_alloc_node       [kernel]\n\n# time ./udpflood.sh\n\nreal\t0m41.587s\nuser\t0m19.190s\nsys\t10m36.370s\n\n# time ./udpflood.sh\n\nreal\t0m41.486s\nuser\t0m19.290s\nsys\t10m33.650s\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "4b9d9be839fdb7dcd7ce7619a623fd9015a50cda",
      "tree": "bd1827203efe27578b783c30b0ff5e2d4966b26a",
      "parents": [
        "9ad7c049f0f79c418e293b1b68cf10d68f54fcdb"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Wed Jun 08 13:35:34 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Jun 08 17:05:30 2011 -0700"
      },
      "message": "inetpeer: remove unused list\n\nAndi Kleen and Tim Chen reported huge contention on inetpeer\nunused_peers.lock, on memcached workload on a 40 core machine, with\ndisabled route cache.\n\nIt appears we constantly flip peers refcnt between 0 and 1 values, and\nwe must insert/remove peers from unused_peers.list, holding a contended\nspinlock.\n\nRemove this list completely and perform a garbage collection on-the-fly,\nat lookup time, using the expired nodes we met during the tree\ntraversal.\n\nThis removes a lot of code, makes locking more standard, and obsoletes\ntwo sysctls (inet_peer_gc_mintime and inet_peer_gc_maxtime). This also\nremoves two pointers in inet_peer structure.\n\nThere is still a false sharing effect because refcnt is in first cache\nline of object [were the links and keys used by lookups are located], we\nmight move it at the end of inet_peer structure to let this first cache\nline mostly read by cpus.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCC: Andi Kleen \u003candi@firstfloor.org\u003e\nCC: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "b71d1d426d263b0b6cb5760322efebbfc89d4463",
      "tree": "226ca7390bd6187ec9139d2ccedd26fd94d8e57a",
      "parents": [
        "5f8629c526b4f7e529a6d27bbd802c0dc7fcc357"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Fri Apr 22 04:53:02 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Apr 22 11:04:14 2011 -0700"
      },
      "message": "inet: constify ip headers and in6_addr\n\nAdd const qualifiers to structs iphdr, ipv6hdr and in6_addr pointers\nwhere possible, to make code intention more obvious.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "ddd4aa424b866a08ceba7ddf38e61542c91b93a0",
      "tree": "654235ceccd1c3f9dfbb7422ebe09b21544325d6",
      "parents": [
        "7a71ed899e77cc822abb863e24a422dcf7e9fa33"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Feb 09 15:36:47 2011 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Feb 10 13:29:30 2011 -0800"
      },
      "message": "inetpeer: Add redirect and PMTU discovery cached info.\n\nValidity of the cached PMTU information is indicated by it\u0027s\nexpiration value being non-zero, just as per dst-\u003eexpires.\n\nThe scheme we will use is that we will remember the pre-ICMP value\nheld in the metrics or route entry, and then at expiration time\nwe will restore that value.\n\nIn this way PMTU expiration does not kill off the cached route as is\ndone currently.\n\nRedirect information is permanent, or at least until another redirect\nis received.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "7a71ed899e77cc822abb863e24a422dcf7e9fa33",
      "tree": "2811b8ca75c7019522f73c7d972208ae3a3ea8f9",
      "parents": [
        "b6644cb706610874104dbf3359e3b67aa59cbc27"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Feb 09 14:30:26 2011 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Feb 10 13:22:28 2011 -0800"
      },
      "message": "inetpeer: Abstract address representation further.\n\nFuture changes will add caching information, and some of\nthese new elements will be addresses.\n\nSince the family is implicit via the -\u003edaddr.family member,\nreplicating the family in ever address we store is entirely\nredundant.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "92d8682926342d2b6aa5b2ecc02221e00e1573a0",
      "tree": "7f70b9cc2975716ab60ddd632b9fecf0a51b828d",
      "parents": [
        "0131ba451e20239c5dc701027c1a2edef95e1a6e"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Feb 04 15:55:25 2011 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Feb 04 15:59:53 2011 -0800"
      },
      "message": "inetpeer: Move ICMP rate limiting state into inet_peer entries.\n\nLike metrics, the ICMP rate limiting bits are cached state about\na destination.  So move it into the inet_peer entries.\n\nIf an inet_peer cannot be bound (the reason is memory allocation\nfailure or similar), the policy is to allow.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "144001bddcb4db62c2261f1d703d835851031577",
      "tree": "e10cd1840542b2a6d4873ff8477314d91e453881",
      "parents": [
        "606598237c856b0c6584c2263288657658140da9"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jan 27 13:52:16 2011 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jan 27 13:52:16 2011 -0800"
      },
      "message": "inetpeer: Mark metrics as \"new\" in fresh inetpeer entries.\n\nSet the RTAX_LOCKED metric to INETPEER_METRICS_NEW (basically,\nall ones) on fresh inetpeer entries.\n\nThis way code can determine if default metrics have been loaded\nin from a routing table entry already.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "606598237c856b0c6584c2263288657658140da9",
      "tree": "e11c1d95b531a6b815c1c24094435d06e39f0dee",
      "parents": [
        "62fa8a846d7de4b299232e330c74b7783539df76"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Jan 26 20:55:53 2011 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jan 27 13:48:26 2011 -0800"
      },
      "message": "inetpeer: Add metrics storage to inetpeer entries.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "4399ce402c7c837dec80bf9fb40d079b39b9265a",
      "tree": "d60fdcdd13b019fba90bbef24e3b530b8ff3c5d4",
      "parents": [
        "8790ca172a1550949804a2ad59ccea310f680c9f"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Dec 01 17:29:08 2010 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Dec 01 17:29:08 2010 -0800"
      },
      "message": "inetpeer: Fix incorrect comment about inetpeer struct size.\n\nNow with ipv6 support it is no longer less than 64 bytes.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "8790ca172a1550949804a2ad59ccea310f680c9f",
      "tree": "f9a0bf451adc36dab6e4cb9f5430827bbd827384",
      "parents": [
        "67d5288049f46f816181f63eaa8f1371877ad8ea"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Dec 01 17:28:18 2010 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Dec 01 17:28:18 2010 -0800"
      },
      "message": "inetpeer: Kill use of inet_peer_address_t typedef.\n\nThey are verboten these days.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "672f007d65f50468a4a1e55825fe58e5b035324d",
      "tree": "1c4c74ed6cdc6881cccc1c24a97b8117efe93d6c",
      "parents": [
        "021e9299113363cc1b713f86b2cba30b8e6cb5dd"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Nov 30 12:20:00 2010 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Nov 30 12:20:00 2010 -0800"
      },
      "message": "inetpeer: Add inet_getpeer_v6()\n\nNow that all of the infrastructure is in place, we can add\nthe ipv6 shorthand for peer creation.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "b534ecf1cd26f094497da6ae28a6ab64cdbe1617",
      "tree": "bdf8a55183a38926b8f34f709cb51a4db2f5f6b8",
      "parents": [
        "582a72da9a41be9227dc931d728ae2906880a589"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Nov 30 11:54:19 2010 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Nov 30 11:54:19 2010 -0800"
      },
      "message": "inetpeer: Make inet_getpeer() take an inet_peer_adress_t pointer.\n\nAnd make an inet_getpeer_v4() helper, update callers.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "582a72da9a41be9227dc931d728ae2906880a589",
      "tree": "0c1943d6c5eabdbfef6560ac49db322d4becf43d",
      "parents": [
        "98158f5a853cafd33b254ae0eacc0dd69f90b93b"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Nov 30 11:53:55 2010 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Nov 30 11:53:55 2010 -0800"
      },
      "message": "inetpeer: Introduce inet_peer_address_t.\n\nCurrently only the v4 aspect is used, but this will change.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "b914c4ea929a4ba6fb97967800dc473c31552b98",
      "tree": "630f7c81d82e580e5aa5164c0e4cf1d0dadca3ba",
      "parents": [
        "7a2b03c5175e9ddcc2a2d48ca86dea8a88b68383"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Mon Oct 25 23:55:38 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Oct 27 11:37:33 2010 -0700"
      },
      "message": "inetpeer: __rcu annotations\n\nAdds __rcu annotations to inetpeer\n\t(struct inet_peer)-\u003eavl_left\n\t(struct inet_peer)-\u003eavl_right\n\nThis is a tedious cleanup, but removes one smp_wmb() from link_to_pool()\nsince we now use more self documenting rcu_assign_pointer().\n\nNote the use of RCU_INIT_POINTER() instead of rcu_assign_pointer() in\nall cases we dont need a memory barrier.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "317fe0e6c5dc9448bcef41a2e31fecfd3dba7f55",
      "tree": "c2a042e1c8bb96b7fdeadf658309ead1b6e8dabc",
      "parents": [
        "fdb93f8ac39aa5902f3d264edd50dffcabfdd13b"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Wed Jun 16 04:52:13 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Jun 16 11:55:39 2010 -0700"
      },
      "message": "inetpeer: restore small inet_peer structures\n\nAddition of rcu_head to struct inet_peer added 16bytes on 64bit arches.\n\nThats a bit unfortunate, since old size was exactly 64 bytes.\n\nThis can be solved, using an union between this rcu_head an four fields,\nthat are normally used only when a refcount is taken on inet_peer.\nrcu_head is used only when refcnt\u003d-1, right before structure freeing.\n\nAdd a inet_peer_refcheck() function to check this assertion for a while.\n\nWe can bring back SLAB_HWCACHE_ALIGN qualifier in kmem cache creation.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "aa1039e73cc2cf834e99c09d2033d5d2675357b9",
      "tree": "0db06e4adddaf0f77b4e8de170710b74a17375e4",
      "parents": [
        "7b34a4644b4342896e0c1967b8f953213ea4a990"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Tue Jun 15 08:23:14 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Jun 15 14:23:38 2010 -0700"
      },
      "message": "inetpeer: RCU conversion\n\ninetpeer currently uses an AVL tree protected by an rwlock.\n\nIt\u0027s possible to make most lookups use RCU\n\n1) Add a struct rcu_head to struct inet_peer\n\n2) add a lookup_rcu_bh() helper to perform lockless and opportunistic\nlookup. This is a normal function, not a macro like lookup().\n\n3) Add a limit to number of links followed by lookup_rcu_bh(). This is\nneeded in case we fall in a loop.\n\n4) add an smp_wmb() in link_to_pool() right before node insert.\n\n5) make unlink_from_pool() use atomic_cmpxchg() to make sure it can take\nlast reference to an inet_peer, since lockless readers could increase\nrefcount, even while we hold peers.lock.\n\n6) Delay struct inet_peer freeing after rcu grace period so that\nlookup_rcu_bh() cannot crash.\n\n7) inet_getpeer() first attempts lockless lookup.\n   Note this lookup can fail even if target is in AVL tree, but a\nconcurrent writer can let tree in a non correct form.\n   If this attemps fails, lock is taken a regular lookup is performed\nagain.\n\n8) convert peers.lock from rwlock to a spinlock\n\n9) Remove SLAB_HWCACHE_ALIGN when peer_cachep is created, because\nrcu_head adds 16 bytes on 64bit arches, doubling effective size (64 -\u003e\n128 bytes)\nIn a future patch, this is probably possible to revert this part, if rcu\nfield is put in an union to share space with rid, ip_id_count, tcp_ts \u0026\ntcp_ts_stamp. These fields being manipulated only with refcnt \u003e 0.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "2c1409a0a2b88585ec0c03f1de0aafa178c56313",
      "tree": "e9fc25badfb716e5368079535f548cc8e4b5576a",
      "parents": [
        "234b27c3fd58fc0e15c04dd0fbf4337fac9c2a06"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Thu Nov 12 09:33:09 2009 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Nov 13 20:46:58 2009 -0800"
      },
      "message": "inetpeer: Optimize inet_getid()\n\nWhile investigating for network latencies, I found inet_getid() was a\ncontention point for some workloads, as inet_peer_idlock is shared\nby all inet_getid() users regardless of peers.\n\nOne way to fix this is to make ip_id_count an atomic_t instead\nof __u16, and use atomic_add_return().\n\nIn order to keep sizeof(struct inet_peer) \u003d 64 on 64bit arches\ntcp_ts_stamp is also converted to __u32 instead of \"unsigned long\".\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "fd2c3ef761fbc5e6c27fa7d40b30cda06bfcd7d8",
      "tree": "25922196160e9d5be8aa2a473ce981756926390f",
      "parents": [
        "4b7673a04a16f1d8faf1e367ae28a6ee1671843d"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Tue Nov 03 03:26:03 2009 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Nov 04 05:06:25 2009 -0800"
      },
      "message": "net: cleanup include/net\n\nThis cleanup patch puts struct/union/enum opening braces,\nin first line to ease grep games.\n\nstruct something\n{\n\nbecomes :\n\nstruct something {\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "0b040829952d84bf2a62526f0e24b624e0699447",
      "tree": "b2e836e7e64343f19b949e50099bbe2ea554ec30",
      "parents": [
        "573bf470e693f73a6ac437b17a64a10902ba54bf"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Tue Jun 10 22:46:50 2008 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Jun 11 21:00:38 2008 -0700"
      },
      "message": "net: remove CVS keywords\n\nThis patch removes CVS keywords that weren\u0027t updated for a long time\nfrom comments.\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "d71209ded2ba6010070d02005384897c59859d00",
      "tree": "a812e34e54e36f74ce9ef61f6e9e42100d0a6ef4",
      "parents": [
        "22649d1afbe6988688a07fd70abb06f1e2213567"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@openvz.org",
        "time": "Mon Nov 12 21:27:28 2007 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Nov 12 21:27:28 2007 -0800"
      },
      "message": "[INET]: Use list_head-s in inetpeer.c\n\nThe inetpeer.c tracks the LRU list of inet_perr-s, but makes\nit by hands. Use the list_head-s for this.\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "78d79423179c0efc7ec34b55d287e7be4ca07da6",
      "tree": "493041961b8da774b5d9c6a5cc00add000111137",
      "parents": [
        "06ca719faddaf5ea46c6356b12847663c3ed8806"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Fri Oct 20 00:28:35 2006 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Oct 20 00:28:35 2006 -0700"
      },
      "message": "[IPV4] inet_peer: Group together avl_left, avl_right, v4daddr to speedup lookups on some CPUS\n\nLot of routers/embedded devices still use CPUS with 16/32 bytes cache\nlines.  (486, Pentium, ...  PIII) It makes sense to group together\nfields used at lookup time so they fit in one cache line.  This reduce\ncache footprint and speedup lookups.\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "4663afe2c848e2abc8791202beecf40684f13eb4",
      "tree": "4d67cf3a9910bb9c224b4495b554560ec438477e",
      "parents": [
        "ea614d7f4fb2d436b7a5ee490d1011615f6b38d5"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Thu Oct 12 21:21:06 2006 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Sun Oct 15 23:14:17 2006 -0700"
      },
      "message": "[NET]: reduce sizeof(struct inet_peer), cleanup, change in peer_check_expire()\n\n1) shrink struct inet_peer on 64 bits platforms.\n"
    },
    {
      "commit": "53576d9b995605a9edc7414b900a9218c8f23b1f",
      "tree": "a0287612fda29ef5908febacecd001f59fe2ff28",
      "parents": [
        "d878e72e419db9ff4c66848375ee30a19820e4de"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Sep 26 22:18:43 2006 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Thu Sep 28 18:01:09 2006 -0700"
      },
      "message": "[IPV4]: inetpeer annotations\n\nThis one is interesting - we use net-endian value as search key, but\norder the tree by *host-endian* comparisons of keys.  OK since we only\ncare about lookups.  Annotated inet_getpeer() and friends.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "89cee8b1cbb9dac40c92ef1968aea2b45f82fd18",
      "tree": "01049841b15a9c2f3f136710382c7e4c11c1b1e5",
      "parents": [
        "d5228a4f49db32d22a39c653281b527ef371129c"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Dec 13 23:14:27 2005 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Tue Jan 03 13:10:31 2006 -0800"
      },
      "message": "[IPV4]: Safer reassembly\n\nAnother spin of Herbert Xu\u0027s \"safer ip reassembly\" patch\nfor 2.6.16.\n\n(The original patch is here:\nhttp://marc.theaimsgroup.com/?l\u003dlinux-netdev\u0026m\u003d112281936522415\u0026w\u003d2\nand my only contribution is to have tested it.)\n\nThis patch (optionally) does additional checks before accepting IP\nfragments, which can greatly reduce the possibility of reassembling\nfragments which originated from different IP datagrams.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nSigned-off-by: Arthur Kepner \u003cakepner@sgi.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
