From patchwork Thu Jul 20 01:26:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Junxiao Bi X-Patchwork-Id: 9853443 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D951E600F5 for ; Thu, 20 Jul 2017 01:25:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A9FA928702 for ; Thu, 20 Jul 2017 01:25:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9E6B62871C; Thu, 20 Jul 2017 01:25:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 2A99528702 for ; Thu, 20 Jul 2017 01:25:57 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dY0BN-0003ls-T9; Thu, 20 Jul 2017 01:23:13 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dY0BN-0003lm-6t for xen-devel@lists.xenproject.org; Thu, 20 Jul 2017 01:23:13 +0000 Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id 05/0B-02175-00600795; Thu, 20 Jul 2017 01:23:12 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrMIsWRWlGSWpSXmKPExsUyZ7p8oO5/1oJ Ig/VrtS2+b5nM5MDocfjDFZYAxijWzLyk/IoE1oyFt54wF1zjrmjae5qlgXEtZxcjF4eQwA4m icaGmYxdjJxAzmwmie0LHSES1xglZp4+xALhTGeUmL7mJhNIFZuAhsTySRPZQWwRASmJ1Rvvs YLYzAJKEvvPXgOaxMEhLGAh8eKfBojJIqAq0f9SCKSCV8BVYsO8x8wgYQkBBYk5k2wgwoISJ2 c+YQEJMwuoS6yfJwQxT16ieetsZhBbQsBYov3tRbYJjPyzkHTMQuiYhaRjASPzKkaN4tSistQ iXSMTvaSizPSMktzEzBxdQwNTvdzU4uLE9NScxKRiveT83E2MwACsZ2Bg3MF4c7LfIUZJDiYl Ud45vPmRQnxJ+SmVGYnFGfFFpTmpxYcYZTg4lCR4i1gKIoUEi1LTUyvSMnOAsQCTluDgURLhf ccMlOYtLkjMLc5Mh0idYtTleDXh/zcmIZa8/LxUKXHeNpAZAiBFGaV5cCNgcXmJUVZKmJeRgY FBiKcgtSg3swRV/hWjOAejkjBvCcgUnsy8ErhNr4COYAI6Qtg3B+SIkkSElFQDI1ezyHruyJ0 dnXZLn+yWd2jO2tV9jPf4+1Wub3gknr56//FCO0/LtyZvaQMXtT/5U0Lr2EUW5s9eeIDlXsN2 ttrkRLv57yTZfsi6vdkSy9N1purseovnq3bpX13/bLL323k/LPYcOjRb7vbFRZ3+dvW3rCx0o ktiVLV23meeOuf9WdGAFnV3bSWW4oxEQy3mouJEALRAhFzGAgAA X-Env-Sender: junxiao.bi@oracle.com X-Msg-Ref: server-3.tower-206.messagelabs.com!1500513789!100072180!1 X-Originating-IP: [156.151.31.81] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTU2LjE1MS4zMS44MSA9PiAyODgzMzk=\n X-StarScan-Received: X-StarScan-Version: 9.4.25; banners=-,-,- X-VirusChecked: Checked Received: (qmail 14990 invoked from network); 20 Jul 2017 01:23:11 -0000 Received: from userp1040.oracle.com (HELO userp1040.oracle.com) (156.151.31.81) by server-3.tower-206.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 20 Jul 2017 01:23:11 -0000 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id v6K1N8vX030645 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 20 Jul 2017 01:23:09 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id v6K1N6u4016814 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 20 Jul 2017 01:23:06 GMT Received: from abhmp0006.oracle.com (abhmp0006.oracle.com [141.146.116.12]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id v6K1N5dd016932 for ; Thu, 20 Jul 2017 01:23:06 GMT Received: from bijx-OptiPlex-780.cn.oracle.com (/10.182.64.189) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 19 Jul 2017 18:23:04 -0700 From: Junxiao Bi To: konrad.wilk@oracle.com Date: Thu, 20 Jul 2017 09:26:21 +0800 Message-Id: <1500513981-28992-1-git-send-email-junxiao.bi@oracle.com> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 X-Source-IP: aserv0022.oracle.com [141.146.126.234] Cc: xen-devel@lists.xenproject.org Subject: [Xen-devel] [PATCH v2] xen-blkfront: fix mq start/stop race X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP When ring buf full, hw queue will be stopped. While blkif interrupt consume request and make free space in ring buf, hw queue will be started again. But since start queue is protected by spin lock while stop not, that will cause a race. interrupt: process: blkif_interrupt() blkif_queue_rq() kick_pending_request_queues_locked() blk_mq_start_stopped_hw_queues() clear_bit(BLK_MQ_S_STOPPED, &hctx->state) blk_mq_stop_hw_queue(hctx) blk_mq_run_hw_queue(hctx, async) If ring buf is made empty in this case, interrupt will never come, then the hw queue will be stopped forever, all processes waiting for the pending io in the queue will hung. Signed-off-by: Junxiao Bi Reviewed-by: Ankur Arora Acked-by: Roger Pau Monné --- drivers/block/xen-blkfront.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index c852ed3c01d5..5468be4f8075 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -906,8 +906,8 @@ static blk_status_t blkif_queue_rq(struct blk_mq_hw_ctx *hctx, return BLK_STS_IOERR; out_busy: - spin_unlock_irqrestore(&rinfo->ring_lock, flags); blk_mq_stop_hw_queue(hctx); + spin_unlock_irqrestore(&rinfo->ring_lock, flags); return BLK_STS_RESOURCE; }