Ming Lei
2a5cf35cd6
block: fix single range discard merge
...
There are actually two kinds of discard merge:
- one is the normal discard merge, just like normal read/write request,
and call it single-range discard
- another is the multi-range discard, queue_max_discard_segments(rq->q) > 1
For the former case, queue_max_discard_segments(rq->q) is 1, and we
should handle this kind of discard merge like the normal read/write
request.
This patch fixes the following kernel panic issue[1], which is caused by
not removing the single-range discard request from elevator queue.
Guangwu has one raid discard test case, in which this issue is a bit
easier to trigger, and I verified that this patch can fix the kernel
panic issue in Guangwu's test case.
[1] kernel panic log from Jens's report
BUG: unable to handle kernel NULL pointer dereference at 0000000000000148
PGD 0 P4D 0.
Oops: 0000 [#1 ] SMP PTI
CPU: 37 PID: 763 Comm: kworker/37:1H Not tainted \
4.20.0-rc3-00649-ge64d9a554a91-dirty #14 Hardware name: Wiwynn \
Leopard-Orv2/Leopard-DDR BW, BIOS LBM08 03/03/2017 Workqueue: kblockd \
blk_mq_run_work_fn RIP: \
0010:blk_mq_get_driver_tag+0x81/0x120 Code: 24 \
10 48 89 7c 24 20 74 21 83 fa ff 0f 95 c0 48 8b 4c 24 28 65 48 33 0c 25 28 00 00 00 \
0f 85 96 00 00 00 48 83 c4 30 5b 5d c3 <48> 8b 87 48 01 00 00 8b 40 04 39 43 20 72 37 \
f6 87 b0 00 00 00 02 RSP: 0018:ffffc90004aabd30 EFLAGS: 00010246 \
RAX: 0000000000000003 RBX: ffff888465ea1300 RCX: ffffc90004aabde8
RDX: 00000000ffffffff RSI: ffffc90004aabde8 RDI: 0000000000000000
RBP: 0000000000000000 R08: ffff888465ea1348 R09: 0000000000000000
R10: 0000000000001000 R11: 00000000ffffffff R12: ffff888465ea1300
R13: 0000000000000000 R14: ffff888465ea1348 R15: ffff888465d10000
FS: 0000000000000000(0000) GS:ffff88846f9c0000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000148 CR3: 000000000220a003 CR4: 00000000003606e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
blk_mq_dispatch_rq_list+0xec/0x480
? elv_rb_del+0x11/0x30
blk_mq_do_dispatch_sched+0x6e/0xf0
blk_mq_sched_dispatch_requests+0xfa/0x170
__blk_mq_run_hw_queue+0x5f/0xe0
process_one_work+0x154/0x350
worker_thread+0x46/0x3c0
kthread+0xf5/0x130
? process_one_work+0x350/0x350
? kthread_destroy_worker+0x50/0x50
ret_from_fork+0x1f/0x30
Modules linked in: sb_edac x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel \
kvm switchtec irqbypass iTCO_wdt iTCO_vendor_support efivars cdc_ether usbnet mii \
cdc_acm i2c_i801 lpc_ich mfd_core ipmi_si ipmi_devintf ipmi_msghandler acpi_cpufreq \
button sch_fq_codel nfsd nfs_acl lockd grace auth_rpcgss oid_registry sunrpc nvme \
nvme_core fuse sg loop efivarfs autofs4 CR2: 0000000000000148 \
---[ end trace 340a1fb996df1b9b ]---
RIP: 0010:blk_mq_get_driver_tag+0x81/0x120
Code: 24 10 48 89 7c 24 20 74 21 83 fa ff 0f 95 c0 48 8b 4c 24 28 65 48 33 0c 25 28 \
00 00 00 0f 85 96 00 00 00 48 83 c4 30 5b 5d c3 <48> 8b 87 48 01 00 00 8b 40 04 39 43 \
20 72 37 f6 87 b0 00 00 00 02
Fixes: 445251d0f4d329a ("blk-mq: fix discard merge with scheduler attached")
Reported-by: Jens Axboe <axboe@kernel.dk>
Cc: Guangwu Zhang <guazhang@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
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-30 10:07:57 -07:00
..
2018-07-27 09:17:41 -06:00
2017-11-03 11:29:50 -07:00
2018-11-01 19:59:53 -06:00
2018-11-01 19:59:53 -06:00
2018-10-13 15:40:00 -06:00
2018-10-25 11:17:40 -06:00
2018-09-06 15:12:24 -06:00
2018-11-12 10:35:25 -07:00
2018-11-01 19:59:53 -06:00
2018-11-14 08:19:10 -07:00
2018-01-17 09:49:21 -07:00
2018-10-13 15:42:01 -06:00
2018-09-24 12:33:57 -06:00
2018-07-09 09:07:54 -06:00
2018-11-02 11:25:48 -07:00
2018-11-14 08:17:18 -07:00
2018-01-29 11:51:49 -08:00
2018-11-30 10:07:57 -07:00
2018-04-10 08:38:46 -06:00
2018-07-09 09:07:52 -06:00
2018-10-25 11:17:40 -06:00
2018-07-09 09:07:52 -06:00
2018-07-09 09:07:53 -06:00
2017-08-08 14:58:03 -04:00
2018-08-21 09:02:55 -06:00
2018-09-27 17:34:52 -06:00
2018-05-24 13:38:59 -06:00
2018-10-01 08:58:57 -06:00
2017-11-14 15:32:19 -08:00
2017-02-27 20:54:05 +02:00
2018-10-25 11:17:40 -06:00
2018-07-17 16:04:00 -06:00
2018-09-26 15:11:29 -06:00
2018-09-26 15:11:28 -06:00
2018-07-22 11:30:53 -06:00
2018-07-22 11:30:53 -06:00
2018-10-31 08:54:16 -07:00
2018-10-08 10:50:43 -06:00
2018-09-27 17:34:54 -06:00
2018-07-09 09:07:54 -06:00
2018-10-31 08:40:36 -06:00
2018-06-17 05:37:55 +09:00
2018-11-01 19:59:53 -06:00
2018-06-23 10:25:45 -06:00
2018-10-11 13:31:28 -06:00
2018-07-09 09:07:54 -06:00
2018-10-25 11:17:40 -06:00
2018-11-09 06:23:14 -07:00
2018-11-12 10:35:25 -07:00
2018-08-01 09:13:03 -06:00
2018-08-27 19:17:02 -06:00
2018-11-01 19:59:53 -06:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-05-24 13:38:59 -06:00
2018-10-01 08:58:57 -06:00
2018-10-01 08:58:57 -06:00
2018-10-25 11:17:40 -06:00
2018-05-31 10:50:54 -04:00
2018-10-10 14:11:07 -06:00
2018-10-10 14:11:07 -06:00
2018-09-28 10:49:39 -06:00
2018-09-26 15:11:28 -06:00
2018-05-24 13:38:59 -06:00
2017-01-17 10:03:33 -07:00
2017-09-11 09:45:52 -06:00
2018-09-21 20:26:59 -06:00
2018-05-14 08:55:18 -06:00
2018-06-20 12:04:06 -06:00
2018-07-30 08:27:02 -06:00