No description
Find a file
Jinke Han b5dbef3bed block: don't allow the same type rq_qos add more than once
[ Upstream commit 14a6e2eb7d ]

In our test of iocost, we encountered some list add/del corruptions of
inner_walk list in ioc_timer_fn.

The reason can be described as follows:

cpu 0					cpu 1
ioc_qos_write				ioc_qos_write

ioc = q_to_ioc(queue);
if (!ioc) {
        ioc = kzalloc();
					ioc = q_to_ioc(queue);
					if (!ioc) {
						ioc = kzalloc();
						...
						rq_qos_add(q, rqos);
					}
        ...
        rq_qos_add(q, rqos);
        ...
}

When the io.cost.qos file is written by two cpus concurrently, rq_qos may
be added to one disk twice. In that case, there will be two iocs enabled
and running on one disk. They own different iocgs on their active list. In
the ioc_timer_fn function, because of the iocgs from two iocs have the
same root iocg, the root iocg's walk_list may be overwritten by each other
and this leads to list add/del corruptions in building or destroying the
inner_walk list.

And so far, the blk-rq-qos framework works in case that one instance for
one type rq_qos per queue by default. This patch make this explicit and
also fix the crash above.

Signed-off-by: Jinke Han <hanjinke.666@bytedance.com>
Reviewed-by: Muchun Song <songmuchun@bytedance.com>
Acked-by: Tejun Heo <tj@kernel.org>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20220720093616.70584-1-hanjinke.666@bytedance.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-04-19 17:52:53 +08:00
arch ARM: remove some dead code 2023-04-19 17:52:53 +08:00
block block: don't allow the same type rq_qos add more than once 2023-04-19 17:52:53 +08:00
certs certs/blacklist_hashes.c: fix const confusion in certs blacklist 2023-04-19 17:50:34 +08:00
crypto crypto: blake2s - remove shash module 2023-04-19 17:52:51 +08:00
Documentation serial: 8250: Add proper clock handling for OxSemi PCIe devices 2023-04-19 17:52:53 +08:00
drivers dm thin: fix use-after-free crash in dm_sm_register_threshold_callback 2023-04-19 17:52:53 +08:00
fs __follow_mount_rcu(): verify that mount_lock remains unchanged 2023-04-19 17:52:50 +08:00
include block: remove the struct blk_queue_ctx forward declaration 2023-04-19 17:52:53 +08:00
init stack: Declare {randomize_,}kstack_offset to fix Sparse warnings 2023-04-19 17:52:12 +08:00
ipc ipc/mqueue: use get_tree_nodev() in mqueue_get_tree() 2023-04-19 17:49:52 +08:00
kernel locking/csd_lock: Change csdlock_debug from early_param to __setup 2023-04-19 17:52:53 +08:00
lib lib/smp_processor_id: fix imbalanced instrumentation_end() call 2023-04-19 17:52:44 +08:00
LICENSES LICENSES/dual/CC-BY-4.0: Git rid of "smart quotes" 2021-07-15 06:31:24 -06:00
mm mm/mmap.c: fix missing call to vm_unacct_memory in mmap_region 2023-04-19 17:52:39 +08:00
net net/9p: Initialize the iounit field during fid creation 2023-04-19 17:52:53 +08:00
samples samples/landlock: Format with clang-format 2023-04-19 17:50:01 +08:00
scripts scripts/faddr2line: Fix vmlinux detection on arm64 2023-04-19 17:52:48 +08:00
security selinux: Add boundary check in put_entry() 2023-04-19 17:52:09 +08:00
sound ASoC: mchp-spdifrx: disable end of block interrupt on failures 2023-04-19 17:52:46 +08:00
tools tools/thermal: Fix possible path truncations 2023-04-19 17:52:48 +08:00
usr usr/include/Makefile: add linux/nfc.h to the compile-test coverage 2023-04-19 17:44:58 +08:00
virt KVM: Don't set Accessed/Dirty bits for ZERO_PAGE 2023-04-19 17:52:31 +08:00
.clang-format clang-format: Update with the latest for_each macro list 2021-05-12 23:32:39 +02:00
.cocciconfig
.get_maintainer.ignore Opt out of scripts/get_maintainer.pl 2019-05-16 10:53:40 -07:00
.gitattributes .gitattributes: use 'dts' diff driver for dts files 2019-12-04 19:44:11 -08:00
.gitignore .gitignore: ignore only top-level modules.builtin 2021-05-02 00:43:35 +09:00
.mailmap mailmap: add Andrej Shadura 2021-10-18 20:22:03 -10:00
COPYING COPYING: state that all contributions really are covered by this file 2020-02-10 13:32:20 -08:00
CREDITS MAINTAINERS: Move Daniel Drake to credits 2021-09-21 08:34:58 +03:00
Kbuild kbuild: rename hostprogs-y/always to hostprogs/always-y 2020-02-04 01:53:07 +09:00
Kconfig kbuild: ensure full rebuild when the compiler is updated 2020-05-12 13:28:33 +09:00
MAINTAINERS Input: goodix - add a goodix.h header file 2023-04-19 17:50:59 +08:00
Makefile Makefile: link with -z noexecstack --no-warn-rwx-segments 2023-04-19 17:51:58 +08:00
README Drop all 00-INDEX files from Documentation/ 2018-09-09 15:08:58 -06:00

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

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.