linux/drivers
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
..
accessibility
acpi x86, VisWS: turn into generic arch, eliminate Kconfig specials 2008-07-10 18:55:47 +02:00
amba
ata Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block 2008-07-14 13:15:14 -07:00
atm firmware: convert Ambassador ATM driver to request_firmware() 2008-07-10 14:49:39 +01:00
auxdisplay Miguel Ojeda has moved 2008-07-04 10:40:05 -07:00
base Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 2008-07-14 15:51:11 -07:00
block Merge branch 'bkl-removal' of git://git.lwn.net/linux-2.6 2008-07-14 14:48:31 -07:00
bluetooth Merge branch 'for-2.6.27' of git://git.infradead.org/users/dwmw2/firmware-2.6 2008-07-14 16:54:07 -07:00
cdrom cdrom: revert commit 22a9189 (cdrom: use kmalloced buffers instead of buffers on stack) 2008-07-04 09:52:14 +02:00
char Merge branch 'for-2.6.27' of git://git.infradead.org/users/dwmw2/firmware-2.6 2008-07-14 16:54:07 -07:00
clocksource
connector CONNECTOR: add a proc entry to list connectors 2008-06-27 20:03:24 -07:00
cpufreq Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq 2008-06-09 11:27:55 -07:00
cpuidle cpuidle acpi driver: fix oops on AC<->DC 2008-06-11 19:13:45 -04:00
crypto crypto: ixp4xx - Select CRYPTO_AUTHENC 2008-07-13 20:12:11 +08:00
dca
dio
dma
edac
eisa
firewire firewire: fw-sbp2: fix parsing of logical unit directories 2008-06-27 20:55:00 +02:00
firmware Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 2008-07-14 15:51:11 -07:00
gpio gpio: pca953x (i2c) handles max7310 too 2008-07-04 10:40:06 -07:00
gpu Merge branch 'bkl-removal' of git://git.lwn.net/linux-2.6 2008-07-14 14:48:31 -07:00
hid Merge commit 'v2.6.26' into bkl-removal 2008-07-14 15:29:34 -06:00
hwmon hdaps: add support for various newer Lenovo thinkpads 2008-07-04 10:40:06 -07:00
i2c Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
ide Merge branch 'bkl-removal' of git://git.lwn.net/linux-2.6 2008-07-14 14:48:31 -07:00
ieee1394 ieee1394: Kconfig menu touch-up 2008-06-19 00:12:36 +02:00
infiniband IB/sa: Fail requests made while creating new SM AH 2008-07-14 23:48:43 -07:00
input Merge branch 'bkl-removal' of git://git.lwn.net/linux-2.6 2008-07-14 14:48:31 -07:00
isdn Merge commit 'v2.6.26' into bkl-removal 2008-07-14 15:29:34 -06:00
leds
lguest x86, VisWS: turn into generic arch, eliminate Kconfig specials 2008-07-10 18:55:47 +02:00
macintosh Merge commit 'v2.6.26' into bkl-removal 2008-07-14 15:29:34 -06:00
mca
md Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block 2008-07-14 13:15:14 -07:00
media Merge branch 'for-2.6.27' of git://git.infradead.org/users/dwmw2/firmware-2.6 2008-07-14 16:54:07 -07:00
memstick
message Merge commit 'v2.6.26' into bkl-removal 2008-07-14 15:29:34 -06:00
mfd
misc Merge branch 'bkl-removal' of git://git.lwn.net/linux-2.6 2008-07-14 14:48:31 -07:00
mmc Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
mtd Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
net Merge branch 'for-2.6.27' of git://git.infradead.org/users/dwmw2/firmware-2.6 2008-07-14 16:54:07 -07:00
nubus
of rtc-ds1374: rename device to just "ds1374" 2008-06-06 11:29:10 -07:00
oprofile
parisc parisc-eisa_eeprom: BKL pushdown 2008-07-02 15:06:24 -06:00
parport
pci x86, VisWS: turn into generic arch, add early init quirks 2008-07-10 18:55:32 +02:00
pcmcia Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
pnp PNPACPI: use _CRS IRQ descriptor length for _SRS 2008-06-11 19:13:46 -04:00
power power_supply: Fix race in power_supply_uevent 2008-06-10 02:13:51 +04:00
ps3
rapidio rapidio: fix device reference counting 2008-07-10 18:04:43 -07:00
rtc Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
s390 Merge branch 'bkl-removal' of git://git.lwn.net/linux-2.6 2008-07-14 14:48:31 -07:00
sbus Merge commit 'v2.6.26' into bkl-removal 2008-07-14 15:29:34 -06:00
scsi Merge branch 'for-2.6.27' of git://git.infradead.org/users/dwmw2/firmware-2.6 2008-07-14 16:54:07 -07:00
serial Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
sh
sn
spi Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
ssb ssb-pcicore: Fix IRQ-vector init on embedded devices 2008-07-07 15:31:40 -04:00
tc
telephony phonedev: cdev lock_kernel() pushdown 2008-06-20 14:05:48 -06:00
thermal thermal: Create CONFIG_THERMAL_HWMON=n 2008-06-25 19:25:42 -04:00
uio Merge commit 'v2.6.26' into bkl-removal 2008-07-14 15:29:34 -06:00
usb Merge branch 'for-2.6.27' of git://git.infradead.org/users/dwmw2/firmware-2.6 2008-07-14 16:54:07 -07:00
video Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
virtio virtio: Complete feature negotation before updating status 2008-06-15 13:46:16 -07:00
w1
watchdog Revert "[WATCHDOG] hpwdt: Add CFLAGS to get driver working" 2008-06-24 13:09:26 +00:00
xen Merge branch 'x86/for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2008-07-14 13:43:24 -07:00
zorro
Kconfig
Makefile drm: reorganise drm tree to be more future proof. 2008-07-14 10:45:01 +10:00