Go to file
Ming Lei 01e12511b9 blk-mq: order getting budget and driver tag
commit 0bca799b92 upstream.

This patch orders getting budget and driver tag by making sure to acquire
driver tag after budget is got, this way can help to avoid the following
race:

1) before dispatch request from scheduler queue, get one budget first, then
dequeue a request, call it request A.

2) in another IO path for dispatching request B which is from hctx->dispatch,
driver tag is got, then try to get budget in blk_mq_dispatch_rq_list(),
unfortunately the budget is held by request A.

3) meantime blk_mq_dispatch_rq_list() is called for dispatching request
A, and try to get driver tag first, unfortunately no driver tag is
available because the driver tag is held by request B

4) both two IO pathes can't move on, and IO stall is caused.

This issue can be observed when running dbench on USB storage.

This patch fixes this issue by always getting budget before getting
driver tag.

Cc: stable@vger.kernel.org
Fixes: de14829740 ("blk-mq: introduce .get_budget and .put_budget in blk_mq_ops")
Cc: Christoph Hellwig <hch@lst.de>
Cc: Bart Van Assche <bart.vanassche@wdc.com>
Cc: Omar Sandoval <osandov@fb.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-04-19 08:55:10 +02:00
arch x86/apic: Fix signedness bug in APIC ID validity checks 2018-04-19 08:55:09 +02:00
block blk-mq: order getting budget and driver tag 2018-04-19 08:55:10 +02:00
certs License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
crypto crypto: aes-generic - build with -Os on gcc-7+ 2018-04-12 12:31:13 +02:00
Documentation serial: 8250: Add Nuvoton NPCM UART 2018-04-08 14:27:37 +02:00
drivers nvme: Skip checking heads without namespaces 2018-04-19 08:55:10 +02:00
firmware kbuild: remove all dummy assignments to obj- 2017-11-18 11:46:06 +09:00
fs f2fs: fix heap mode to reset it back 2018-04-19 08:55:10 +02:00
include slip: Check if rstate is initialized before uncompressing 2018-04-19 08:55:07 +02:00
init Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2018-01-12 10:23:59 -08:00
ipc ipc/shm.c: add split function to shm_vm_ops 2018-04-08 14:27:33 +02:00
kernel perf/core: Fix use-after-free in uprobe_perf_close() 2018-04-19 08:55:09 +02:00
lib lib: fix stall in __bitmap_parselist() 2018-04-19 08:55:10 +02:00
mm percpu: add __GFP_NORETRY semantics to the percpu balancing path 2018-04-08 14:27:35 +02:00
net sunrpc: remove incorrect HMAC request initialization 2018-04-19 08:55:10 +02:00
samples Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf 2017-12-03 13:08:30 -05:00
scripts objtool, retpolines: Integrate objtool with retpoline support more closely 2018-03-15 10:56:55 +01:00
security /dev/mem: Add bounce buffer for copy-out 2018-03-24 11:02:47 +01:00
sound ASoC: Intel: sst: Fix the return value of 'sst_send_byte_stream_mrfld()' 2018-04-12 12:31:08 +02:00
tools perf tools: Fix copyfile_offset update of output offset 2018-04-12 12:31:13 +02:00
usr initramfs: fix initramfs rebuilds w/ compression after disabling 2017-11-03 07:39:19 -07:00
virt KVM: arm/arm64: vgic: Don't populate multiple LRs with the same vintid 2018-03-21 12:05:45 +01:00
.cocciconfig scripts: add Linux .cocciconfig for coccinelle 2016-07-22 12:13:39 +02:00
.get_maintainer.ignore
.gitattributes .gitattributes: set git diff driver for C source code files 2016-10-07 18:46:30 -07:00
.gitignore Kbuild misc updates for v4.15 2017-11-17 17:51:33 -08:00
.mailmap mailmap: update Mark Yao's email address 2018-01-04 16:45:09 -08:00
COPYING
CREDITS MAINTAINERS: update TPM driver infrastructure changes 2017-11-09 17:58:40 -08:00
Kbuild Kbuild updates for v4.15 2017-11-17 17:45:29 -08:00
Kconfig License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
MAINTAINERS dt-bindings: Document mti,mips-cpc binding 2018-03-15 10:56:53 +01:00
Makefile Linux 4.15.17 2018-04-12 12:31:21 +02:00
README README: add a new README file, pointing to the Documentation/ 2016-10-24 08:12:35 -02:00

Linux kernel

This file was moved to Documentation/admin-guide/README.rst

Please notice that there are several guides for kernel developers and users. These guides can be rendered in a number of formats, like HTML and PDF.

In order to build the documentation, use make htmldocs or make pdfdocs.

There are various text files in the Documentation/ subdirectory, several of them using the Restructured Text markup notation. See Documentation/00-INDEX for a list of what is contained in each file.

Please read the Documentation/process/changes.rst file, as it contains the requirements for building and running the kernel, and information about the problems which may result by upgrading your kernel.