Ming Lei
aa0818c6ee
virtio_blk: fix race between start and stop queue
...
When there isn't enough vring descriptor for adding to vq,
blk-mq will be put as stopped state until some of pending
descriptors are completed & freed.
Unfortunately, the vq's interrupt may come just before
blk-mq's BLK_MQ_S_STOPPED flag is set, so the blk-mq will
still be kept as stopped even though lots of descriptors
are completed and freed in the interrupt handler. The worst
case is that all pending descriptors are freed in the
interrupt handler, and the queue is kept as stopped forever.
This patch fixes the problem by starting/stopping blk-mq
with holding vq_lock.
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Ming Lei <tom.leiming@gmail.com>
Cc: stable@kernel.org
Signed-off-by: Jens Axboe <axboe@fb.com>
Conflicts:
drivers/block/virtio_blk.c
2014-05-27 08:41:10 -06:00
..
aoe
mm: close PageTail race
2014-03-04 07:55:47 -08:00
drbd
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2014-04-12 14:49:50 -07:00
mtip32xx
Merge branch 'for-3.15/drivers' of git://git.kernel.dk/linux-block
2014-04-01 19:43:53 -07:00
paride
drivers/block/paride/pg.c: underflow bug in pg_write()
2014-01-21 20:16:56 -08:00
rsxx
block: Convert bio_for_each_segment() to bvec_iter
2013-11-23 22:33:49 -08:00
xen-blkback
xen-blkback: init persistent_purge_work work_struct
2014-02-11 20:34:03 -07:00
zram
zram: support REQ_DISCARD
2014-04-07 16:36:02 -07:00
amiflop.c
tree-wide: use reinit_completion instead of INIT_COMPLETION
2013-11-15 09:32:21 +09:00
ataflop.c
ataflop: fix sleep_on races
2014-03-13 14:56:38 -06:00
brd.c
block: Convert bio_for_each_segment() to bvec_iter
2013-11-23 22:33:49 -08:00
cciss.c
cciss: Fallback to MSI rather than to INTx if MSI-X failed
2014-03-13 14:56:39 -06:00
cciss.h
cciss_cmd.h
cciss_scsi.c
cciss: switch to ->show_info()
2013-04-09 14:13:19 -04:00
cciss_scsi.h
cpqarray.c
cpqarray: fix info leak in ida_locked_ioctl()
2013-09-24 17:00:26 -07:00
cpqarray.h
cryptoloop.c
move linux/loop.h to drivers/block
2013-06-29 12:46:45 +04:00
DAC960.c
DAC960: remove sleep_on usage
2014-03-13 14:56:38 -06:00
DAC960.h
floppy.c
floppy: don't write kernel-only members to FDRAWCMD ioctl output
2014-05-05 07:46:56 -07:00
hd.c
ida_cmd.h
ida_ioctl.h
Kconfig
zram: promote zram from staging
2014-01-30 16:56:55 -08:00
loop.c
drivers/block/loop.c: ratelimit error messages
2014-04-08 14:44:35 -06:00
loop.h
move linux/loop.h to drivers/block
2013-06-29 12:46:45 +04:00
Makefile
zram: promote zram from staging
2014-01-30 16:56:55 -08:00
mg_disk.c
mg_disk: Spelling s/finised/finished/
2014-01-21 20:34:58 -08:00
nbd.c
switch nbd to sockfd_lookup/sockfd_put
2014-04-01 23:19:10 -04:00
null_blk.c
null_blk: use blk_complete_request and blk_mq_complete_request
2014-02-10 09:27:31 -07:00
nvme-core.c
Merge git://git.infradead.org/users/willy/linux-nvme
2014-04-11 16:45:59 -07:00
nvme-scsi.c
NVMe: Retry failed commands with non-fatal errors
2014-04-10 17:11:59 -04:00
osdblk.c
block: replace strict_strtoul() with kstrtoul()
2013-09-11 15:56:56 -07:00
pktcdvd.c
pktcdvd: fix error return code
2014-01-03 10:05:34 +01:00
ps3disk.c
block: Kill bio_segments()/bi_vcnt usage
2013-11-23 22:33:51 -08:00
ps3vram.c
block: Convert bio_for_each_segment() to bvec_iter
2013-11-23 22:33:49 -08:00
rbd.c
rbd: prefix rbd writes with CEPH_OSD_OP_SETALLOCHINT osd op
2014-04-03 10:33:52 +08:00
rbd_types.h
skd_main.c
skd: Use pci_enable_msix_range() instead of pci_enable_msix()
2014-02-21 15:45:26 -08:00
skd_s1120.h
skd: fix formatting in skd_s1120.h
2013-11-08 09:10:30 -07:00
smart1,2.h
sunvdc.c
swim.c
drivers/block/swim.c: remove unnecessary platform_set_drvdata()
2013-09-11 15:56:59 -07:00
swim3.c
swim3: fix interruptible_sleep_on race
2014-03-13 14:56:38 -06:00
swim_asm.S
sx8.c
drivers/block/sx8.c: remove unnecessary pci_set_drvdata()
2014-01-21 20:16:56 -08:00
umem.c
block: Convert drivers to immutable biovecs
2013-11-23 22:33:51 -08:00
umem.h
virtio_blk.c
virtio_blk: fix race between start and stop queue
2014-05-27 08:41:10 -06:00
xen-blkfront.c
Merge branch 'stable/for-jens-3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip into for-linus
2014-02-10 12:52:34 -07:00
xsysace.c
xilinx systemace: Fix sparse warnings
2013-07-10 07:47:12 +02:00
z2ram.c
block/z2ram: Remove duplicate external declarations
2013-11-26 11:09:10 +01:00