kernel-hacking-2024-linux-s.../drivers/infiniband/core
Ralph Campbell 57cb61d587 IB/core: Fix handling of multicast response failures
I was looking at the code for multicast.c and noticed that
ib_sa_join_multicast() calls queue_join() which puts the
request at the front of the group->pending_list.  If this
is a second request, it seems like it would interfere with
process_join_error() since group->last_join won't point
to the member at the head of the pending_list. The sequence
would thus be:

1. ib_sa_join_multicast()
   puts member1 on head of pending_list and starts work thread
2. mcast_work_handler()
   calls send_join() which sets group->last_join to member1
3. ib_sa_join_multicast()
   puts member2 on head of pending_list
4. join operation for member1 receives failures response from SA.
5. join_handler() is called with error status
6. process_join_error() fails to process member1 since
   it doesn't match the first entry in the group->pending_list.

The impact is that the failed join request is tossed.  The second
request is processed, and after it completes, the original request ends
up being retried.

This change also results in join requests being processed in FIFO
order.

Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
2007-10-09 19:59:14 -07:00
..
addr.c RDMA/cma: Use neigh_event_send() to start neighbour discovery 2007-10-09 19:59:13 -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.c IB/cm: Make internal function cm_get_ack_delay() static 2007-07-17 18:37:43 -07:00
cm_msgs.h IB/cm: cm_msgs.h should include ib_cm.h 2007-07-10 21:50:53 -07:00
cma.c RDMA/cma: Add ability to specify type of service 2007-10-09 19:59:12 -07:00
core_priv.h
device.c IB: find_first_zero_bit() takes unsigned pointer 2007-10-09 19:59:04 -07:00
fmr_pool.c IB/fmr_pool: Clean up some error messages in fmr_pool.c 2007-10-09 19:59:05 -07:00
iwcm.c PCI: Cleanup the includes of <linux/pci.h> 2007-05-02 19:02:35 -07:00
iwcm.h
mad.c IB/mad: Fix memory leak in switch handling in ib_mad_recv_done_handler() 2007-08-03 10:45:17 -07:00
mad_priv.h PCI: Cleanup the includes of <linux/pci.h> 2007-05-02 19:02:35 -07:00
mad_rmpp.c IB/mad: Fix address handle leak in mad_rmpp 2007-08-03 10:45:17 -07:00
mad_rmpp.h
Makefile IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
multicast.c IB/core: Fix handling of multicast response failures 2007-10-09 19:59:14 -07:00
packer.c
sa.h IB: Remove garbage non-ASCII characters from comments 2007-07-09 16:17:32 -07:00
sa_query.c IB/sa: Add new QoS fields to path record 2007-10-09 19:59:12 -07:00
smi.c IB/mad: Enhance SMI for switch support 2007-07-09 16:17:32 -07:00
smi.h IB/mad: Enhance SMI for switch support 2007-07-09 16:17:32 -07:00
sysfs.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband 2007-07-12 16:45:40 -07:00
ucm.c IB/cm: Include HCA ACK delay in local ACK timeout 2007-07-10 21:50:05 -07:00
ucma.c RDMA/ucma: Allow user space to set service type 2007-10-09 19:59:12 -07:00
ud_header.c
umem.c IB/umem: Add hugetlb flag to struct ib_umem 2007-10-09 19:59:13 -07:00
user_mad.c PCI: Cleanup the includes of <linux/pci.h> 2007-05-02 19:02:35 -07:00
uverbs.h IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
uverbs_cmd.c IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
uverbs_main.c IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
uverbs_marshall.c
verbs.c IB: Add CQ comp_vector support 2007-05-06 21:18:11 -07:00