From: Greg Kroah-Hartman Date: Mon, 16 Dec 2019 09:30:26 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v5.4.4~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d0ae512a4285f7e2415dd37a7dc81608dd9fc0bf;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: block-fix-single-range-discard-merge.patch --- diff --git a/queue-4.14/block-fix-single-range-discard-merge.patch b/queue-4.14/block-fix-single-range-discard-merge.patch new file mode 100644 index 00000000000..6d1c5921030 --- /dev/null +++ b/queue-4.14/block-fix-single-range-discard-merge.patch @@ -0,0 +1,100 @@ +From 2a5cf35cd6c56b2924bce103413ad3381bdc31fa Mon Sep 17 00:00:00 2001 +From: Ming Lei +Date: Sat, 1 Dec 2018 00:38:18 +0800 +Subject: block: fix single range discard merge + +From: Ming Lei + +commit 2a5cf35cd6c56b2924bce103413ad3381bdc31fa upstream. + +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 +Cc: Guangwu Zhang +Cc: Christoph Hellwig +Cc: Jianchao Wang +Signed-off-by: Ming Lei +Signed-off-by: Jens Axboe +Cc: Andre Tomt +Cc: Jack Wang +Signed-off-by: Greg Kroah-Hartman + +--- + block/blk-merge.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/block/blk-merge.c ++++ b/block/blk-merge.c +@@ -765,7 +765,7 @@ static struct request *attempt_merge(str + + req->__data_len += blk_rq_bytes(next); + +- if (req_op(req) != REQ_OP_DISCARD) ++ if (!blk_discard_mergable(req)) + elv_merge_requests(q, req, next); + + /* diff --git a/queue-4.14/series b/queue-4.14/series index b3b2db05490..de777aa23ce 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -235,6 +235,7 @@ ext2-check-err-when-partial-null.patch quota-fix-livelock-in-dquot_writeback_dquots.patch ext4-fix-credit-estimate-for-final-inode-freeing.patch reiserfs-fix-extended-attributes-on-the-root-directory.patch +block-fix-single-range-discard-merge.patch scsi-zfcp-trace-channel-log-even-for-fcp-command-res.patch scsi-qla2xxx-fix-dma-unmap-leak.patch scsi-qla2xxx-fix-session-lookup-in-qlt_abort_work.patch