linux/drivers
Lars Ellenberg 074f4afeb2 drbd: fix a race between start_resync and send_and_submit
In the drbd make request function, specifically in
drbd_send_and_submit(), we decide whether we want to send the actual
write request, or only a "set this block out of sync" information.

We do so based on the current connection state, while holding the req_lock.
The connection state is not supposed to change while holding the req_lock.

But in drbd_start_resync, we did change that state anyways,
while only holding the global_state_lock, which is enough to change
sync-after dependencies (paused vs active resync), but
not good enough to change the connection state.

Fix: in drbd_start_resync, first grab the req_lock to serialize with
drbd_send_and_submit(), before grabbing the global_state_lock
to be able to evaluate the sync-after dependencies.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
2014-04-30 13:46:55 -06:00
..
accessibility
acpi
amba
ata
atm
auxdisplay
base
bcma
block drbd: fix a race between start_resync and send_and_submit 2014-04-30 13:46:55 -06:00
bluetooth
bus
cdrom gdrom: missed conversion from req->buffer 2014-04-16 14:15:24 -06:00
char Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2014-04-12 14:49:50 -07:00
clk
clocksource
connector
cpufreq
cpuidle
crypto
dca
devfreq
dio
dma
edac
eisa
extcon
firewire
firmware
fmc
gpio
gpu
hid
hsi
hv
hwmon
hwspinlock
i2c
ide block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
idle
iio
infiniband Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2014-04-12 16:51:08 -07:00
input
iommu
ipack
irqchip
isdn
leds
lguest
macintosh
mailbox
mcb
md block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
media
memory
memstick
message
mfd
misc
mmc
mtd block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-04-12 17:31:22 -07:00
nfc
ntb
nubus
of
oprofile
parisc
parport
pci
pcmcia
phy
pinctrl
platform
pnp
power
powercap
pps
ps3
ptp
pwm
rapidio
regulator
remoteproc
reset
rpmsg
rtc
s390
sbus jsflash: missed conversion from rq->buffer to bio_data(rq->bio) 2014-04-16 14:15:25 -06:00
scsi block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
sfi
sh
sn
spi
spmi
ssb
staging Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-04-12 17:31:22 -07:00
target Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-04-12 17:31:22 -07:00
tc
thermal
tty Merge git://git.infradead.org/users/eparis/audit 2014-04-12 12:38:53 -07:00
uio
usb Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2014-04-12 16:51:08 -07:00
uwb
vfio
vhost Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2014-04-12 16:51:08 -07:00
video
virt
virtio
vlynq
vme
w1
watchdog
xen
zorro
Kconfig
Makefile