Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp644987img; Fri, 22 Mar 2019 05:49:40 -0700 (PDT) X-Google-Smtp-Source: APXvYqy7zmVoJ5BcZbrA5aS9YEB5CKmuNyeCFJjaOcsVrI1sXoK9lY8ctu5LsRV7N333wxyEvrn8 X-Received: by 2002:a65:64c4:: with SMTP id t4mr8808361pgv.152.1553258979928; Fri, 22 Mar 2019 05:49:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553258979; cv=none; d=google.com; s=arc-20160816; b=PRG4QsbgiwP4kIy14vG4GtnJS4i5TGZhYcgjUn5BRaMIcdM/UiZJ4alBD6onoSfdYT xvFPmJYwR1yRaMtQQqmCgVFyLfbsa7dUcfR6PZcjT3+af3Zap+IpS6Ph3O8VLp54He+J foqs2LdE3Q3eCG7C8PVsL5oGdzSfj8iUn59ZvufuyiyJyabrotBSSCjkUDLucXdGg3l3 /9FEelb6WrwbGuUVpWHvM7j9mUunxbdhyXeumEmM4d2q/YIZIH4WkpmBc+vJImZBbq6q RLmLKDM7AtWiuBpoaZSFaA6nKke6Hm7rTHi47nhvj4KmWnicUvOookgpIx1e4xHzRkyy oUJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=amYIxlvnGBLhnwyQnAvpiIbC9oesAo1Yg8Ue6c/qV2Q=; b=OFV7d/PKTEo50WklBKnTJF+TIE+baXWHxYhtoRjPUQQXk118j4U+XL1hlb7SJsndRH yi/xe0bjVn/8T5a56TwWGaX+pf+gRBcdhmsdAmkfy4dGOc7i4TUdTnDtaQJJuh6WsvXB PDz5SnwrItznRQfgqcrDp6o7k0JBfdgTUUxBgE15985SHnKNuD1FyIzIpDfFl3Sk1jvi hS/5IL0DHUOvG0P6sbP3RfhDO5jcrZyKkw3GDZLOksZq1IjR6goEpGuuz3Gj1ciFcMtM XaSp4el9QrHsEKHqViLFS1iUdzg9eOMSzt8P/tn31Seo2hjElS8KvUVdi02VyR1ZY5o3 O24w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=EluuUmnb; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bd6si6725080plb.56.2019.03.22.05.49.22; Fri, 22 Mar 2019 05:49:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=EluuUmnb; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387847AbfCVL6e (ORCPT + 99 others); Fri, 22 Mar 2019 07:58:34 -0400 Received: from mail.kernel.org ([198.145.29.99]:35218 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387838AbfCVL6a (ORCPT ); Fri, 22 Mar 2019 07:58:30 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 031B820850; Fri, 22 Mar 2019 11:58:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553255909; bh=0fI+ZXnX7s2QP62W3hcyl+l7OMo8QRcIQj7SwJzuci4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EluuUmnbJFUiH3rHuw2uMdRLXdUmHdbd6pQ5iFv//6ROhSYKAMZfe6rVnm515HgsC A8ZBROx3ymAIWZ+Tq8qrmsAEHxDQvF5+y0o8H8+c/Hf91rXtSqdsGchz6rPxqB3raS xiuTYuaS3fmmgV+bloeUlGpxIX+4Qo3LQkGGrL1Y= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jens Axboe , Jianchao Wang , Sasha Levin Subject: [PATCH 4.19 051/280] blk-mq: insert rq with DONTPREP to hctx dispatch list when requeue Date: Fri, 22 Mar 2019 12:13:24 +0100 Message-Id: <20190322111309.169307172@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190322111306.356185024@linuxfoundation.org> References: <20190322111306.356185024@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit aef1897cd36dcf5e296f1d2bae7e0d268561b685 ] When requeue, if RQF_DONTPREP, rq has contained some driver specific data, so insert it to hctx dispatch list to avoid any merge. Take scsi as example, here is the trace event log (no io scheduler, because RQF_STARTED would prevent merging), kworker/0:1H-339 [000] ...1 2037.209289: block_rq_insert: 8,0 R 4096 () 32768 + 8 [kworker/0:1H] scsi_inert_test-1987 [000] .... 2037.220465: block_bio_queue: 8,0 R 32776 + 8 [scsi_inert_test] scsi_inert_test-1987 [000] ...2 2037.220466: block_bio_backmerge: 8,0 R 32776 + 8 [scsi_inert_test] kworker/0:1H-339 [000] .... 2047.220913: block_rq_issue: 8,0 R 8192 () 32768 + 16 [kworker/0:1H] scsi_inert_test-1996 [000] ..s1 2047.221007: block_rq_complete: 8,0 R () 32768 + 8 [0] scsi_inert_test-1996 [000] .Ns1 2047.221045: block_rq_requeue: 8,0 R () 32776 + 8 [0] kworker/0:1H-339 [000] ...1 2047.221054: block_rq_insert: 8,0 R 4096 () 32776 + 8 [kworker/0:1H] kworker/0:1H-339 [000] ...1 2047.221056: block_rq_issue: 8,0 R 4096 () 32776 + 8 [kworker/0:1H] scsi_inert_test-1986 [000] ..s1 2047.221119: block_rq_complete: 8,0 R () 32776 + 8 [0] (32768 + 8) was requeued by scsi_queue_insert and had RQF_DONTPREP. Then it was merged with (32776 + 8) and issued. Due to RQF_DONTPREP, the sdb only contained the part of (32768 + 8), then only that part was completed. The lucky thing was that scsi_io_completion detected it and requeued the remaining part. So we didn't get corrupted data. However, the requeue of (32776 + 8) is not expected. Suggested-by: Jens Axboe Signed-off-by: Jianchao Wang Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- block/blk-mq.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/block/blk-mq.c b/block/blk-mq.c index 23a53b67cf0d..7d53f2314d7c 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -701,12 +701,20 @@ static void blk_mq_requeue_work(struct work_struct *work) spin_unlock_irq(&q->requeue_lock); list_for_each_entry_safe(rq, next, &rq_list, queuelist) { - if (!(rq->rq_flags & RQF_SOFTBARRIER)) + if (!(rq->rq_flags & (RQF_SOFTBARRIER | RQF_DONTPREP))) continue; rq->rq_flags &= ~RQF_SOFTBARRIER; list_del_init(&rq->queuelist); - blk_mq_sched_insert_request(rq, true, false, false); + /* + * If RQF_DONTPREP, rq has contained some driver specific + * data, so insert it to hctx dispatch list to avoid any + * merge. + */ + if (rq->rq_flags & RQF_DONTPREP) + blk_mq_request_bypass_insert(rq, false); + else + blk_mq_sched_insert_request(rq, true, false, false); } while (!list_empty(&rq_list)) { -- 2.19.1