)]}'
{
  "log": [
    {
      "commit": "7a6362800cb7d1d618a697a650c7aaed3eb39320",
      "tree": "087f9bc6c13ef1fad4b392c5cf9325cd28fa8523",
      "parents": [
        "6445ced8670f37cfc2c5e24a9de9b413dbfc788d",
        "ceda86a108671294052cbf51660097b6534672f5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 16:29:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 16:29:25 2011 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1480 commits)\n  bonding: enable netpoll without checking link status\n  xfrm: Refcount destination entry on xfrm_lookup\n  net: introduce rx_handler results and logic around that\n  bonding: get rid of IFF_SLAVE_INACTIVE netdev-\u003epriv_flag\n  bonding: wrap slave state work\n  net: get rid of multiple bond-related netdevice-\u003epriv_flags\n  bonding: register slave pointer for rx_handler\n  be2net: Bump up the version number\n  be2net: Copyright notice change. Update to Emulex instead of ServerEngines\n  e1000e: fix kconfig for crc32 dependency\n  netfilter ebtables: fix xt_AUDIT to work with ebtables\n  xen network backend driver\n  bonding: Improve syslog message at device creation time\n  bonding: Call netif_carrier_off after register_netdevice\n  bonding: Incorrect TX queue offset\n  net_sched: fix ip_tos2prio\n  xfrm: fix __xfrm_route_forward()\n  be2net: Fix UDP packet detected status in RX compl\n  Phonet: fix aligned-mode pipe socket buffer header reserve\n  netxen: support for GbE port settings\n  ...\n\nFix up conflicts in drivers/staging/brcm80211/brcmsmac/wl_mac80211.c\nwith the staging updates.\n"
    },
    {
      "commit": "bd2895eeade5f11f3e5906283c630bbdb4b57454",
      "tree": "4d98f4fcd80c7d062afce28823d08aee53e66f82",
      "parents": [
        "016aa2ed1cc9cf704cf76d8df07751b6daa9750f",
        "24d51add7438f9696a7205927bf9de3c5c787a58"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 08:20:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 08:20:19 2011 -0700"
      },
      "message": "Merge branch \u0027for-2.6.39\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-2.6.39\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:\n  workqueue: fix build failure introduced by s/freezeable/freezable/\n  workqueue: add system_freezeable_wq\n  rds/ib: use system_wq instead of rds_ib_fmr_wq\n  net/9p: replace p9_poll_task with a work\n  net/9p: use system_wq instead of p9_mux_wq\n  xfs: convert to alloc_workqueue()\n  reiserfs: make commit_wq use the default concurrency level\n  ocfs2: use system_wq instead of ocfs2_quota_wq\n  ext4: convert to alloc_workqueue()\n  scsi/scsi_tgt_lib: scsi_tgtd isn\u0027t used in memory reclaim path\n  scsi/be2iscsi,qla2xxx: convert to alloc_workqueue()\n  misc/iwmc3200top: use system_wq instead of dedicated workqueues\n  i2o: use alloc_workqueue() instead of create_workqueue()\n  acpi: kacpi*_wq don\u0027t need WQ_MEM_RECLAIM\n  fs/aio: aio_wq isn\u0027t used in memory reclaim path\n  input/tps6507x-ts: use system_wq instead of dedicated workqueue\n  cpufreq: use system_wq instead of dedicated workqueues\n  wireless/ipw2x00: use system_wq instead of dedicated workqueues\n  arm/omap: use system_wq in mailbox\n  workqueue: use WQ_MEM_RECLAIM instead of WQ_RESCUER\n"
    },
    {
      "commit": "33175d84ee3fa29991adb80513683e010769e807",
      "tree": "3731f61cf82451b6892cf1368701e57e35d92908",
      "parents": [
        "c5908939b2738bafe1b309bc2465cb9f2e6184c5",
        "6dfbd87a20a737641ef228230c77f4262434fa24"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Mar 10 14:26:00 2011 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Mar 10 14:26:00 2011 -0800"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tdrivers/net/bnx2x/bnx2x_cmn.c\n"
    },
    {
      "commit": "6094628bfd94323fc1cea05ec2c6affd98c18f7f",
      "tree": "b0c826b6c6cf5d00e00f9eef5cd5ebbfdf3d5962",
      "parents": [
        "9ac3524a948cab48137a8b40a4fa8ae1092b0a24"
      ],
      "author": {
        "name": "Neil Horman",
        "email": "nhorman@tuxdriver.com",
        "time": "Wed Mar 02 06:28:22 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Mar 08 11:22:43 2011 -0800"
      },
      "message": "rds: prevent BUG_ON triggering on congestion map updates\n\nRecently had this bug halt reported to me:\n\nkernel BUG at net/rds/send.c:329!\nOops: Exception in kernel mode, sig: 5 [#1]\nSMP NR_CPUS\u003d1024 NUMA pSeries\nModules linked in: rds sunrpc ipv6 dm_mirror dm_region_hash dm_log ibmveth sg\next4 jbd2 mbcache sd_mod crc_t10dif ibmvscsic scsi_transport_srp scsi_tgt\ndm_mod [last unloaded: scsi_wait_scan]\nNIP: d000000003ca68f4 LR: d000000003ca67fc CTR: d000000003ca8770\nREGS: c000000175cab980 TRAP: 0700   Not tainted  (2.6.32-118.el6.ppc64)\nMSR: 8000000000029032 \u003cEE,ME,CE,IR,DR\u003e  CR: 44000022  XER: 00000000\nTASK \u003d c00000017586ec90[1896] \u0027krdsd\u0027 THREAD: c000000175ca8000 CPU: 0\nGPR00: 0000000000000150 c000000175cabc00 d000000003cb7340 0000000000002030\nGPR04: ffffffffffffffff 0000000000000030 0000000000000000 0000000000000030\nGPR08: 0000000000000001 0000000000000001 c0000001756b1e30 0000000000010000\nGPR12: d000000003caac90 c000000000fa2500 c0000001742b2858 c0000001742b2a00\nGPR16: c0000001742b2a08 c0000001742b2820 0000000000000001 0000000000000001\nGPR20: 0000000000000040 c0000001742b2814 c000000175cabc70 0800000000000000\nGPR24: 0000000000000004 0200000000000000 0000000000000000 c0000001742b2860\nGPR28: 0000000000000000 c0000001756b1c80 d000000003cb68e8 c0000001742b27b8\nNIP [d000000003ca68f4] .rds_send_xmit+0x4c4/0x8a0 [rds]\nLR [d000000003ca67fc] .rds_send_xmit+0x3cc/0x8a0 [rds]\nCall Trace:\n[c000000175cabc00] [d000000003ca67fc] .rds_send_xmit+0x3cc/0x8a0 [rds]\n(unreliable)\n[c000000175cabd30] [d000000003ca7e64] .rds_send_worker+0x54/0x100 [rds]\n[c000000175cabdb0] [c0000000000b475c] .worker_thread+0x1dc/0x3c0\n[c000000175cabed0] [c0000000000baa9c] .kthread+0xbc/0xd0\n[c000000175cabf90] [c000000000032114] .kernel_thread+0x54/0x70\nInstruction dump:\n4bfffd50 60000000 60000000 39080001 935f004c f91f0040 41820024 813d017c\n7d094a78 7d290074 7929d182 394a0020 \u003c0b090000\u003e 40e2ff68 4bffffa4 39200000\nKernel panic - not syncing: Fatal exception\nCall Trace:\n[c000000175cab560] [c000000000012e04] .show_stack+0x74/0x1c0 (unreliable)\n[c000000175cab610] [c0000000005a365c] .panic+0x80/0x1b4\n[c000000175cab6a0] [c00000000002fbcc] .die+0x21c/0x2a0\n[c000000175cab750] [c000000000030000] ._exception+0x110/0x220\n[c000000175cab910] [c000000000004b9c] program_check_common+0x11c/0x180\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "c534a107e8fe446202b0fab102abc015c56c0317",
      "tree": "5cd90d564c5e2e653b8b2905f1f2b83a1b664d28",
      "parents": [
        "aa70c585b15f64da6948bdacc7a7692addd65364"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 01 11:42:43 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 01 11:42:43 2011 +0100"
      },
      "message": "rds/ib: use system_wq instead of rds_ib_fmr_wq\n\nWith cmwq, there\u0027s no reason to use dedicated rds_ib_fmr_wq - it\u0027s not\nin the memory reclaim path and the maximum number of concurrent work\nitems is bound by the number of devices.  Drop it and use system_wq\ninstead.  This rds_ib_fmr_init/exit() noops.  Both removed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "441c793a56502638d45d5da2195056d686147370",
      "tree": "df9860150ce675a2f05e657f2ccad572eced7a66",
      "parents": [
        "6997e618910b902081a5123f228aac620faa899b"
      ],
      "author": {
        "name": "Shan Wei",
        "email": "shanwei@cn.fujitsu.com",
        "time": "Thu Jan 13 22:19:52 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Jan 19 23:20:04 2011 -0800"
      },
      "message": "net: cleanup unused macros in net directory\n\nClean up some unused macros in net/*.\n1. be left for code change. e.g. PGV_FROM_VMALLOC, PGV_FROM_VMALLOC, KMEM_SAFETYZONE.\n2. never be used since introduced to kernel.\n   e.g. P9_RDMA_MAX_SGE, UTIL_CTRL_PKT_SIZE.\n\nSigned-off-by: Shan Wei \u003cshanwei@cn.fujitsu.com\u003e\nAcked-by: Sjur Braendeland \u003csjur.brandeland@stericsson.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "094f2faaa2c4973e50979158f655a1d31a97ba98",
      "tree": "8b6750651a560689e62927192878e1520bfb1fcd",
      "parents": [
        "927a41f50c83b539fde5c01911f4968d717199bf"
      ],
      "author": {
        "name": "Tracey Dent",
        "email": "tdent48227@gmail.com",
        "time": "Sun Nov 21 15:03:25 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Nov 22 08:16:15 2010 -0800"
      },
      "message": "Net: rds: Makefile: Remove deprecated items\n\nChanged Makefile to use \u003cmodules\u003e-y instead of \u003cmodules\u003e-objs\nbecause -objs is deprecated and not mentioned in\nDocumentation/kbuild/makefiles.txt.\n\nAlso, use the ccflags-$ flag instead of EXTRA_CFLAGS because EXTRA_CFLAGS is\ndeprecated and should now be switched.\n\nLast but not least, took out if-conditionals.\n\nSigned-off-by: Tracey Dent \u003ctdent48227@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "218854af84038d828a32f061858b1902ed2beec6",
      "tree": "d5c688bc9856b3763e354619ff46ebe20edad891",
      "parents": [
        "7d98ffd8c2d1da6cec5d84eba42c4aa836a93f85"
      ],
      "author": {
        "name": "Dan Rosenberg",
        "email": "drosenberg@vsecurity.com",
        "time": "Wed Nov 17 06:37:16 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Nov 17 12:20:52 2010 -0800"
      },
      "message": "rds: Integer overflow in RDS cmsg handling\n\nIn rds_cmsg_rdma_args(), the user-provided args-\u003enr_local value is\nrestricted to less than UINT_MAX.  This seems to need a tighter upper\nbound, since the calculation of total iov_size can overflow, resulting\nin a small sock_kmalloc() allocation.  This would probably just result\nin walking off the heap and crashing when calling rds_rdma_pages() with\na high count value.  If it somehow doesn\u0027t crash here, then memory\ncorruption could occur soon after.\n\nSigned-off-by: Dan Rosenberg \u003cdrosenberg@vsecurity.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "aa58163a76a3aef33c7220931543d45d0fe43753",
      "tree": "c88b5f62863053a83e7c9be1b978e1e44ff70f86",
      "parents": [
        "0cffef48ebf5060f749d8b04ab0437a4ba009e77"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@parallels.com",
        "time": "Mon Nov 08 06:20:50 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Nov 08 12:17:09 2010 -0800"
      },
      "message": "rds: Fix rds message leak in rds_message_map_pages\n\nThe sgs allocation error path leaks the allocated message.\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nAcked-by: Andy Grover \u003candy.grover@oracle.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "8200a59f24aeca379660f80658a8c0c343ca5c31",
      "tree": "fc21336c6dd33ee96d7cf9f07f20132d4a46994e",
      "parents": [
        "58c490babd4b425310363cbd1f406d7e508f77a5"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@parallels.com",
        "time": "Tue Nov 02 01:54:01 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Nov 03 18:50:07 2010 -0700"
      },
      "message": "rds: Remove kfreed tcp conn from list\n\nAll the rds_tcp_connection objects are stored list, but when\nbeing freed it should be removed from there.\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "58c490babd4b425310363cbd1f406d7e508f77a5",
      "tree": "48b4697403815b06da6a6dcf4c3495bd1401a51f",
      "parents": [
        "53ab2221da7676dd0f161bec5e1520e56b74a865"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@parallels.com",
        "time": "Tue Nov 02 01:52:05 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Nov 03 18:50:06 2010 -0700"
      },
      "message": "rds: Lost locking in loop connection freeing\n\nThe conn is removed from list in there and this requires\nproper lock protection.\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "d139ff0907dac9ef72fb2cf301e345bac3aec42f",
      "tree": "0ba63235a10b7640bc8b613da0d0cda220a55087",
      "parents": [
        "fc8162e3c034af743d8def435fda6396603d321f"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Thu Oct 28 15:40:59 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sat Oct 30 16:34:18 2010 -0700"
      },
      "message": "RDS: Let rds_message_alloc_sgs() return NULL\n\nEven with the previous fix, we still are reading the iovecs once\nto determine SGs needed, and then again later on. Preallocating\nspace for sg lists as part of rds_message seemed like a good idea\nbut it might be better to not do this. While working to redo that\ncode, this patch attempts to protect against userspace rewriting\nthe rds_iovec array between the first and second accesses.\n\nThe consequences of this would be either a too-small or too-large\nsg list array. Too large is not an issue. This patch changes all\ncallers of message_alloc_sgs to handle running out of preallocated\nsgs, and fail gracefully.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "fc8162e3c034af743d8def435fda6396603d321f",
      "tree": "b003a652740eb0de1fe71c634618b6666e9bae3c",
      "parents": [
        "f4a3fc03c1d73753879fb655b8cd628b29f6706b"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Thu Oct 28 15:40:58 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sat Oct 30 16:34:17 2010 -0700"
      },
      "message": "RDS: Copy rds_iovecs into kernel memory instead of rereading from userspace\n\nChange rds_rdma_pages to take a passed-in rds_iovec array instead\nof doing copy_from_user itself.\n\nChange rds_cmsg_rdma_args to copy rds_iovec array once only. This\neliminates the possibility of userspace changing it after our\nsanity checks.\n\nImplement stack-based storage for small numbers of iovecs, based\non net/socket.c, to save an alloc in the extremely common case.\n\nAlthough this patch reduces iovec copies in cmsg_rdma_args to 1,\nwe still do another one in rds_rdma_extra_size. Getting rid of\nthat one will be trickier, so it\u0027ll be a separate patch.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "f4a3fc03c1d73753879fb655b8cd628b29f6706b",
      "tree": "ad16a35e587408a396f2ab8e485428b8730fe733",
      "parents": [
        "a09f69c49b84b161ebd4dd09d3cce1b68297f1d3"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Thu Oct 28 15:40:57 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sat Oct 30 16:34:17 2010 -0700"
      },
      "message": "RDS: Clean up error handling in rds_cmsg_rdma_args\n\nWe don\u0027t need to set ret \u003d 0 at the end -- it\u0027s initialized to 0.\n\nAlso, don\u0027t increment s_send_rdma stat if we\u0027re exiting with an\nerror.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "a09f69c49b84b161ebd4dd09d3cce1b68297f1d3",
      "tree": "295290736f0a4dbbfc495e035adbbe0cafe447e4",
      "parents": [
        "1b1f693d7ad6d193862dcb1118540a030c5e761f"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Thu Oct 28 15:40:56 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sat Oct 30 16:34:16 2010 -0700"
      },
      "message": "RDS: Return -EINVAL if rds_rdma_pages returns an error\n\nrds_cmsg_rdma_args would still return success even if rds_rdma_pages\nreturned an error (or overflowed).\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "1b1f693d7ad6d193862dcb1118540a030c5e761f",
      "tree": "cf216d1bfb8a51f3df2c989dcffd5381a0e446f1",
      "parents": [
        "bdfa3d8fe123a940be121daf374581727b3b6547"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 28 15:40:55 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sat Oct 30 16:34:16 2010 -0700"
      },
      "message": "net: fix rds_iovec page count overflow\n\nAs reported by Thomas Pollet, the rdma page counting can overflow.  We\nget the rdma sizes in 64-bit unsigned entities, but then limit it to\nUINT_MAX bytes and shift them down to pages (so with a possible \"+1\" for\nan unaligned address).\n\nSo each individual page count fits comfortably in an \u0027unsigned int\u0027 (not\neven close to overflowing into signed), but as they are added up, they\nmight end up resulting in a signed return value. Which would be wrong.\n\nCatch the case of tot_pages turning negative, and return the appropriate\nerror code.\n\nReported-by: Thomas Pollet \u003cthomas.pollet@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "2198a10b501fd4443430cb17e065a9e859cc58c9",
      "tree": "87f3781d293da0f8f8f61615905eb7bf62b7c128",
      "parents": [
        "9941fb62762253774cc6177d0b9172ece5133fe1",
        "db5a753bf198ef7a50e17d2ff358adf37efe8648"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Oct 21 08:43:05 2010 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Oct 21 08:43:05 2010 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tnet/core/dev.c\n"
    },
    {
      "commit": "ff51bf841587c75b58d25ed77263158619784dd3",
      "tree": "85d415536b84c48afe2aea0243f420ac262e1bbd",
      "parents": [
        "d0c2b0d265a0f1f92922a99a31def9da582197ac"
      ],
      "author": {
        "name": "stephen hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Oct 19 08:08:33 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Oct 21 04:26:39 2010 -0700"
      },
      "message": "rds: make local functions/variables static\n\nThe RDS protocol has lots of functions that should be\ndeclared static. rds_message_get/add_version_extension is\nremoved since it defined but never used.\n\nSigned-off-by: Stephen Hemminger \u003cshemminger@vyatta.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "799c10559d60f159ab2232203f222f18fa3c4a5f",
      "tree": "8d30e4f51a8d9c973128e472295d1fcfedeb078a",
      "parents": [
        "5a2b3ef4559f3d0ef58cbfb723f528f1c6b2e601"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 15 11:09:28 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 15 11:09:28 2010 -0700"
      },
      "message": "De-pessimize rds_page_copy_user\n\nDon\u0027t try to \"optimize\" rds_page_copy_user() by using kmap_atomic() and\nthe unsafe atomic user mode accessor functions.  It\u0027s actually slower\nthan the straightforward code on any reasonable modern CPU.\n\nBack when the code was written (although probably not by the time it was\nactually merged, though), 32-bit x86 may have been the dominant\narchitecture.  And there kmap_atomic() can be a lot faster than kmap()\n(unless you have very good locality, in which case the virtual address\ncaching by kmap() can overcome all the downsides).\n\nBut these days, x86-64 may not be more populous, but it\u0027s getting there\n(and if you care about performance, it\u0027s definitely already there -\nyou\u0027d have upgraded your CPU\u0027s already in the last few years).  And on\nx86-64, the non-kmap_atomic() version is faster, simply because the code\nis simpler and doesn\u0027t have the \"re-try page fault\" case.\n\nPeople with old hardware are not likely to care about RDS anyway, and\nthe optimization for the 32-bit case is simply buggy, since it doesn\u0027t\nverify the user addresses properly.\n\nReported-by: Dan Rosenberg \u003cdrosenberg@vsecurity.com\u003e\nAcked-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e40051d134f7ee95c8c1f7a3471e84eafc9ab326",
      "tree": "88eb44e49a75721ae926665a2c42f08badac9d07",
      "parents": [
        "42099d7a3941d4aaf853caac92b3ae76149fc6e7",
        "2cc6d2bf3d6195fabcf0febc192c01f99519a8f3"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Sep 27 01:03:03 2010 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Sep 27 01:03:03 2010 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tdrivers/net/qlcnic/qlcnic_init.c\n\tnet/ipv4/ip_output.c\n"
    },
    {
      "commit": "f064af1e500a2bf4607706f0f458163bdb2a6ea5",
      "tree": "ebbbd1c3c00030c70cab6fe587a5c03252a46ebc",
      "parents": [
        "605c82bab5abe0816e5e32716875c245f89f39da"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Wed Sep 22 12:43:39 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Sep 24 22:26:10 2010 -0700"
      },
      "message": "net: fix a lockdep splat\n\nWe have for each socket :\n\nOne spinlock (sk_slock.slock)\nOne rwlock (sk_callback_lock)\n\nPossible scenarios are :\n\n(A) (this is used in net/sunrpc/xprtsock.c)\nread_lock(\u0026sk-\u003esk_callback_lock) (without blocking BH)\n\u003cBH\u003e\nspin_lock(\u0026sk-\u003esk_slock.slock);\n...\nread_lock(\u0026sk-\u003esk_callback_lock);\n...\n\n(B)\nwrite_lock_bh(\u0026sk-\u003esk_callback_lock)\nstuff\nwrite_unlock_bh(\u0026sk-\u003esk_callback_lock)\n\n(C)\nspin_lock_bh(\u0026sk-\u003esk_slock)\n...\nwrite_lock_bh(\u0026sk-\u003esk_callback_lock)\nstuff\nwrite_unlock_bh(\u0026sk-\u003esk_callback_lock)\nspin_unlock_bh(\u0026sk-\u003esk_slock)\n\nThis (C) case conflicts with (A) :\n\nCPU1 [A]                         CPU2 [C]\nread_lock(callback_lock)\n\u003cBH\u003e                             spin_lock_bh(slock)\n\u003cwait to spin_lock(slock)\u003e\n                                 \u003cwait to write_lock_bh(callback_lock)\u003e\n\nWe have one problematic (C) use case in inet_csk_listen_stop() :\n\nlocal_bh_disable();\nbh_lock_sock(child); // spin_lock_bh(\u0026sk-\u003esk_slock)\nWARN_ON(sock_owned_by_user(child));\n...\nsock_orphan(child); // write_lock_bh(\u0026sk-\u003esk_callback_lock)\n\nlockdep is not happy with this, as reported by Tetsuo Handa\n\nIt seems only way to deal with this is to use read_lock_bh(callbacklock)\neverywhere.\n\nThanks to Jarek for pointing a bug in my first attempt and suggesting\nthis solution.\n\nReported-by: Tetsuo Handa \u003cpenguin-kernel@I-love.SAKURA.ne.jp\u003e\nTested-by: Tetsuo Handa \u003cpenguin-kernel@I-love.SAKURA.ne.jp\u003e\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCC: Jarek Poplawski \u003cjarkao2@gmail.com\u003e\nTested-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "aef3ea33e85035f7c827c1db9155f97f4b7ee725",
      "tree": "cf87224000ffb8e37814e44cb0c166c36f8c49e0",
      "parents": [
        "f4fa7f3807d41b78056c6648b04bfadd737df21e"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Sat Sep 18 13:44:14 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Sep 19 11:59:44 2010 -0700"
      },
      "message": "rds: spin_lock_irq() is not nestable\n\nThis is basically just a cleanup.  IRQs were disabled on the previous\nline so we don\u0027t need to do it again here.  In the current code IRQs\nwould get turned on one line earlier than intended.\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "f4fa7f3807d41b78056c6648b04bfadd737df21e",
      "tree": "0fd804391277b64143f021bd6038c4c6186b3c57",
      "parents": [
        "9b9d2e00bfa592aceda7b43da76c670df61faa97"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Sat Sep 18 13:42:59 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Sep 19 11:59:44 2010 -0700"
      },
      "message": "rds: double unlock in rds_ib_cm_handle_connect()\n\nWe unlock after we goto out.\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "9b9d2e00bfa592aceda7b43da76c670df61faa97",
      "tree": "8412e35fd4e379c4075e09a8f23c245663f91e59",
      "parents": [
        "0746556beab1a57f1afb5c9d6f393d98528ce682"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Sat Sep 18 13:42:25 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Sep 19 11:59:43 2010 -0700"
      },
      "message": "rds: signedness bug\n\nIn the original code if the copy_from_user() fails in rds_rdma_pages()\nthen the error handling fails and we get a stack trace from kmalloc().\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "20c72bd5f5f902e5a8745d51573699605bf8d21c",
      "tree": "6df337e07d423a0859ab92f25525570e134baba1",
      "parents": [
        "59f740a6aeb2cde2f79fe0df38262d4c1ef35cd8"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Aug 25 05:51:28 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:51 2010 -0700"
      },
      "message": "RDS: Implement masked atomic operations\n\nAdd two CMSGs for masked versions of cswp and fadd. args\nstruct modified to use a union for different atomic op type\u0027s\narguments. Change IB to do masked atomic ops. Atomic op type\nin rds_message similarly unionized.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "59f740a6aeb2cde2f79fe0df38262d4c1ef35cd8",
      "tree": "e05c12cc5c8892bcca3928deb62121b1ee4cedd0",
      "parents": [
        "4518071ac1bcb76c64a55a3fddb39fb3d39add41"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Tue Aug 03 13:52:47 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:50 2010 -0700"
      },
      "message": "RDS/IB: print string constants in more places\n\nThis prints the constant identifier for work completion status and rdma\ncm event types, like we already do for IB event types.\n\nA core string array helper is added that each string type uses.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "4518071ac1bcb76c64a55a3fddb39fb3d39add41",
      "tree": "b64a3c4e61fd41f1f7ef92d9e7d7c5ed27d3ba2c",
      "parents": [
        "ffcec0e110c198717eb0f6ac000c1e5397db9451"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jul 23 10:37:33 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:49 2010 -0700"
      },
      "message": "RDS: cancel connection work structs as we shut down\n\nNothing was canceling the send and receive work that might have been\nqueued as a conn was being destroyed.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "ffcec0e110c198717eb0f6ac000c1e5397db9451",
      "tree": "3bb8796f26a1e8730d576a099a6f6cc10c9d35d8",
      "parents": [
        "5adb5bc65f93e52341c3fc9d03d4030dd375e256"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jul 23 10:36:58 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:48 2010 -0700"
      },
      "message": "RDS: don\u0027t call rds_conn_shutdown() from rds_conn_destroy()\n\nrds_conn_shutdown() can return before the connection is shut down when\nit encounters an existing state that it doesn\u0027t understand.  This lets\nrds_conn_destroy() then start tearing down the conn from under paths\nthat are still using it.\n\nIt\u0027s more reliable the shutdown work and wait for krdsd to complete the\nshutdown callback.  This stopped some hangs I was seeing where krdsd was\ntrying to shut down a freed conn.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "5adb5bc65f93e52341c3fc9d03d4030dd375e256",
      "tree": "55b19c7757ccd64f58169a05cd63e91bee409bad",
      "parents": [
        "77510481c0c3980c8979ed236d63e59221fb8ce5"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jul 23 10:32:31 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:47 2010 -0700"
      },
      "message": "RDS: have sockets get transport module references\n\nRight now there\u0027s nothing to stop the various paths that use\nrs-\u003ers_transport from racing with rmmod and executing freed transport\ncode.  The simple fix is to have binding to a transport also hold a\nreference to the transport\u0027s module, removing this class of races.\n\nWe already had an unused t_owner field which was set for the modular\ntransports and which wasn\u0027t set for the built-in loop transport.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "77510481c0c3980c8979ed236d63e59221fb8ce5",
      "tree": "9b35be9b3a1de7ba6bf97b35823d65ce94033dbe",
      "parents": [
        "fe8ff6b58f040dd52d2db45972db8e0301847f1c"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Wed Jul 21 15:13:25 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:46 2010 -0700"
      },
      "message": "RDS: remove old rs_transport comment\n\nrs_transport is now also used by the rdma paths once the socket is\nbound.  We don\u0027t need this stale comment to tell us what cscope can.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "fe8ff6b58f040dd52d2db45972db8e0301847f1c",
      "tree": "e332f689cfd9838b585f6106ff493672ce1db598",
      "parents": [
        "ea819867b788728aca60717e4fdacb3df771f670"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jul 23 10:30:45 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:45 2010 -0700"
      },
      "message": "RDS: lock rds_conn_count decrement in rds_conn_destroy()\n\nrds_conn_destroy() can race with all other modifications of the\nrds_conn_count but it was modifying the count without locking.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "ea819867b788728aca60717e4fdacb3df771f670",
      "tree": "68952e283e4b119622c6e8244d96e41c623ae4b0",
      "parents": [
        "1bde04a63d532c2540d6fdee0a661530a62b1686"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Thu Jul 15 12:34:33 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:44 2010 -0700"
      },
      "message": "RDS/IB: protect the list of IB devices\n\nThe RDS IB device list wasn\u0027t protected by any locking.  Traversal in\nboth the get_mr and FMR flushing paths could race with additon and\nremoval.\n\nList manipulation is done with RCU primatives and is protected by the\nwrite side of a rwsem.  The list traversal in the get_mr fast path is\nprotected by a rcu read critical section.  The FMR list traversal is\nmore problematic because it can block while traversing the list.  We\nprotect this with the read side of the rwsem.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "1bde04a63d532c2540d6fdee0a661530a62b1686",
      "tree": "222d72e75824e25396b83e82bbd3769cc07599cc",
      "parents": [
        "8576f374ac9537674e3cccb0a9d43fa2b7ebbf5b"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Wed Jul 14 14:01:21 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:43 2010 -0700"
      },
      "message": "RDS/IB: print IB event strings as well as their number\n\nIt\u0027s nice to not have to go digging in the code to see which event\noccurred.  It\u0027s easy to throw together a quick array that maps the ib\nevent enums to their strings.  I didn\u0027t see anything in the stack that\ndoes this translation for us, but I also didn\u0027t look very hard.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "8576f374ac9537674e3cccb0a9d43fa2b7ebbf5b",
      "tree": "ed7279333989d204a6627b703ae568ba0136a4b1",
      "parents": [
        "b4e1da3c9a0ac9b01f45a8578b7347e3a31f9fb8"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jul 19 17:06:46 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:42 2010 -0700"
      },
      "message": "RDS: flush fmrs before allocating new ones\n\nFlushing FMRs is somewhat expensive, and is currently kicked off when\nthe interrupt handler notices that we are getting low.  The result of\nthis is that FMR flushing only happens from the interrupt cpus.\n\nThis spreads the load more effectively by triggering flushes just before\nwe allocate a new FMR.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b4e1da3c9a0ac9b01f45a8578b7347e3a31f9fb8",
      "tree": "16f3021b21f2cbeb73a4532a91474fba9ab2a3ef",
      "parents": [
        "f046011cd73c372267befd10242988eb744649fe"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jul 19 17:02:41 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:41 2010 -0700"
      },
      "message": "RDS: properly use sg_init_table\n\nThis is only needed to keep debugging code from bugging.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "f046011cd73c372267befd10242988eb744649fe",
      "tree": "d184275400dee81f2a5027728bda849bec338d99",
      "parents": [
        "ef87b7ea39a91906218a262686bcb8bad8b6b46e"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Wed Jul 14 13:55:35 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:40 2010 -0700"
      },
      "message": "RDS/IB: track signaled sends\n\nWe\u0027re seeing bugs today where IB connection shutdown clears the send\nring while the tasklet is processing completed sends.  Implementation\ndetails cause this to dereference a null pointer.  Shutdown needs to\nwait for send completion to stop before tearing down the connection.  We\ncan\u0027t simply wait for the ring to empty because it may contain\nunsignaled sends that will never be processed.\n\nThis patch tracks the number of signaled sends that we\u0027ve posted and\nwaits for them to complete.  It also makes sure that the tasklet has\nfinished executing.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "ef87b7ea39a91906218a262686bcb8bad8b6b46e",
      "tree": "4fe72c5b5f788d8109e715012ce2af57bba807d7",
      "parents": [
        "c20f5b9633bb0953bd2422f0f1430a2028cdbd0a"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jul 09 12:26:20 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:39 2010 -0700"
      },
      "message": "RDS: remove __init and __exit annotation\n\nThe trivial amount of memory saved isn\u0027t worth the cost of dealing with section\nmismatches.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "c20f5b9633bb0953bd2422f0f1430a2028cdbd0a",
      "tree": "dc628e1168c963940195ac5d2b5dbe3f54682240",
      "parents": [
        "d455ab64096b9a86849c7315c53e595330842db6"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Jul 07 16:46:26 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:38 2010 -0700"
      },
      "message": "RDS/IB: Use SLAB_HWCACHE_ALIGN flag for kmem_cache_create()\n\nWe are *definitely* counting cycles as closely as DaveM, so\nensure hwcache alignment for our recv ring control structs.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "d455ab64096b9a86849c7315c53e595330842db6",
      "tree": "2e02538ae4cb9c708c5dd474d7fbd739a31c0ab1",
      "parents": [
        "80c51be56ffa257d3177f0d750d90be65d30c22f"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Tue Jul 06 15:04:34 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:36 2010 -0700"
      },
      "message": "RDS/IB: always process recv completions\n\nThe recv refill path was leaking fragments because the recv event handler had\nmarked a ring element as free without freeing its frag.  This was happening\nbecause it wasn\u0027t processing receives when the conn wasn\u0027t marked up or\nconnecting, as can be the case if it races with rmmod.\n\nTwo observations support always processing receives in the callback.\n\nFirst, buildup should only post receives, thus triggering recv event handler\ncalls, once it has built up all the state to handle them.  Teardown should\ndestroy the CQ and drain the ring before tearing down the state needed to\nprocess recvs.  Both appear to be true today.\n\nSecond, this test was fundamentally racy.  There is nothing to stop rmmod and\nconnection destruction from swooping in the moment after the conn state was\nsampled but before real receive procesing starts.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "80c51be56ffa257d3177f0d750d90be65d30c22f",
      "tree": "82c49257057595f9a406c25093ade2871f736241",
      "parents": [
        "515e079dab19cf774d1eec6e5f4ed65509e31ef1"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Tue Jul 06 15:08:48 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:35 2010 -0700"
      },
      "message": "RDS: return to a single-threaded krdsd\n\nWe were seeing very nasty bugs due to fundamental assumption the current code\nmakes about concurrent work struct processing.  The code simpy isn\u0027t able to\nhandle concurrent connection shutdown work function execution today, for\nexample, which is very much possible once a multi-threaded krdsd was\nintroduced.  The problem compounds as additional work structs are added to the\nmix.\n\nkrdsd is no longer perforance critical now that send and receive posting and\nFMR flushing are done elsewhere, so the safest fix is to move back to the\nsingle threaded krdsd that the current code was built around.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "515e079dab19cf774d1eec6e5f4ed65509e31ef1",
      "tree": "1dcc0f211946c47cd19b6823574aaa1a32982ffa",
      "parents": [
        "8aeb1ba6630ffd44001ae9833842794df0107676"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Tue Jul 06 15:09:56 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:34 2010 -0700"
      },
      "message": "RDS/IB: create a work queue for FMR flushing\n\nThis patch moves the FMR flushing work in to its own mult-threaded work queue.\nThis is to maintain performance in preparation for returning the main krdsd\nwork queue back to a single threaded work queue to avoid deep-rooted\nconcurrency bugs.\n\nThis is also good because it further separates FMRs, which might be removed\nsome day, from the rest of the code base.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "8aeb1ba6630ffd44001ae9833842794df0107676",
      "tree": "bc9a78da5281b371d3a9ecb2e00f7c381d9cd33b",
      "parents": [
        "24fa163a4bae74b3378d30e1bc776568cfca8121"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jun 25 14:58:16 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:33 2010 -0700"
      },
      "message": "RDS/IB: destroy connections on rmmod\n\nIB connections were not being destroyed during rmmod.\n\nFirst, recently IB device removal callback was changed to disconnect\nconnections that used the removing device rather than destroying them.  So\nconnections with devices during rmmod were not being destroyed.\n\nSecond, rds_ib_destroy_nodev_conns() was being called before connections are\ndisassociated with devices.  It would almost never find connections in the\nnodev list.\n\nWe first get rid of rds_ib_destroy_conns(), which is no longer called, and\nrefactor the existing caller into the main body of the function and get rid of\nthe list and lock wrappers.\n\nThen we call rds_ib_destroy_nodev_conns() *after* ib_unregister_client() has\nremoved the IB device from all the conns and put the conns on the nodev list.\n\nThe result is that IB connections are destroyed by rmmod.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "24fa163a4bae74b3378d30e1bc776568cfca8121",
      "tree": "309638f0739708cecd066ebad43f95832e3f8dd8",
      "parents": [
        "b6fb0df12db6c8b6bbcc7b5c9459b3bbf5f0cee6"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jun 25 14:59:49 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:32 2010 -0700"
      },
      "message": "RDS/IB: wait for IB dev freeing work to finish during rmmod\n\nThe RDS IB client removal callback can queue work to drop the final reference\nto an IB device.  We have to make sure that this function has returned before\nwe complete rmmod or the work threads can try to execute freed code.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "b6fb0df12db6c8b6bbcc7b5c9459b3bbf5f0cee6",
      "tree": "68729d0227028abc94abf9ab748dda3074bac244",
      "parents": [
        "fbf4d7e3d03587a983ee4e536251ea6c1c848ec2"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Jun 23 18:06:30 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:31 2010 -0700"
      },
      "message": "RDS/IB: Make ib_recv_refill return void\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "fbf4d7e3d03587a983ee4e536251ea6c1c848ec2",
      "tree": "35bfda02d59f576d440e8535719bf5c1350adf42",
      "parents": [
        "c9455d9996ba84af1f534c7e3944ea6f35d2fc54"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Fri Jun 11 16:24:42 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:16:06 2010 -0700"
      },
      "message": "RDS: Remove unused XLIST_PTR_TAIL and xlist_protect()\n\nNot used.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "c9455d9996ba84af1f534c7e3944ea6f35d2fc54",
      "tree": "b0c00e94ed2081ff65aad9be0fa0e66b38048e47",
      "parents": [
        "7a0ff5dbdd0b4cb7ea8764da9d78f4bb2eebaf31"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Fri Jun 11 15:18:51 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:32 2010 -0700"
      },
      "message": "RDS: whitespace\n"
    },
    {
      "commit": "7a0ff5dbdd0b4cb7ea8764da9d78f4bb2eebaf31",
      "tree": "a3e6e1b1af5d63b9f7cb969d831724eecaa98cd5",
      "parents": [
        "eabb732279f1a41ac9d066aeb56973ae505c4cbc"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 11 11:26:02 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:30 2010 -0700"
      },
      "message": "RDS: use delayed work for the FMR flushes\n\nUsing a delayed work queue helps us make sure a healthy number of FMRs\nhave queued up over the limit.  It makes for a large improvement in RDMA\niops.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "eabb732279f1a41ac9d066aeb56973ae505c4cbc",
      "tree": "03dfe99bca44129e5da3ec0e57113f3c931e5f35",
      "parents": [
        "6fa70da6081bbcf948801fd5ee0be4d222298a43"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 11 11:18:57 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:29 2010 -0700"
      },
      "message": "rds: more FMRs are faster\n\nWhen we add more FMRs, we flush them less often and so we go faster.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6fa70da6081bbcf948801fd5ee0be4d222298a43",
      "tree": "519fef6c63abe15d80173ad25c7cd5aae673df55",
      "parents": [
        "0f4b1c7e89e699f588807a914ec6e6396c851a72"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Jun 11 11:17:59 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:28 2010 -0700"
      },
      "message": "rds: recycle FMRs through lockless lists\n\nFRM allocation and recycling is performance critical and fairly lock\nintensive.  The current code has a per connection lock that all\nprocesses bang on and it becomes a major bottleneck on large systems.\n\nThis changes things to use a number of cmpxchg based lists instead,\nallowing us to go through the whole FMR lifecycle without locking inside\nRDS.\n\nZach Brown pointed out that our usage of cmpxchg for xlist removal is\nracey if someone manages to remove and add back an FMR struct into the list\nwhile another CPU can see the FMR\u0027s address at the head of the list.\n\nThe second CPU might assume the list hasn\u0027t changed when in fact any\nnumber of operations might have happened in between the deletion and\nreinsertion.\n\nThis commit maintains a per cpu count of CPUs that are currently\nin xlist removal, and establishes a grace period to make sure that\nnobody can see an entry we have just removed from the list.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "0f4b1c7e89e699f588807a914ec6e6396c851a72",
      "tree": "8b882f85f03089283f6d222bf8c7d5616a102ecd",
      "parents": [
        "501dcccdb7a2335cde07d4acb56e636182d62944"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jun 04 14:41:41 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:27 2010 -0700"
      },
      "message": "rds: fix rds_send_xmit() serialization\n\nrds_send_xmit() was changed to hold an interrupt masking spinlock instead of a\nmutex so that it could be called from the IB receive tasklet path.  This broke\nthe TCP transport because its xmit method can block and masks and unmasks\ninterrupts.\n\nThis patch serializes callers to rds_send_xmit() with a simple bit instead of\nthe current spinlock or previous mutex.  This enables rds_send_xmit() to be\ncalled from any context and to call functions which block.  Getting rid of the\nc_send_lock exposes the bare c_lock acquisitions which are changed to block\ninterrupts.\n\nA waitqueue is added so that rds_conn_shutdown() can wait for callers to leave\nrds_send_xmit() before tearing down partial send state.  This lets us get rid\nof c_senders.\n\nrds_send_xmit() is changed to check the conn state after acquiring the\nRDS_IN_XMIT bit to resolve races with the shutdown path.  Previously both\nworked with the conn state and then the lock in the same order, allowing them\nto race and execute the paths concurrently.\n\nrds_send_reset() isn\u0027t racing with rds_send_xmit() now that rds_conn_shutdown()\nproperly ensures that rds_send_xmit() can\u0027t start once the conn state has been\nchanged.  We can remove its previous use of the spinlock.\n\nFinally, c_send_generation is redundant.  Callers can race to test the c_flags\nbit by simply retrying instead of racing to test the c_send_generation atomic.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "501dcccdb7a2335cde07d4acb56e636182d62944",
      "tree": "e2079f8d22c498e6c7f1fcfa326e123b4945df7b",
      "parents": [
        "671202f3491cccdb267f88ad59ba0635aeb2a22e"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jun 04 14:25:27 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:26 2010 -0700"
      },
      "message": "rds: block ints when acquiring c_lock in rds_conn_message_info()\n\nconn-\u003ec_lock is acquired in interrupt context.  rds_conn_message_info() is\ncalled from user context and was acquiring c_lock without blocking interrupts,\nleading to possible deadlocks.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "671202f3491cccdb267f88ad59ba0635aeb2a22e",
      "tree": "0dbe27af4940fa3c6ede0a96b119653c4805185c",
      "parents": [
        "037f18a3074753991656189a091a5fa371999107"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Fri Jun 04 14:26:32 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:25 2010 -0700"
      },
      "message": "rds: remove unused rds_send_acked_before()\n\nrds_send_acked_before() wasn\u0027t blocking interrupts when acquiring c_lock from\nuser context but nothing calls it.  Rather than fix its use of c_lock we just\nremove the function.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "037f18a3074753991656189a091a5fa371999107",
      "tree": "5452afd53bc7d05d712a5cdd9f937aa3591c75d3",
      "parents": [
        "33244125871734ebc0d8d147680a0d7e99385e0b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 21:45:06 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:24 2010 -0700"
      },
      "message": "RDS: use friendly gfp masks for prefill\n\nWhen prefilling the rds frags, we end up doing a lot of allocations.\nWe\u0027re not in atomic context here, and so there\u0027s no reason to dip into\natomic reserves.  This changes the prefills to use masks that allow\nwaiting.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "33244125871734ebc0d8d147680a0d7e99385e0b",
      "tree": "c4dad958a4de167f5b954e91bc90d69000cd89c1",
      "parents": [
        "fc24f78085e8771670af42f2b8929b16a0c98a22"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed May 26 22:05:37 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:23 2010 -0700"
      },
      "message": "RDS/IB: Add caching of frags and incs\n\nThis patch is based heavily on an initial patch by Chris Mason.\nInstead of freeing slab memory and pages, it keeps them, and\nfunnels them back to be reused.\n\nThe lock minimization strategy uses xchg and cmpxchg atomic ops\nfor manipulation of pointers to list heads. We anchor the lists with a\npointer to a list_head struct instead of a static list_head struct.\nWe just have to carefully use the existing primitives with\nthe difference between a pointer and a static head struct.\n\nFor example, \u0027list_empty()\u0027 means that our anchor pointer points to a list with\na single item instead of meaning that our static head element doesn\u0027t point to\nany list items.\n\nOriginal patch by Chris, with significant mods and fixes by Andy and Zach.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "fc24f78085e8771670af42f2b8929b16a0c98a22",
      "tree": "6396f72983d9674b57292ca3c068e7b14c5c31be",
      "parents": [
        "3427e854e1a0e76be8b3d75fc0fa878f59b43693"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Tue May 25 11:20:09 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:22 2010 -0700"
      },
      "message": "RDS/IB: Remove ib_recv_unmap_page()\n\nAll it does is call unmap_sg(), so just call that directly.\n\nThe comment above unmap_page also may be incorrect, so we\nshouldn\u0027t hold on to it, either.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "3427e854e1a0e76be8b3d75fc0fa878f59b43693",
      "tree": "cc0bb1c074612cfd6634ac6a4fa9c92709fa185a",
      "parents": [
        "0b088e003ccf316a76c51be5dec2d70b93be3be8"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon May 24 20:28:49 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:21 2010 -0700"
      },
      "message": "RDS: Assume recv-\u003er_frag is always NULL in refill_one()\n\nrefill_one() should never be called on a recv struct that\ndoesn\u0027t need a new r_frag allocated. Add a WARN and remove\nconditional around r_frag alloc code.\n\nAlso, add a comment to explain why r_ibinc may or may not\nneed refilling.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "0b088e003ccf316a76c51be5dec2d70b93be3be8",
      "tree": "76fb8b9ab49729a97e137b73bbf4e12b65cde89d",
      "parents": [
        "fc19de38be924728fea76026c0d1a6c4b6156084"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon May 24 20:12:41 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:20 2010 -0700"
      },
      "message": "RDS: Use page_remainder_alloc() for recv bufs\n\nInstead of splitting up a page into RDS_FRAG_SIZE chunks\nourselves, ask rds_page_remainder_alloc() to do it. While it\nis possible PAGE_SIZE \u003e FRAG_SIZE, on x86en it isn\u0027t, so having\nduplicate \"carve up a page into buffers\" code seems excessive.\n\nThe other modification this spawns is the use of a single\nstruct scatterlist in rds_page_frag instead of a bare page ptr.\nThis causes verbosity to increase in some places, and decrease\nin others.\n\nFinally, I decided to unify the lifetimes and alloc/free of\nrds_page_frag and its page. This is a nice simplification in itself,\nbut will be extra-nice once we come to adding cmason\u0027s recycling\npatch.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "fc19de38be924728fea76026c0d1a6c4b6156084",
      "tree": "31deb86bc1d6b11a2c671ee3c126fc7c27e02264",
      "parents": [
        "f3c6808d3d8513db2b0543538fc35c25a60fe7a7"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Mon May 24 13:16:57 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:19 2010 -0700"
      },
      "message": "RDS/IB: disconnect when IB devices are removed\n\nCurrently IB device removal destroys connections which are associated with the\ndevice.  This prevents connections from being re-established when replacement\ndevices are added.\n\nInstead we\u0027ll queue shutdown work on the connections as their devices are\nremoved.  When we see that devices are added we triger connection attempts on\nall connections that don\u0027t currently have a device.\n\nThe result is that RDS sockets can resume device-independent work (bcopy, not\nRDMA) across IB device removal and restoration.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "f3c6808d3d8513db2b0543538fc35c25a60fe7a7",
      "tree": "84ef99e9d615351000c5cfa81cc08c8c8ffb4be6",
      "parents": [
        "3e0249f9c05cb77b66f7f09644ca9ca208d991a9"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Mon May 24 13:14:36 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:18 2010 -0700"
      },
      "message": "RDS: introduce rds_conn_connect_if_down()\n\nA few paths had the same block of code to queue a connection\u0027s connect work if\nit was in the right state.  Let\u0027s move this in to a helper function.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "3e0249f9c05cb77b66f7f09644ca9ca208d991a9",
      "tree": "2f8aaddb51590d36a54b8f7044224073107d77d9",
      "parents": [
        "89bf9d4158b5a1b6bd00960eb2e47601ec8cc138"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Tue May 18 15:48:51 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:17 2010 -0700"
      },
      "message": "RDS/IB: add refcount tracking to struct rds_ib_device\n\nThe RDS IB client .remove callback used to free the rds_ibdev for the given\ndevice unconditionally.  This could race other users of the struct.  This patch\nadds refcounting so that we only free the rds_ibdev once all of its users are\ndone.\n\nMany rds_ibdev users are tied to connections.  We give the connection a\nreference and change these users to reference the device in the connection\ninstead of looking it up in the IB client data.  The only user of the IB client\ndata remaining is the first lookup of the device as connections are built up.\n\nIncrementing the reference count of a device found in the IB client data could\nrace with final freeing so we use an RCU grace period to make sure that freeing\nwon\u0027t happen until those lookups are done.\n\nMRs need the rds_ibdev to get at the pool that they\u0027re freed in to.  They exist\noutside a connection and many MRs can reference different devices from one\nsocket, so it was natural to have each MR hold a reference.  MR refs can be\ndropped from interrupt handlers and final device teardown can block so we push\nit off to a work struct.  Pool teardown had to be fixed to cancel its pending\nwork instead of deadlocking waiting for all queued work, including itself, to\nfinish.\n\nMRs get their reference from the global device list, which gets a reference.\nIt is left unprotected by locks and remains racy.  A simple global lock would\nbe a significant bottleneck.  More scalable (complicated) locking should be\ndone carefully in a later patch.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "89bf9d4158b5a1b6bd00960eb2e47601ec8cc138",
      "tree": "e11c5ea0b69fb1bc53a03f83570e160dbe3b005f",
      "parents": [
        "a46ca94e7fb2c93a59e08b42fd77d8c478fda5fc"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Tue May 18 15:44:50 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:16 2010 -0700"
      },
      "message": "RDS/IB: get the xmit max_sge from the RDS IB device on the connection\n\nrds_ib_xmit_rdma() was calling ib_get_client_data() to get at the rds_ibdevice\njust to get the max_sge for the transmit.  This patch instead has it get it\ndirectly off the rds_ibdev which is stored on the connection.\n\nThe current code won\u0027t free the rds_ibdev until all the IB connections that use\nit are freed.  So it\u0027s safe to reference the rds_ibdev this way.  In the future\nit also makes it easier to support proper reference counting of the rds_ibdev\nstruct.\n\nAs an additional bonus, this gets rid of the performance hit of calling in to\nthe IB stack to look up the rds_ibdev.  The current implementation in the IB\nstack acquires an interrupt blocking spinlock to protect the registration of\nclient callback data.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "a46ca94e7fb2c93a59e08b42fd77d8c478fda5fc",
      "tree": "2c7e4be2d85d55c0fc69d60c18504d8eec4acfe2",
      "parents": [
        "1cc2228c599f173d77000a250bf0541294e1a7be"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Mon May 24 13:14:59 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:15 2010 -0700"
      },
      "message": "RDS/IB: rds_ib_cm_handle_connect() forgot to unlock c_cm_lock\n\nrds_ib_cm_handle_connect() could return without unlocking the c_conn_lock if\nrds_setup_qp() failed.  Rather than adding another imbalanced mutex_unlock() to\nthis error path we only unlock the mutex once as we exit the function, reducing\nthe likelyhood of making this same mistake in the future.  We remove the\nprevious mulitple return sites, leaving one unambigious return path.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "1cc2228c599f173d77000a250bf0541294e1a7be",
      "tree": "cc84662c1fd550274e8bba759074873b7c8e017d",
      "parents": [
        "bcf50ef2ce3c5d8f2fe995259da16677898cb300"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 11 16:15:35 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:13 2010 -0700"
      },
      "message": "rds: Fix reference counting on the for xmit_atomic and xmit_rdma\n\nThis makes sure we have the proper number of references in\nrds_ib_xmit_atomic and rds_ib_xmit_rdma.  We also consistently\ndrop references the same way for all message types as the IOs end.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "bcf50ef2ce3c5d8f2fe995259da16677898cb300",
      "tree": "4a90d8f1b77b027977ee2e5229a239faa9848177",
      "parents": [
        "abf454398c2ebafc629ebb8b149f5a752c79e919"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 11 15:15:15 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:12 2010 -0700"
      },
      "message": "rds: use RCU to protect the connection hash\n\nThe connection hash was almost entirely RCU ready, this\njust makes the final couple of changes to use RCU instead\nof spinlocks for everything.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "abf454398c2ebafc629ebb8b149f5a752c79e919",
      "tree": "17c57ca613fc3d8a49f9dfc99bf2f9c3b7e3fc30",
      "parents": [
        "c9e65383a20d9a656db70efbf67e57f8115ad776"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 11 15:14:52 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:11 2010 -0700"
      },
      "message": "RDS: use locking on the connection hash list\n\nrds_conn_destroy really needs locking while it changes the\nconnection hash.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c9e65383a20d9a656db70efbf67e57f8115ad776",
      "tree": "3055f38ada5a60e858fe66e12353cad37e8ebdd5",
      "parents": [
        "7e3f2952eeb1a0fe2aa9882fd1705a88f9d89b35"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 11 15:14:16 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:10 2010 -0700"
      },
      "message": "rds: Fix RDMA message reference counting\n\nThe RDS send_xmit code was trying to get fancy with message\ncounting and was dropping the final reference on the RDMA messages\ntoo early.  This resulted in memory corruption and oopsen.\n\nThe fix here is to always add a ref as the parts of the message passes\nthrough rds_send_xmit, and always drop a ref as the parts of the message\ngo through completion handling.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "7e3f2952eeb1a0fe2aa9882fd1705a88f9d89b35",
      "tree": "903d89d0d1184bd1f33df2b5036615d1c40cfb06",
      "parents": [
        "38a4e5e61344490f18241333d7b1b368a3a38748"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 11 15:11:11 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:09 2010 -0700"
      },
      "message": "rds: don\u0027t let RDS shutdown a connection while senders are present\n\nThis is the first in a long line of patches that tries to fix races\nbetween RDS connection shutdown and RDS traffic.\n\nHere we are maintaining a count of active senders to make sure\nthe connection doesn\u0027t go away while they are using it.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "38a4e5e61344490f18241333d7b1b368a3a38748",
      "tree": "60268171e32aff9938334806d0debd5c35b3dc56",
      "parents": [
        "e4c52c98e04937ea87b0979a81354d0040d284f9"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 11 15:09:45 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:15:08 2010 -0700"
      },
      "message": "rds: Use RCU for the bind lookup searches\n\nThe RDS bind lookups are somewhat expensive in terms of CPU\ntime and locking overhead.  This commit changes them into a\nfaster RCU based hash tree instead of the rbtrees they were using\nbefore.\n\nOn large NUMA systems it is a significant improvement.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "e4c52c98e04937ea87b0979a81354d0040d284f9",
      "tree": "c7bfbd9d952ebb66e7491d7c3a1bc91db3fbfbb8",
      "parents": [
        "4a81802b5e5e0b059627d7173c917711cf35e668"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Fri Apr 23 10:49:53 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:14:06 2010 -0700"
      },
      "message": "RDS/IB: add _to_node() macros for numa and use {k,v}malloc_node()\n\nAllocate send/recv rings in memory that is node-local to the HCA.\nThis significantly helps performance.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "4a81802b5e5e0b059627d7173c917711cf35e668",
      "tree": "2a26295afcfaa282cc898cfbb3ea27e9e40382b5",
      "parents": [
        "764f2dd92f5cd308d1c4372b33fea2b265c093f5"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Fri Apr 23 11:04:21 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:29 2010 -0700"
      },
      "message": "RDS/IB: Remove unused variable in ib_remove_addr()\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "764f2dd92f5cd308d1c4372b33fea2b265c093f5",
      "tree": "f979329a2b5bfb0c92fc83e951d9ac7654c4ba78",
      "parents": [
        "c83188dcd76b1f0c17c31b4bbd8de57c634b19f8"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 22 21:59:15 2010 -0400"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:28 2010 -0700"
      },
      "message": "rds: rcu-ize rds_ib_get_device()\n\nrds_ib_get_device is called very often as we turn an\nip address into a corresponding device structure.  It currently\ntake a global spinlock as it walks different lists to find active\ndevices.\n\nThis commit changes the lists over to RCU, which isn\u0027t very complex\nbecause they are not updated very often at all.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "c83188dcd76b1f0c17c31b4bbd8de57c634b19f8",
      "tree": "1d66c7996693e36d88f9fa7bebcb28281612675d",
      "parents": [
        "976673ee1b92d939168c8c1fbad3e16c45caa545"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Apr 21 13:09:28 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:27 2010 -0700"
      },
      "message": "rds: per-rm flush_wait waitq\n\nThis removes a global waitqueue used to wait for rds messages\nand replaces it with a waitqueue inside the rds_message struct.\n\nThe global waitqueue turns into a global lock and significantly\nbottlenecks operations on large machines.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "976673ee1b92d939168c8c1fbad3e16c45caa545",
      "tree": "36c682f96789118bebe0c14e3a5a5353b184a22b",
      "parents": [
        "ce47f52f42e69d48d1b63fa618fce9cd7ffa9417"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Apr 21 13:04:43 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:26 2010 -0700"
      },
      "message": "rds: switch to rwlock on bind_lock\n\nThe bind_lock is almost entirely readonly, but it gets\nhammered during normal operations and is a major bottleneck.\n\nThis commit changes it to an rwlock, which takes it from 80%\nof the system time on a big numa machine down to much lower\nnumbers.\n\nA better fix would involve RCU, which is done in a later commit\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "ce47f52f42e69d48d1b63fa618fce9cd7ffa9417",
      "tree": "6abfde17a22d48b2659ae33e69b69a3349afb749",
      "parents": [
        "9e29db0e3645cafa980e68a9c717a761448389e1"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Thu Apr 15 17:19:29 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:25 2010 -0700"
      },
      "message": "RDS: Update comments in rds_send_xmit()\n\nUpdate comments to reflect changes in previous commit.\n\nKeeping as separate commits due to different authorship.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "9e29db0e3645cafa980e68a9c717a761448389e1",
      "tree": "4ce87432acbda8e16c27c97f3d1ae5339bb53559",
      "parents": [
        "acfcd4d4ec4ed8cb504f96d4fabb7a94029b362b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 15 16:38:14 2010 -0400"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:24 2010 -0700"
      },
      "message": "RDS: Use a generation counter to avoid rds_send_xmit loop\n\nrds_send_xmit is required to loop around after it releases the lock\nbecause someone else could done a trylock, found someone working on the\nlist and backed off.\n\nBut, once we drop our lock, it is possible that someone else does come\nin and make progress on the list.  We should detect this and not loop\naround if another process is actually working on the list.\n\nThis patch adds a generation counter that is bumped every time we\nget the lock and do some send work.  If the retry notices someone else\nhas bumped the generation counter, it does not need to loop around and\ncontinue working.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "acfcd4d4ec4ed8cb504f96d4fabb7a94029b362b",
      "tree": "af63be50f94cdcb0338095142b1890b75f7ff2e8",
      "parents": [
        "a40aa9233aa22d69212d02f92e5b607bd4d658f4"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Mar 31 18:56:25 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:23 2010 -0700"
      },
      "message": "RDS: Get pong working again\n\nCall send_xmit() directly from pong()\n\nSet pongs as op_active\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "a40aa9233aa22d69212d02f92e5b607bd4d658f4",
      "tree": "f8c60fc02cb5ab58ea47fe5d381c140074149bbc",
      "parents": [
        "fcc5450c6386526034edc437e4cb2c67a6fdd7e9"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 29 17:10:01 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:22 2010 -0700"
      },
      "message": "RDS: Do wait_event_interruptible instead of wait_event\n\nCan\u0027t see a reason not to allow signals to interrupt the wait.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "fcc5450c6386526034edc437e4cb2c67a6fdd7e9",
      "tree": "87b98163a69413de3c14a37220edf22350cb25d9",
      "parents": [
        "51e2cba8b5936c13b40f0fa11aa4e84683dbc751"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 29 17:08:49 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:21 2010 -0700"
      },
      "message": "RDS: Remove send_quota from send_xmit()\n\nThe purpose of the send quota was really to give fairness\nwhen different connections were all using the same\nworkq thread to send backlogged msgs -- they could only send\nso many before another connection could make progress.\n\nNow that each connection is pushing the backlog from its\ncompletion handler, they are all guaranteed to make progress\nand the quota isn\u0027t needed any longer.\n\nA thread *will* have to send all previously queued data, as well\nas any further msgs placed on the queue while while c_send_lock\nwas held. In a pathological case a single process can get\nroped into doing this for long periods while other threads\nget off free. But, since it can only do this until the transport\nreports full, this is a bounded scenario.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "51e2cba8b5936c13b40f0fa11aa4e84683dbc751",
      "tree": "13a6924d085f0e6e734ad1a2a43c1d3af5208101",
      "parents": [
        "ab1a6926f589c51e7a57ce7544d85272c4acc854"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 29 17:47:30 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:20 2010 -0700"
      },
      "message": "RDS: Move atomic stats from general to ib-specific area\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "ab1a6926f589c51e7a57ce7544d85272c4acc854",
      "tree": "dbe19519db76e5dea8d01864fcd4c39441d26b64",
      "parents": [
        "cf4b7389ee812817deeb11da1422004e01b50646"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 29 16:52:12 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:19 2010 -0700"
      },
      "message": "RDS: rds_message_unmapped() doesn\u0027t need to check if queue active\n\nIf the queue has nobody on it, then wake_up does nothing.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "cf4b7389ee812817deeb11da1422004e01b50646",
      "tree": "318d1e1da095880a19fc41992a3b57e9190e3b23",
      "parents": [
        "f2ec76f288118fb18449402d75383212cbcb6762"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 29 16:50:54 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:18 2010 -0700"
      },
      "message": "RDS: Fix locking in send on m_rs_lock\n\nDo not nest m_rs_lock under c_lock\n\nDisable interrupts in {rdma,atomic}_send_complete\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "f2ec76f288118fb18449402d75383212cbcb6762",
      "tree": "0b5969496be44c1c94ec73fec1d97d7ccc88fcc7",
      "parents": [
        "2fa57129df61bf3fb7d90c5486fe15df94091f61"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 29 16:46:46 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:17 2010 -0700"
      },
      "message": "RDS: Use NOWAIT in message_map_pages()\n\nCan no longer block, so use NOWAIT.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "2fa57129df61bf3fb7d90c5486fe15df94091f61",
      "tree": "50d444045d3d116ae0771369a42f5b14f55a7c8f",
      "parents": [
        "a7d3a281483684f77e350b045af7f80a149fc4c7"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 29 16:45:40 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:16 2010 -0700"
      },
      "message": "RDS: Bypass workqueue when queueing cong updates\n\nNow that rds_send_xmit() does not block, we can call it directly\ninstead of going through the helper thread.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "a7d3a281483684f77e350b045af7f80a149fc4c7",
      "tree": "d15beb494e7d7cf0691adec8ffebe098608c6620",
      "parents": [
        "2ad8099b58f274dc23bc866ca259d7e5db87fa1a"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 29 16:20:18 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:15 2010 -0700"
      },
      "message": "RDS: Call rds_send_xmit() directly from sendmsg()\n\nrds_sendmsg() is calling the send worker function to\nsend the just-queued datagrams, presumably because it wants\nthe behavior where anything not sent will re-call the send\nworker. We now ensure all queued datagrams are sent by retrying\nfrom the send completion handler, so this isn\u0027t needed any more.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "2ad8099b58f274dc23bc866ca259d7e5db87fa1a",
      "tree": "e659d7178d1e2729fc306d3b5dbb4e5e5f47544a",
      "parents": [
        "049ee3f500954176a87f22e6ee3e98aecb1b8958"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Tue Mar 23 17:48:04 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:13 2010 -0700"
      },
      "message": "RDS: rds_send_xmit() locking/irq fixes\n\nrds_message_put() cannot be called with irqs off, so move it after\nirqs are re-enabled.\n\nSpinlocks throughout the function do not to use _irqsave because\nthe lock of c_send_lock at top already disabled irqs.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "049ee3f500954176a87f22e6ee3e98aecb1b8958",
      "tree": "5dfd8cf3e6d9a7a15e80f6ddee7f4ce7c4aa7a8c",
      "parents": [
        "f17a1a55fb672d7f64be7f2e940ef5669e5efa0a"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Tue Mar 23 17:39:07 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:12 2010 -0700"
      },
      "message": "RDS: Change send lock from a mutex to a spinlock\n\nThis change allows us to call rds_send_xmit() from a tasklet,\nwhich is crucial to our new operating model.\n\n* Change c_send_lock to a spinlock\n* Update stats fields \"sem_\" to \"_lock\"\n* Remove unneeded rds_conn_is_sending()\n\nAbout locking between shutdown and send -- send checks if the\nconnection is up. Shutdown puts the connection into\nDISCONNECTING. After this, all threads entering send will exit\nimmediately. However, a thread could be *in* send_xmit(), so\nshutdown acquires the c_send_lock to ensure everyone is out\nbefore proceeding with connection shutdown.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "f17a1a55fb672d7f64be7f2e940ef5669e5efa0a",
      "tree": "ed1651f64ade2676101766af764d11ef98e30f41",
      "parents": [
        "77dd550e5547846604ff6f90c4dc6bba4414e485"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Thu Mar 18 17:19:52 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:11 2010 -0700"
      },
      "message": "RDS: Refill recv ring directly from tasklet\n\nPerformance is better if we use allocations that don\u0027t block\nto refill the receive ring. Since the whole reason we were\nkicking out to the worker thread was so we could do blocking\nallocs, we no longer need to do this.\n\nRemove gfp params from rds_ib_recv_refill(); we always use\nGFP_NOWAIT.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "77dd550e5547846604ff6f90c4dc6bba4414e485",
      "tree": "ea37afea7f0d857e01f214f703018426f6d8b920",
      "parents": [
        "e32b4a70495aac6a612e13f4c21db09dd756ff2c"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 22 15:22:04 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:10 2010 -0700"
      },
      "message": "RDS: Stop supporting old cong map sending method\n\nWe now ask the transport to give us a rm for the congestion\nmap, and then we handle it normally. Previously, the\ntransport defined a function that we would call to send\na congestion map.\n\nConvert TCP and loop transports to new cong map method.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "e32b4a70495aac6a612e13f4c21db09dd756ff2c",
      "tree": "2f0a7187e5ddb8a79d5bec0cefade198b99ea138",
      "parents": [
        "ff3d7d36134ef7138803734fdbf91cc986ea7976"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Mar 03 19:25:21 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:09 2010 -0700"
      },
      "message": "RDS/IB: Do not wait for send ring to be empty on conn shutdown\n\nNow that we are signaling send completions much less, we are likely\nto have dirty entries in the send queue when the connection is\nshut down (on rmmod, for example.) These are cleaned up a little\nfurther down in conn_shutdown, but if we wait on the ring_empty_wait\nfor them, it\u0027ll never happen, and we hand on unload.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "ff3d7d36134ef7138803734fdbf91cc986ea7976",
      "tree": "77ef55e071f84f1b97550dbc6d6755cb3089339b",
      "parents": [
        "aa0a4ef4ac3a3c5ffa35e32520bfbc0922ef3630"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 01 14:03:09 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:08 2010 -0700"
      },
      "message": "RDS: Perform unmapping ops in stages\n\nPreviously, RDS would wait until the final send WR had completed\nand then handle cleanup. With silent ops, we do not know\nif an atomic, rdma, or data op will be last. This patch\nhandles any of these cases by keeping a pointer to the last\nop in the message in m_last_op.\n\nWhen the TX completion event fires, rds dispatches to per-op-type\ncleanup functions, and then does whole-message cleanup, if the\nlast op equalled m_last_op.\n\nThis patch also moves towards having op-specific functions take\nthe op struct, instead of the overall rm struct.\n\nrds_ib_connection has a pointer to keep track of a a partially-\ncompleted data send operation. This patch changes it from an\nrds_message pointer to the narrower rm_data_op pointer, and\nmodifies places that use this pointer as needed.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "aa0a4ef4ac3a3c5ffa35e32520bfbc0922ef3630",
      "tree": "13b078f08c9411e3f8f7052c79add9db228a00b6",
      "parents": [
        "2c3a5f9abb1dc5efdab8ba9a568b1661c65fd1e3"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Tue Apr 13 12:00:35 2010 -0700"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:07 2010 -0700"
      },
      "message": "RDS: Make sure cmsgs aren\u0027t used in improper ways\n\nIt hasn\u0027t cropped up in the field, but this code ensures it is\nimpossible to issue operations that pass an rdma cookie (DEST, MAP)\nin the same sendmsg call that\u0027s actually initiating rdma or atomic\nops.\n\nDisallowing this perverse-but-technically-allowed usage makes silent\nRDMA heuristics slightly easier.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "2c3a5f9abb1dc5efdab8ba9a568b1661c65fd1e3",
      "tree": "72b6a4c5298fecf46637987fd8ae42296dc90a97",
      "parents": [
        "7e3bd65ebfd5d6cd76b8b979920c632d6e6b4b2a"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 01 16:10:40 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:06 2010 -0700"
      },
      "message": "RDS: Add flag for silent ops. Do atomic op before RDMA\n\nAdd a flag to the API so users can indicate they want\nsilent operations. This is needed because silent ops\ncannot be used with USE_ONCE MRs, so we can\u0027t just\nassume silent.\n\nAlso, change send_xmit to do atomic op before rdma op if\nboth are present, and centralize the hairy logic to determine if\nwe want to attempt silent, or not.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "7e3bd65ebfd5d6cd76b8b979920c632d6e6b4b2a",
      "tree": "eb43094639021ef9c2d587b6e386be2aa9643dbe",
      "parents": [
        "940786eb0a0faf3f30898a1cc7c1540d54c1aff6"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 01 16:04:59 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:05 2010 -0700"
      },
      "message": "RDS: Move some variables around for consistency\n\nAlso, add a comment.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "940786eb0a0faf3f30898a1cc7c1540d54c1aff6",
      "tree": "a8ca1a5df3154b57cc43380ff529898215c625a3",
      "parents": [
        "ee4c7b47e46a9dea789aadb8279c8505f755b3ee"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Fri Feb 19 18:04:58 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:04 2010 -0700"
      },
      "message": "RDS: queue failure notifications for dropped atomic ops\n\nWhen dropping ops in the send queue, we notify the client\nof failed rdma ops they asked for notifications on, but not\natomic ops. It should be for both.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "ee4c7b47e46a9dea789aadb8279c8505f755b3ee",
      "tree": "6528275276bcd963b0d8fcd3fadac39e6d6c3e6f",
      "parents": [
        "372cd7dedfd1ea93a9ae8d9c282e910dc1b76773"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Feb 03 19:41:52 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:03 2010 -0700"
      },
      "message": "RDS: Add a warning if trying to allocate 0 sgs\n\nrds_message_alloc_sgs() only works when nents is nonzero.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "372cd7dedfd1ea93a9ae8d9c282e910dc1b76773",
      "tree": "248c672e0fd7fdb8015c51d02a0e74df8d9feef9",
      "parents": [
        "5b2366bd2835919e2e6a836e837eab4a9274bd46"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Feb 03 19:40:32 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:02 2010 -0700"
      },
      "message": "RDS: Do not set op_active in r_m_copy_from_user().\n\nDo not allocate sgs for data for 0-length datagrams\n\nSet data.op_active in rds_sendmsg() instead of\nrds_message_copy_from_user().\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "5b2366bd2835919e2e6a836e837eab4a9274bd46",
      "tree": "ee0be5166dfec4acc006a23ddc9ea5788dbb90ea",
      "parents": [
        "6c7cc6e4694dc464ae884332f2a322973497e3cf"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Feb 03 19:36:44 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:12:01 2010 -0700"
      },
      "message": "RDS: Rewrite rds_send_xmit\n\nSimplify rds_send_xmit().\n\nSend a congestion map (via xmit_cong_map) without\ndecrementing send_quota.\n\nMove resetting of conn xmit variables to end of loop.\n\nUpdate comments.\n\nImplement a special case to turn off sending an rds header\nwhen there is an atomic op and no other data.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "6c7cc6e4694dc464ae884332f2a322973497e3cf",
      "tree": "9af8e2e0874ce78f9a500e22a79f9274f5efe0fd",
      "parents": [
        "f8b3aaf2ba8ca9e27b47f8bfdff07c8b968f2c05"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Jan 27 18:04:18 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:11:59 2010 -0700"
      },
      "message": "RDS: Rename data op members prefix from m_ to op_\n\nFor consistency.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "f8b3aaf2ba8ca9e27b47f8bfdff07c8b968f2c05",
      "tree": "42de574167e590ca2e413314b6486df916cd1f31",
      "parents": [
        "d0ab25a83c4a08cd98b73a37d3f4c069f7b4f50b"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Mon Mar 01 14:11:53 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:11:58 2010 -0700"
      },
      "message": "RDS: Remove struct rds_rdma_op\n\nA big changeset, but it\u0027s all pretty dumb.\n\nstruct rds_rdma_op was already embedded in struct rm_rdma_op.\nRemove rds_rdma_op and put its members in rm_rdma_op. Rename\nmembers with \"op_\" prefix instead of \"r_\", for consistency.\n\nOf course this breaks a lot, so fixup the code accordingly.\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    },
    {
      "commit": "d0ab25a83c4a08cd98b73a37d3f4c069f7b4f50b",
      "tree": "d21dad44f483e684c35209f61b905b53ae582050",
      "parents": [
        "4324879df06ba4db01a0b455af2d003f117e6aa3"
      ],
      "author": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Jan 27 16:15:48 2010 -0800"
      },
      "committer": {
        "name": "Andy Grover",
        "email": "andy.grover@oracle.com",
        "time": "Wed Sep 08 18:11:57 2010 -0700"
      },
      "message": "RDS: purge atomic resources too in rds_message_purge()\n\nAdd atomic_free_op function, analogous to rdma_free_op,\nand call it in rds_message_purge().\n\nSigned-off-by: Andy Grover \u003candy.grover@oracle.com\u003e\n"
    }
  ],
  "next": "4324879df06ba4db01a0b455af2d003f117e6aa3"
}
