Ming Lei
8dc765d438
SCSI: fix queue cleanup race before queue initialization is done
...
c2856ae2f3 ("blk-mq: quiesce queue before freeing queue") has
already fixed this race, however the implied synchronize_rcu()
in blk_mq_quiesce_queue() can slow down LUN probe a lot, so caused
performance regression.
Then 1311326cf4 ("blk-mq: avoid to synchronize rcu inside blk_cleanup_queue()")
tried to quiesce queue for avoiding unnecessary synchronize_rcu()
only when queue initialization is done, because it is usual to see
lots of inexistent LUNs which need to be probed.
However, turns out it isn't safe to quiesce queue only when queue
initialization is done. Because when one SCSI command is completed,
the user of sending command can be waken up immediately, then the
scsi device may be removed, meantime the run queue in scsi_end_request()
is still in-progress, so kernel panic can be caused.
In Red Hat QE lab, there are several reports about this kind of kernel
panic triggered during kernel booting.
This patch tries to address the issue by grabing one queue usage
counter during freeing one request and the following run queue.
Fixes: 1311326cf4 ("blk-mq: avoid to synchronize rcu inside blk_cleanup_queue()")
Cc: Andrew Jones <drjones@redhat.com>
Cc: Bart Van Assche <bart.vanassche@wdc.com>
Cc: linux-scsi@vger.kernel.org
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: James E.J. Bottomley <jejb@linux.vnet.ibm.com>
Cc: stable <stable@vger.kernel.org>
Cc: jianchao.wang <jianchao.w.wang@oracle.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2018-11-14 08:19:10 -07:00
..
partitions
partitions/aix: append null character to print data from disk
2018-07-27 09:17:41 -06:00
badblocks.c
bfq-cgroup.c
blkcg: revert blkcg cleanups series
2018-11-01 19:59:53 -06:00
bfq-iosched.c
blkcg: revert blkcg cleanups series
2018-11-01 19:59:53 -06:00
bfq-iosched.h
block, bfq: improve asymmetric scenarios detection
2018-10-13 15:40:00 -06:00
bfq-wf2q.c
block, bfq: fix asymmetric scenarios detection
2018-10-25 11:17:40 -06:00
bio-integrity.c
block: remove bio_rewind_iter()
2018-09-06 15:12:24 -06:00
bio.c
block: copy ioprio in __bio_clone_fast() and bounce
2018-11-12 10:35:25 -07:00
blk-cgroup.c
blkcg: revert blkcg cleanups series
2018-11-01 19:59:53 -06:00
blk-core.c
SCSI: fix queue cleanup race before queue initialization is done
2018-11-14 08:19:10 -07:00
blk-exec.c
blk-flush.c
blk-mq: change gfp flags to GFP_NOIO in blk_mq_realloc_hw_ctxs
2018-10-13 15:42:01 -06:00
blk-integrity.c
block: merge BIOVEC_SEG_BOUNDARY into biovec_phys_mergeable
2018-09-24 12:33:57 -06:00
blk-ioc.c
block, mm: remove unnecessary __GFP_HIGH flag
2018-07-09 09:07:54 -06:00
blk-iolatency.c
for-linus-20181102
2018-11-02 11:25:48 -07:00
blk-lib.c
block: fix 32 bit overflow in __blkdev_issue_discard()
2018-11-14 08:17:18 -07:00
blk-map.c
blk-merge.c
block: make sure discard bio is aligned with logical block size
2018-11-09 06:23:14 -07:00
blk-mq-cpumap.c
blk-mq-debugfs-zoned.c
block: Make struct request_queue smaller for CONFIG_BLK_DEV_ZONED=n
2018-07-09 09:07:52 -06:00
blk-mq-debugfs.c
block: add a report_zones method
2018-10-25 11:17:40 -06:00
blk-mq-debugfs.h
block: Make struct request_queue smaller for CONFIG_BLK_DEV_ZONED=n
2018-07-09 09:07:52 -06:00
blk-mq-pci.c
blk-mq: code clean-up by adding an API to clear set->mq_map
2018-07-09 09:07:53 -06:00
blk-mq-rdma.c
blk-mq-sched.c
blk-mq: init hctx sched after update ctx and hctx mapping
2018-08-21 09:02:55 -06:00
blk-mq-sched.h
block: move call of scheduler's ->completed_request() hook
2018-09-27 17:34:52 -06:00
blk-mq-sysfs.c
block drivers/block: Use octal not symbolic permissions
2018-05-24 13:38:59 -06:00
blk-mq-tag.c
This is the 4.19-rc6 release
2018-10-01 08:58:57 -06:00
blk-mq-tag.h
blk-mq-virtio.c
blk-mq.c
blk-mq: place trace_block_getrq() in correct place
2018-10-25 11:17:40 -06:00
blk-mq.h
blk-mq: issue directly if hw queue isn't busy in case of 'none'
2018-07-17 16:04:00 -06:00
blk-pm.c
blk-mq: Enable support for runtime power management
2018-09-26 15:11:29 -06:00
blk-pm.h
block: Split blk_pm_add_request() and blk_pm_put_request()
2018-09-26 15:11:28 -06:00
blk-rq-qos.c
blk-rq-qos: make depth comparisons unsigned
2018-07-22 11:30:53 -06:00
blk-rq-qos.h
blk-rq-qos: make depth comparisons unsigned
2018-07-22 11:30:53 -06:00
blk-settings.c
mm: remove include/linux/bootmem.h
2018-10-31 08:54:16 -07:00
blk-softirq.c
blk-mq: complete req in softirq context in case of single queue
2018-10-08 10:50:43 -06:00
blk-stat.c
block: export blk_stat_enable_accounting()
2018-09-27 17:34:54 -06:00
blk-stat.h
blk-stat: export helpers for modifying blk_rq_stat
2018-07-09 09:07:54 -06:00
blk-sysfs.c
block: call rq_qos_exit() after queue is frozen
2018-10-31 08:40:36 -06:00
blk-tag.c
for-linus-20180616
2018-06-17 05:37:55 +09:00
blk-throttle.c
blkcg: revert blkcg cleanups series
2018-11-01 19:59:53 -06:00
blk-timeout.c
blk-mq: Fix timeout handling in case the timeout handler returns BLK_EH_DONE
2018-06-23 10:25:45 -06:00
blk-wbt.c
blk-wbt: wake up all when we scale up, not down
2018-10-11 13:31:28 -06:00
blk-wbt.h
block: remove external dependency on wbt_flags
2018-07-09 09:07:54 -06:00
blk-zoned.c
block: Introduce blk_revalidate_disk_zones()
2018-10-25 11:17:40 -06:00
blk.h
block: make sure discard bio is aligned with logical block size
2018-11-09 06:23:14 -07:00
bounce.c
block: copy ioprio in __bio_clone_fast() and bounce
2018-11-12 10:35:25 -07:00
bsg-lib.c
block/bsg-lib: use PTR_ERR_OR_ZERO to simplify the flow path
2018-08-01 09:13:03 -06:00
bsg.c
block: bsg: move atomic_t ref_count variable to refcount API
2018-08-27 19:17:02 -06:00
cfq-iosched.c
blkcg: revert blkcg cleanups series
2018-11-01 19:59:53 -06:00
cmdline-parser.c
compat_ioctl.c
deadline-iosched.c
block drivers/block: Use octal not symbolic permissions
2018-05-24 13:38:59 -06:00
elevator.c
This is the 4.19-rc6 release
2018-10-01 08:58:57 -06:00
genhd.c
This is the 4.19-rc6 release
2018-10-01 08:58:57 -06:00
ioctl.c
block: Introduce BLKGETNRZONES ioctl
2018-10-25 11:17:40 -06:00
ioprio.c
block: add ioprio_check_cap function
2018-05-31 10:50:54 -04:00
Kconfig
block: remove redundant 'default n' from Kconfig-s
2018-10-10 14:11:07 -06:00
Kconfig.iosched
block: remove redundant 'default n' from Kconfig-s
2018-10-10 14:11:07 -06:00
kyber-iosched.c
kyber: fix integer overflow of latency targets on 32-bit
2018-09-28 10:49:39 -06:00
Makefile
block: Move power management code into a new source file
2018-09-26 15:11:28 -06:00
mq-deadline.c
block drivers/block: Use octal not symbolic permissions
2018-05-24 13:38:59 -06:00
noop-iosched.c
opal_proto.h
partition-generic.c
block: use nanosecond resolution for iostat
2018-09-21 20:26:59 -06:00
scsi_ioctl.c
sed-opal.c
block: sed-opal: Fix a couple off by one bugs
2018-06-20 12:04:06 -06:00
t10-pi.c
block: move dif_prepare/dif_complete functions to block layer
2018-07-30 08:27:02 -06:00