acrn-kernel/block
Tian Lan ddad59331a blk-mq: fix blk_mq_hw_ctx active request accounting
The nr_active counter continues to increase over time which causes the
blk_mq_get_tag to hang until the thread is rescheduled to a different
core despite there are still tags available.

kernel-stack

  INFO: task inboundIOReacto:3014879 blocked for more than 2 seconds
  Not tainted 6.1.15-amd64 #1 Debian 6.1.15~debian11
  "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
  task:inboundIOReacto state:D stack:0  pid:3014879 ppid:4557 flags:0x00000000
    Call Trace:
    <TASK>
    __schedule+0x351/0xa20
    scheduler+0x5d/0xe0
    io_schedule+0x42/0x70
    blk_mq_get_tag+0x11a/0x2a0
    ? dequeue_task_stop+0x70/0x70
    __blk_mq_alloc_requests+0x191/0x2e0

kprobe output showing RQF_MQ_INFLIGHT bit is not cleared before
__blk_mq_free_request being called.

  320    320  kworker/29:1H __blk_mq_free_request rq_flags 0x220c0 in-flight 1
         b'__blk_mq_free_request+0x1 [kernel]'
         b'bt_iter+0x50 [kernel]'
         b'blk_mq_queue_tag_busy_iter+0x318 [kernel]'
         b'blk_mq_timeout_work+0x7c [kernel]'
         b'process_one_work+0x1c4 [kernel]'
         b'worker_thread+0x4d [kernel]'
         b'kthread+0xe6 [kernel]'
         b'ret_from_fork+0x1f [kernel]'

Signed-off-by: Tian Lan <tian.lan@twosigma.com>
Fixes: 2e315dc07d ("blk-mq: grab rq->refcount before calling ->fn in blk_mq_tagset_busy_iter")
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20230513221227.497327-1-tilan7663@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2023-06-03 17:20:00 -06:00
..
partitions block: Cleanup set_capacity()/bdev_set_nr_sectors() 2023-04-24 08:48:09 -06:00
Kconfig for-6.4/block-2023-04-21 2023-04-26 12:52:58 -07:00
Kconfig.iosched block: Default to use cgroup support for BFQ 2023-01-30 09:42:42 -07:00
Makefile blk-mq-rdma: remove queue mapping helper for rdma devices 2023-04-13 08:59:05 +02:00
badblocks.c
bdev.c block: sync part's ->bd_has_submit_bio with disk's 2023-04-25 07:36:02 -06:00
bfq-cgroup.c blkcg: Restructure blkg_conf_prep() and friends 2023-04-13 06:46:49 -06:00
bfq-iosched.c block, bfq: Fix division by zero error on zero wsum 2023-04-16 13:01:43 -06:00
bfq-iosched.h block, bfq: remove BFQ_WEIGHT_LEGACY_DFL 2023-04-06 16:17:32 -06:00
bfq-wf2q.c
bio-integrity.c block: bio-integrity: Copy flags when bio_integrity_payload is cloned 2023-02-16 11:05:41 -07:00
bio.c ext4: Convert ext4_bio_write_page() to use a folio 2023-04-06 13:39:50 -04:00
blk-cgroup-fc-appid.c
blk-cgroup-rwstat.c Revert "blk-cgroup: pin the gendisk in struct blkcg_gq" 2023-02-14 14:24:09 -07:00
blk-cgroup-rwstat.h
blk-cgroup.c for-6.4/block-2023-05-06 2023-05-06 08:28:58 -07:00
blk-cgroup.h for-6.4/block-2023-04-21 2023-04-26 12:52:58 -07:00
blk-core.c block: make bio_check_eod work for zero sized devices 2023-05-24 08:19:26 -06:00
blk-crypto-fallback.c
blk-crypto-internal.h blk-crypto: remove blk_crypto_insert_cloned_request() 2023-03-16 09:35:09 -06:00
blk-crypto-profile.c blk-crypto: drop the NULL check from blk_crypto_put_keyslot() 2023-03-16 09:35:09 -06:00
blk-crypto-sysfs.c block: make kobj_type structures constant 2023-02-09 09:38:16 -07:00
blk-crypto.c blk-crypto: make blk_crypto_evict_key() more robust 2023-03-16 09:35:09 -06:00
blk-flush.c blk-mq: fix the blk_mq_add_to_requeue_list call in blk_kick_flush 2023-04-16 13:01:43 -06:00
blk-ia-ranges.c block: make kobj_type structures constant 2023-02-09 09:38:16 -07:00
blk-integrity.c blk-integrity: register sysfs attributes on struct device 2023-04-26 18:22:50 -06:00
blk-ioc.c
blk-iocost.c blkcg: Restructure blkg_conf_prep() and friends 2023-04-13 06:46:49 -06:00
blk-iolatency.c blk-iolatency: Make initialization lazy 2023-04-13 06:46:49 -06:00
blk-ioprio.c blk-cgroup: pass a gendisk to pd_alloc_fn 2023-02-03 08:20:05 -07:00
blk-ioprio.h
blk-lib.c
blk-map.c block: fix bio-cache for passthru IO 2023-05-23 11:11:29 -06:00
blk-merge.c blk-mq: release crypto keyslot before reporting I/O complete 2023-03-16 09:35:09 -06:00
blk-mq-cpumap.c blk-mq: include <linux/blk-mq.h> in block/blk-mq.h 2023-04-13 06:52:29 -06:00
blk-mq-debugfs-zoned.c
blk-mq-debugfs.c blk-mq: include <linux/blk-mq.h> in block/blk-mq.h 2023-04-13 06:52:29 -06:00
blk-mq-debugfs.h
blk-mq-pci.c blk-mq: include <linux/blk-mq.h> in block/blk-mq.h 2023-04-13 06:52:29 -06:00
blk-mq-sched.c blk-mq: cleanup __blk_mq_sched_dispatch_requests 2023-04-13 06:57:18 -06:00
blk-mq-sched.h blk-mq: move blk_mq_sched_insert_request to blk-mq.c 2023-04-13 06:52:29 -06:00
blk-mq-sysfs.c blk-mq: include <linux/blk-mq.h> in block/blk-mq.h 2023-04-13 06:52:29 -06:00
blk-mq-tag.c blk-mq: fix race condition in active queue accounting 2023-05-23 11:10:16 -06:00
blk-mq-virtio.c blk-mq: include <linux/blk-mq.h> in block/blk-mq.h 2023-04-13 06:52:29 -06:00
blk-mq.c blk-mq: fix blk_mq_hw_ctx active request accounting 2023-06-03 17:20:00 -06:00
blk-mq.h for-6.4/block-2023-04-21 2023-04-26 12:52:58 -07:00
blk-pm.c blk-mq: include <linux/blk-mq.h> in block/blk-mq.h 2023-04-13 06:52:29 -06:00
blk-pm.h
blk-rq-qos.c blk-rq-qos: store a gendisk instead of request_queue in struct rq_qos 2023-02-03 08:20:05 -07:00
blk-rq-qos.h blk-iolatency: s/blkcg_rq_qos/iolat_rq_qos/ 2023-04-13 06:46:49 -06:00
blk-settings.c block: fix revalidate performance regression 2023-05-29 08:40:32 -06:00
blk-stat.c blk-mq: include <linux/blk-mq.h> in block/blk-mq.h 2023-04-13 06:52:29 -06:00
blk-stat.h
blk-sysfs.c blk-mq: include <linux/blk-mq.h> in block/blk-mq.h 2023-04-13 06:52:29 -06:00
blk-throttle.c blk-throttle: only enable blk-stat when BLK_DEV_THROTTLING_LOW 2023-04-13 06:48:11 -06:00
blk-throttle.h
blk-timeout.c
blk-wbt.c blk-wbt: fix that wbt can't be disabled by default 2023-05-23 11:08:53 -06:00
blk-wbt.h blk-wbt: move private information from blk-wbt.h to blk-wbt.c 2023-02-03 08:20:05 -07:00
blk-zoned.c block: remove more NULL checks after bdev_get_queue() 2023-02-21 09:23:22 -07:00
blk.h blk-integrity: register sysfs attributes on struct device 2023-04-26 18:22:50 -06:00
bounce.c
bsg-lib.c
bsg.c driver core: class: remove module * from class_create() 2023-03-17 15:16:33 +01:00
disk-events.c
elevator.c block: make kobj_type structures constant 2023-02-09 09:38:16 -07:00
elevator.h blk-mq: pass a flags argument to elevator_type->insert_requests 2023-04-13 06:52:30 -06:00
fops.c block: Deny writable memory mapping if block is read-only 2023-05-19 20:17:10 -06:00
genhd.c for-6.4/block-2023-05-06 2023-05-06 08:28:58 -07:00
holder.c
ioctl.c block: fix scan partition for exclusively open device again 2023-02-17 06:15:57 -07:00
ioprio.c
kyber-iosched.c blk-mq: pass a flags argument to elevator_type->insert_requests 2023-04-13 06:52:30 -06:00
mq-deadline.c blk-mq: pass a flags argument to elevator_type->insert_requests 2023-04-13 06:52:30 -06:00
opal_proto.h sed-opal: allow user authority to get locking range attributes. 2023-04-05 07:46:25 -06:00
sed-opal.c sed-opal: geometry feature reporting command 2023-04-19 14:07:13 -06:00
t10-pi.c