Received: by 2002:a05:6358:489b:b0:bb:da1:e618 with SMTP id x27csp7760400rwn; Wed, 14 Sep 2022 04:11:18 -0700 (PDT) X-Google-Smtp-Source: AA6agR4HASxNnl9rPtQXDfZFWtxyO+F66X4cq0lYeSSFfvJhY/rElwunAroJ/S6oBf6FAZjFYYuC X-Received: by 2002:aa7:db0a:0:b0:44e:5868:f489 with SMTP id t10-20020aa7db0a000000b0044e5868f489mr30541604eds.299.1663153878315; Wed, 14 Sep 2022 04:11:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663153878; cv=none; d=google.com; s=arc-20160816; b=ymHUHDRqETgHFh8OgRXQHaTgmGQ7du9hOE1TBEZ6s82PWUnYP7bRaw2cRHVQu2Vmlf C6GRZZaV0RiJff2SKrxfn3OWcQdkGV7uWoPOBh0xSZG0W9FDVUhOgfdqLuOlBw/QMMB4 MOwDYa0f95npsBw30fjT7ikqP9ieWvJM1rIzoF4UiCN0LbyHw50wcO6vTJ4ug2mpTp5a AVQ8rFBplEs0HfEgWA9m15ucGzTUZRrFB8CLeM9hxhMFRKClWf33P7Vf7uamC7WlEeum ZX508IE3yHllygkf0RxWGUW6F0w+cRe5AU4xhGtubaUqaOufIXHG//H+xdacoeCNeP86 SoYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to :mime-version:user-agent:date:message-id:from:references:cc:to :subject; bh=6OCVFWXJg8LsA1KzUbakPGCqXjsuR5r6LnTmp74rOuA=; b=aA6oY0Sr8v3k81gl0RLbpdNYb4QFnV9CsGpP7QhFmNWgRI6My7USfXRsDC/QBV6H5Q r7dbjqcZwccuYVXWfLiMZ+4VKgnAsCJ5H7yrwvYMxhQwBn1Oalw1JVRKTBFZW8knE0Sq 6D0GqRyYvzlMC4tggMnZPgVRfUyLiFWrVjTgJQP9k2dqkE8LRLJRQpX0S1Y1y9KuigXF 8HU+fpG3EwSIbaOw2LzrKyA5gLps7Q2B+I9jFtl/bia+1jr0BvhADdZUx92+hb4BsYCa AmHAW+W+mVNykVToMr/1J3yRqRObOO7b6j0FwwDt5dhtmtsW5Pe0dYnMdXPJQ/gCB9a9 dYyg== 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 ji5-20020a170907980500b0077bd074d50bsi10403561ejc.105.2022.09.14.04.10.52; Wed, 14 Sep 2022 04:11:18 -0700 (PDT) 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 S229802AbiINK2X (ORCPT + 99 others); Wed, 14 Sep 2022 06:28:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229539AbiINK2V (ORCPT ); Wed, 14 Sep 2022 06:28:21 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 681DE7C762; Wed, 14 Sep 2022 03:28:19 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4MSGhc64P3zKNZJ; Wed, 14 Sep 2022 18:26:24 +0800 (CST) Received: from [10.174.176.73] (unknown [10.174.176.73]) by APP2 (Coremail) with SMTP id Syh0CgA3inPBrCFjuFVUAw--.57050S3; Wed, 14 Sep 2022 18:28:17 +0800 (CST) Subject: Re: [PATCH v2 1/4] md/raid10: cleanup wait_barrier() To: Paul Menzel , Yu Kuai Cc: song@kernel.org, logang@deltatee.com, guoqing.jiang@linux.dev, linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, yi.zhang@huawei.com, "yukuai (C)" References: <20220914014914.398712-1-yukuai1@huaweicloud.com> <20220914014914.398712-2-yukuai1@huaweicloud.com> <0b67df9e-7f64-e710-5928-2098ed8d0f2d@molgen.mpg.de> From: Yu Kuai Message-ID: <302127e5-67fa-1ff0-0551-4719005640b8@huaweicloud.com> Date: Wed, 14 Sep 2022 18:28:17 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <0b67df9e-7f64-e710-5928-2098ed8d0f2d@molgen.mpg.de> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-CM-TRANSID: Syh0CgA3inPBrCFjuFVUAw--.57050S3 X-Coremail-Antispam: 1UD129KBjvJXoW3WFWDWFyxJryUKFWrZw4Utwb_yoW7Xr4xpr n5JrWUJryUJrn5Jr1UJr1UAFyUJr18J3WDJr18XF1DJr4UAr1jgr1UXryvgr1UJr48Jr1U Jr1UJrnrZr1UJr7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkK14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc CE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E 2Ix0cI8IcVAFwI0_Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJV W8JwACjcxG0xvEwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lc7I2V7IY0VAS07AlzVAY IcxG8wCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14 v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkG c2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI 0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6Fyj6rWUJwCI42IY6I8E87Iv67AKxVW8JVWx JwCI42IY6I8E87Iv6xkF7I0E14v26r4UJVWxJrUvcSsGvfC2KfnxnUUI43ZEXa7VUbE_M3 UUUUU== X-CM-SenderInfo: 51xn3trlr6x35dzhxuhorxvhhfrp/ X-CFilter-Loop: Reflected X-Spam-Status: No, score=-3.5 required=5.0 tests=BAYES_00,NICE_REPLY_A, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE 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 Hi, Paul 在 2022/09/14 14:36, Paul Menzel 写道: > Dear Yu, > > > Thank you for the improved patch. Three minor nits. > > Am 14.09.22 um 03:49 schrieb Yu Kuai: >> From: Yu Kuai > > In the summary/title, I’d spell *Clean up* with a space. Maybe even use: > > md/raid10: Factor out code from wait_barrier() to stop_waiting_barrier() Ok, sounds good, I'll change that in next version. > >> Currently the nasty condition is wait_barrier() is hard to read. This >> patch factor out the condition into a function. > > The first *is* above can be removed, and factor*s* needs an s. Yes, you're right. >> There are no functional changes. >> >> Signed-off-by: Yu Kuai >> --- >>   drivers/md/raid10.c | 56 ++++++++++++++++++++++++++------------------- >>   1 file changed, 32 insertions(+), 24 deletions(-) >> >> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c >> index 64d6e4cd8a3a..56458a53043d 100644 >> --- a/drivers/md/raid10.c >> +++ b/drivers/md/raid10.c >> @@ -957,44 +957,52 @@ static void lower_barrier(struct r10conf *conf) >>       wake_up(&conf->wait_barrier); >>   } >> +static bool stop_waiting_barrier(struct r10conf *conf) >> +{ >> +    /* barrier is dropped */ >> +    if (!conf->barrier) >> +        return true; >> + >> +    /* >> +     * If there are already pending requests (preventing the barrier >> from >> +     * rising completely), and the pre-process bio queue isn't empty, >> then >> +     * don't wait, as we need to empty that queue to get the nr_pending >> +     * count down. >> +     */ >> +    if (atomic_read(&conf->nr_pending)) { >> +        struct bio_list *bio_list = current->bio_list; >> + >> +        if (bio_list && (!bio_list_empty(&bio_list[0]) || >> +                 !bio_list_empty(&bio_list[1]))) >> +            return true; >> +    } >> + >> +    /* move on if recovery thread is blocked by us */ >> +    if (conf->mddev->thread->tsk == current && >> +        test_bit(MD_RECOVERY_RUNNING, &conf->mddev->recovery) && >> +        conf->nr_queued > 0) >> +        return true; >> + >> +    return false; >> +} >> + >>   static bool wait_barrier(struct r10conf *conf, bool nowait) >>   { >>       bool ret = true; >>       spin_lock_irq(&conf->resync_lock); >>       if (conf->barrier) { >> -        struct bio_list *bio_list = current->bio_list; >> -        conf->nr_waiting++; >> -        /* Wait for the barrier to drop. >> -         * However if there are already pending >> -         * requests (preventing the barrier from >> -         * rising completely), and the >> -         * pre-process bio queue isn't empty, >> -         * then don't wait, as we need to empty >> -         * that queue to get the nr_pending >> -         * count down. >> -         */ >>           /* Return false when nowait flag is set */ >>           if (nowait) { >>               ret = false; >>           } else { >> +            conf->nr_waiting++; >>               raid10_log(conf->mddev, "wait barrier"); >>               wait_event_lock_irq(conf->wait_barrier, >> -                        !conf->barrier || >> -                        (atomic_read(&conf->nr_pending) && >> -                         bio_list && >> -                         (!bio_list_empty(&bio_list[0]) || >> -                          !bio_list_empty(&bio_list[1]))) || >> -                         /* move on if recovery thread is >> -                          * blocked by us >> -                          */ >> -                         (conf->mddev->thread->tsk == current && >> -                          test_bit(MD_RECOVERY_RUNNING, >> -                               &conf->mddev->recovery) && >> -                          conf->nr_queued > 0), >> +                        stop_waiting_barrier(conf), >>                           conf->resync_lock); >> +            conf->nr_waiting--; >>           } >> -        conf->nr_waiting--; >>           if (!conf->nr_waiting) >>               wake_up(&conf->wait_barrier); >>       } > > Acked-by: Paul Menzel Thanks, Kuai > > > Kind regards, > > Paul > > . >