linux/drivers/infiniband/core
Moni Shoua 164ba0893c IB/sa: Fail requests made while creating new SM AH
This patch solves a race that occurs after an event occurs that causes
the SA query module to flush its SM address handle (AH).  When SM AH
becomes invalid and needs an update it is handled by the global
workqueue.  On the other hand this event is also handled in the IPoIB
driver by queuing work in the ipoib_workqueue that does multicast
joins.  Although queuing is in the right order, it is done to 2
different workqueues and so there is no guarantee that the first to be
queued is the first to be executed.

This causes a problem because IPoIB may end up sending an request to
the old SM, which will take a long time to time out (since the old SM
is gone); this leads to a much longer than necessary interruption in
multicast traffer.

The patch sets the SA query module's SM AH to NULL when the event
occurs, and until update_sm_ah() is done, any request that needs sm_ah
fails with -EAGAIN return status.

For consumers, the patch doesn't make things worse.  Before the patch,
MADs are sent to the wrong SM so the request gets lost.  Consumers can
be improved if they examine the return code and respond to EAGAIN
properly but even without an improvement the situation is not getting
worse.

Signed-off-by: Moni Levy <monil@voltaire.com>
Signed-off-by: Moni Shoua <monis@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
2008-07-14 23:48:43 -07:00
..
addr.c RDMA: Fix license text 2008-07-14 23:48:43 -07:00
agent.c IB/mad: agent_send_response() should be void 2007-08-03 10:45:17 -07:00
agent.h IB/mad: agent_send_response() should be void 2007-08-03 10:45:17 -07:00
cache.c Detach sched.h from mm.h 2007-05-21 09:18:19 -07:00
cm_msgs.h IB/cm: cm_msgs.h should include ib_cm.h 2007-07-10 21:50:53 -07:00
cm.c IB/cm: Endianness annotations 2008-04-16 21:01:07 -07:00
cma.c RDMA: Fix license text 2008-07-14 23:48:43 -07:00
core_priv.h [PATCH] IB: move include files to include/rdma 2005-08-26 20:37:38 -07:00
device.c IB: find_first_zero_bit() takes unsigned pointer 2007-10-09 19:59:04 -07:00
fmr_pool.c IB: Use shorter list_splice_init() for brevity 2008-04-16 21:09:26 -07:00
iwcm.c RDMA/iwcm: Don't access a cm_id after dropping reference 2008-03-10 21:22:22 -07:00
iwcm.h RDMA: iWARP Connection Manager. 2006-09-22 15:22:46 -07:00
mad_priv.h IB/mad: Report number of times a mad was retried 2008-01-25 14:15:30 -08:00
mad_rmpp.c IB/mad: Report number of times a mad was retried 2008-01-25 14:15:30 -08:00
mad_rmpp.h [IB] Fix MAD layer DMA mappings to avoid touching data buffer once mapped 2005-10-25 10:51:39 -07:00
mad.c IB/mad: Fix kernel crash when .process_mad() returns SUCCESS|CONSUMED 2008-05-23 10:52:59 -07:00
Makefile IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
multicast.c IB/multicast: Report errors on multicast groups if P_key changes 2008-01-25 14:15:29 -08:00
packer.c [PATCH] fix remaining missing includes 2005-11-07 07:53:41 -08:00
sa_query.c IB/sa: Fail requests made while creating new SM AH 2008-07-14 23:48:43 -07:00
sa.h IB: Remove garbage non-ASCII characters from comments 2007-07-09 16:17:32 -07:00
smi.c IB/mad: Enhance SMI for switch support 2007-07-09 16:17:32 -07:00
smi.h IB/mad: Enable loopback of DR SMP responses from userspace 2008-01-25 14:15:25 -08:00
sysfs.c IB: convert struct class_device to struct device 2008-04-19 19:10:30 -07:00
ucm.c Add a bunch of cycle_kernel_lock() calls 2008-06-20 14:05:53 -06:00
ucma.c infiniband-ucma: BKL pushdown 2008-06-20 14:05:57 -06:00
ud_header.c [PATCH] fix remaining missing includes 2005-11-07 07:53:41 -08:00
umem.c IB/umem: Avoid sign problems when demoting npages to integer 2008-06-06 21:38:37 -07:00
user_mad.c Merge commit 'v2.6.26' into bkl-removal 2008-07-14 15:29:34 -06:00
uverbs_cmd.c IB/core: Add support for "send with invalidate" work requests 2008-04-16 21:09:32 -07:00
uverbs_main.c Merge commit 'v2.6.26' into bkl-removal 2008-07-14 15:29:34 -06:00
uverbs_marshall.c RDMA/cma: Export rdma cm interface to userspace 2006-12-12 11:50:22 -08:00
uverbs.h IB: convert struct class_device to struct device 2008-04-19 19:10:30 -07:00
verbs.c IB/core: Add support for modify CQ 2008-04-16 21:09:33 -07:00