Jens Axboe
157f377beb
block: directly insert blk-mq request from blk_insert_cloned_request()
...
A NULL pointer crash was reported for the case of having the BFQ IO
scheduler attached to the underlying blk-mq paths of a DM multipath
device. The crash occured in blk_mq_sched_insert_request()'s call to
e->type->ops.mq.insert_requests().
Paolo Valente correctly summarized why the crash occured with:
"the call chain (dm_mq_queue_rq -> map_request -> setup_clone ->
blk_rq_prep_clone) creates a cloned request without invoking
e->type->ops.mq.prepare_request for the target elevator e. The cloned
request is therefore not initialized for the scheduler, but it is
however inserted into the scheduler by blk_mq_sched_insert_request."
All said, a request-based DM multipath device's IO scheduler should be
the only one used -- when the original requests are issued to the
underlying paths as cloned requests they are inserted directly in the
underlying dispatch queue(s) rather than through an additional elevator.
But commit bd166ef18 ("blk-mq-sched: add framework for MQ capable IO
schedulers") switched blk_insert_cloned_request() from using
blk_mq_insert_request() to blk_mq_sched_insert_request(). Which
incorrectly added elevator machinery into a call chain that isn't
supposed to have any.
To fix this introduce a blk-mq private blk_mq_request_bypass_insert()
that blk_insert_cloned_request() calls to insert the request without
involving any elevator that may be attached to the cloned request's
request_queue.
Fixes: bd166ef183 ("blk-mq-sched: add framework for MQ capable IO schedulers")
Cc: stable@vger.kernel.org
Reported-by: Bart Van Assche <Bart.VanAssche@wdc.com>
Tested-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2017-09-11 16:43:57 -06:00
..
partitions
partitions/ldm: switch to use uuid_t
2017-06-05 16:59:14 +02:00
badblocks.c
block: Add fallthrough markers to switch statements
2017-06-21 11:46:07 -06:00
bfq-cgroup.c
bfq: Declare local functions static
2017-09-01 13:56:37 -06:00
bfq-iosched.c
Merge branch 'for-4.14/block-postmerge' of git://git.kernel.dk/linux-block
2017-09-09 12:49:01 -07:00
bfq-iosched.h
Merge branch 'for-4.14/block' of git://git.kernel.dk/linux-block
2017-09-07 11:59:42 -07:00
bfq-wf2q.c
block, bfq: guarantee update_next_in_service always returns an eligible entity
2017-08-31 08:20:31 -06:00
bio-integrity.c
Merge branch 'for-4.14/block' of git://git.kernel.dk/linux-block
2017-09-07 11:59:42 -07:00
bio.c
Merge tag 'md/4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md
2017-09-07 12:41:48 -07:00
blk-cgroup.c
blkcg: avoid free blkcg_root when failed to alloc blkcg policy
2017-08-25 13:51:07 -06:00
blk-core.c
block: directly insert blk-mq request from blk_insert_cloned_request()
2017-09-11 16:43:57 -06:00
blk-exec.c
block: introduce new block status code type
2017-06-09 09:27:32 -06:00
blk-flush.c
block: update comments to reflect REQ_FLUSH -> REQ_PREFLUSH rename
2017-08-25 10:36:54 -06:00
blk-integrity.c
block: switch bios to blk_status_t
2017-06-09 09:27:32 -06:00
blk-ioc.c
blk-lib.c
block: fix integer overflow in __blkdev_sectors_to_bio_pages()
2017-09-11 09:46:49 -06:00
blk-map.c
blk-map: call blk_queue_bounce from blk_rq_append_bio
2017-06-27 12:13:21 -06:00
blk-merge.c
block: replace bi_bdev with a gendisk pointer and partitions index
2017-08-23 12:49:55 -06:00
blk-mq-cpumap.c
blk-mq: map queues to all present CPUs
2017-07-24 10:01:31 -06:00
blk-mq-debugfs.c
Merge branch 'for-4.14/block' of git://git.kernel.dk/linux-block
2017-09-07 11:59:42 -07:00
blk-mq-debugfs.h
blk-mq-pci.c
blk-mq-pci: add a fallback when pci_irq_get_affinity returns NULL
2017-08-18 08:08:14 -06:00
blk-mq-rdma.c
block: Add rdma affinity based queue mapping helper
2017-08-08 14:58:03 -04:00
blk-mq-sched.c
blk-mq-sched: fix performance regression of mq-deadline
2017-07-03 16:54:09 -06:00
blk-mq-sched.h
Merge commit ' 8e8320c931' into for-4.13/block
2017-06-22 21:55:24 -06:00
blk-mq-sysfs.c
blk-mq-tag.c
blk-mq: Make blk_mq_reinit_tagset() calls easier to read
2017-08-18 08:36:58 -06:00
blk-mq-tag.h
blk-mq-virtio.c
blk-mq.c
block: directly insert blk-mq request from blk_insert_cloned_request()
2017-09-11 16:43:57 -06:00
blk-mq.h
block: directly insert blk-mq request from blk_insert_cloned_request()
2017-09-11 16:43:57 -06:00
blk-settings.c
block: Warn if blk_queue_rq_timed_out() is called for a blk-mq queue
2017-08-23 12:02:30 -06:00
blk-softirq.c
smp: Avoid using two cache lines for struct call_single_data
2017-08-29 15:14:38 +02:00
blk-stat.c
blk-stat.h
blk-sysfs.c
block: fix warning when I/O elevator is changed as request_queue is being removed
2017-08-28 10:52:44 -06:00
blk-tag.c
block: Unexport blk_queue_end_tag()
2017-08-18 08:36:58 -06:00
blk-throttle.c
Merge branch 'for-4.14/block' of git://git.kernel.dk/linux-block
2017-09-07 11:59:42 -07:00
blk-timeout.c
block: Check locking assumptions at runtime
2017-06-20 19:27:14 -06:00
blk-wbt.c
sched/wait: Disambiguate wq_entry->task_list and wq_head->task_list naming
2017-06-20 12:19:14 +02:00
blk-wbt.h
blk-zoned.c
block: replace bi_bdev with a gendisk pointer and partitions index
2017-08-23 12:49:55 -06:00
blk.h
block: Make blk_dequeue_request() static
2017-08-29 09:49:31 -06:00
bounce.c
block: remove the queue_bounce_pfn helper
2017-06-27 12:13:45 -06:00
bsg-lib.c
SCSI misc on 20170907
2017-09-07 21:11:05 -07:00
bsg.c
bsg: remove #if 0'ed code
2017-08-29 10:50:30 -06:00
cfq-iosched.c
block/cfq: cache rightmost rb_node
2017-09-08 18:26:49 -07:00
cmdline-parser.c
compat_ioctl.c
compat_hdio_ioctl: Fix a declaration
2017-08-31 17:32:41 -04:00
deadline-iosched.c
block, scheduler: convert xxx_var_store to void
2017-08-28 10:01:08 -06:00
elevator.c
block: fix warning when I/O elevator is changed as request_queue is being removed
2017-08-28 10:52:44 -06:00
genhd.c
Merge branch 'for-4.14/block' of git://git.kernel.dk/linux-block
2017-09-07 11:59:42 -07:00
ioctl.c
ioprio.c
block: Add fallthrough markers to switch statements
2017-06-21 11:46:07 -06:00
Kconfig
block: Add rdma affinity based queue mapping helper
2017-08-08 14:58:03 -04:00
Kconfig.iosched
kyber-iosched.c
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2017-07-03 13:08:04 -07:00
Makefile
block: Add rdma affinity based queue mapping helper
2017-08-08 14:58:03 -04:00
mq-deadline.c
mq-deadline: Enable auto-loading when built as module
2017-08-29 10:47:23 -06:00
noop-iosched.c
opal_proto.h
block: sed-opal: Set MBRDone on S3 resume path if TPER is MBREnabled
2017-09-11 09:45:52 -06:00
partition-generic.c
block: remove blk_free_devt in add_partition
2017-08-24 08:26:57 -06:00
scsi_ioctl.c
block: Change argument type of scsi_req_init()
2017-06-20 19:27:14 -06:00
sed-opal.c
block: sed-opal: Set MBRDone on S3 resume path if TPER is MBREnabled
2017-09-11 09:45:52 -06:00
t10-pi.c
t10-pi: Move opencoded contants to common header
2017-07-03 16:56:25 -06:00