Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp5386222rwb; Sun, 4 Dec 2022 20:47:08 -0800 (PST) X-Google-Smtp-Source: AA0mqf6VLEgxaROdM8PVwscZ0WSIa8gyqTeiuGx4vTtrcEIuzNK0e8tjB+EDUWkz9PAk6mkFS67t X-Received: by 2002:a17:907:80cd:b0:7bb:35b4:777d with SMTP id io13-20020a17090780cd00b007bb35b4777dmr10507102ejc.302.1670215628024; Sun, 04 Dec 2022 20:47:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670215628; cv=none; d=google.com; s=arc-20160816; b=ElRPTyQ5xtYB5tariU+AI+Sz6mgnk+1Tj1HRDEqOpTG8KUzgtx5L7d92SMwGYhy6YX apsJ4+6suCZsojKVSf5b2gHaRTWa9Eu3rYsAxPYAGfzXj1CbfmpP36oNR9w8+tWNNpaQ F17nZmLOVbbCS5JY9QwDvk2EbhCSnARsqjw0Pd2waCIewXOtQlt+Xl/mJogMXyzFoiNN kOXw1vp/CPwzMsWFAuemsa5tr0UKEd7JLS5Iv4n+H1QYcPBZJKw+7Ri90RwPCq3pL1lh ECE+L2tfp57/IgkTgd41gz/RUG0prXbwJWfCS3Gi7Hiwv/LjRKI+EJ4Ua0JkhihJ3HNq xI4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=iY0VKHHd/WijrgjmEC0KpHtY4Gbr9xqx1YU+7MY8OTM=; b=Cmzp/PnNzcRUtMrST9037DZb0/DPoUbFPfh59Q44dZuQwO9j73TXw41BD9+zUye3C2 LGDYTLTRv3l3XkgytaMvwmozOCi5wco6/8yVDn9ZqkUonfP73YFRWeEg4H8WEfeBBFV+ yF+he+ygMabD+pscnCD7zoIG22eG14V2lFIXHrBf9/4QgxmGf1cSoZ/6sM0Lbc5Rc90e 8jBaEWobKx3mlBR0sgcgkQLVOYNKp1ay5im7bg6vGR3FVlgcgDlZwPzPdZQlkz3Zm7bf F20ctOoigSTWbCl3pPJnigpJNjXqXQtukS7/liaFxicTxOY4Vw9pFiaYSk3/GVYIGaun LSNg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hv8-20020a17090760c800b007c0d4287965si5332872ejc.220.2022.12.04.20.46.48; Sun, 04 Dec 2022 20:47:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231454AbiLED6L (ORCPT + 82 others); Sun, 4 Dec 2022 22:58:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231222AbiLED6B (ORCPT ); Sun, 4 Dec 2022 22:58:01 -0500 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A720FFCE2; Sun, 4 Dec 2022 19:57:58 -0800 (PST) Received: from mail02.huawei.com (unknown [172.30.67.153]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4NQVBT1s5jz4f3kq4; Mon, 5 Dec 2022 11:57:53 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP1 (Coremail) with SMTP id cCh0CgDXfq1CbI1jRaRVBg--.57323S5; Mon, 05 Dec 2022 11:57:56 +0800 (CST) From: Kemeng Shi To: tj@kernel.org, josef@toxicpanda.com, axboe@kernel.dk Cc: cgroups@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huawei.com, linfeilong@huawei.com, liuzhiqiang26@huawei.com Subject: [PATCH v3 3/9] blk-throttle: ignore cgroup without io queued in blk_throtl_cancel_bios Date: Mon, 5 Dec 2022 19:57:03 +0800 Message-Id: <20221205115709.251489-4-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20221205115709.251489-1-shikemeng@huaweicloud.com> References: <20221205115709.251489-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: cCh0CgDXfq1CbI1jRaRVBg--.57323S5 X-Coremail-Antispam: 1UD129KBjvJXoW7Kw4UWw4rur1kXrW3Cr4DArb_yoW8ArWxpr W09F15Cw4qqrs0gr4agF17XayrZrWkArW5G3s5JF1ay3yxt342qF1vvFWrXw4SqFs3KFWj vF43t348W3W8u3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUB0b4IE77IF4wAFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M2 8IrcIa0xkI8VA2jI8067AKxVWUWwA2048vs2IY020Ec7CjxVAFwI0_Xr0E3s1l8cAvFVAK 0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVWDJVCq3wA2z4 x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l 84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I 8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r106r15McIj6I8E87Iv67AK xVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41l42xK82IYc2Ij64 vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8G jcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1q6r43MIIYrxkI7VAKI48JMIIF0xvE2I x0cI8IcVAFwI0_Gr0_Xr1lIxAIcVC0I7IYx2IY6xkF7I0E14v26r4j6F4UMIIF0xvE42xK 8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVW8JVWxJwCI42IY6I8E87Iv6xkF7I 0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjxUx4SrUUUUU X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-CFilter-Loop: Reflected X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00,DATE_IN_FUTURE_06_12, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kemeng Shi Ignore cgroup without io queued in blk_throtl_cancel_bios for two reasons: 1. Save cpu cycle for trying to dispatch cgroup which is no io queued. 2. Avoid non-consistent state that cgroup is inserted to service queue without THROTL_TG_PENDING set as tg_update_disptime will unconditional re-insert cgroup to service queue. If we are on the default hierarchy, IO dispatched from child in tg_dispatch_one_bio will trigger inserting cgroup to service queue without erase first and ruin the tree. Signed-off-by: Kemeng Shi Acked-by: Tejun Heo Signed-off-by: Kemeng Shi --- block/blk-throttle.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/block/blk-throttle.c b/block/blk-throttle.c index 2444ebf5f11d..75010110d481 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c @@ -1738,7 +1738,18 @@ void blk_throtl_cancel_bios(struct gendisk *disk) * Set the flag to make sure throtl_pending_timer_fn() won't * stop until all throttled bios are dispatched. */ - blkg_to_tg(blkg)->flags |= THROTL_TG_CANCELING; + tg->flags |= THROTL_TG_CANCELING; + + /* + * Do not dispatch cgroup without THROTL_TG_PENDING or cgroup + * will be inserted to service queue without THROTL_TG_PENDING + * set in tg_update_disptime below. Then IO dispatched from + * child in tg_dispatch_one_bio will trigger double insertion + * and corrupt the tree. + */ + if (!(tg->flags & THROTL_TG_PENDING)) + continue; + /* * Update disptime after setting the above flag to make sure * throtl_select_dispatch() won't exit without dispatching. -- 2.30.0