From: Pradeep Satyanarayana <pradeeps-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
To: Mike Marciniszyn
<mike.marciniszyn-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org>,
Roland Dreier <roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Ralph Campbell
<ralph.campbell-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org>,
linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] IPoIB: fix faulty list maintenance in path and neigh list
Date: Fri, 11 Feb 2011 10:09:36 -0800 [thread overview]
Message-ID: <4D557B60.1020005@linux.vnet.ibm.com> (raw)
Resending since this got rejected previously as spam.
Thanks
Pradeep
On 02/10/2011 01:18 PM, Pradeep Satyanarayana wrote:
> On 02/01/2011 08:12 AM, Mike Marciniszyn wrote:
>> From: Gary Leshner <gary.leshner-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org>
>>
>> Added list_del to ipoib_mcast_free() and path_free() to remove the
neigh from
>> the path's neigh_list link list before freeing the memory it consumes.
>> This makes the code consistent with ipoib_cm_handle_tx_wc() and
other locations where the list_del() preceeds the call to
ipoib_neigh_free().
>>
>> Similarly, at list_del() now preceeds path_free() to remove the path
from
>> ipoib_dev_priv's path_list.
>>
>> Additionally, the fields neigh->ah and neigh->list were not being
initialized
>> upon allocation. The patch insures that these two remaining fields are
>> initialized correctly.
>>
>> Signed-off-by: Mike Marciniszyn <mike.marciniszyn-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org>
>> ---
>> drivers/infiniband/ulp/ipoib/ipoib_main.c | 4 ++++
>> drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 1 +
>> 2 files changed, 5 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c
b/drivers/infiniband/ulp/ipoib/ipoib_main.c
>> index 9ff7bc7..ddd52f6 100644
>> --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
>> +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
>> @@ -283,6 +283,7 @@ static void path_free(struct net_device *dev,
struct ipoib_path *path)
>> if (neigh->ah)
>> ipoib_put_ah(neigh->ah);
>>
>> + list_del(&neigh->list);
>> ipoib_neigh_free(dev, neigh);
>> }
>>
>> @@ -390,6 +391,7 @@ void ipoib_flush_paths(struct net_device *dev)
>> spin_unlock_irqrestore(&priv->lock, flags);
>> netif_tx_unlock_bh(dev);
>> wait_for_completion(&path->done);
>> + list_del(&path->list);
>> path_free(dev, path);
>> netif_tx_lock_bh(dev);
>> spin_lock_irqsave(&priv->lock, flags);
>> @@ -882,12 +884,14 @@ struct ipoib_neigh *ipoib_neigh_alloc(struct
neighbour *neighbour,
>> if (!neigh)
>> return NULL;
>>
>> + neigh->ah = NULL;
>> neigh->neighbour = neighbour;
>> neigh->dev = dev;
>> memset(&neigh->dgid.raw, 0, sizeof (union ib_gid));
>> *to_ipoib_neigh(neighbour) = neigh;
>> skb_queue_head_init(&neigh->queue);
>> ipoib_cm_set(neigh, NULL);
>> + INIT_LIST_HEAD(&neigh->list);
>>
>> return neigh;
>> }
>> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
>> index 3871ac6..05f4c9a 100644
>> --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
>> +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
>> @@ -86,6 +86,7 @@ static void ipoib_mcast_free(struct ipoib_mcast
*mcast)
>> */
>> if (neigh->ah)
>> ipoib_put_ah(neigh->ah);
>> + list_del(&neigh->list);
>> ipoib_neigh_free(dev, neigh);
>> }
>>
>>
>> --
>
> Roland,
>
> To provide a little more context regarding these patches, I have seen
some sporadic crashes (shown below) that occur pretty
> infrequently. I came to a very similar conclusion as the patches
above to fix my problems. These are rarely occurring races that
> recreate infrequently on large systems. The test is basically to run
netperf in a loop from several client machines to a server.
> The server is unloading and reloading the modules (basically do an
"openibd restart") at random times. The crashes recreate
> after several hours of run.
>
> There are three types of crashes that we have seen that are described
below.
>
> Crash #1 (fixed by Ralph Campbell's patch)
>
> 12:mon> t
> [link register ] d00000000ec950a8 .cm_destroy_id+0x3d8/0x520 [ib_cm]
> [c0000007544d2d40] d00000000ec95098 .cm_destroy_id+0x3c8/0x520 [ib_cm]
> (unreliable)
> [c0000007544d2e10] d00000000ef9b590
.ipoib_cm_free_rx_reap_list+0xc8/0x180
> [ib_ipoib]
> [c0000007544d2ed0] d00000000ef9e1cc .ipoib_cm_dev_stop+0x23c/0x360
[ib_ipoib]
> [c0000007544d2f90] d00000000ef94d94 .ipoib_ib_dev_stop+0xe4/0x4b0
[ib_ipoib]
> [c0000007544d30f0] d00000000ef91d68 .ipoib_stop+0x88/0x178 [ib_ipoib]
> [c0000007544d3180] c0000000004ea1cc .dev_close+0xdc/0x148
> [c0000007544d3210] c0000000004e9790 .dev_change_flags+0x1f0/0x288
> [c0000007544d32b0] c0000000004f6a0c .do_setlink+0x2d4/0x498
> [c0000007544d3390] c0000000004f8b20 .rtnl_newlink+0x520/0x5f0
> [c0000007544d35a0] c0000000004f853c .rtnetlink_rcv_msg+0x24c/0x310
> [c0000007544d3650] c000000000513a38 .netlink_rcv_skb+0xf0/0x128
> [c0000007544d36e0] c0000000004f82cc .rtnetlink_rcv+0x34/0x58
> [c0000007544d3770] c0000000005134c0 .netlink_unicast+0x498/0x4b0
> [c0000007544d3840] c000000000514218 .netlink_sendmsg+0x288/0x390
> [c0000007544d3920] c0000000004cf538 .sock_sendmsg+0x118/0x158
> [c0000007544d3b30] c0000000004cf720 .SyS_sendmsg+0x1a8/0x348
> [c0000007544d3d70] c0000000004cdbdc .SyS_socketcall+0x174/0x338
> [c0000007544d3e30] c0000000000085b4 syscall_exit+0x0/0x40
> --- Exception: c01 (System Call) at 00000fffa25c35d0
> SP (fffc5a12fe0) is in userspace
> 12:mon> e
> cpu 0x12: Vector: 300 (Data Access) at [c0000007544d2ac0]
> pc: c0000000002ef854: .rb_erase+0x64/0x180
> lr: d00000000ec950a8: .cm_destroy_id+0x3d8/0x520 [ib_cm]
> sp: c0000007544d2d40
> msr: 8000000000001432
> dar: 10000000100
> dsisr: 40000000
> current = 0xc0000006948dc240
> paca = 0xc000000000f64a00
> pid = 21593, comm = ip
> 12:mon>
>
> My inference is that the above crash is indeed fixed by Ralph
Campbell's patch described in :
> http://www.mail-archive.com/linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org/msg05842.html
>
> and for the reasons that he ascribes.
>
> IB/ipoib: fix race when handling IPOIB_CM_RX_DRAIN_WRID
>
> From: Ralph Campbell <ralph.campb...-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org>
>
> ipoib_cm_start_rx_drain() calls ib_post_send() and *then* moves the
> struct ipoib_cm_rx onto the rx_drain_list. The ib_post_send() will
> trigger a completion callback to ipoib_cm_handle_rx_wc() which
> tries to move the rx_drain_list to the rx_reap_list but if the
> callback happens before ipoib_cm_start_rx_drain() has moved the
> structure, it is left in limbo. The fix is to change
> ipoib_cm_start_rx_drain() to put the struct on the rx_drain_list and
> then call ib_post_send().
> Also, only move one struct from rx_flush_list to rx_drain_list since
> concurrent IPOIB_CM_RX_DRAIN_WRID events on different QPs could put
> multiple ipoib_cm_rx structs on rx_flush_list.
>
> Signed-off-by: Ralph Campbell <ralph.campb...-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org>
> ---
>
> drivers/infiniband/ulp/ipoib/ipoib_cm.c | 12 +++++++++---
> 1 files changed, 9 insertions(+), 3 deletions(-)
>
>
> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
> index bb10041..dfff159 100644
> --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
> +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
> @@ -216,15 +216,21 @@ static void ipoib_cm_start_rx_drain(struct
ipoib_dev_priv *priv)
> !list_empty(&priv->cm.rx_drain_list))
> return;
>
> + p = list_entry(priv->cm.rx_flush_list.next, typeof(*p), list);
> +
> + /*
> + * Put p on rx_drain_list before calling ib_post_send() or there
> + * is a race with the ipoib_cm_handle_rx_wc() completion handler
> + * trying to remove it from rx_drain_list.
> + */
> + list_move(&p->list, &priv->cm.rx_drain_list);
> +
> /*
> * QPs on flush list are error state. This way, a "flush
> * error" WC will be immediately generated for each WR we post.
> */
> - p = list_entry(priv->cm.rx_flush_list.next, typeof(*p), list);
> if (ib_post_send(p->qp, &ipoib_cm_rx_drain_wr, &bad_wr))
> ipoib_warn(priv, "failed to post drain wr\n");
> -
> - list_splice_init(&priv->cm.rx_flush_list, &priv->cm.rx_drain_list);
> }
>
> static void ipoib_cm_rx_event_handler(struct ib_event *event, void *ctx)
>
> Once I applied the above patch, the following crash showed up after
almost a
> 24 hour run:
>
> Crash #2 (fixed by Mike Marciniszn's patch)
>
> c957f1ec01 login: cpu 0x26: Vector: 300 (Data Access) at
[c0000016b8f4f3e0]
> pc: d000000018c919c8: .ipoib_neigh_free+0x30/0xe0 [ib_ipoib]
> lr: d000000018c96e0c: .ipoib_mcast_free+0xac/0x300 [ib_ipoib]
> sp: c0000016b8f4f660
> msr: 8000000000009032
> dar: 58
> dsisr: 42000000
> current = 0xc0000016b7958900
> paca = 0xc000000000f67200
> pid = 16926, comm = modprobe
> enter ? for help
> [c0000016b8f4f700] d000000018c96e0c .ipoib_mcast_free+0xac/0x300
[ib_ipoib]
> [c0000016b8f4f7d0] d000000018c971e8
.ipoib_mcast_dev_flush+0x188/0x1f8 [ib_ipoib]
> [c0000016b8f4f8b0] d000000018c9521c .ipoib_ib_dev_down+0x94/0x160
[ib_ipoib]
> [c0000016b8f4f960] d000000018c90f20 .ipoib_stop+0x78/0x178 [ib_ipoib]
> [c0000016b8f4f9f0] c0000000004eacf4 .dev_close+0xdc/0x148
> [c0000016b8f4fa80] c0000000004ea2b8 .dev_change_flags+0x1f0/0x288
> [c0000016b8f4fb20] d000000018c911b8 .ipoib_remove_one+0xb8/0x140
[ib_ipoib]
> [c0000016b8f4fbc0] d00000000d52425c .ib_unregister_client+0xb4/0x1b8
[ib_core]
> [c0000016b8f4fc90] d000000018c9fdb8 .ipoib_cleanup_module+0x20/0x60
[ib_ipoib]
> [c0000016b8f4fd20] c0000000000ec408 .SyS_delete_module+0x238/0x320
> [c0000016b8f4fe30] c0000000000085b4 syscall_exit+0x0/0x40
> --- Exception: c01 (System Call) at 00000fff983128e0
> SP (fffe9636ad0) is in userspace
> 26:mon
>
> This crash is caused by the following two threads, both of which are
trying to delete
> the same ipoib_neigh structure:
>
> .ipoib_mcast_free+0x48/0x308 [ib_ipoib]
> .ipoib_mcast_restart_task+0x3d0/0x560 [ib_ipoib]
> .worker_thread+0x1b4/0x330
> .kthread+0xc4/0xd0
> .kernel_thread+0x54/0x70
>
>
> .ipoib_mcast_free+0x48/0x308 [ib_ipoib]
> .ipoib_mcast_dev_flush+0x188/0x1f8 [ib_ipoib]
> .ipoib_ib_dev_down+0x94/0x160 [ib_ipoib]
> .ipoib_stop+0x78/0x178 [ib_ipoib]
> .dev_close+0xdc/0x148
>
> This is because there is a list_del() missing which does not delete
the ipoib_neigh structure from
> the ipoib_mcast structure, resulting in a double free. And so Mike's
patch fixed this issue.
>
> After I applied both the above patches I was able to run the tests
for more than 24 hours and
> here was the crash that was observed:
>
> Crash #3 (still to be resolved)
>
> <1>Unable to handle kernel paging request for data at address 0x00100108
> <1>Faulting instruction address: 0xd000000012bd1b0c
> 22:mon> e
> cpu 0x22: Vector: 300 (Data Access) at [c000000e68636eb0]
> pc: d000000012bd1b0c: .ipoib_neigh_cleanup+0x84/0x178 [ib_ipoib]
> lr: d000000012bd1ae0: .ipoib_neigh_cleanup+0x58/0x178 [ib_ipoib]
> sp: c000000e68637130
> msr: 8000000000009032
> dar: 100108
> dsisr: 42000000
> current = 0xc000000f0590a820
> paca = 0xc000000000f66a00
> pid = 59548, comm = ip
> 22:mon> t
> [c000000e686371d0] c0000000004f4784 .neigh_cleanup_and_release+0x3c/0xa0
> [c000000e68637250] c0000000004f55cc .neigh_flush_dev+0x14c/0x158
> [c000000e68637310] c0000000004f5630 .neigh_ifdown+0x58/0x158
> [c000000e686373c0] d00000000e92ed3c .addrconf_ifdown+0x7c/0x520 [ipv6]
> [c000000e68637480] d00000000e92f470 .inet6_addr_del+0x148/0x168 [ipv6]
> [c000000e68637520] d00000000e92f544 .inet6_rtm_deladdr+0xb4/0xb8 [ipv6]
> [c000000e686375f0] c0000000004f9064 .rtnetlink_rcv_msg+0x24c/0x310
> [c000000e686376a0] c000000000514580 .netlink_rcv_skb+0xf0/0x128
> [c000000e68637730] c0000000004f8df4 .rtnetlink_rcv+0x34/0x58
> [c000000e686377c0] c000000000514008 .netlink_unicast+0x498/0x4b0
> [c000000e68637890] c000000000514d80 .netlink_sendmsg+0x288/0x390
> [c000000e68637970] c0000000004d0060 .sock_sendmsg+0x118/0x158
> [c000000e68637b80] c0000000004d12d8 .SyS_sendto+0xe8/0x138
> [c000000e68637d00] c0000000004ce548 .SyS_send+0x20/0x38
> [c000000e68637d70] c0000000004ce7fc .SyS_socketcall+0x26c/0x338
> [c000000e68637e30] c0000000000085b4 syscall_exit+0x0/0x40
> --- Exception: c01 (System Call) at 00000fffb3cc3524
> SP (fffec5b9fc0) is in userspace
>
> The suspicion is that this is again a case of double free. Again, the
double free
> does not happen all the time, but is a race. The two suspected
threads are:
>
> ipoib_neigh_free()
> path_free()
> ipoib_flush_paths()
> ipoib_ib_dev_down()
> ....
>
>
> ipoib_neigh_free()
> ipoib_neigh_cleanup()
> neigh_cleanup_and_release()
> neigh_ifdown()
> ....
>
> In order to confirm this, I wanted to write a pattern in
ipoib_neigh_free() that we could
> look in ipoib_neigh_cleanup(). Also made some small changes in
ipoib_start_xmit() too.
>
> void ipoib_neigh_free(struct net_device *dev, struct ipoib_neigh *neigh)
> {
> struct sk_buff *skb;
> *to_ipoib_neigh(neigh->neighbour) = 0xdeaddeed;
> dump_stack();
> #if 0
> *to_ipoib_neigh(neigh->neighbour) = NULL;
> #endif
> while ((skb = __skb_dequeue(&neigh->queue))) {
> ++dev->stats.tx_dropped;
> dev_kfree_skb_any(skb);
> }
> if (ipoib_cm_get(neigh))
> ipoib_cm_destroy_tx(ipoib_cm_get(neigh));
> kfree(neigh);
> }
>
> I changed ipoib_neigh_cleanup() as follows:
>
> static void ipoib_neigh_cleanup(struct neighbour *n)
> {
> struct ipoib_neigh *neigh;
> struct ipoib_dev_priv *priv = netdev_priv(n->dev);
> unsigned long flags;
> struct ipoib_ah *ah = NULL;
>
> neigh = *to_ipoib_neigh(n);
> if ((neigh == 0xdeaddeed ) || (neigh == NULL)) { /* in that
case ipoib_neigh has been freed and we need to crash */
> printk(KERN_WARNING "ipoib_neigh_cleanup(): for
neigh=0x%p %06x %pI6\n", neigh,
> IPOIB_QPN(n->ha), n->ha + 4);
> BUG();
> }
>
> ...
>
> The primary problem is that access to *to_ipoib_neigh(n) is
unprotected. Hence the race between the two threads since
> ipoib_neigh_cleanup() may have a stale pointer to the ipoib_neigh
structure and hence the crash.
>
> With the above changes here is what is seen in the crash dump:
>
>
> <4>Call Trace:
> <4>[c000000001eff6b0] [c0000000000129e4] .show_stack+0x6c/0x198
(unreliable)
> <4>[c000000001eff760] [d0000000139019f0] .ipoib_neigh_free+0x48/0x100
[ib_ipoib]
> <4>[c000000001eff800] [d0000000139028c8]
.ipoib_start_xmit+0x1a8/0x590 [ib_ipoib]
> <4>[c000000001eff8c0] [c0000000004e9228] .dev_hard_start_xmit+0x210/0x2b0
> <4>[c000000001eff970] [c000000000506ff8] .sch_direct_xmit+0x260/0x2d0
> <4>[c000000001effa20] [c0000000004e98ec] .dev_queue_xmit+0x484/0x648
> <4>[c000000001effad0] [c0000000004f26e4]
.neigh_connected_output+0x10c/0x158
> <4>[c000000001effb70] [d00000000e9233c0]
.ip6_output_finish+0xe0/0x1a0 [ipv6]
> <4>[c000000001effc10] [d00000000e94bbd4] .mld_sendpack+0x5b4/0x610 [ipv6]
> <4>[c000000001effd30] [d00000000e94d1e8]
.mld_ifc_timer_expire+0x18/0x98 [ipv6]
> <4>[c000000001effdb0] [c0000000000bd424] .run_timer_softirq+0x214/0x348
> <4>[c000000001effeb0] [c0000000000b6b8c] .__do_softirq+0x13c/0x240
> <4>[c000000001efff90] [c000000000030afc] .call_do_softirq+0x14/0x24
> <4>[c0000007580278e0] [c00000000000ed38] .do_softirq+0xe8/0x108
> <4>[c000000758027980] [c0000000000b6854] .irq_exit+0xb4/0xe8
> <4>[c000000758027a00] [c00000000002d03c] .timer_interrupt+0x104/0x138
> <4>[c000000758027a90] [c000000000003718] decrementer_common+0x118/0x180
> <4>--- Exception: 901 at .raw_local_irq_restore+0x70/0xc8
> <4> LR = .cpu_idle+0x98/0x1e0
> <4>[c000000758027d80] [0000000000000014] 0x14 (unreliable)
> <4>[c000000758027e10] [c000000000014b60] .cpu_idle+0x98/0x1e0
> <4>[c000000758027ec0] [c0000000005b7bd4] .start_secondary+0x394/0x3dc
> <4>[c000000758027f90] [c0000000000082d4]
.start_secondary_prolog+0x10/0x14
> <7>ib0: no IPv6 routers present
> <7>ib3: no IPv6 routers present
> <7>ib2: no IPv6 routers present
> <7>ib1: no IPv6 routers present
> <4>created rx qp=0x6d4
> <4>ipoib_neigh_cleanup(): for neigh=0x00000000deaddeed ffffff
ff12:601b:ffff:0000:0000:0000:0000:0016
> <0>------------[ cut here ]------------
> <2>kernel BUG at drivers/infiniband/ulp/ipoib/ipoib_main.c:863!
> 22:mon> e
> cpu 0x22: Vector: 700 (Program Check) at [c0000007585238e0]
> pc: d000000013901bd4: .ipoib_neigh_cleanup+0x12c/0x1d0 [ib_ipoib]
> lr: d000000013901bd0: .ipoib_neigh_cleanup+0x128/0x1d0 [ib_ipoib]
> sp: c000000758523b60
> msr: 8000000000029032
> current = 0xc0000007585009e0
> paca = 0xc000000000f66a00
> pid = 165, comm = events/34
> kernel BUG at drivers/infiniband/ulp/ipoib/ipoib_main.c:863!
> 22:mon> t
> [c000000758523c00] c0000000004f4784 .neigh_cleanup_and_release+0x3c/0xa0
> [c000000758523c80] c0000000004f4a34 .neigh_periodic_work+0x144/0x210
> [c000000758523d40] c0000000000c7704 .run_workqueue+0xf4/0x1e0
> [c000000758523e00] c0000000000c78b0 .worker_thread+0xc0/0x180
> [c000000758523ed0] c0000000000cd6ac .kthread+0xc4/0xd0
> [c000000758523f90] c000000000030e04 .kernel_thread+0x54/0x70
> 22:mon>
>
>
> My question is do we need to do any cleanup at all in
ipoib_neigh_cleanup() or can it simply return,
> since the ipoib_neigh_free() does it, or at best just call
ipoib_put_ah()?
>
> Thanks
> Pradeep
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next reply other threads:[~2011-02-11 18:09 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-11 18:09 Pradeep Satyanarayana [this message]
-- strict thread matches above, loose matches on Subject: below --
2011-02-01 16:12 [PATCH] IPoIB: fix faulty list maintenance in path and neigh list Mike Marciniszyn
[not found] ` <20110201161247.12671.10028.stgit-hIFRcJ1SNwcXGO8/Qfapyjg/wwJxntczYPYVAmT7z5s@public.gmane.org>
2011-02-15 18:24 ` Roland Dreier
[not found] ` <AANLkTin1pudSXZCGY31p2GnY6noWi2DS3y2+Gprj0+ug-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-02-17 0:51 ` Pradeep Satyanarayana
[not found] ` <4D5C70F6.3050604-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2011-02-17 1:15 ` Roland Dreier
[not found] ` <AANLkTim-BnQ9tM68eGsCoOVYDRonmEOO6JN+EFT2zdff-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-02-17 19:52 ` Pradeep Satyanarayana
[not found] ` <4D5D7C95.5010408-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2011-02-17 23:23 ` Roland Dreier
[not found] ` <AANLkTinyUjhZE_-n8zPJyGLVobaoFVnQ=iC1QMusQH+y-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-02-17 23:34 ` Mike Marciniszyn
[not found] ` <35AAF1E4A771E142979F27B51793A4888838446B0D-HolNjIBXvBOXx9kJd3VG2h2eb7JE58TQ@public.gmane.org>
2011-02-19 2:07 ` Pradeep Satyanarayana
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D557B60.1020005@linux.vnet.ibm.com \
--to=pradeeps-23vcf4htsmix0ybbhkvfkdbpr1lh4cv8@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mike.marciniszyn-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org \
--cc=ralph.campbell-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org \
--cc=roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.