linux/block
Jens Axboe e4d750c977 block: free merged request in the caller
If we end up doing a request-to-request merge when we have completed
a bio-to-request merge, we free the request from deep down in that
path. For blk-mq-sched, the merge path has to hold the appropriate
lock, but we don't need it for freeing the request. And in fact
holding the lock is problematic, since we are now calling the
mq sched put_rq_private() hook with the lock held. Other call paths
do not hold this lock.

Fix this inconsistency by ensuring that the caller frees a merged
request. Then we can do it outside of the lock, making it both more
efficient and fixing the blk-mq-sched problem of invoking parts of
the scheduler with an unknown lock state.

Reported-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
Reviewed-by: Omar Sandoval <osandov@fb.com>
2017-02-03 09:48:28 -07:00
..
partitions partitions/efi: Fix integer overflow in GPT size calculation 2017-01-17 09:02:31 -07:00
badblocks.c badblocks: badblocks_set/clear update unacked_exist 2016-10-21 15:45:47 -06:00
bio-integrity.c block: remove bio_is_rw 2016-10-28 08:45:17 -06:00
bio.c block: fold cmd_type into the REQ_OP_ space 2017-01-31 14:00:44 -07:00
blk-cgroup.c blkcg: fix double free of new_blkg in blkcg_init_queue 2017-02-03 07:52:35 -07:00
blk-core.c block: free merged request in the caller 2017-02-03 09:48:28 -07:00
blk-exec.c block: introduce blk_rq_is_passthrough 2017-01-31 14:00:34 -07:00
blk-flush.c block: fold cmd_type into the REQ_OP_ space 2017-01-31 14:00:44 -07:00
blk-integrity.c block: Use pointer to backing_dev_info from request_queue 2017-02-02 08:20:48 -07:00
blk-ioc.c blk-mq-sched: add framework for MQ capable IO schedulers 2017-01-17 10:04:20 -07:00
blk-lib.c block: don't try to discard from __blkdev_issue_zeroout 2017-01-13 15:18:16 -07:00
blk-map.c block: fold cmd_type into the REQ_OP_ space 2017-01-31 14:00:44 -07:00
blk-merge.c block: free merged request in the caller 2017-02-03 09:48:28 -07:00
blk-mq-cpumap.c blk-mq: export blk_mq_map_queues 2016-11-08 17:30:00 -05:00
blk-mq-debugfs.c block: use same block debugfs directory for blk-mq and blktrace 2017-02-02 10:20:16 -07:00
blk-mq-pci.c blk_mq: linux/blk-mq.h does not include all the headers it depends on 2016-09-19 08:21:51 -06:00
blk-mq-sched.c block: free merged request in the caller 2017-02-03 09:48:28 -07:00
blk-mq-sched.h block: free merged request in the caller 2017-02-03 09:48:28 -07:00
blk-mq-sysfs.c blk-mq: move debugfs_remove() of disk dir to blk_release_queue() 2017-02-02 10:20:16 -07:00
blk-mq-tag.c blk-mq-sched: add flush insertion into blk_mq_sched_insert_request() 2017-01-27 09:03:14 -07:00
blk-mq-tag.h blk-mq: move tags and sched_tags info from sysfs to debugfs 2017-01-27 08:17:44 -07:00
blk-mq.c block: use same block debugfs directory for blk-mq and blktrace 2017-02-02 10:20:16 -07:00
blk-mq.h block: use same block debugfs directory for blk-mq and blktrace 2017-02-02 10:20:16 -07:00
blk-settings.c block: Use pointer to backing_dev_info from request_queue 2017-02-02 08:20:48 -07:00
blk-softirq.c This adds a new gcc plugin named "latent_entropy". It is designed to 2016-10-15 10:03:15 -07:00
blk-stat.c blk-stat: fix a few cases of missing batch flushing 2016-12-09 13:08:35 -07:00
blk-stat.h block: add scalable completion tracking of requests 2016-11-10 13:53:26 -07:00
blk-sysfs.c blk-mq: move debugfs_remove() of disk dir to blk_release_queue() 2017-02-02 10:20:16 -07:00
blk-tag.c blk-mq-sched: add framework for MQ capable IO schedulers 2017-01-17 10:04:20 -07:00
blk-throttle.c blk-throttle: Adjust two function calls together with a variable assignment 2017-01-23 08:32:15 -07:00
blk-timeout.c block: remove REQ_NO_TIMEOUT flag 2015-12-22 09:38:34 -07:00
blk-wbt.c block: Use pointer to backing_dev_info from request_queue 2017-02-02 08:20:48 -07:00
blk-wbt.h blk-wbt: allow wbt to be enabled always through sysfs 2016-11-28 10:27:03 -07:00
blk-zoned.c block: Rename blk_queue_zone_size and bdev_zone_size 2017-01-12 07:58:32 -07:00
blk.h blk-merge: return the merged request 2017-02-03 09:47:32 -07:00
bounce.c Merge branch 'for-linus' of git://git.kernel.dk/linux-block 2015-09-19 18:57:09 -07:00
bsg-lib.c block: split scsi_request out of struct request 2017-01-27 15:08:35 -07:00
bsg.c block: fold cmd_type into the REQ_OP_ space 2017-01-31 14:00:44 -07:00
cfq-iosched.c cfq-iosched: Adjust one function call together with a variable assignment 2017-01-23 08:32:18 -07:00
cmdline-parser.c block: remove unrelated header files and export symbol 2014-01-21 20:18:26 -08:00
compat_ioctl.c block: Get rid of blk_get_backing_dev_info() 2017-02-02 08:21:32 -07:00
deadline-iosched.c block: move existing elevator ops to union 2017-01-17 10:03:33 -07:00
elevator.c blk-mq-debug: Avoid that sparse complains about req_flags_t usage 2017-02-01 12:22:23 -07:00
genhd.c scsi, block: fix duplicate bdi name registration crashes 2017-02-02 08:23:19 -07:00
ioctl.c block: Get rid of blk_get_backing_dev_info() 2017-02-02 08:21:32 -07:00
ioprio.c block: fix use-after-free in sys_ioprio_get() 2016-07-01 08:39:24 -06:00
Kconfig block: make scsi_request and scsi ioctl support optional 2017-01-31 10:53:05 -07:00
Kconfig.iosched blk-mq-sched: allow setting of default IO scheduler 2017-01-17 10:04:31 -07:00
Makefile block: make scsi_request and scsi ioctl support optional 2017-01-31 10:53:05 -07:00
mq-deadline.c block: free merged request in the caller 2017-02-03 09:48:28 -07:00
noop-iosched.c block: move existing elevator ops to union 2017-01-17 10:03:33 -07:00
partition-generic.c block: Rename blk_queue_zone_size and bdev_zone_size 2017-01-12 07:58:32 -07:00
scsi_ioctl.c block: fold cmd_type into the REQ_OP_ space 2017-01-31 14:00:44 -07:00
t10-pi.c block: Consolidate static integrity profile properties 2015-10-21 14:42:38 -06:00