From patchwork Fri Mar 10 07:38:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu Kuai X-Patchwork-Id: 67256 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp739038wrd; Thu, 9 Mar 2023 23:56:11 -0800 (PST) X-Google-Smtp-Source: AK7set87H9160CukgRqTvlvBN0R6k9XIhX0ECekpXmja1nynaxvNnd2HZoYn7WGaThj2bxErNQEZ X-Received: by 2002:a17:90b:3d88:b0:237:8fc5:ed8d with SMTP id pq8-20020a17090b3d8800b002378fc5ed8dmr25337642pjb.46.1678434971537; Thu, 09 Mar 2023 23:56:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678434971; cv=none; d=google.com; s=arc-20160816; b=SGrbXuBv6ymXK39CohPR9wo+CNVZ3B+cBVl2VfIgxsfhejS641ZicB9q4Qvi6a4fvX 6oRQVlZ+UANp58ITynFrVVp1kMeKn2JNxffwUc4LpCYZg5PoQ47ZKQkWDpEIDfW8xVPC aj6HPkUvh6ounehJdnBF+VgANZSU+Oo3Lqi2207fQ8VwJfDbd756PImUNQ6cPtTnRPqs ihILRzE/8JFDMtlwo6gZC/tKsPBfwEhNlS1Ef5wMXZ+jOMv/1Thl/pfkRwRFpV9pVDM4 eKopuDydLtLXaioHOHDXOOrRXAS1CrY5VHy1kyoY7/cErKT9TMYbAikOSzLeWRe6kyho u7BA== 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=6Orz06cobenn9AU3UUL8NEIuMFh9Q+2w2RJgf7ljhIg=; b=icwjwPJMVxSt5TIfYt5AvzcJl09vtu7frgUjsZJl/JUrJk88v6v92+rPSX/vEBtQFx hflGw7D6NcdAU6qk1Us4ylDfksTJCExs4N/zqljbiHegNuyebsajQIQYCqrC68pwP/8A G2X/x9uRg/IfQ2otWrCny7jtEcFa4JEWQ36+uQknte0oI3oBKFMTznKyqPn5IX+8tvxn RmCHSkm0r5yMCca/6afwjXb7GwmN4VjVISXfWVQjsDqPS9jDBlfw7//idzEm+oXMl9pH nHuNkXFlMEIY6BOwSriezl1fRNZorbQEim2VSRfCwtZ1gR0cBPbwKZHg0ja+/3l1eQ1a 4/XQ== 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 Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id nu18-20020a17090b1b1200b00225eb9af940si2098703pjb.183.2023.03.09.23.55.58; Thu, 09 Mar 2023 23:56:11 -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 S230018AbjCJHkm (ORCPT + 99 others); Fri, 10 Mar 2023 02:40:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230361AbjCJHju (ORCPT ); Fri, 10 Mar 2023 02:39:50 -0500 Received: from dggsgout11.his.huawei.com (unknown [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 56237F9ED4; Thu, 9 Mar 2023 23:39:38 -0800 (PST) Received: from mail02.huawei.com (unknown [172.30.67.169]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PXycP1wcVz4f3nTY; Fri, 10 Mar 2023 15:39:33 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.127.227]) by APP3 (Coremail) with SMTP id _Ch0CgDn4R+03gpkwSimEg--.34063S6; Fri, 10 Mar 2023 15:39:34 +0800 (CST) From: Yu Kuai To: guoqing.jiang@linux.dev, song@kernel.org, jgq516@gmail.com, neilb@suse.de, shli@fb.com, lzhong@suse.com Cc: linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, yukuai3@huawei.com, yukuai1@huaweicloud.com, yi.zhang@huawei.com, yangerkun@huawei.com Subject: [PATCH v2 2/6] md: fix soft lockup in status_resync Date: Fri, 10 Mar 2023 15:38:51 +0800 Message-Id: <20230310073855.1337560-3-yukuai1@huaweicloud.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230310073855.1337560-1-yukuai1@huaweicloud.com> References: <20230310073855.1337560-1-yukuai1@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: _Ch0CgDn4R+03gpkwSimEg--.34063S6 X-Coremail-Antispam: 1UD129KBjvJXoW7tw4UXryrCry7tFW3Xw1xAFb_yoW8Aryrpa 93ZFWxArWFvFWxJrZxJr1UZa4rAa4FyrZrKF4Uuw43ZF1fCr1jyr1UCF4DWrykWF95Jryj qa4Fyr98CF1UZ3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUBE14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_Jryl82xGYIkIc2 x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0 Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwACI402YVCY1x02628vn2kIc2 xKxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v2 6r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2 Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_ Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMI IF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUHbyAUUUUU = X-CM-SenderInfo: 51xn3trlr6x35dzhxuhorxvhhfrp/ X-CFilter-Loop: Reflected X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_00,KHOP_HELO_FCRDNS, MAY_BE_FORGED,SPF_HELO_NONE,SPF_NONE autolearn=no 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759966628656204713?= X-GMAIL-MSGID: =?utf-8?q?1759966628656204713?= From: Yu Kuai status_resync() will calculate 'curr_resync - recovery_active' to show user a progress bar like following: [============>........] resync = 61.4% 'curr_resync' and 'recovery_active' is updated in md_do_sync(), and status_resync() can read them concurrently, hence it's possible that 'curr_resync - recovery_active' can overflow to a huge number. In this case status_resync() will be stuck in the loop to print a large amount of '=', which will end up soft lockup. Fix the problem by setting 'resync' to MD_RESYNC_ACTIVE in this case, this way resync in progress will be reported to user. Signed-off-by: Yu Kuai --- drivers/md/md.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/md/md.c b/drivers/md/md.c index 546b1b81eb28..98970bbe32bf 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -8009,16 +8009,16 @@ static int status_resync(struct seq_file *seq, struct mddev *mddev) } else if (resync > max_sectors) { resync = max_sectors; } else { - resync -= atomic_read(&mddev->recovery_active); - if (resync < MD_RESYNC_ACTIVE) { - /* - * Resync has started, but the subtraction has - * yielded one of the special values. Force it - * to active to ensure the status reports an - * active resync. - */ + res = atomic_read(&mddev->recovery_active); + /* + * Resync has started, but the subtraction has overflowed or + * yielded one of the special values. Force it to active to + * ensure the status reports an active resync. + */ + if (resync < res || resync - res < MD_RESYNC_ACTIVE) resync = MD_RESYNC_ACTIVE; - } + else + resync -= res; } if (resync == MD_RESYNC_NONE) {