From patchwork Wed Apr 12 17:28:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82334 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp185820vqo; Wed, 12 Apr 2023 02:27:43 -0700 (PDT) X-Google-Smtp-Source: AKy350ZufAX6rb/OvC16xkZmP5BBep54xilRdsKuN4AM3BkC2hmEok6ryeTvsWy+7ByfpBYcNOpe X-Received: by 2002:a17:906:1857:b0:94a:4e86:31bc with SMTP id w23-20020a170906185700b0094a4e8631bcmr2140676eje.13.1681291663735; Wed, 12 Apr 2023 02:27:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681291663; cv=none; d=google.com; s=arc-20160816; b=ytXsmtk5bG1IeZXfqsWKuxmGj7dyOfmoNuWBVeY+yHpUOU0fQND1r+kcFQ9t/hqLOe HTaxtIjSBifn7zMupMWyWIytJDugFXXxZYkn02i7jqHJVPHhiMfCSLBs3OQeC+WH8xr/ QqJDko/PGlPPkp/6Ssie6yakY0V8K6JXEQSCFp6rYy80p6lTe8t/bAPP5J3o4KpHdb0V I/Htmp3zeXRNdmWXJR4J4O7QHmsku2n+D4PKHr2g5DHb9b2cGrfhGbznHDtUOVb38QLU kDbYyHSy5cGT2+4Yu6oWj6tRoCsIVSIxpIJZwbEwZ2TDpOkgQW5oV0HEr9gZDPKVk1+X jgKw== 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=0Pz/+hA3/k17hzjs/mAd0i4dqiy5pfuwBURvEv2sPxY=; b=SThdJfFw/ah5QIKfBSF+iXd8VtBuid3N0QsIU/WXMvlv0omUUPjZ0xfdbMOaHpegm4 TvXoNeUXM6x7Tg2WEDwANVgWofzzi+ttF+MoJ13De6oBcJTobOwW0+9MW6sVVvuazafS ax08sug5D7Wj2RNXPIVGmS6azmsCF/L914TBqolZmJm5/Hj+Ygq7suX6j9ReRcTs0trI mI+pJ/aviKtYGot8akBMk5aKPMz8a2LwB6oAMz3yu07QxTiUzbTrjyPK2HFKM8b41RV0 Wm2zcxTNTFn3QaVj5DDqZ8NOmV9/BfMy8CJJKx/AZCCz4N7zc8z5mhSpYmm/comqxCBB KEZg== 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 vt6-20020a170907a60600b0094a82b4e9d8si2082546ejc.149.2023.04.12.02.27.20; Wed, 12 Apr 2023 02:27:43 -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 S230162AbjDLJ0U (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40224 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230028AbjDLJ0M (ORCPT ); Wed, 12 Apr 2023 05:26:12 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C325E7EEC; Wed, 12 Apr 2023 02:26:10 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ55q7Gz4f3vd3; Wed, 12 Apr 2023 17:26:05 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S3; Wed, 12 Apr 2023 17:26:07 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 01/19] ext4: fix wrong unit use in ext4_mb_normalize_request Date: Thu, 13 Apr 2023 01:28:15 +0800 Message-Id: <20230412172833.2317696-2-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S3 X-Coremail-Antispam: 1UD129KBjvdXoW7XF17Jw43uF45Kry3AFy7Jrb_yoWDWrbEvF yjyrn7WrWrJw1aka1Sy3yfKr95Ka18tFnrZr43Z3yxuF1DWrWfua4qyr95A3yxG34UJay3 K34rXr1fWF4FgjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUb6AFF20E14v26r4j6ryUM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M28IrcIa0xkI8V A2jI8067AKxVWUGwA2048vs2IY020Ec7CjxVAFwI0_JFI_Gr1l8cAvFVAK0II2c7xJM28C jxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVWDJVCq3wA2z4x0Y4vE2Ix0cI 8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E 87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64 kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8JwAm 72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYx C7MxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_ Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc40Y0x 0EwIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8 JVWxJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIx AIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7sREgyCDUUUUU= = 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762962087513401054?= X-GMAIL-MSGID: =?utf-8?q?1762962087513401054?= NRL_CHECK_SIZE will compare input req and size, so req and size should be in same unit. Input req "fe_len" is in cluster unit while input size "(8<<20)>>bsbits" is in block unit. Convert "fe_len" to block unit to fix the mismatch. Signed-off-by: Kemeng Shi Reviewed-by: Ojaswin Mujoo --- fs/ext4/mballoc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 63a68cee36c6..6318c763a239 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -4056,7 +4056,7 @@ ext4_mb_normalize_request(struct ext4_allocation_context *ac, start_off = ((loff_t)ac->ac_o_ex.fe_logical >> (22 - bsbits)) << 22; size = 4 * 1024 * 1024; - } else if (NRL_CHECK_SIZE(ac->ac_o_ex.fe_len, + } else if (NRL_CHECK_SIZE(EXT4_C2B(sbi, ac->ac_o_ex.fe_len), (8<<20)>>bsbits, max, 8 * 1024)) { start_off = ((loff_t)ac->ac_o_ex.fe_logical >> (23 - bsbits)) << 23; From patchwork Wed Apr 12 17:28:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82346 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp195703vqo; Wed, 12 Apr 2023 02:48:05 -0700 (PDT) X-Google-Smtp-Source: AKy350bWr9pRv1Jm6gASHHpSdqdEATI+2YuA02xh/BbP2sN0rh9N57W4tH9DanJMlPS6bF5i8yC3 X-Received: by 2002:a05:6402:4d:b0:504:882a:26c with SMTP id f13-20020a056402004d00b00504882a026cmr5148333edu.2.1681292885583; Wed, 12 Apr 2023 02:48:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681292885; cv=none; d=google.com; s=arc-20160816; b=qBvvOHc52oSMOo6N/OSx4lalEDgTsBww/4kjiIoaYZBKZDiFbFnLMssmopvg3qFxOC biiQTi0hGx2q2ch3WeJRp7uIafdUrqPLRe7DDtfRWBzChV5sCewidJe40iBUp1IOfjcO ueRhoWhImARec5LjgxaOk9Zf2At+s5YEBKaHuNDeOpVtTyXPogdHhUPSruwIE15svq6i dzm+5UwMGzj8GiPc8PjlphZMuLSumjEkGcG5iz5tmhammuSjDT81WcW/hQSQ2pd8bsBm prXyzH0FF85UYWyblNA+PU3RV+fv+tDHO/2i7TN0cs6J7HV1Gs+vq0BJwFzwp6OZQwsQ 2obQ== 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=DwYo8HuzX7rVyUTy//28FRtCafTRNDXpW1I8VNiaUx4=; b=LzieuT+GAHfnX6nlNdy889laH8taDXFD6ZgvcIQxjup5m7jPgwMrtnaWhgj4E0nyi6 2QsmjvuoCTBBO3tgmzcHUMillaIellUgDi02tQGY1+GXL+vaBIaWEntulsU4jwSeRrKE il6fV5Z4Q2hH+UVuO3umk5Lc3IuhRbPoVlOxj81K6gzVBs9lZ3/YQHMKzefED+9sjsiJ swsdrdI06Azvz+3YNg3DJsqH5yUM3HW8osBDTj3Oo3uihmk2HJkZ0sYM+HKe6ZM93GdK tWFNbvJYNBt40er6IwSB5wSeFm0KkkSWk+/bhNJSMyp/U3OOEZ8DKkY3dt1qsrkpdfCd caUA== 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 f24-20020aa7d858000000b0050489dffcc6si8965172eds.270.2023.04.12.02.47.41; Wed, 12 Apr 2023 02:48:05 -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 S230416AbjDLJ0h (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230029AbjDLJ0M (ORCPT ); Wed, 12 Apr 2023 05:26:12 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BA66D72AA; Wed, 12 Apr 2023 02:26:10 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ60vKbz4f3wgB; Wed, 12 Apr 2023 17:26:06 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S4; Wed, 12 Apr 2023 17:26:07 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 02/19] ext4: fix unit mismatch in ext4_mb_new_blocks_simple Date: Thu, 13 Apr 2023 01:28:16 +0800 Message-Id: <20230412172833.2317696-3-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S4 X-Coremail-Antispam: 1UD129KBjvJXoW7tw1DGFW3GrWkCw47ZF45GFg_yoW8Gw4rpw sxtF10kr1xWr1DuF47u3yFqw1Svw1xur17XrW5u34rWrWxXryxGFs3tF1rtF1rtFZxX3ZI qr15Zryruw48G3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPSb4IE77IF4wAFF20E14v26ryj6rWUM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M2 8IrcIa0xkI8VA2jI8067AKxVWUXwA2048vs2IY020Ec7CjxVAFwI0_Gr0_Xr1l8cAvFVAK 0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVWDJVCq3wA2z4 x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l 84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I 8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AK xVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zV CS5cI20VAGYxC7MxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E 5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAV WUtwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY 1x0267AKxVW8JVWxJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI 0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7s RNVbyUUUUUU== 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762963368796729689?= X-GMAIL-MSGID: =?utf-8?q?1762963368796729689?= The "i" returned from mb_find_next_zero_bit is in cluster unit and we need offset "block" corresponding to "i" in block unit. Convert "i" to block unit to fix the unit mismatch. Signed-off-by: Kemeng Shi Reviewed-by: Ojaswin Mujoo --- fs/ext4/mballoc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 6318c763a239..7f695830621a 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5761,6 +5761,7 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, { struct buffer_head *bitmap_bh; struct super_block *sb = ar->inode->i_sb; + struct ext4_sb_info *sbi = EXT4_SB(sb); ext4_group_t group; ext4_grpblk_t blkoff; ext4_grpblk_t max = EXT4_CLUSTERS_PER_GROUP(sb); @@ -5789,7 +5790,8 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, if (i >= max) break; if (ext4_fc_replay_check_excluded(sb, - ext4_group_first_block_no(sb, group) + i)) { + ext4_group_first_block_no(sb, group) + + EXT4_C2B(sbi, i))) { blkoff = i + 1; } else break; @@ -5806,7 +5808,7 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, return 0; } - block = ext4_group_first_block_no(sb, group) + i; + block = ext4_group_first_block_no(sb, group) + EXT4_C2B(sbi, i); ext4_mb_mark_bb(sb, block, 1, 1); ar->len = 1; From patchwork Wed Apr 12 17:28:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82356 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp201664vqo; Wed, 12 Apr 2023 03:01:29 -0700 (PDT) X-Google-Smtp-Source: AKy350Y0GfpoUWj4Yy8r4kp2wo7YZz4+OTJ/ZKXBEhO8FiWFjTgyInkOXJTBgWy/C9QoKbWgeq2K X-Received: by 2002:a17:902:c40e:b0:1a1:c2cb:f44e with SMTP id k14-20020a170902c40e00b001a1c2cbf44emr7484436plk.53.1681293689071; Wed, 12 Apr 2023 03:01:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681293689; cv=none; d=google.com; s=arc-20160816; b=WRbQJT4/DJS7X8K7N5FYRPgQxt8RORPYjdr9muq0id1TfAiiYreImJTmcFtZgMhpiZ 6VbqsOtoZu+d9dMF/V7qb7iXmf7dvacBlVptgAIvlRjpjp6kIbB+nmVIO5SEQpriqIwv MZXiqnOG8NhH1NPv5Nv3p8ZG/azOASLj+O2d6SWN32w5OC6mOpIOF995syyAhE/XTydJ CcMDafvTf5Jxgd8sh59D+T9hDIntbnnOsnrACWErH1koO6oJ17bP+LA9opvDYbfo6Yuv AdF0C75q9d3Km2fre2+s7dxB8+KQs8Mz9aoQd1wD1zsZGrCw2G7owUERCy/ypU/qgEaw 3x2g== 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=lCrjev4lBxDcEEzQ3p52PnZ36zzi3Op1iYiHTjhkVZA=; b=y0QAi3HejvdnfCvW7ypuNzO2Yyos1VB+itOdNIC4SuYJw6despFsftsdtVuq9Wc4CT KRL8crIz3vs2xoXe8u2Un8HeSttU+J7iiid67tcb7pahn7SqZJ8IPhe/+3mxqHBM7lYi MNJMpm2qohx7hGdoZH8zytxuawk517spIFsHL861Sgf7STUQmlqxG+jXSAh3pBz/ZgYv dDFEz46duxD00fh+/varm+pkqofNu1mxXZQT3Ryb3MtYex5ydLPj/2gRZ4oIz8I1wgbz p4+wb5EDN3kVcsz6DkLWjXJDQcOELBKFs/LCSqha3mmDKLBK26V+AJ24HBnHUQLUe3pJ RxtQ== 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 f18-20020a170902ce9200b001a22091eea9si17200436plg.225.2023.04.12.03.00.52; Wed, 12 Apr 2023 03:01:29 -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 S230220AbjDLJ00 (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40326 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230036AbjDLJ0M (ORCPT ); Wed, 12 Apr 2023 05:26:12 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C7CED83C0; Wed, 12 Apr 2023 02:26:10 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ63T6Bz4f3wh9; Wed, 12 Apr 2023 17:26:06 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S5; Wed, 12 Apr 2023 17:26:08 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 03/19] ext4: fix wrong unit use in ext4_mb_find_by_goal Date: Thu, 13 Apr 2023 01:28:17 +0800 Message-Id: <20230412172833.2317696-4-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S5 X-Coremail-Antispam: 1UD129KBjvdXoWrZFWUCw4UZF4rCr4Duw43trb_yoWftwc_ta 1jyrWkGFWrJr1fC3WfAw4rtrnaga18Jr4jgFWrtry5WF1qgrW0k3WvkrsxZwn7Wa1jqa9x KrnxXrW8GF1F9jkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUbqAYFVCjjxCrM7AC8VAFwI0_Wr0E3s1l1xkIjI8I6I8E6xAIw20E Y4v20xvaj40_Wr0E3s1l1IIY67AEw4v_Jr0_Jr4l87I20VAvwVAaII0Ic2I_JFv_Gryl82 xGYIkIc2x26280x7IE14v26r1rM28IrcIa0xkI8VCY1x0267AKxVW8JVW5JwA2ocxC64kI II0Yj41l84x0c7CEw4AK67xGY2AK021l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7 xvwVC0I7IYx2IY6xkF7I0E14v26r4UJVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2 z4x0Y4vEx4A2jsIEc7CjxVAFwI0_GcCE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4 xG64xvF2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jr0_Jr4lYx0Ex4A2jsIE14v2 6r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6I AqYI8I648v4I1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAq x4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r 1DMIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF 7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxV WUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjTR HMKAUUUUU 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762964211219921263?= X-GMAIL-MSGID: =?utf-8?q?1762964211219921263?= We need start in block unit while fe_start is in cluster unit. Use ext4_grp_offs_to_block helper to convert fe_start to get start in block unit. Signed-off-by: Kemeng Shi Reviewed-by: Ojaswin Mujoo --- fs/ext4/mballoc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 7f695830621a..d6a4f6b8b8a4 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -2181,8 +2181,7 @@ int ext4_mb_find_by_goal(struct ext4_allocation_context *ac, if (max >= ac->ac_g_ex.fe_len && ac->ac_g_ex.fe_len == sbi->s_stripe) { ext4_fsblk_t start; - start = ext4_group_first_block_no(ac->ac_sb, e4b->bd_group) + - ex.fe_start; + start = ext4_grp_offs_to_block(ac->ac_sb, &ex); /* use do_div to get remainder (would be 64-bit modulo) */ if (do_div(start, sbi->s_stripe) == 0) { ac->ac_found++; From patchwork Wed Apr 12 17:28:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82349 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp197957vqo; Wed, 12 Apr 2023 02:53:32 -0700 (PDT) X-Google-Smtp-Source: AKy350ZJ3r3wBE5AaWy5rFiaF45mcHVUno/4igDZZexx/1LbyUamwTO1mhCQRBGEmb+67GWx6kQK X-Received: by 2002:a05:6402:788:b0:501:e26e:502b with SMTP id d8-20020a056402078800b00501e26e502bmr12518584edy.29.1681293211941; Wed, 12 Apr 2023 02:53:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681293211; cv=none; d=google.com; s=arc-20160816; b=lmzl2ZXWQeiKS2Yqo7Zm0rEWa3wtx5NzDfBQP/vJcamL91yIC2eWL6rVbgFbz03QvT Tz3orOXjwipo6lKIuUUrvg1cof6Wz/7a4y8/0MRnwHeDuUxuUcdIavUqxGml8AWEFg5D rhKPhMVEl6GSntxj15GjlqZM4Qdx1ALtH51pHLgsWqv32Lp8SImJug7kFkP6tcYmcO/3 SAclEBqiIFBPBKGkncXbueTYdJaqAPWxc34qGOfOgsENsfpbmdDiFjCTEwhE2FdSxQw4 r8mgJQEH5Y0/2qDIPHtyKXS8KGdkjbuW/Z2pFgqtKbyTYaGc3YtCVE7KrMmIBAg7qIbD ge1A== 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=U3jGBqM7fl4N1bd0BuBUJ88jb56k98p8KVfqZlZKWX0=; b=ij9FetrRP3iEUwmWhJ+hPBR+sD3wzKpigvmW5/hdo9B6KNkhlNK4Iaq4wFayzl5+Am bCrE/xmDH1pzDQoVGtigObk0JrrP/FR3QadhPQZJUCzIezcsHI8SL535jMoZ244lQReI eqKAWm4741KWrQdrgoN4ptAnfUk/D49zM3FAlsv/+a2zx7S5TDaTiGR2xa6diQS9xaCR n/ZF6E2kbnNdVlyV5qTuL5F3iShWFPmcc0+ll89lsgJFuNeg12QpLjvHLGw8dtqPdlkS xbSb0K1cnjBXxub2HsfxiY2Ry7ZE/pX6igM+d31TjwAHQr+02GY5B43aJKjg2CI3bLLQ j1EA== 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 f24-20020aa7d858000000b0050489dffcc6si8965172eds.270.2023.04.12.02.53.07; Wed, 12 Apr 2023 02:53:31 -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 S231304AbjDLJ0m (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40340 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230053AbjDLJ0N (ORCPT ); Wed, 12 Apr 2023 05:26:13 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4C84676A7; Wed, 12 Apr 2023 02:26:11 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ71th5z4f42YJ; Wed, 12 Apr 2023 17:26:07 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S6; Wed, 12 Apr 2023 17:26:08 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 04/19] ext4: treat stripe in block unit Date: Thu, 13 Apr 2023 01:28:18 +0800 Message-Id: <20230412172833.2317696-5-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S6 X-Coremail-Antispam: 1UD129KBjvJXoWxCFWfXr17Jw15WFyUtw4Utwb_yoWrGF17pr 1fAa1UtFyUWr1v9a17Ww15Wr1fK3y8uryUJ3yxur1UWry2qFWfGr9Fq3WYyF97Xr4kWFyS v3yqvw17GrZrK3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPY14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r 4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0pRvJPtU UUUU= 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762963710865661412?= X-GMAIL-MSGID: =?utf-8?q?1762963710865661412?= Stripe is misused in block unit and in cluster unit in different code paths. User awared of stripe maybe not awared of bigalloc feature, so treat stripe only in block unit to fix this. Besides, it's hard to get stripe aligned blocks (start and length are both aligned with stripe) if stripe is not aligned with cluster, just disable stripe and alert user in this case to simpfy the code and avoid unnecessary work to get stripe aligned blocks which likely to be failed. Signed-off-by: Kemeng Shi Reviewed-by: Ojaswin Mujoo --- fs/ext4/mballoc.c | 18 +++++++++++------- fs/ext4/super.c | 13 +++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index d6a4f6b8b8a4..b75f16d2fdfc 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -2178,7 +2178,8 @@ int ext4_mb_find_by_goal(struct ext4_allocation_context *ac, ac->ac_g_ex.fe_len, &ex); ex.fe_logical = 0xDEADFA11; /* debug value */ - if (max >= ac->ac_g_ex.fe_len && ac->ac_g_ex.fe_len == sbi->s_stripe) { + if (max >= ac->ac_g_ex.fe_len && + ac->ac_g_ex.fe_len == EXT4_B2C(sbi, sbi->s_stripe)) { ext4_fsblk_t start; start = ext4_grp_offs_to_block(ac->ac_sb, &ex); @@ -2343,7 +2344,7 @@ void ext4_mb_scan_aligned(struct ext4_allocation_context *ac, struct ext4_free_extent ex; ext4_fsblk_t first_group_block; ext4_fsblk_t a; - ext4_grpblk_t i; + ext4_grpblk_t i, stripe; int max; BUG_ON(sbi->s_stripe == 0); @@ -2355,10 +2356,12 @@ void ext4_mb_scan_aligned(struct ext4_allocation_context *ac, do_div(a, sbi->s_stripe); i = (a * sbi->s_stripe) - first_group_block; + stripe = EXT4_B2C(sbi, sbi->s_stripe); + i = EXT4_B2C(sbi, i); while (i < EXT4_CLUSTERS_PER_GROUP(sb)) { if (!mb_test_bit(i, bitmap)) { - max = mb_find_extent(e4b, i, sbi->s_stripe, &ex); - if (max >= sbi->s_stripe) { + max = mb_find_extent(e4b, i, stripe, &ex); + if (max >= stripe) { ac->ac_found++; ex.fe_logical = 0xDEADF00D; /* debug value */ ac->ac_b_ex = ex; @@ -2366,7 +2369,7 @@ void ext4_mb_scan_aligned(struct ext4_allocation_context *ac, break; } } - i += sbi->s_stripe; + i += stripe; } } @@ -2727,7 +2730,8 @@ ext4_mb_regular_allocator(struct ext4_allocation_context *ac) if (cr == 0) ext4_mb_simple_scan_group(ac, &e4b); else if (cr == 1 && sbi->s_stripe && - !(ac->ac_g_ex.fe_len % sbi->s_stripe)) + !(ac->ac_g_ex.fe_len % + EXT4_B2C(sbi, sbi->s_stripe))) ext4_mb_scan_aligned(ac, &e4b); else ext4_mb_complex_scan_group(ac, &e4b); @@ -3441,7 +3445,7 @@ int ext4_mb_init(struct super_block *sb) */ if (sbi->s_stripe > 1) { sbi->s_mb_group_prealloc = roundup( - sbi->s_mb_group_prealloc, sbi->s_stripe); + sbi->s_mb_group_prealloc, EXT4_B2C(sbi, sbi->s_stripe)); } sbi->s_locality_groups = alloc_percpu(struct ext4_locality_group); diff --git a/fs/ext4/super.c b/fs/ext4/super.c index f226f8ab469b..0a5bf375df5c 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -5231,6 +5231,19 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb) goto failed_mount3; sbi->s_stripe = ext4_get_stripe_size(sbi); + /* + * It's hard to get stripe aligned blocks if stripe is not aligned with + * cluster, just disable stripe and alert user to simpfy code and avoid + * stripe aligned allocation which will rarely successes. + */ + if (sbi->s_stripe > 0 && sbi->s_cluster_ratio > 1 && + sbi->s_stripe % sbi->s_cluster_ratio != 0) { + ext4_msg(sb, KERN_WARNING, + "stripe (%lu) is not aligned with cluster size (%u), " + "stripe is disabled", + sbi->s_stripe, sbi->s_cluster_ratio); + sbi->s_stripe = 0; + } sbi->s_extent_max_zeroout_kb = 32; /* From patchwork Wed Apr 12 17:28:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82350 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp198853vqo; Wed, 12 Apr 2023 02:55:44 -0700 (PDT) X-Google-Smtp-Source: AKy350YP9SkDoV8H6sB4YUo8Gc7cYAzoB8JF3WdBbUOJPFTK29eqYzgc/vReB3Zq2rON3mNav7CS X-Received: by 2002:a17:90a:5892:b0:246:f9ff:8e70 with SMTP id j18-20020a17090a589200b00246f9ff8e70mr2224135pji.26.1681293343893; Wed, 12 Apr 2023 02:55:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681293343; cv=none; d=google.com; s=arc-20160816; b=iUqqaC9pc1DggLy8/B00mkBfRI9dBqdJrQ35qRMujDDKuClwHwnBgHWHeiIdFIKJg4 oRgiHq151cGmrvD44ZByZdmP3XtAIrmGX1L0Lg+vhJPu9tpSEdYEgDxjtFvNVLtWIg6c dUBdsbrTUjiKF6g9mO4tA7hoQSghpIug9/sd7t/l68bmdXm2g7Mg0Dui3FQxrd9QO7dl MtcL85hwx7qpacNDa/y5qqvntEKnr5ItqGBS9RtQXIFMpmVyzFMyjD4EPI/cAwREa7iu p8d5QFhouyfiSDXiWSymgGk7PhyCjIyF6G09G1ulZbFGJ32aXK2BllxUl3xX6MXc6RYi m+ow== 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=HQTZlTAG6hmfxLMSIGwgBfqF2avg2k9tMXlVAOq0BFA=; b=pHl1aXk3M/9r4FhaPUUwrdCiKfBXbW2EQK78dL77kYLllu6kbTb5CWVDO28PSTyAsO CRLsyJ0I2U41CzlRTJwKXA3uZyepEArKaunLE6HuwPv681ll0+4hQK14YFpzAHHdKPyp IT4Wmei9AwqG+OiQWgsy6dGolHyfLk3Eu79W4v94qkMNpji3xYk86sRsJiExi9lfLOLb B/IXw0QUkliEixhmwYcJrhjhHGdrdsa1/wYFh34bTukZpTlJQEzTyVeMuyHRoCbVYCbK fRDlryvk6o7ybLty2eQqrMCfjhyZU/CrQwXs5NFlMFa10szSeeqARbRHq7d7ooJxFCpq cSiw== 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 h2-20020a17090a130200b0022915b6dd7asi1456953pja.145.2023.04.12.02.55.31; Wed, 12 Apr 2023 02:55:43 -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 S229957AbjDLJ03 (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40338 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230046AbjDLJ0N (ORCPT ); Wed, 12 Apr 2023 05:26:13 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 743BD7AB8; Wed, 12 Apr 2023 02:26:11 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ72lDlz4f4NNp; Wed, 12 Apr 2023 17:26:07 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S7; Wed, 12 Apr 2023 17:26:08 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 05/19] ext4: add EXT4_MB_HINT_GOAL_ONLY test in ext4_mb_use_preallocated Date: Thu, 13 Apr 2023 01:28:19 +0800 Message-Id: <20230412172833.2317696-6-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S7 X-Coremail-Antispam: 1UD129KBjvJXoW7tr18JFy3uFy5ur1rtr1DJrb_yoW8tw47pF W3JF15Crsagwn7W39agw15Gw1rKw48K34rJryfWr1rZrWxGrsrCanrt348uFyqyr4rZFn8 ZF4Yv3y7Gr4xu3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPY14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r 4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0pRvJPtU UUUU= 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762963849600014199?= X-GMAIL-MSGID: =?utf-8?q?1762963849600014199?= ext4_mb_use_preallocated will ignore the demand to alloc goal blocks, although the EXT4_MB_HINT_GOAL_ONLY is requested. For group pa, ext4_mb_group_or_file will not set EXT4_MB_HINT_GROUP_ALLOC if EXT4_MB_HINT_GOAL_ONLY is set. So we will not alloc goal blocks from group pa if EXT4_MB_HINT_GOAL_ONLY is set. For inode pa, ext4_mb_pa_goal_check is added to check if free extent in found inode pa meets goal blocks when EXT4_MB_HINT_GOAL_ONLY is set. Signed-off-by: Kemeng Shi Suggested-by: Ojaswin Mujoo --- fs/ext4/mballoc.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index b75f16d2fdfc..be1115ea1800 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -4351,6 +4351,37 @@ ext4_mb_check_group_pa(ext4_fsblk_t goal_block, return pa; } +/* + * check if found pa meets EXT4_MB_HINT_GOAL_ONLY + */ +static bool +ext4_mb_pa_goal_check(struct ext4_allocation_context *ac, + struct ext4_prealloc_space *pa) +{ + struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb); + ext4_fsblk_t start; + + if (likely(!(ac->ac_flags & EXT4_MB_HINT_GOAL_ONLY))) + return true; + + /* + * If EXT4_MB_HINT_GOAL_ONLY is set, ac_g_ex will not be adjusted + * in ext4_mb_normalize_request and will keep same with ac_o_ex + * from ext4_mb_initialize_context. Choose ac_g_ex here to keep + * consistent with ext4_mb_find_by_goal. + */ + start = pa->pa_pstart + + (ac->ac_g_ex.fe_logical - pa->pa_lstart); + if (ext4_grp_offs_to_block(ac->ac_sb, &ac->ac_g_ex) != start) + return false; + + if (ac->ac_g_ex.fe_len > pa->pa_len - + EXT4_B2C(sbi, ac->ac_g_ex.fe_logical - pa->pa_lstart)) + return false; + + return true; +} + /* * search goal blocks in preallocated space */ @@ -4387,7 +4418,8 @@ ext4_mb_use_preallocated(struct ext4_allocation_context *ac) /* found preallocated blocks, use them */ spin_lock(&pa->pa_lock); - if (pa->pa_deleted == 0 && pa->pa_free) { + if (pa->pa_deleted == 0 && pa->pa_free && + likely(ext4_mb_pa_goal_check(ac, pa))) { atomic_inc(&pa->pa_count); ext4_mb_use_inode_pa(ac, pa); spin_unlock(&pa->pa_lock); From patchwork Wed Apr 12 17:28:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82336 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp186345vqo; Wed, 12 Apr 2023 02:28:45 -0700 (PDT) X-Google-Smtp-Source: AKy350ZvsuFfjKooI3qRfOqK0pwt5SPFSYO+z/Q8q+PTvlqdLUHYHIaCNSrl3HLmt3OSbCanYEJx X-Received: by 2002:a05:6402:612:b0:504:894b:1bc9 with SMTP id n18-20020a056402061200b00504894b1bc9mr4603812edv.26.1681291724923; Wed, 12 Apr 2023 02:28:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681291724; cv=none; d=google.com; s=arc-20160816; b=cGytoN3KBqZyW12+v1SREn50DivRhJK9jwqciPhMum509ph6zgQYklV6S2cm9NQcdv glztqkLtlf9JoKPUqa8eHNwrvA7KcL+J9iDu9K8PwLarVDQdjkzm3snp+QMN+yk+iqn4 Mm+tExr2BeR211CLyTR6GHFtpzcBoJOWiAD/Fb3FYJgDO6zNOVfUjYQiXSx3eSGK9JZ4 XlH4O/qNW/6EulNNuXwVwsC7D7i0uvm15KJMpZItjc6CCCzIqoQq62A/Pivw0gw5v0a+ /rxXBtxcyiXYbrjmi3SeONvIKeUdcfFFYjbfJZfJFgV5QiRo1m68kXeRd9n2SXykGNVM dOgA== 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=9RtFvfXRIgIVEJgw1bqKTEr7oH3GU39fPJXIQQfPxFI=; b=JqmZ46BxdjUSiGIPpTE4N4YTDgmVllkP8SAtJDnhDjDIO2UeXPoBSJR9Fgx3UZMDKW a23ZZzrudCxyBEm8G6mdPTc+H+wjszxzAXlDIkYVvQK9yAnmMQJ7jc7j250RmeA3ULTm cR4nEGSBMOAdTZNTaVk3bBvhZvM7ZhdTuJ3HupnOBbAE0gaBsbC8V4TJYjgbcT1OwO/x dAqrPQ29acqPLUMaqSz1R00iHRrSI/K+uZLkAvbQz7RhqIP6nod5WhCLaoc4y0tHl1jV NmJapOywoI/aeSAigpeNR281mKEBzjTenOWALs92SUSs0g1ITkZzezsDA0Vs/tG/MphM 9onw== 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 x19-20020aa7d393000000b004ad03d31db6si2455799edq.278.2023.04.12.02.28.20; Wed, 12 Apr 2023 02:28:44 -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 S231495AbjDLJ0s (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40254 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230100AbjDLJ0P (ORCPT ); Wed, 12 Apr 2023 05:26:15 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AE0726195; Wed, 12 Apr 2023 02:26:11 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ76bwvz4f42Yr; Wed, 12 Apr 2023 17:26:07 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S8; Wed, 12 Apr 2023 17:26:09 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 06/19] ext4: remove ext4_block_group and ext4_block_group_offset declaration Date: Thu, 13 Apr 2023 01:28:20 +0800 Message-Id: <20230412172833.2317696-7-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S8 X-Coremail-Antispam: 1UD129KBjvdXoWrtF17JFyUWF1fJF18CryrXrb_yoWDWFX_Aw 17Jr4kGFWfJw1Ska1jgrs8Ars5tr4xXr4DWa18WryrX3WDXF4jva4DCrn7Ars8u3WUAF13 Ar9rXF17JFy8XjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUbDkFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M28IrcIa0xkI8V A2jI8067AKxVWUAVCq3wA2048vs2IY020Ec7CjxVAFwI0_Xr0E3s1l8cAvFVAK0II2c7xJ M28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVWDJVCq3wA2z4x0Y4vE2I x0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK 6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4 xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8 JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20V AGYxC7MxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAF wI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc4 0Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1I6r4UMIIF0xvE2Ix0cI8IcVCY1x0267AK xVW8JVWxJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr 1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7sRiVbyDUU UUU== 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762962151870005901?= X-GMAIL-MSGID: =?utf-8?q?1762962151870005901?= For ext4_block_group and ext4_block_group_offset, there are only declaration without definition. Just remove them. Signed-off-by: Kemeng Shi Reviewed-by: Ojaswin Mujoo --- fs/ext4/ext4.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 9b2cfc32cf78..f25f13a357de 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -2697,10 +2697,6 @@ extern void ext4_get_group_no_and_offset(struct super_block *sb, extern ext4_group_t ext4_get_group_number(struct super_block *sb, ext4_fsblk_t block); -extern unsigned int ext4_block_group(struct super_block *sb, - ext4_fsblk_t blocknr); -extern ext4_grpblk_t ext4_block_group_offset(struct super_block *sb, - ext4_fsblk_t blocknr); extern int ext4_bg_has_super(struct super_block *sb, ext4_group_t group); extern unsigned long ext4_bg_num_gdb(struct super_block *sb, ext4_group_t group); From patchwork Wed Apr 12 17:28:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82335 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp186151vqo; Wed, 12 Apr 2023 02:28:22 -0700 (PDT) X-Google-Smtp-Source: AKy350b/BRGXTzL0NgK88UZSq4cb78CkiIZ6w/I2nNGAnmQG9fUqdMmN7txZfygE/RiKGqGEBp3M X-Received: by 2002:a17:907:3202:b0:94a:7c86:5580 with SMTP id xg2-20020a170907320200b0094a7c865580mr9939888ejb.47.1681291701798; Wed, 12 Apr 2023 02:28:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681291701; cv=none; d=google.com; s=arc-20160816; b=iU0KWikmi40fWOLzh9cXIC/UjP4Df24Omwow2VMLm6K6/IwH5Y/aaXZ97hOA+k2cMV DQADgIoeTNnPaMUIQs/t6lHzzTxlOahp8xdfC45j3JLbvge4gwmSIiZUMLuXT4HTamsk q7xwoAugAtM6nsNYgbtgeU/8dZExwUHowMQTElv9Fi9nll45gL/SAmdZEm9JYoNnrLR5 AatAtePLBBd9mmdW1LDYYw44jaLNaegU05Zhit4/RB2yOjEsOZQuun6Tl0PPfKUIt13o zPu26EhRd82xYDPvE6bdQxNV88ZJD6mkrshSJfbGYWmGphnfBxjdBSWf839WPvCl2yFS DWAw== 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=pyaUTwsUpuZFhEQu4N4XK5B2LGL+w5dVtbuMm/RJkRY=; b=sWXKFF+KZhIwfH4a6fmlcxHS+Hu+n8yG3mUQnInAoH5sJ/KNZ2wMhTUZ1DLjfLJs19 f9wQ8KeToxq7+BVbAJYWKCPlUtOXmhVxXIwgzDTcYnlIuvEeNu/C2RovwOShyPv6llKj VPDmuvBJyX3BAoVtGC3vwpB+tPqVVf2opEiT+2z1i3aGzaT+wQZnIdS1LAB7oLS1HsU4 oLZbtlmfZM10QNaAH40BJtJKmZ2e4dHa47DDOB37mUFfGrdm0Bv3i5op3RPK1NrjplzY Pr72DSKUk6Tmg8zwnHjVu5ABoSkhfthhLb65XbouM3bxlsSBQKCttCsAuXO//LfiOioe caIg== 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 b18-20020a170906661200b00933c194cd1dsi1634608ejp.804.2023.04.12.02.27.58; Wed, 12 Apr 2023 02:28:21 -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 S231465AbjDLJ0p (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40230 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230064AbjDLJ0P (ORCPT ); Wed, 12 Apr 2023 05:26:15 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E7947EDA; Wed, 12 Apr 2023 02:26:12 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ75WPhz4f423k; Wed, 12 Apr 2023 17:26:07 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S9; Wed, 12 Apr 2023 17:26:09 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 07/19] ext4: try all groups in ext4_mb_new_blocks_simple Date: Thu, 13 Apr 2023 01:28:21 +0800 Message-Id: <20230412172833.2317696-8-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S9 X-Coremail-Antispam: 1UD129KBjvJXoW7ur13Kry7uF1DAFyDZFW5Jrb_yoW8AF4Dpw sxGF18Kr1fWr9F9FZFg34SqF1xJw1IkF1UWryfG34rGrZFqryfJFsrKF1Fva1jyFZ3XFnI vr4YvryfAa12gaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPY14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r 4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0pRvJPtU UUUU= 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762962127477560671?= X-GMAIL-MSGID: =?utf-8?q?1762962127477560671?= ext4_mb_new_blocks_simple ignores the group before goal, so it will fail if free blocks reside in group before goal. Try all groups to avoid unexpected failure. Search finishes either if any free block is found or if no available blocks are found. Simpliy check "i >= max" to distinguish the above cases. Signed-off-by: Kemeng Shi Suggested-by: Theodore Ts'o Reviewed-by: Ojaswin Mujoo --- fs/ext4/mballoc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index be1115ea1800..b9a7b669b97d 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5797,7 +5797,7 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, struct buffer_head *bitmap_bh; struct super_block *sb = ar->inode->i_sb; struct ext4_sb_info *sbi = EXT4_SB(sb); - ext4_group_t group; + ext4_group_t group, nr; ext4_grpblk_t blkoff; ext4_grpblk_t max = EXT4_CLUSTERS_PER_GROUP(sb); ext4_grpblk_t i = 0; @@ -5811,7 +5811,7 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, ar->len = 0; ext4_get_group_no_and_offset(sb, goal, &group, &blkoff); - for (; group < ext4_get_groups_count(sb); group++) { + for (nr = ext4_get_groups_count(sb); nr > 0; nr--) { bitmap_bh = ext4_read_block_bitmap(sb, group); if (IS_ERR(bitmap_bh)) { *errp = PTR_ERR(bitmap_bh); @@ -5835,10 +5835,13 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, if (i < max) break; + if (++group >= ext4_get_groups_count(sb)) + group = 0; + blkoff = 0; } - if (group >= ext4_get_groups_count(sb) || i >= max) { + if (i >= max) { *errp = -ENOSPC; return 0; } From patchwork Wed Apr 12 17:28:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82345 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp194173vqo; Wed, 12 Apr 2023 02:45:11 -0700 (PDT) X-Google-Smtp-Source: AKy350buJs7ooRECtPlUlMzlbn2zS5W7stD96VWWm0O0bmv0pW5wJrvmW4b7WRHN0Crg4X1brQ62 X-Received: by 2002:a50:fb95:0:b0:4bf:33e8:21ff with SMTP id e21-20020a50fb95000000b004bf33e821ffmr13385162edq.30.1681292711332; Wed, 12 Apr 2023 02:45:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681292711; cv=none; d=google.com; s=arc-20160816; b=dREI5JMFW8ydpnHq6tmx58tLwZetAqPvrT3Unj4s7mWpdBBiYvM41Sq9v5WUb+kz2d xnJ1naORGrcIidq/wC7Ttbr0zf6rogneiyqzSm9E+bpAEnlAwpMHTzAMTbn88a55Dw8Y yRhzyZKxKGSkiRTCEJoYh7OGQzekdKv7cS0wuxqSInCbyWSQNcmltdWRTo+raSC79Mz0 vlgGt0HbdEul4S65Lkf7DzdfYtmGrVaPvEhGeyfbq5pw3MxqawWwwYjW4nggZxCf75Q/ Trhfmd84m7vdjKYdP2eIfuAB+bHDap8CeuhYukMPTr5H4dJqutFvmJpTg+2ZjR/FTHoP 8Onw== 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=NGArT1KMqF6cSXwqCxOb3JH6kRKX/tPQjSUAlQUG77c=; b=IFP8fePEgXDyrK8wZCkucJDJCeEYeXqL8rTHzv1AiWjnbK81UTsK14AuEfdfHKAgOe zY5VdgGAf3mYkPyLEpaHGIxqetoTO6MhYYyor0ZxB0z1/pakdgFaDXWGEGhn+U6e4slz lQVe+JLHwh7m8wS4paIWvMTld7h/CuSSRt1U0ABpdwf0FiSvF0OC8BP9wb6DOJCwukOd rPtTaKw0cNvyqA5MLvMVjsBGMMZKwR24uTLVWS2ASzDxBgxRx1ASGLzTGRSoB13PgWm9 2FtvK0m3PkvnNqB41ZhIeDVdgEXjucq8uCVZG5H8R2SxPas8IB4WnUEgnN8mF6H1NnWO 8WNg== 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 g11-20020a056402180b00b005021f0d5761si3127516edy.680.2023.04.12.02.44.47; Wed, 12 Apr 2023 02:45:11 -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 S231589AbjDLJ1b (ORCPT + 99 others); Wed, 12 Apr 2023 05:27:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230123AbjDLJ0Q (ORCPT ); Wed, 12 Apr 2023 05:26:16 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D52157EE1; Wed, 12 Apr 2023 02:26:13 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ80vF6z4f435t; Wed, 12 Apr 2023 17:26:08 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S10; Wed, 12 Apr 2023 17:26:09 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 08/19] ext4: get block from bh before pass it to ext4_free_blocks_simple in ext4_free_blocks Date: Thu, 13 Apr 2023 01:28:22 +0800 Message-Id: <20230412172833.2317696-9-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S10 X-Coremail-Antispam: 1UD129KBjvJXoW7JF48Cr4UZw1DJw1xJFy8Grg_yoW8Jr17pw srAFyrGr1kWwn2gF4fJw15JwsI9w48G3WUWFWfWw18Xry7X34Sy3WqyF15WF1UtrZav3ZF qFn0grW5Cw4UuaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPF14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Cr0_Gr1UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJV W8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjTRKfOw UUUUU 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762963186031665054?= X-GMAIL-MSGID: =?utf-8?q?1762963186031665054?= ext4_free_blocks will retrieve block from bh if block parameter is zero. Retrieve block before ext4_free_blocks_simple to avoid potentially passing wrong block to ext4_free_blocks_simple. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index b9a7b669b97d..ca11d0aa8a59 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -6117,12 +6117,6 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode, sbi = EXT4_SB(sb); - if (sbi->s_mount_state & EXT4_FC_REPLAY) { - ext4_free_blocks_simple(inode, block, count); - return; - } - - might_sleep(); if (bh) { if (block) BUG_ON(block != bh->b_blocknr); @@ -6130,6 +6124,13 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode, block = bh->b_blocknr; } + if (sbi->s_mount_state & EXT4_FC_REPLAY) { + ext4_free_blocks_simple(inode, block, count); + return; + } + + might_sleep(); + if (!(flags & EXT4_FREE_BLOCKS_VALIDATED) && !ext4_inode_block_valid(inode, block, count)) { ext4_error(sb, "Freeing blocks not in datazone - " From patchwork Wed Apr 12 17:28:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82352 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp199482vqo; Wed, 12 Apr 2023 02:57:11 -0700 (PDT) X-Google-Smtp-Source: AKy350bNelrsPhDhbeqiovNyUpHGKT6w63RodnFyO1mYT1xcrSBGczkPWq+vTP9cOveVqKefjPrQ X-Received: by 2002:a05:6a20:33a8:b0:e3:8710:6848 with SMTP id f40-20020a056a2033a800b000e387106848mr12686719pzd.41.1681293431203; Wed, 12 Apr 2023 02:57:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681293431; cv=none; d=google.com; s=arc-20160816; b=ASPyQ88Kt1BeZDjTYXOSAHSkQQRfbtVfqTh+qz1metL2bxxnCnfZdZD78WdVPoWqha j6F7xFgX/vhn2p4nX5hxqP6MwtmT4nOnqaqmQLMHHi5akeg5cSS6tVoyOdpBmcswtld0 EyU76pq0uxKUse/W39xNpXKt1vcXtuFO5KS9VUNoEZxsVd9HFToTchehRiZjSgRPDZkZ 5BwTRC7geuQlvjIQOChaMzvyZBJlcoH0177HmAyXLVhpy/+2ml1y0LKH8DvPOQFLlH7L 8vX/PTD+6mw6YbfquGg1HpfvAgEGi0WIFEjXL0AG+9l3B+KBniv2xeDNquGFRbdA56tC U2lw== 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=XKmIfv/1uDsRAxNCDCF1MuuibEK/nEjUyKU3bTiIDk8=; b=iAV12Mvip5BZ4/sSrJJoqD3WWfEfF+uBZQpofT4TLX3pxm4aBD/NDtF4ToeCOyHa7N CpfBjGHd16HVO0fhrqlUz+zHvaThUY3l8r11hwVVHm5hBMxA9YOo1NFANI7jkMLFmPbl kuLb4jzmEnDIGjTWpzc/WA+O2S1Vt8rQ/+QV4zvgqG7Ys1q/2/A3RajwmSdnmUz78BF5 /oG3NKk4mbxbcdlIcpF5sMGxqmC5WWCMf3ZN7pPeqhDbf7o4EukitRgDWJ9YlG4yLnc+ /7qrh79o8ZeBrl/onvXlAd4f4L5ZugLJ61vo367lKhrisdcIYwBH319dJ8sZXiS+f9ls 5RXg== 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 j2-20020a63ec02000000b005002c935408si14988182pgh.292.2023.04.12.02.56.58; Wed, 12 Apr 2023 02:57:11 -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 S231394AbjDLJ10 (ORCPT + 99 others); Wed, 12 Apr 2023 05:27:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230113AbjDLJ0Q (ORCPT ); Wed, 12 Apr 2023 05:26:16 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F23C9768F; Wed, 12 Apr 2023 02:26:12 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ856qwz4f4byk; Wed, 12 Apr 2023 17:26:08 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S11; Wed, 12 Apr 2023 17:26:10 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 09/19] ext4: remove unsed parameter and unnecessary forward declaration of ext4_mb_new_blocks_simple Date: Thu, 13 Apr 2023 01:28:23 +0800 Message-Id: <20230412172833.2317696-10-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S11 X-Coremail-Antispam: 1UD129KBjvJXoWxAr18try5CF1kGr4DCr17KFg_yoW7JFyxpa nxCF1rGr1fWr1DuF47X34Sq3WS9w48Ar17GrWfG34rCrW7XryfCFsxKF1Fya4YyFZrXFnI qF4YyrW3CF4UGa7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPF14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Cr0_Gr1UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJV W8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjTRKfOw UUUUU 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762963940692772250?= X-GMAIL-MSGID: =?utf-8?q?1762963940692772250?= Two cleanups for ext4_mb_new_blocks_simple: Remove unsed parameter handle of ext4_mb_new_blocks_simple. Move ext4_mb_new_blocks_simple definition before ext4_mb_new_blocks to remove unnecessary forward declaration of ext4_mb_new_blocks_simple. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 137 +++++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 70 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index ca11d0aa8a59..2bbfded78093 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5536,8 +5536,72 @@ static bool ext4_mb_discard_preallocations_should_retry(struct super_block *sb, return ret; } -static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, - struct ext4_allocation_request *ar, int *errp); +/* + * Simple allocator for Ext4 fast commit replay path. It searches for blocks + * linearly starting at the goal block and also excludes the blocks which + * are going to be in use after fast commit replay. + */ +static ext4_fsblk_t +ext4_mb_new_blocks_simple(struct ext4_allocation_request *ar, int *errp) +{ + struct buffer_head *bitmap_bh; + struct super_block *sb = ar->inode->i_sb; + struct ext4_sb_info *sbi = EXT4_SB(sb); + ext4_group_t group, nr; + ext4_grpblk_t blkoff; + ext4_grpblk_t max = EXT4_CLUSTERS_PER_GROUP(sb); + ext4_grpblk_t i = 0; + ext4_fsblk_t goal, block; + struct ext4_super_block *es = EXT4_SB(sb)->s_es; + + goal = ar->goal; + if (goal < le32_to_cpu(es->s_first_data_block) || + goal >= ext4_blocks_count(es)) + goal = le32_to_cpu(es->s_first_data_block); + + ar->len = 0; + ext4_get_group_no_and_offset(sb, goal, &group, &blkoff); + for (nr = ext4_get_groups_count(sb); nr > 0; nr--) { + bitmap_bh = ext4_read_block_bitmap(sb, group); + if (IS_ERR(bitmap_bh)) { + *errp = PTR_ERR(bitmap_bh); + pr_warn("Failed to read block bitmap\n"); + return 0; + } + + while (1) { + i = mb_find_next_zero_bit(bitmap_bh->b_data, max, + blkoff); + if (i >= max) + break; + if (ext4_fc_replay_check_excluded(sb, + ext4_group_first_block_no(sb, group) + + EXT4_C2B(sbi, i))) { + blkoff = i + 1; + } else + break; + } + brelse(bitmap_bh); + if (i < max) + break; + + if (++group >= ext4_get_groups_count(sb)) + group = 0; + + blkoff = 0; + } + + if (i >= max) { + *errp = -ENOSPC; + return 0; + } + + block = ext4_group_first_block_no(sb, group) + EXT4_C2B(sbi, i); + ext4_mb_mark_bb(sb, block, 1, 1); + ar->len = 1; + + return block; +} /* * Main entry point into mballoc to allocate blocks @@ -5562,7 +5626,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle, trace_ext4_request_blocks(ar); if (sbi->s_mount_state & EXT4_FC_REPLAY) - return ext4_mb_new_blocks_simple(handle, ar, errp); + return ext4_mb_new_blocks_simple(ar, errp); /* Allow to use superuser reservation for quota file */ if (ext4_is_quota_file(ar->inode)) @@ -5786,73 +5850,6 @@ ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b, spin_unlock(&sbi->s_md_lock); } -/* - * Simple allocator for Ext4 fast commit replay path. It searches for blocks - * linearly starting at the goal block and also excludes the blocks which - * are going to be in use after fast commit replay. - */ -static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, - struct ext4_allocation_request *ar, int *errp) -{ - struct buffer_head *bitmap_bh; - struct super_block *sb = ar->inode->i_sb; - struct ext4_sb_info *sbi = EXT4_SB(sb); - ext4_group_t group, nr; - ext4_grpblk_t blkoff; - ext4_grpblk_t max = EXT4_CLUSTERS_PER_GROUP(sb); - ext4_grpblk_t i = 0; - ext4_fsblk_t goal, block; - struct ext4_super_block *es = EXT4_SB(sb)->s_es; - - goal = ar->goal; - if (goal < le32_to_cpu(es->s_first_data_block) || - goal >= ext4_blocks_count(es)) - goal = le32_to_cpu(es->s_first_data_block); - - ar->len = 0; - ext4_get_group_no_and_offset(sb, goal, &group, &blkoff); - for (nr = ext4_get_groups_count(sb); nr > 0; nr--) { - bitmap_bh = ext4_read_block_bitmap(sb, group); - if (IS_ERR(bitmap_bh)) { - *errp = PTR_ERR(bitmap_bh); - pr_warn("Failed to read block bitmap\n"); - return 0; - } - - while (1) { - i = mb_find_next_zero_bit(bitmap_bh->b_data, max, - blkoff); - if (i >= max) - break; - if (ext4_fc_replay_check_excluded(sb, - ext4_group_first_block_no(sb, group) + - EXT4_C2B(sbi, i))) { - blkoff = i + 1; - } else - break; - } - brelse(bitmap_bh); - if (i < max) - break; - - if (++group >= ext4_get_groups_count(sb)) - group = 0; - - blkoff = 0; - } - - if (i >= max) { - *errp = -ENOSPC; - return 0; - } - - block = ext4_group_first_block_no(sb, group) + EXT4_C2B(sbi, i); - ext4_mb_mark_bb(sb, block, 1, 1); - ar->len = 1; - - return block; -} - static void ext4_free_blocks_simple(struct inode *inode, ext4_fsblk_t block, unsigned long count) { From patchwork Wed Apr 12 17:28:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82351 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp199027vqo; Wed, 12 Apr 2023 02:56:09 -0700 (PDT) X-Google-Smtp-Source: AKy350aH6ndTvPjGFFqtFlnQbSQA8Skz0t90824a8XW7BGFJSShaHgowfewAUeUifJLah9yEnAeX X-Received: by 2002:a17:90b:3ec4:b0:234:106a:34ab with SMTP id rm4-20020a17090b3ec400b00234106a34abmr21865272pjb.6.1681293369536; Wed, 12 Apr 2023 02:56:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681293369; cv=none; d=google.com; s=arc-20160816; b=dfijE3mM1/7Bcv3NA/xMF/cOEsPWLu5k6EmeOQvCouZZsQ8k9kOxgl3R6kC0NwW1m6 vfduxCALDGsSuHI90sRxB7eluri4jLU5MWZotIHysVF9fQ8PCzfC4nJ/Pbtq6SS4c4b0 WRuQSMM91tKiNWDvrGGrj4CKcyoWgzHS/BTPnAKLiu6xDNEslijvmvlRI0D5bK4lLYHV HmJbU5BwrXrKBuFmFHlSVRYKhMjpTjtKBxIY8BmyWPzWdideNuqN3t6ZETW5M3oLiRED x7DeIS88LE34F/3994gcjZIKRLdi/U62jJ6+OB0Sn9SjvYyE3n9PETLDXRtdUIuAiyHq V7eA== 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=Wo40aQWKojukTj94kInfwX4NM4C1h1kqOkwW46/fyOg=; b=wOpgZteVnfO+vma44RR0hdVOux8xQmiWmFR/Ql52vek0hJBilqk3q/0xN6/W2XQYFi JFL1gcRbqcYATlL3/gmxV3UPhxGWS15rlERlLDmGrzEPt4AdEoA7gnrQdpOrEanriYFF Jx+JDnl5oVVF1auu5uZwSYkflamRID5mdg0YxpuWNz/HGoWCccD/asjrJAgomBtcpBhu jAvd51AZQ3nTY2lROjoCsfIFqezpLiWCRQ2d0cgkCdznezAGM3qwn1pTXWf7Am8Tknpv Ec00vQziK9KjIPRf2sM3rX/tY+jzZuZoqaJZsFy6vYN9Izhk/khBU+TrGyrjkTYwQPUX kEig== 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 c4-20020a17090abf0400b0024080f3b7basi1554942pjs.36.2023.04.12.02.55.58; Wed, 12 Apr 2023 02:56:09 -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 S229817AbjDLJ0w (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40252 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230109AbjDLJ0Q (ORCPT ); Wed, 12 Apr 2023 05:26:16 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BD097EF5; Wed, 12 Apr 2023 02:26:13 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ90Sv3z4f4cmM; Wed, 12 Apr 2023 17:26:09 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S12; Wed, 12 Apr 2023 17:26:10 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 10/19] ext4: fix wrong unit use in ext4_mb_clear_bb Date: Thu, 13 Apr 2023 01:28:24 +0800 Message-Id: <20230412172833.2317696-11-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S12 X-Coremail-Antispam: 1UD129KBjvdXoW7Wr1rAr4xZw1UuF15Jw4UXFb_yoW3Kwb_K3 WDArWkGryrJwn3CF1ftw45tFZ0gF40kFykXFyfKF4xuF15XFZ7u34DGrW3Ar1xWay3t3y3 CFnYvryfCFWS9jkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUbDAFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M28IrcIa0xkI8V A2jI8067AKxVWUAVCq3wA2048vs2IY020Ec7CjxVAFwI0_Xr0E3s1l8cAvFVAK0II2c7xJ M28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVWDJVCq3wA2z4x0Y4vE2I x0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK 6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4 xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8 JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20V AGYxC7MxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAF wI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc4 0Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r4j6ryUMIIF0xvE2Ix0cI8IcVCY1x0267AK xVWxJVW8Jr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r4j6F 4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0pRvJPtU UUUU= 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762963876072638365?= X-GMAIL-MSGID: =?utf-8?q?1762963876072638365?= Function ext4_issue_discard need count in cluster. Pass count_clusters instead of count to fix the mismatch. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 2bbfded78093..eac91b2e3aa3 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -6029,8 +6029,8 @@ static void ext4_mb_clear_bb(handle_t *handle, struct inode *inode, * them with group lock_held */ if (test_opt(sb, DISCARD)) { - err = ext4_issue_discard(sb, block_group, bit, count, - NULL); + err = ext4_issue_discard(sb, block_group, bit, + count_clusters, NULL); if (err && err != -EOPNOTSUPP) ext4_msg(sb, KERN_WARNING, "discard request in" " group:%u block:%d count:%lu failed" From patchwork Wed Apr 12 17:28:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82337 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp186606vqo; Wed, 12 Apr 2023 02:29:17 -0700 (PDT) X-Google-Smtp-Source: AKy350aeui00ecrQSiiPFvu26+c5COPAJm2I3yiHaDEsIRona/U3rENu8M5AEdQ5WiCJlIM37rPb X-Received: by 2002:a17:907:8a85:b0:94a:474a:4dd5 with SMTP id sf5-20020a1709078a8500b0094a474a4dd5mr12084507ejc.9.1681291757201; Wed, 12 Apr 2023 02:29:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681291757; cv=none; d=google.com; s=arc-20160816; b=khJqXCsIjxaysPAzCodUEIaBSaQTyP3khEEsAbRTuqQ1GqU91sithRrBu73OBBr6JI Ev3Zi6Mv+/mqAzWEQSA2hwkZ0PuHg/L/Dyh/aKp/+J65vK+h1ycR6qQNIPr+pPA1nNJZ e9dHWVN85nw9G8xHrJoIqxRl8hM1yK5JP9jNUGJVr4WbcdXYQocJNql7jLGKtgTNPtHF 5AsykbGKSWQa2yZskFMs2dvgZ+Yw7dLkmM5EAcOSFOTfpxXyCqXu0MS+JVivdkaNteus Dwucq0aSmMQwHQ1FIz9FlEKuaoDo38diJMqj0XKteWAUkiv+lbyfFBvWZvxPod/T0fhI 0d+Q== 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=IX72dbYDriKIV3hxyGo2EbLAkQx2n3yt+NgCT4ZTxAg=; b=IvNAcqb+4Fi84G1S5SK9IlCcdk9acX+wqq3JGSmOE4I8O11AqVLGpyP56cf891NTgA HIC/ZzfM4/12a8PzSqEGZjySlImnnVd5AfeuMRLkQgSaSvLzg+C7GLU2Pq7dbtCBfTBa gx21/zBpdzAD0Aa6xxvB3MwTXRnxsvh7nAHq6/J+1BgghnDtXIZCxnxDkOgK0TYFas4G 8GALkL+9zJTS54+jcRqCEgidLYVEYTKziXJ0cSdpGwYYXqTP27wujITx5zO4DgBL9zC1 lfLMRcFbOXGr3AvNZBwqmQ+MWXOAxKnN9Q7PWx5UgKZeCvh+pOiATvWPxgo7TiNYIWA+ aJjg== 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 v19-20020a170906381300b00933397c9d67si13019864ejc.815.2023.04.12.02.28.42; Wed, 12 Apr 2023 02:29:17 -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 S231511AbjDLJ0y (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230117AbjDLJ0Q (ORCPT ); Wed, 12 Apr 2023 05:26:16 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D3C0172B8; Wed, 12 Apr 2023 02:26:13 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ9116Mz4f436f; Wed, 12 Apr 2023 17:26:09 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S13; Wed, 12 Apr 2023 17:26:10 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 11/19] ext4: fix wrong unit use in ext4_mb_new_blocks Date: Thu, 13 Apr 2023 01:28:25 +0800 Message-Id: <20230412172833.2317696-12-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S13 X-Coremail-Antispam: 1UD129KBjvdXoWrtF47ZFW7Cw17Zr4DArW7CFg_yoW3Grg_GF 17ArW8Jr4rJwn5CFyrJrW8t3WrKr18Ar1rXFW3tr45X3WYqFZFkw1DJ34fAF4DWa4akasx A3s5WryIkr1SvjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUbDAFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M28IrcIa0xkI8V A2jI8067AKxVWUAVCq3wA2048vs2IY020Ec7CjxVAFwI0_Xr0E3s1l8cAvFVAK0II2c7xJ M28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVWDJVCq3wA2z4x0Y4vE2I x0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK 6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4 xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8 JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20V AGYxC7MxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAF wI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc4 0Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r4j6ryUMIIF0xvE2Ix0cI8IcVCY1x0267AK xVWxJVW8Jr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r4j6F 4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0pRvJPtU UUUU= 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762962185513371649?= X-GMAIL-MSGID: =?utf-8?q?1762962185513371649?= Function ext4_mb_new_blocks_simple needs count in cluster. Function ext4_mb_new_blocks accepts count in block. Convert count to cluster to fix the mismatch. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index eac91b2e3aa3..11ea5feb6a0d 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -6122,7 +6122,7 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode, } if (sbi->s_mount_state & EXT4_FC_REPLAY) { - ext4_free_blocks_simple(inode, block, count); + ext4_free_blocks_simple(inode, block, EXT4_NUM_B2C(sbi, count)); return; } From patchwork Wed Apr 12 17:28:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82340 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp188959vqo; Wed, 12 Apr 2023 02:34:18 -0700 (PDT) X-Google-Smtp-Source: AKy350bhjDxMmfQLh88MG1xXZJPasVOvcBgVo8ZQtympyJt2OZGPb6GjL9p+6PDZUOJE9dNsxJKI X-Received: by 2002:aa7:cd62:0:b0:504:921b:825 with SMTP id ca2-20020aa7cd62000000b00504921b0825mr925536edb.36.1681292058549; Wed, 12 Apr 2023 02:34:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681292058; cv=none; d=google.com; s=arc-20160816; b=n5xgRabXmLciOzuaw257Fesh+OPz5SKoa9ZqQTKftoGQUAdpmh6dzw2u5kh9T1c5OW 1MHnrOMPWhUpsX3xzvbCV9HEKT/Elku1iNYRCxCcMTbu+LL4VAcAOfGFWjrOjRTP0tUB mZxIMn/slSiX7r+AVmmFHDxQxhDF6ZMrQdOEQ8DcWYA93aGBgt8DIxou7174l3I3P62h 5LyRb2GPqXPtVYlIMDfuGdZ1tmVvG0ixbT1+hdrt35yYAGQ177mZI+uNMpkMm+SQGZ31 KF4lOMtHgxphzpYNfXk+uLL7IXF5zvw/5jXKJVBTE84pczg91M0FCoq/ISdLqct5Fmf8 vzdQ== 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=Wz2FnR6QSAPLPcGgxLmMn9OQRWnOELCLx+eLd1gYRwE=; b=nAn+e8ei5ZOQR5ANq+cBMVJy1PYGpahp1yXR1vRUSb06w//p/a6QWx3dmXDLCGkguo TAfRo8X1UmEhdy7qKi7Bua1BkENyoyds0omZJyQ2lMPuW51tT9Hm5dwwHdvyybuVMmwB sk1rNoIoZLdYBofPbUWbLqPwCTEoopfFOqRu/f36lUJ+qSP2XKe99Wld0zaOxVjkOXlX aC6OFKhe8vd0fmXtEtvE1+De5weqJY+8j4EigTI4dhaAuwWOgbGGhhkGQnUXoKG9Fqkh 3HIQCJtHmIu1NAGM5juO0lDnDqycYWAAFiLdaYonwmhtVYv1o4OnYuI4XcbRVpUq1ZO0 oK1w== 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 bf16-20020a0564021a5000b005049c29cecasi1683175edb.148.2023.04.12.02.33.54; Wed, 12 Apr 2023 02:34: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 S231494AbjDLJ1g (ORCPT + 99 others); Wed, 12 Apr 2023 05:27:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230126AbjDLJ0Q (ORCPT ); Wed, 12 Apr 2023 05:26:16 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D5B0D7EE8; Wed, 12 Apr 2023 02:26:13 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ95B84z4f4lKj; Wed, 12 Apr 2023 17:26:09 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S14; Wed, 12 Apr 2023 17:26:11 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 12/19] ext4: factor out codes to update block bitmap and group descriptor on disk from ext4_mb_mark_bb Date: Thu, 13 Apr 2023 01:28:26 +0800 Message-Id: <20230412172833.2317696-13-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S14 X-Coremail-Antispam: 1UD129KBjvJXoW3AF4rZw47WF43Jr4xXry7Wrg_yoW7tw4rpF 9IyF1DCr43Grnrur43W342q3WrKw109w1kGryfC345CF4ayr95WF1xKFyF9as0yFZrJFnF qF1Ykw4xur1furDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPF14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Cr0_Gr1UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVW8JV WxJwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjTRKfOw UUUUU 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762962501526499613?= X-GMAIL-MSGID: =?utf-8?q?1762962501526499613?= There are several reasons to add a general function to update block bitmap and group descriptor on disk: 1. pair behavior of alloc/free bits. For example, ext4_mb_new_blocks_simple will update free_clusters in struct flex_groups in ext4_mb_mark_bb while ext4_free_blocks_simple forgets this. 2. remove repeat code to read from disk, update and write back to disk. 3. reduce future unit test mocks to catch real IO to update structure on disk. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 157 +++++++++++++++++++++++++--------------------- 1 file changed, 87 insertions(+), 70 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 11ea5feb6a0d..b93260eaad92 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -3731,6 +3731,86 @@ void ext4_exit_mballoc(void) ext4_groupinfo_destroy_slabs(); } +struct ext4_mark_context { + struct super_block *sb; + int state; +}; + +static int +ext4_mb_mark_group_bb(struct ext4_mark_context *mc, ext4_group_t group, + ext4_grpblk_t blkoff, ext4_grpblk_t len) +{ + struct super_block *sb = mc->sb; + struct ext4_sb_info *sbi = EXT4_SB(sb); + struct buffer_head *bitmap_bh = NULL; + struct ext4_group_desc *gdp; + struct buffer_head *gdp_bh; + int err; + unsigned int i, already, changed; + + bitmap_bh = ext4_read_block_bitmap(sb, group); + if (IS_ERR(bitmap_bh)) + return PTR_ERR(bitmap_bh); + + err = -EIO; + gdp = ext4_get_group_desc(sb, group, &gdp_bh); + if (!gdp) + goto out_err; + + ext4_lock_group(sb, group); + if (ext4_has_group_desc_csum(sb) && + (gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) { + gdp->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT); + ext4_free_group_clusters_set(sb, gdp, + ext4_free_clusters_after_init(sb, group, gdp)); + } + + already = 0; + for (i = 0; i < len; i++) + if (mb_test_bit(blkoff + i, bitmap_bh->b_data) == + mc->state) + already++; + changed = len - already; + + if (mc->state) { + mb_set_bits(bitmap_bh->b_data, blkoff, len); + ext4_free_group_clusters_set(sb, gdp, + ext4_free_group_clusters(sb, gdp) - changed); + } else { + mb_clear_bits(bitmap_bh->b_data, blkoff, len); + ext4_free_group_clusters_set(sb, gdp, + ext4_free_group_clusters(sb, gdp) + changed); + } + + ext4_block_bitmap_csum_set(sb, gdp, bitmap_bh); + ext4_group_desc_csum_set(sb, group, gdp); + ext4_unlock_group(sb, group); + + if (sbi->s_log_groups_per_flex) { + ext4_group_t flex_group = ext4_flex_group(sbi, group); + struct flex_groups *fg = sbi_array_rcu_deref(sbi, + s_flex_groups, flex_group); + + if (mc->state) + atomic64_sub(changed, &fg->free_clusters); + else + atomic64_add(changed, &fg->free_clusters); + } + + err = ext4_handle_dirty_metadata(NULL, NULL, bitmap_bh); + if (err) + goto out_err; + err = ext4_handle_dirty_metadata(NULL, NULL, gdp_bh); + if (err) + goto out_err; + + sync_dirty_buffer(bitmap_bh); + sync_dirty_buffer(gdp_bh); + +out_err: + brelse(bitmap_bh); + return err; +} /* * Check quota and mark chosen space (ac->ac_b_ex) non-free in bitmaps @@ -3857,15 +3937,15 @@ ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac, void ext4_mb_mark_bb(struct super_block *sb, ext4_fsblk_t block, int len, int state) { - struct buffer_head *bitmap_bh = NULL; - struct ext4_group_desc *gdp; - struct buffer_head *gdp_bh; + struct ext4_mark_context mc = { + .sb = sb, + .state = state, + }; struct ext4_sb_info *sbi = EXT4_SB(sb); ext4_group_t group; ext4_grpblk_t blkoff; - int i, err; - int already; - unsigned int clen, clen_changed, thisgrp_len; + int err; + unsigned int clen, thisgrp_len; while (len > 0) { ext4_get_group_no_and_offset(sb, block, &group, &blkoff); @@ -3886,80 +3966,17 @@ void ext4_mb_mark_bb(struct super_block *sb, ext4_fsblk_t block, ext4_error(sb, "Marking blocks in system zone - " "Block = %llu, len = %u", block, thisgrp_len); - bitmap_bh = NULL; break; } - bitmap_bh = ext4_read_block_bitmap(sb, group); - if (IS_ERR(bitmap_bh)) { - err = PTR_ERR(bitmap_bh); - bitmap_bh = NULL; - break; - } - - err = -EIO; - gdp = ext4_get_group_desc(sb, group, &gdp_bh); - if (!gdp) - break; - - ext4_lock_group(sb, group); - already = 0; - for (i = 0; i < clen; i++) - if (!mb_test_bit(blkoff + i, bitmap_bh->b_data) == - !state) - already++; - - clen_changed = clen - already; - if (state) - mb_set_bits(bitmap_bh->b_data, blkoff, clen); - else - mb_clear_bits(bitmap_bh->b_data, blkoff, clen); - if (ext4_has_group_desc_csum(sb) && - (gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) { - gdp->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT); - ext4_free_group_clusters_set(sb, gdp, - ext4_free_clusters_after_init(sb, group, gdp)); - } - if (state) - clen = ext4_free_group_clusters(sb, gdp) - clen_changed; - else - clen = ext4_free_group_clusters(sb, gdp) + clen_changed; - - ext4_free_group_clusters_set(sb, gdp, clen); - ext4_block_bitmap_csum_set(sb, gdp, bitmap_bh); - ext4_group_desc_csum_set(sb, group, gdp); - - ext4_unlock_group(sb, group); - - if (sbi->s_log_groups_per_flex) { - ext4_group_t flex_group = ext4_flex_group(sbi, group); - struct flex_groups *fg = sbi_array_rcu_deref(sbi, - s_flex_groups, flex_group); - - if (state) - atomic64_sub(clen_changed, &fg->free_clusters); - else - atomic64_add(clen_changed, &fg->free_clusters); - - } - - err = ext4_handle_dirty_metadata(NULL, NULL, bitmap_bh); - if (err) - break; - sync_dirty_buffer(bitmap_bh); - err = ext4_handle_dirty_metadata(NULL, NULL, gdp_bh); - sync_dirty_buffer(gdp_bh); + err = ext4_mb_mark_group_bb(&mc, group, blkoff, clen); if (err) break; block += thisgrp_len; len -= thisgrp_len; - brelse(bitmap_bh); BUG_ON(len < 0); } - - if (err) - brelse(bitmap_bh); } /* From patchwork Wed Apr 12 17:28:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82339 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp186784vqo; Wed, 12 Apr 2023 02:29:41 -0700 (PDT) X-Google-Smtp-Source: AKy350a/Z5PaET6viS8XzWBJYDqeCbEqNR8Y1NKptoh+XUd88VYvq9eefSxywwJQ++f2MrHA6rc6 X-Received: by 2002:aa7:cf0c:0:b0:501:d4f9:3141 with SMTP id a12-20020aa7cf0c000000b00501d4f93141mr1618998edy.32.1681291781341; Wed, 12 Apr 2023 02:29:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681291781; cv=none; d=google.com; s=arc-20160816; b=aB0APEO7wnyy1ToglBRpXKUwgagwVA4hqS4IBusn05UMUDDyJ96kfsWK+5Ka3KuDhX Bm3/Y1RyXp83tPp8SsNSfRiycrdGTHp6FQtSkUNctw8KHjcyZzAhDrk+TXRoziy/8OFq 7yFQ7UtDoRl1YjJCTR3D5gHTyojE+63F7OPHxCdatPaMJItr1gR2ebAxntwrNcIyF2SF tKCgDYgwdcQCufTWdhaAwC2cSafm6mJyIkimjw/VMKmcReDiJvi6LMh/d+0BYnCANBDF 0pwachlNNHCl0oZK8naYq2RwmzabCyz5kfZW2jG9vLDSuZBvRUvgag5+T/NzcSu4SS3o 6tmw== 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=9gCAmVcsk0olvdOYz8+VxAD74rnE5595GtCCkIDwCAY=; b=Fj6mLQAm4T2NVZ5ysuTy+OW+G43s6/mtgLg6zvPAnirpJdAPiMwNFVLnLpoVdJWcf2 PqUFRR0cl31RyjvLwNFJouTRxHmiLghbV6+OFaXv9z8zhfqh/oYIQO5rteZHGiiDaj6p H347zRxMYba4Qma4exkXdDkMrRs5hQVUdlEqiyA9stIAOqsQEVK1NXnHvQ0iwZV5wPH1 oXHInfFfBsSs/KL5B2WS6FOCcPhRkI3Wgpu3Z7JOwKyk/3DE6/7ARA6o5YlIQsKgZavi YG8TEwf0sMjA+dJtGadOQCuzmilfFLcjvKZT4aztp+aWVAstJi03QZJd7ZvLDLD3Ru7r dSGQ== 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 bf16-20020a0564021a5000b005049c29cecasi1683175edb.148.2023.04.12.02.29.18; Wed, 12 Apr 2023 02:29:41 -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 S231536AbjDLJ1C (ORCPT + 99 others); Wed, 12 Apr 2023 05:27:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40226 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230148AbjDLJ0R (ORCPT ); Wed, 12 Apr 2023 05:26:17 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 20D0A7DA9; Wed, 12 Apr 2023 02:26:14 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQ95WRrz4f436w; Wed, 12 Apr 2023 17:26:09 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S15; Wed, 12 Apr 2023 17:26:11 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 13/19] ext4: call ext4_mb_mark_group_bb in ext4_free_blocks_simple Date: Thu, 13 Apr 2023 01:28:27 +0800 Message-Id: <20230412172833.2317696-14-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S15 X-Coremail-Antispam: 1UD129KBjvJXoW7ury5trWDKFWrtw47Wr4xCrg_yoW8ZFWkpr sxAr17Cr1fGr1q9F4xJ347X3W8Kw18u3WDGrWfW3s5CFW3Ar9agFW8KF1Fva4YkFZxZ3Zx Zr1Y93yUZr17WrDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPF14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Cr0_Gr1UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVW8JV WxJwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjTRKfOw UUUUU 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762962210792326623?= X-GMAIL-MSGID: =?utf-8?q?1762962210792326623?= call ext4_mb_mark_group_bb in ext4_free_blocks_simple to: 1. remove repeat code 2. pair update of free_clusters in ext4_mb_new_blocks_simple. 3. add missing ext4_lock_group/ext4_unlock_group protection. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index b93260eaad92..9a76d5a8bb73 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5870,43 +5870,16 @@ ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b, static void ext4_free_blocks_simple(struct inode *inode, ext4_fsblk_t block, unsigned long count) { - struct buffer_head *bitmap_bh; + struct ext4_mark_context mc = { + .sb = inode->i_sb, + .state = 0, + }; struct super_block *sb = inode->i_sb; - struct ext4_group_desc *gdp; - struct buffer_head *gdp_bh; ext4_group_t group; ext4_grpblk_t blkoff; - int already_freed = 0, err, i; ext4_get_group_no_and_offset(sb, block, &group, &blkoff); - bitmap_bh = ext4_read_block_bitmap(sb, group); - if (IS_ERR(bitmap_bh)) { - pr_warn("Failed to read block bitmap\n"); - return; - } - gdp = ext4_get_group_desc(sb, group, &gdp_bh); - if (!gdp) - goto err_out; - - for (i = 0; i < count; i++) { - if (!mb_test_bit(blkoff + i, bitmap_bh->b_data)) - already_freed++; - } - mb_clear_bits(bitmap_bh->b_data, blkoff, count); - err = ext4_handle_dirty_metadata(NULL, NULL, bitmap_bh); - if (err) - goto err_out; - ext4_free_group_clusters_set( - sb, gdp, ext4_free_group_clusters(sb, gdp) + - count - already_freed); - ext4_block_bitmap_csum_set(sb, gdp, bitmap_bh); - ext4_group_desc_csum_set(sb, group, gdp); - ext4_handle_dirty_metadata(NULL, NULL, gdp_bh); - sync_dirty_buffer(bitmap_bh); - sync_dirty_buffer(gdp_bh); - -err_out: - brelse(bitmap_bh); + ext4_mb_mark_group_bb(&mc, group, blkoff, count); } /** From patchwork Wed Apr 12 17:28:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82338 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp186746vqo; Wed, 12 Apr 2023 02:29:35 -0700 (PDT) X-Google-Smtp-Source: AKy350aQF92N7TBq7c+CnOlcCFKkwtrfNQcOTpFI/HbYHPBMvjR+YGkdEyhg3oFkd41jk7bJkYqR X-Received: by 2002:a17:906:7112:b0:94a:930e:b226 with SMTP id x18-20020a170906711200b0094a930eb226mr1412871ejj.50.1681291775575; Wed, 12 Apr 2023 02:29:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681291775; cv=none; d=google.com; s=arc-20160816; b=ihskvDSMjf/PfHQW/Pb30Ci7I2tE0eIM3k8UtHdI0sLLM1H5+ThN+ioVIgaidkic3r /ylX9dKWbHmEz7K65E5B4HAra/tSSlWGbi67gD5q1tceOm1EBM9P1g8drtLx8Kc7///e 48CNGQUB5qA6l4YN9GVb3cXkaq1oUWbS3JtxE2m2dGF3ZVH0pdz3B9+b3hCDLsd7SyT3 8pi1gjaWeyn2aJTraITBTLH77wTGVpIwCxlWWqD1ZD61WbJhwqBZzOFQcxlpG8imA8df wDV2SToNXg3AsTwQwr1MfzJ7pMSGLxBhytQyQvx5mIR3sSYe/0k3OYjvIFDjfOeRHtfn rZWw== 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=APxeX3Fdxk6ERJeb7zidK/Sckp7LX3mZpGgOXf4ORQc=; b=bXhXSGAwfOcGIxeAxytQUISIVF5aK4EhiTRvfKhuvtDMLxE0v+NyEWINnaKU/dAn++ 9Btm29+0vpA6VA36bYRuwzCpFRD7aeipMwSIBwPzlC0a7xuCYlrN4jU8XyI/QUiRJBTT pweraKvKT/OJb6m6TDVg8zoCQkJCL7M1RDHWZ1KmDGSP42SPXjZZupba3De2N4bx+S4t 4uXL1sCUddO3A5Lrhw+aCYAs110X1LfZNgQG5pXw7Q4PVlaAyLR9fV0imhSILuxnnW5W tqlPKz1jaFAVzCG+onKv50x+oWV8bJp5dwpR8AL4XHoHXiic6QWRuGgILCC0b+MPxhlJ FAWQ== 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 k12-20020a170906578c00b0094a943d416esi1163386ejq.536.2023.04.12.02.29.11; Wed, 12 Apr 2023 02:29:35 -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 S230382AbjDLJ07 (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230153AbjDLJ0R (ORCPT ); Wed, 12 Apr 2023 05:26:17 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6EC5E7ED7; Wed, 12 Apr 2023 02:26:14 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PxHQB2ccWz4f4lKq; Wed, 12 Apr 2023 17:26:10 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S16; Wed, 12 Apr 2023 17:26:11 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 14/19] ext4: extent ext4_mb_mark_group_bb to support allocation under journal Date: Thu, 13 Apr 2023 01:28:28 +0800 Message-Id: <20230412172833.2317696-15-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S16 X-Coremail-Antispam: 1UD129KBjvJXoW3Jr4Dtw17Gw1rWr17XryUGFg_yoW7GrWDpr WDAr1qkr4fKrnF9F47C342qF1fKw10k3WUGrWxGrySkr4xtryfXFWxKF1FyF1YyFsrZ3Zx Xr1Yy34UuF4fG37anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPF14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Cr0_Gr1UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVW8JV WxJwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjTRKfOw UUUUU 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762962205195070115?= X-GMAIL-MSGID: =?utf-8?q?1762962205195070115?= Previously, ext4_mb_mark_group_bb is only called under fast commit replay path, so there is no valid handle when we update block bitmap and group descriptor. This patch try to extent ext4_mb_mark_group_bb to be used by code under journal. There are several improves: 1. add "handle_t *handle" to struct ext4_mark_context to accept handle to journal block bitmap and group descriptor update inside ext4_mb_mark_group_bb (the added journal caode is based on journal code in ext4_mb_mark_diskspace_used where ext4_mb_mark_group_bb is going to be used.) 2. add EXT4_MB_BITMAP_MARKED_CHECK flag to control check if bits in block bitmap are already marked as allocation code under journal asserts that all bits to be changed are not marked before. 3. add "ext4_grpblk_t changed" to struct ext4_mark_context to notify number of bits in block bitmap has changed. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 59 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 9a76d5a8bb73..fb163b61ac02 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -3731,32 +3731,54 @@ void ext4_exit_mballoc(void) ext4_groupinfo_destroy_slabs(); } +#define EXT4_MB_BITMAP_MARKED_CHECK 0x0001 +#define EXT4_MB_SYNC_UPDATE 0x0002 struct ext4_mark_context { + handle_t *handle; struct super_block *sb; int state; + ext4_grpblk_t changed; }; static int ext4_mb_mark_group_bb(struct ext4_mark_context *mc, ext4_group_t group, - ext4_grpblk_t blkoff, ext4_grpblk_t len) + ext4_grpblk_t blkoff, ext4_grpblk_t len, int flags) { + handle_t *handle = mc->handle; struct super_block *sb = mc->sb; struct ext4_sb_info *sbi = EXT4_SB(sb); struct buffer_head *bitmap_bh = NULL; struct ext4_group_desc *gdp; struct buffer_head *gdp_bh; int err; - unsigned int i, already, changed; + unsigned int i, already, changed = len; + mc->changed = 0; bitmap_bh = ext4_read_block_bitmap(sb, group); if (IS_ERR(bitmap_bh)) return PTR_ERR(bitmap_bh); + if (handle) { + BUFFER_TRACE(bitmap_bh, "getting write access"); + err = ext4_journal_get_write_access(handle, sb, bitmap_bh, + EXT4_JTR_NONE); + if (err) + goto out_err; + } + err = -EIO; gdp = ext4_get_group_desc(sb, group, &gdp_bh); if (!gdp) goto out_err; + if (handle) { + BUFFER_TRACE(gdp_bh, "get_write_access"); + err = ext4_journal_get_write_access(handle, sb, gdp_bh, + EXT4_JTR_NONE); + if (err) + goto out_err; + } + ext4_lock_group(sb, group); if (ext4_has_group_desc_csum(sb) && (gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) { @@ -3765,12 +3787,14 @@ ext4_mb_mark_group_bb(struct ext4_mark_context *mc, ext4_group_t group, ext4_free_clusters_after_init(sb, group, gdp)); } - already = 0; - for (i = 0; i < len; i++) - if (mb_test_bit(blkoff + i, bitmap_bh->b_data) == - mc->state) - already++; - changed = len - already; + if (flags & EXT4_MB_BITMAP_MARKED_CHECK) { + already = 0; + for (i = 0; i < len; i++) + if (mb_test_bit(blkoff + i, bitmap_bh->b_data) == + mc->state) + already++; + changed = len - already; + } if (mc->state) { mb_set_bits(bitmap_bh->b_data, blkoff, len); @@ -3785,6 +3809,7 @@ ext4_mb_mark_group_bb(struct ext4_mark_context *mc, ext4_group_t group, ext4_block_bitmap_csum_set(sb, gdp, bitmap_bh); ext4_group_desc_csum_set(sb, group, gdp); ext4_unlock_group(sb, group); + mc->changed = changed; if (sbi->s_log_groups_per_flex) { ext4_group_t flex_group = ext4_flex_group(sbi, group); @@ -3797,15 +3822,17 @@ ext4_mb_mark_group_bb(struct ext4_mark_context *mc, ext4_group_t group, atomic64_add(changed, &fg->free_clusters); } - err = ext4_handle_dirty_metadata(NULL, NULL, bitmap_bh); + err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh); if (err) goto out_err; - err = ext4_handle_dirty_metadata(NULL, NULL, gdp_bh); + err = ext4_handle_dirty_metadata(handle, NULL, gdp_bh); if (err) goto out_err; - sync_dirty_buffer(bitmap_bh); - sync_dirty_buffer(gdp_bh); + if (flags & EXT4_MB_SYNC_UPDATE) { + sync_dirty_buffer(bitmap_bh); + sync_dirty_buffer(gdp_bh); + } out_err: brelse(bitmap_bh); @@ -3969,7 +3996,9 @@ void ext4_mb_mark_bb(struct super_block *sb, ext4_fsblk_t block, break; } - err = ext4_mb_mark_group_bb(&mc, group, blkoff, clen); + err = ext4_mb_mark_group_bb(&mc, group, blkoff, clen, + EXT4_MB_BITMAP_MARKED_CHECK | + EXT4_MB_SYNC_UPDATE); if (err) break; @@ -5879,7 +5908,9 @@ static void ext4_free_blocks_simple(struct inode *inode, ext4_fsblk_t block, ext4_grpblk_t blkoff; ext4_get_group_no_and_offset(sb, block, &group, &blkoff); - ext4_mb_mark_group_bb(&mc, group, blkoff, count); + ext4_mb_mark_group_bb(&mc, group, blkoff, count, + EXT4_MB_BITMAP_MARKED_CHECK | + EXT4_MB_SYNC_UPDATE); } /** From patchwork Wed Apr 12 17:28:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82348 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp196714vqo; Wed, 12 Apr 2023 02:50:22 -0700 (PDT) X-Google-Smtp-Source: AKy350ayFkdMM91gJ5cB9iCCGLyDXGFNDB9mn0mLJSk/lbFB16kwq4XYtZ+259LRXKy+ViS/rRQE X-Received: by 2002:a62:1758:0:b0:63a:1fb3:19dd with SMTP id 85-20020a621758000000b0063a1fb319ddmr2770408pfx.8.1681293022239; Wed, 12 Apr 2023 02:50:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681293022; cv=none; d=google.com; s=arc-20160816; b=yDOAWxcKcLdpZodEe/BZCQ7nj5JOfDVR0uod5vB2UvopGPeirZKIYT2CuRn8Plk/sA 6+RKxpskOQsar0TT6yUx3gTYMW6fB+RenznyYBRgqXSI0cA7/CWxr149z388zqhuQKD5 /IHKTBKkcrS4EmQ3tddS7F0fWws4ipTjm9dKpbbkoeuVjDVWJoe7AWueIQ8IL9Lt9uw0 5jNZ+KrjvmJrJainZ53uvK3kYAIaYgWLIuCqRZ8dqQAe2sm8KpjFWcfCE+K+TDDbEQfU 8UGZmwZpVRedoFSFU32llM/n8Xj0zpKIle+MY8Fws7hlzD/HYKr0exvJxY0qhHtB+Rli 35Iw== 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=ixBu+966SuQgxAEUG6hWU/9YRKENHF83kacj54Jc8AA=; b=zT+HVTUQDXT0EvkYaYkF1UVWJymjQETNow+0ljyjXJKdACSUegAW471OleFq6t4czT gHqh+f1BAqVeiJcTI4fwB29toSJHthzo+qOdxeE5JL+hELiuXnY/8Rf46LDhGoRha5nh EGA4k7kqL9y+BEsVlILUqPQax4V44PSKJ4nRfQC5In7rkU7zKq/BjYWIsKFWhfVeZu1C +xv7S2HLThO/mgs2P97vEUBfIoQgF+Jy3XrcyJJ7yTDjEE2r2tusJbizVyVMfre2kRvP toPc7ulUTdEHcV/xo6CM0BvgagZwMPWww4a4eUxH+TCbH01n+52UcsLPotWcb9r/OXNv eKRA== 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 s62-20020a625e41000000b0063b1d0f2b51si274031pfb.163.2023.04.12.02.50.10; Wed, 12 Apr 2023 02:50:22 -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 S230351AbjDLJ05 (ORCPT + 99 others); Wed, 12 Apr 2023 05:26:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40224 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230092AbjDLJ0R (ORCPT ); Wed, 12 Apr 2023 05:26:17 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DF90D6A4E; Wed, 12 Apr 2023 02:26:14 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQB3DC8z4f3snB; Wed, 12 Apr 2023 17:26:10 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S17; Wed, 12 Apr 2023 17:26:12 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 15/19] ext4: call ext4_mb_mark_group_bb in ext4_mb_mark_diskspace_used Date: Thu, 13 Apr 2023 01:28:29 +0800 Message-Id: <20230412172833.2317696-16-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S17 X-Coremail-Antispam: 1UD129KBjvJXoW3XF45Xw1Utr13Ww4kGr1kGrg_yoW7Xr1Dpr nIyF1DCr1fWr1DuFWIk34DXF1rKw48Gw1rJ34xGF1fCF12krZ8Cay8ta40ya9rKFZrA3Z0 vr1Yya4UCr47WrDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPF14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Cr0_Gr1UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVW8JV WxJwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjTRKfOw UUUUU 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762963512567130597?= X-GMAIL-MSGID: =?utf-8?q?1762963512567130597?= call ext4_mb_mark_group_bb in ext4_mb_mark_diskspace_used to: 1. remove repeat code to normally update bitmap and group descriptor on disk. 2. call ext4_mb_mark_group_bb instead of only setting bits in block bitmap to fix the bitmap. Function ext4_mb_mark_group_bb will also update checksum of bitmap and other counter along with the bit change to keep the cosistent with bit change or block bitmap will be marked corrupted as checksum of bitmap is in inconsistent state. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 90 +++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 66 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index fb163b61ac02..3d31ad486a0c 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -3847,9 +3847,12 @@ static noinline_for_stack int ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac, handle_t *handle, unsigned int reserv_clstrs) { - struct buffer_head *bitmap_bh = NULL; + struct ext4_mark_context mc = { + .handle = handle, + .sb = ac->ac_sb, + .state = 1, + }; struct ext4_group_desc *gdp; - struct buffer_head *gdp_bh; struct ext4_sb_info *sbi; struct super_block *sb; ext4_fsblk_t block; @@ -3861,32 +3864,13 @@ ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac, sb = ac->ac_sb; sbi = EXT4_SB(sb); - bitmap_bh = ext4_read_block_bitmap(sb, ac->ac_b_ex.fe_group); - if (IS_ERR(bitmap_bh)) { - return PTR_ERR(bitmap_bh); - } - - BUFFER_TRACE(bitmap_bh, "getting write access"); - err = ext4_journal_get_write_access(handle, sb, bitmap_bh, - EXT4_JTR_NONE); - if (err) - goto out_err; - - err = -EIO; - gdp = ext4_get_group_desc(sb, ac->ac_b_ex.fe_group, &gdp_bh); + gdp = ext4_get_group_desc(sb, ac->ac_b_ex.fe_group, NULL); if (!gdp) - goto out_err; - + return -EIO; ext4_debug("using block group %u(%d)\n", ac->ac_b_ex.fe_group, ext4_free_group_clusters(sb, gdp)); - BUFFER_TRACE(gdp_bh, "get_write_access"); - err = ext4_journal_get_write_access(handle, sb, gdp_bh, EXT4_JTR_NONE); - if (err) - goto out_err; - block = ext4_grp_offs_to_block(sb, &ac->ac_b_ex); - len = EXT4_C2B(sbi, ac->ac_b_ex.fe_len); if (!ext4_inode_block_valid(ac->ac_inode, block, len)) { ext4_error(sb, "Allocating blocks %llu-%llu which overlap " @@ -3895,41 +3879,30 @@ ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac, * Fix the bitmap and return EFSCORRUPTED * We leak some of the blocks here. */ - ext4_lock_group(sb, ac->ac_b_ex.fe_group); - mb_set_bits(bitmap_bh->b_data, ac->ac_b_ex.fe_start, - ac->ac_b_ex.fe_len); - ext4_unlock_group(sb, ac->ac_b_ex.fe_group); - err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh); + err = ext4_mb_mark_group_bb(&mc, ac->ac_b_ex.fe_group, + ac->ac_b_ex.fe_start, + ac->ac_b_ex.fe_len, + 0); if (!err) err = -EFSCORRUPTED; - goto out_err; + return err; } - ext4_lock_group(sb, ac->ac_b_ex.fe_group); #ifdef AGGRESSIVE_CHECK - { - int i; - for (i = 0; i < ac->ac_b_ex.fe_len; i++) { - BUG_ON(mb_test_bit(ac->ac_b_ex.fe_start + i, - bitmap_bh->b_data)); - } - } + err = ext4_mb_mark_group_bb(&mc, ac->ac_b_ex.fe_group, + ac->ac_b_ex.fe_start, ac->ac_b_ex.fe_len, + EXT4_MB_BITMAP_MARKED_CHECK); +#else + err = ext4_mb_mark_group_bb(&mc, ac->ac_b_ex.fe_group, + ac->ac_b_ex.fe_start, ac->ac_b_ex.fe_len, + 0); #endif - mb_set_bits(bitmap_bh->b_data, ac->ac_b_ex.fe_start, - ac->ac_b_ex.fe_len); - if (ext4_has_group_desc_csum(sb) && - (gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) { - gdp->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT); - ext4_free_group_clusters_set(sb, gdp, - ext4_free_clusters_after_init(sb, - ac->ac_b_ex.fe_group, gdp)); - } - len = ext4_free_group_clusters(sb, gdp) - ac->ac_b_ex.fe_len; - ext4_free_group_clusters_set(sb, gdp, len); - ext4_block_bitmap_csum_set(sb, gdp, bitmap_bh); - ext4_group_desc_csum_set(sb, ac->ac_b_ex.fe_group, gdp); + if (err && mc.changed == 0) + return err; - ext4_unlock_group(sb, ac->ac_b_ex.fe_group); +#ifdef AGGRESSIVE_CHECK + BUG_ON(mc.changed != ac->ac_b_ex.fe_len); +#endif percpu_counter_sub(&sbi->s_freeclusters_counter, ac->ac_b_ex.fe_len); /* * Now reduce the dirty block count also. Should not go negative @@ -3939,21 +3912,6 @@ ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac, percpu_counter_sub(&sbi->s_dirtyclusters_counter, reserv_clstrs); - if (sbi->s_log_groups_per_flex) { - ext4_group_t flex_group = ext4_flex_group(sbi, - ac->ac_b_ex.fe_group); - atomic64_sub(ac->ac_b_ex.fe_len, - &sbi_array_rcu_deref(sbi, s_flex_groups, - flex_group)->free_clusters); - } - - err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh); - if (err) - goto out_err; - err = ext4_handle_dirty_metadata(handle, NULL, gdp_bh); - -out_err: - brelse(bitmap_bh); return err; } From patchwork Wed Apr 12 17:28:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82360 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp202516vqo; Wed, 12 Apr 2023 03:02:30 -0700 (PDT) X-Google-Smtp-Source: AKy350a3GbeKgXU396yA89biur66A3EZ8c0Xsun1kVEfM6v7s+KH9wn4FciYgz5sP3GP8GHRmWGr X-Received: by 2002:a17:906:65c5:b0:94a:68a9:b399 with SMTP id z5-20020a17090665c500b0094a68a9b399mr5377223ejn.53.1681293750661; Wed, 12 Apr 2023 03:02:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681293750; cv=none; d=google.com; s=arc-20160816; b=CTjMbsOhBG2Z3yj8o+YOLEofFsNU/PKqZE24HQjzDtZdqVi2t88J+sMDgX16fv0qoI Q/0ZLY76CRtFO7BDFxXMgjjU9IdjG3eaCG8Vrxq9Jiqwhv1TyBtUpfr7pb+4wCmm0kvw uMP0gawFmibioyqs6PKjgAiVEGP+w/XNx6l8funQKgueN44gyXS6G1Hp985zNu9hujq5 FBzs/kvaU6/46B8321LP/hvuVEWVJ2zm1C27nSBhRPKL1zEv1AFQeEG2fy90J5O94xko N7OkZGOmB+5WbzKCzYRn5rWVoegt8NOk/Sg/mQ6H4v3Zl35OMQA2Z8Fv0k3f7saXYTE+ 92cA== 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=8AFAOgkTXF+b6ars5oxTWmea5kcSCh8njHqe2q6sFqg=; b=EKHT53GAIcJuDL84mD5pG4D3KTKGhSF0R01MUhPAcsFMn3COS0BpH4N4EmCdNu2HLe O5/IEllF4R6+qrtSIb7hXxGXwBvb2ytq5ahgixTZ2YlbgVVNR0hZXgnj6t2yocYG7ZGH tRKUClwBSi/pEGmaQTX56Tz6/g+FQCMsNaGoK9za9J3MKM23Hu8hbYQKE9yB8qnURoyo fvnQUTpMDIIF1KByLSBwigH+VrqTw8KWSrdoTRKKSZTUVOweZJmSXtFhqu24Bp7XoiE3 U45fqDXkKEX4bwBuLcEjaidlR3MZri6usa6C5OuXZzENHzhoMKGgL5ESmu6utdaAdBuP OMjA== 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 xi14-20020a170906dace00b0094aa1668c3csi1186882ejb.923.2023.04.12.03.02.06; Wed, 12 Apr 2023 03:02:30 -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 S231558AbjDLJ1P (ORCPT + 99 others); Wed, 12 Apr 2023 05:27:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40336 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230012AbjDLJ0R (ORCPT ); Wed, 12 Apr 2023 05:26:17 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12DCC7D94; Wed, 12 Apr 2023 02:26:15 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PxHQC1KJ0z4f42YM; Wed, 12 Apr 2023 17:26:11 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S18; Wed, 12 Apr 2023 17:26:12 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 16/19] ext4: call ext4_mb_mark_group_bb in ext4_mb_clear_bb Date: Thu, 13 Apr 2023 01:28:30 +0800 Message-Id: <20230412172833.2317696-17-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S18 X-Coremail-Antispam: 1UD129KBjvJXoWxKrWDAFW7Kr13XFW7WFyDJrb_yoW7Ar1Dpr yDJFnrCr4rGFnF9F40k34UX3WfKw18W347JrWfCr93CF1ayr93KFWktFnavFWUtFZ3X3ZF qr1Y93yUur4xW37anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPI14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Gr1j6F4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr 0_Cr1lIxAIcVC2z280aVCY1x0267AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0pRv JPtUUUUU= 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762964275972617410?= X-GMAIL-MSGID: =?utf-8?q?1762964275972617410?= call ext4_mb_mark_group_bb in ext4_mb_clear_bb to remove repeat code to update block bitmap and group descriptor on disk. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 86 +++++++++++++---------------------------------- 1 file changed, 23 insertions(+), 63 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 3d31ad486a0c..c3a4c7eae0b1 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5884,18 +5884,19 @@ static void ext4_mb_clear_bb(handle_t *handle, struct inode *inode, ext4_fsblk_t block, unsigned long count, int flags) { - struct buffer_head *bitmap_bh = NULL; + struct ext4_mark_context mc = { + .handle = handle, + .sb = inode->i_sb, + .state = 0, + }; struct super_block *sb = inode->i_sb; - struct ext4_group_desc *gdp; unsigned int overflow; ext4_grpblk_t bit; - struct buffer_head *gd_bh; ext4_group_t block_group; struct ext4_sb_info *sbi; struct ext4_buddy e4b; unsigned int count_clusters; int err = 0; - int ret; sbi = EXT4_SB(sb); @@ -5927,18 +5928,6 @@ static void ext4_mb_clear_bb(handle_t *handle, struct inode *inode, /* The range changed so it's no longer validated */ flags &= ~EXT4_FREE_BLOCKS_VALIDATED; } - count_clusters = EXT4_NUM_B2C(sbi, count); - bitmap_bh = ext4_read_block_bitmap(sb, block_group); - if (IS_ERR(bitmap_bh)) { - err = PTR_ERR(bitmap_bh); - bitmap_bh = NULL; - goto error_return; - } - gdp = ext4_get_group_desc(sb, block_group, &gd_bh); - if (!gdp) { - err = -EIO; - goto error_return; - } if (!(flags & EXT4_FREE_BLOCKS_VALIDATED) && !ext4_inode_block_valid(inode, block, count)) { @@ -5948,28 +5937,7 @@ static void ext4_mb_clear_bb(handle_t *handle, struct inode *inode, goto error_return; } - BUFFER_TRACE(bitmap_bh, "getting write access"); - err = ext4_journal_get_write_access(handle, sb, bitmap_bh, - EXT4_JTR_NONE); - if (err) - goto error_return; - - /* - * We are about to modify some metadata. Call the journal APIs - * to unshare ->b_data if a currently-committing transaction is - * using it - */ - BUFFER_TRACE(gd_bh, "get_write_access"); - err = ext4_journal_get_write_access(handle, sb, gd_bh, EXT4_JTR_NONE); - if (err) - goto error_return; -#ifdef AGGRESSIVE_CHECK - { - int i; - for (i = 0; i < count_clusters; i++) - BUG_ON(!mb_test_bit(bit + i, bitmap_bh->b_data)); - } -#endif + count_clusters = EXT4_NUM_B2C(sbi, count); trace_ext4_mballoc_free(sb, inode, block_group, bit, count_clusters); /* __GFP_NOFAIL: retry infinitely, ignore TIF_MEMDIE and memcg limit. */ @@ -5978,6 +5946,23 @@ static void ext4_mb_clear_bb(handle_t *handle, struct inode *inode, if (err) goto error_return; +#ifdef AGGRESSIVE_CHECK + err = ext4_mb_mark_group_bb(&mc, block_group, bit, count_clusters, + EXT4_MB_BITMAP_MARKED_CHECK); +#else + err = ext4_mb_mark_group_bb(&mc, block_group, bit, count_clusters, + 0); +#endif + + if (err && mc.changed == 0) { + ext4_mb_unload_buddy(&e4b); + goto error_return; + } + +#ifdef AGGRESSIVE_CHECK + BUG_ON(mc.changed != count_clusters); +#endif + /* * We need to make sure we don't reuse the freed block until after the * transaction is committed. We make an exception if the inode is to be @@ -6000,7 +5985,6 @@ static void ext4_mb_clear_bb(handle_t *handle, struct inode *inode, new_entry->efd_tid = handle->h_transaction->t_tid; ext4_lock_group(sb, block_group); - mb_clear_bits(bitmap_bh->b_data, bit, count_clusters); ext4_mb_free_metadata(handle, &e4b, new_entry); } else { /* need to update group_info->bb_free and bitmap @@ -6019,23 +6003,11 @@ static void ext4_mb_clear_bb(handle_t *handle, struct inode *inode, EXT4_MB_GRP_CLEAR_TRIMMED(e4b.bd_info); ext4_lock_group(sb, block_group); - mb_clear_bits(bitmap_bh->b_data, bit, count_clusters); mb_free_blocks(inode, &e4b, bit, count_clusters); } - ret = ext4_free_group_clusters(sb, gdp) + count_clusters; - ext4_free_group_clusters_set(sb, gdp, ret); - ext4_block_bitmap_csum_set(sb, gdp, bitmap_bh); - ext4_group_desc_csum_set(sb, block_group, gdp); ext4_unlock_group(sb, block_group); - if (sbi->s_log_groups_per_flex) { - ext4_group_t flex_group = ext4_flex_group(sbi, block_group); - atomic64_add(count_clusters, - &sbi_array_rcu_deref(sbi, s_flex_groups, - flex_group)->free_clusters); - } - /* * on a bigalloc file system, defer the s_freeclusters_counter * update to the caller (ext4_remove_space and friends) so they @@ -6050,26 +6022,14 @@ static void ext4_mb_clear_bb(handle_t *handle, struct inode *inode, ext4_mb_unload_buddy(&e4b); - /* We dirtied the bitmap block */ - BUFFER_TRACE(bitmap_bh, "dirtied bitmap block"); - err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh); - - /* And the group descriptor block */ - BUFFER_TRACE(gd_bh, "dirtied group descriptor block"); - ret = ext4_handle_dirty_metadata(handle, NULL, gd_bh); - if (!err) - err = ret; - if (overflow && !err) { block += count; count = overflow; - put_bh(bitmap_bh); /* The range changed so it's no longer validated */ flags &= ~EXT4_FREE_BLOCKS_VALIDATED; goto do_more; } error_return: - brelse(bitmap_bh); ext4_std_error(sb, err); return; } From patchwork Wed Apr 12 17:28:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82354 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp200209vqo; Wed, 12 Apr 2023 02:59:08 -0700 (PDT) X-Google-Smtp-Source: AKy350buOU1t5Hr8OmFF0L7xWrkXmF0Vzq2X80eN2fc3QH5hF1GwYHQJzNrhBZSPH9qQIv7OrQjG X-Received: by 2002:a17:902:ea03:b0:1a0:53f3:3761 with SMTP id s3-20020a170902ea0300b001a053f33761mr2575769plg.15.1681293548165; Wed, 12 Apr 2023 02:59:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681293548; cv=none; d=google.com; s=arc-20160816; b=te9Wz5WrwjAHca5zA29hMb5SLhYgeYxZBF2wX0WPylZpMIIAYr9MxrtLOiRO1DNxvn NO2zOtReNcDYGwkw3xAXNfEjrt/BSEAJGl4hu6kwS0fvMBReCZsZyqT3wYL3FRydbwok fflthlEx5VP/4fHOKQnAVjE17xbZFEI0z9SjEdcQJ/y2QwUxACPUYs5qkh7ybwDmekga JnEcEb3A4nU2ABHudf/csN806dCsVl37aDtijYcSVnx+bpKX1cixZOZUYMSu9nx++HP4 MfQNSF2xibqgTiLLGUnY6fBQ2WyrfCaW5xfE1sTf1sa7D9eeJ3guy5HJ+8nxaDd3aaOB K22Q== 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=+jfB1GRi9Sst+S7hp4xUO35pfzJ/J31t/8kjomIvC+A=; b=YR/m7Crm36vrudbahPT4rY+HG9qm1hkPo6MsY9xr459ovzYEID8NmC7nu4l+LLAiEN s6bRG6u6o00QYvme3SPUE7iA4xloB4JNiCcLKpmQ1yOH7Q/HR+7cBQAKEhyVPCPOQHaM /V3LvQD8vgBpKPhQPgyHrh2DD1KGbA/+oTjTZ3dUoA99m9WRd1m2CY3NXK5UekZQVBQi 6L6HVNFfR9UCnrU4QhsDEB+zQ4SG885haonnT+gW04/hvuCrBdHZxe89pb6TKbfA4S8Q mdz6pJS9lqyWn3IdTfwNJB6gOmm5kNSe4m0HEXkDQuJbTZSp04dKSV0sHvRLDS/6hodK mRbg== 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 li12-20020a170903294c00b001a4f1a956d8si1528858plb.57.2023.04.12.02.58.55; Wed, 12 Apr 2023 02:59:08 -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 S231134AbjDLJ1U (ORCPT + 99 others); Wed, 12 Apr 2023 05:27:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40326 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230014AbjDLJ0S (ORCPT ); Wed, 12 Apr 2023 05:26:18 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 766757DBD; Wed, 12 Apr 2023 02:26:15 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PxHQC28Y2z4f4lKv; Wed, 12 Apr 2023 17:26:11 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S19; Wed, 12 Apr 2023 17:26:12 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 17/19] ext4: call ext4_mb_mark_group_bb in ext4_group_add_blocks Date: Thu, 13 Apr 2023 01:28:31 +0800 Message-Id: <20230412172833.2317696-18-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S19 X-Coremail-Antispam: 1UD129KBjvJXoWxCFWrGF1UXrWrJr18XF18Zrb_yoWrKr4Dpw nIyF9rCr1fGrnruF48A34jq3WrKw48C3W7GrW3CryfCF9IyFn3CF97tFnY9ayUtFZ7ZFnr Xw1Y9348ursrWr7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPI14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Gr1j6F4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr 0_Cr1lIxAIcVC2z280aVCY1x0267AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0pRv JPtUUUUU= 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762964063472816719?= X-GMAIL-MSGID: =?utf-8?q?1762964063472816719?= call ext4_mb_mark_group_bb in ext4_group_add_blocks to remove repeat code to update block bitmap and group descriptor on disk. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc.c | 87 +++++++++-------------------------------------- 1 file changed, 17 insertions(+), 70 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index c3a4c7eae0b1..64860341ef2d 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -6149,23 +6149,23 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode, int ext4_group_add_blocks(handle_t *handle, struct super_block *sb, ext4_fsblk_t block, unsigned long count) { - struct buffer_head *bitmap_bh = NULL; - struct buffer_head *gd_bh; + struct ext4_mark_context mc = { + .handle = handle, + .sb = sb, + .state = 0, + }; ext4_group_t block_group; ext4_grpblk_t bit; - unsigned int i; - struct ext4_group_desc *desc; struct ext4_sb_info *sbi = EXT4_SB(sb); struct ext4_buddy e4b; - int err = 0, ret, free_clusters_count; - ext4_grpblk_t clusters_freed; + int err = 0; ext4_fsblk_t first_cluster = EXT4_B2C(sbi, block); ext4_fsblk_t last_cluster = EXT4_B2C(sbi, block + count - 1); unsigned long cluster_count = last_cluster - first_cluster + 1; ext4_debug("Adding block(s) %llu-%llu\n", block, block + count - 1); - if (count == 0) + if (cluster_count == 0) return 0; ext4_get_group_no_and_offset(sb, block, &block_group, &bit); @@ -6180,19 +6180,6 @@ int ext4_group_add_blocks(handle_t *handle, struct super_block *sb, goto error_return; } - bitmap_bh = ext4_read_block_bitmap(sb, block_group); - if (IS_ERR(bitmap_bh)) { - err = PTR_ERR(bitmap_bh); - bitmap_bh = NULL; - goto error_return; - } - - desc = ext4_get_group_desc(sb, block_group, &gd_bh); - if (!desc) { - err = -EIO; - goto error_return; - } - if (!ext4_sb_block_valid(sb, NULL, block, count)) { ext4_error(sb, "Adding blocks in system zones - " "Block = %llu, count = %lu", @@ -6201,75 +6188,35 @@ int ext4_group_add_blocks(handle_t *handle, struct super_block *sb, goto error_return; } - BUFFER_TRACE(bitmap_bh, "getting write access"); - err = ext4_journal_get_write_access(handle, sb, bitmap_bh, - EXT4_JTR_NONE); - if (err) - goto error_return; - - /* - * We are about to modify some metadata. Call the journal APIs - * to unshare ->b_data if a currently-committing transaction is - * using it - */ - BUFFER_TRACE(gd_bh, "get_write_access"); - err = ext4_journal_get_write_access(handle, sb, gd_bh, EXT4_JTR_NONE); + err = ext4_mb_load_buddy(sb, block_group, &e4b); if (err) goto error_return; - for (i = 0, clusters_freed = 0; i < cluster_count; i++) { - BUFFER_TRACE(bitmap_bh, "clear bit"); - if (!mb_test_bit(bit + i, bitmap_bh->b_data)) { - ext4_error(sb, "bit already cleared for block %llu", - (ext4_fsblk_t)(block + i)); - BUFFER_TRACE(bitmap_bh, "bit already cleared"); - } else { - clusters_freed++; - } - } + err = ext4_mb_mark_group_bb(&mc, block_group, bit, cluster_count, + EXT4_MB_BITMAP_MARKED_CHECK); - err = ext4_mb_load_buddy(sb, block_group, &e4b); - if (err) + if (err && mc.changed == 0) { + ext4_mb_unload_buddy(&e4b); goto error_return; + } + if (mc.changed != cluster_count) + ext4_error(sb, "bit already cleared in group %u", + block_group); /* * need to update group_info->bb_free and bitmap * with group lock held. generate_buddy look at * them with group lock_held */ ext4_lock_group(sb, block_group); - mb_clear_bits(bitmap_bh->b_data, bit, cluster_count); mb_free_blocks(NULL, &e4b, bit, cluster_count); - free_clusters_count = clusters_freed + - ext4_free_group_clusters(sb, desc); - ext4_free_group_clusters_set(sb, desc, free_clusters_count); - ext4_block_bitmap_csum_set(sb, desc, bitmap_bh); - ext4_group_desc_csum_set(sb, block_group, desc); ext4_unlock_group(sb, block_group); percpu_counter_add(&sbi->s_freeclusters_counter, - clusters_freed); - - if (sbi->s_log_groups_per_flex) { - ext4_group_t flex_group = ext4_flex_group(sbi, block_group); - atomic64_add(clusters_freed, - &sbi_array_rcu_deref(sbi, s_flex_groups, - flex_group)->free_clusters); - } + mc.changed); ext4_mb_unload_buddy(&e4b); - /* We dirtied the bitmap block */ - BUFFER_TRACE(bitmap_bh, "dirtied bitmap block"); - err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh); - - /* And the group descriptor block */ - BUFFER_TRACE(gd_bh, "dirtied group descriptor block"); - ret = ext4_handle_dirty_metadata(handle, NULL, gd_bh); - if (!err) - err = ret; - error_return: - brelse(bitmap_bh); ext4_std_error(sb, err); return err; } From patchwork Wed Apr 12 17:28:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82353 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp199509vqo; Wed, 12 Apr 2023 02:57:15 -0700 (PDT) X-Google-Smtp-Source: AKy350b/kosPQLHBBM7XRkJmnTu1UoszkaSMcthrW410m9g+EHOv0OrpoYENGsB7U+7p/8dMnx5d X-Received: by 2002:a17:903:22cf:b0:1a6:3def:5ff6 with SMTP id y15-20020a17090322cf00b001a63def5ff6mr3048491plg.4.1681293434886; Wed, 12 Apr 2023 02:57:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681293434; cv=none; d=google.com; s=arc-20160816; b=gJ1lsjm9NgR67nQiLXV4MxR+NAIVEHdEoW7imhAyRIIxpbLoM48kEDp2xZ9hP6eOYt p3qauuU438rj2ZvOAml3KGFfUWAVODisut0nr2cXjQj9xVOlg7QRo4Gnnadzsf0bUrWW qzZKIvogNSn9NTyyV/nRQDJ56csg3eRBafNknd44trWHkQKGKcB1kVHi3AeTSQ+x2VrC vGNu9VnqsLwXpXhwitlTU0ZzXfX9auc8j2wf68psBizNIJnx4h/cfiPTH2DncmT6EFae AWZWr78t3otD6uwwu0yEsV9SNuOsBmdqV0edknQqUZ+ljxUdmifZOUyE7xbNRd6xVMeh gfVg== 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=dQ2sPMhVGXseR++5TsuBshGPe18yJfMED2G4aZrkD78=; b=AM9h1NX2/0InNPvc5ec4WrF0o4F8sZV70rCBtxwZQ0pAV4yenkP/955blGm4FcJGzk 7DnRPRkzsnZTB1VkvvLfqrWwFyZD7ES+us4GQIUQNml299B4D01OdZbp3fqrTyw7ynZy pC2ybP0v7rwnW9tq4SmvkYZK1zWaRLqvcBIUphC6LoJfgochuRx0Jc0FxhV8pFtHjNqG rWj4IxxKsJ2TVcY7KoVFN66Vf5+fEOh8lcBThclxUSFTC0nR2rFldXeCRNAEre41LtYY J+zswzPZb64KGEU04fMSxW3d1mqTRVoaHXIAUfO2wQ6qtDu5wgiLkuRvZfcB6yrJY9Tt 8EIg== 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 m16-20020a170902bb9000b001a6783cf26dsi283102pls.255.2023.04.12.02.57.03; Wed, 12 Apr 2023 02:57:14 -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 S231543AbjDLJ1G (ORCPT + 99 others); Wed, 12 Apr 2023 05:27:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40338 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230006AbjDLJ0R (ORCPT ); Wed, 12 Apr 2023 05:26:17 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 83C047EDC; Wed, 12 Apr 2023 02:26:15 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQC2Q80z4f3nwX; Wed, 12 Apr 2023 17:26:11 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S20; Wed, 12 Apr 2023 17:26:13 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 18/19] ext4: add some kunit stub for mballoc kunit test Date: Thu, 13 Apr 2023 01:28:32 +0800 Message-Id: <20230412172833.2317696-19-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S20 X-Coremail-Antispam: 1UD129KBjvJXoWxWFW8XFW5Gw48KFWkKr4kWFg_yoW5XFWDpF s8AF1UCrW3Wr1Dua1Iy340gF4fGw1vgr1UJryfury3uFyxJrn7ZFyktFn0yF4YyFZrZFsx XFy5Zry3Cr1fW37anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPI14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Gr1j6F4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr 0_Cr1lIxAIcVC2z280aVCY1x0267AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0pRv JPtUUUUU= 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762963944561961951?= X-GMAIL-MSGID: =?utf-8?q?1762963944561961951?= Multiblocks allocation will read and write block bitmap and group descriptor which reside on disk. Add kunit stub to function ext4_get_group_desc, ext4_read_block_bitmap_nowait, ext4_wait_block_bitmap and ext4_mb_mark_group_bb to avoid real IO to disk. Signed-off-by: Kemeng Shi --- fs/ext4/balloc.c | 13 +++++++++++++ fs/ext4/mballoc.c | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index 094269488183..682336d3dac1 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c @@ -22,6 +22,7 @@ #include "mballoc.h" #include +#include static unsigned ext4_num_base_meta_clusters(struct super_block *sb, ext4_group_t block_group); @@ -267,6 +268,10 @@ struct ext4_group_desc * ext4_get_group_desc(struct super_block *sb, ext4_group_t block_group, struct buffer_head **bh) { +#ifdef CONFIG_EXT4_KUNIT_TESTS + KUNIT_STATIC_STUB_REDIRECT(ext4_get_group_desc, + sb, block_group, bh); +#endif unsigned int group_desc; unsigned int offset; ext4_group_t ngroups = ext4_get_groups_count(sb); @@ -423,6 +428,10 @@ struct buffer_head * ext4_read_block_bitmap_nowait(struct super_block *sb, ext4_group_t block_group, bool ignore_locked) { +#ifdef CONFIG_EXT4_KUNIT_TESTS + KUNIT_STATIC_STUB_REDIRECT(ext4_read_block_bitmap_nowait, + sb, block_group, ignore_locked); +#endif struct ext4_group_desc *desc; struct ext4_sb_info *sbi = EXT4_SB(sb); struct buffer_head *bh; @@ -522,6 +531,10 @@ ext4_read_block_bitmap_nowait(struct super_block *sb, ext4_group_t block_group, int ext4_wait_block_bitmap(struct super_block *sb, ext4_group_t block_group, struct buffer_head *bh) { +#ifdef CONFIG_EXT4_KUNIT_TESTS + KUNIT_STATIC_STUB_REDIRECT(ext4_wait_block_bitmap, + sb, block_group, bh); +#endif struct ext4_group_desc *desc; if (!buffer_new(bh)) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 64860341ef2d..f95a48bc8e31 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -17,6 +17,7 @@ #include #include #include +#include /* * MUSTDO: @@ -3744,6 +3745,10 @@ static int ext4_mb_mark_group_bb(struct ext4_mark_context *mc, ext4_group_t group, ext4_grpblk_t blkoff, ext4_grpblk_t len, int flags) { +#ifdef CONFIG_EXT4_KUNIT_TESTS + KUNIT_STATIC_STUB_REDIRECT(ext4_mb_mark_group_bb, + mc, group, blkoff, len, flags); +#endif handle_t *handle = mc->handle; struct super_block *sb = mc->sb; struct ext4_sb_info *sbi = EXT4_SB(sb); From patchwork Wed Apr 12 17:28:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 82344 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp193991vqo; Wed, 12 Apr 2023 02:44:51 -0700 (PDT) X-Google-Smtp-Source: AKy350aGTZcUBfVnLf56ANk+LkDtqL51R0qpkfB1iiriTFfWQqMwppz09d78HeAL9d5XgNnt++RX X-Received: by 2002:a17:906:d7a5:b0:94a:845c:3529 with SMTP id pk5-20020a170906d7a500b0094a845c3529mr9980128ejb.9.1681292691034; Wed, 12 Apr 2023 02:44:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681292691; cv=none; d=google.com; s=arc-20160816; b=Ac58QWfHU+77Yf2AX3pQbrA5Tj+BK3TNGXLDCoEnc5iTNVuoa+MKBz0iouwwI8KfR2 JYoiahEppVyLDsVkZvf5v+fA11ZUfoED+PyFuz1GUBZJhWV1NS/RILl7bpsYMPA6qlhA GWJT5cleaEmRUe8QDn0u4Zo5iB1CvgWIVykdmFFVD1r2x5g5yufN77nJS+fGZR1iDEk/ nN9q2j/rtkQKjGON29jdHrzmTzzUR0QAWRUKDU56hzojS1ac4H5XpslDvgN+gg6lra48 Xwkj3aeO0v8XbgBE93nWK+XF3xgBpTLHjJYYyZ++lzm2nwiilUncd5z3LZqhkA5NYR4O t7KQ== 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=jw2WGy3sWkmuaN6EtbB9fAeTSK3DRgYp9qBXJCLT0MI=; b=zQWtjsX2QRVU1xIfm/V7kWjXAgXbN0g5hmuIem/XlGkJy31DYCdH1TFeN6AQGGH/Ht 2E3/9O9ET2WHdKcd77rKJZogY6lI8Fdb5mRFjnyzQel5dntmp3NHhy+R9fe0yaaAm3vh xjBNU0A+2H+1ckvz96JZ0sU5B4BcYylU1e2+h+kNdK2tOEgN1iC6QaRqOp8POkcASHrI 2UBVWz+foY+a49ck3sqmndoJ3VsdGPywvVd8Nis8nYdqKVZ0u58zyvtZMuajgSOnTYZv kkgaQe8msCotfLH8+65HK/Y4TU5nrXil+LLsMyt3gL2MPs4FyZEmCGPwScl23dK5997D qvSg== 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 i19-20020a170906091300b008d0378ec19fsi11135988ejd.650.2023.04.12.02.44.27; Wed, 12 Apr 2023 02:44:51 -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 S231552AbjDLJ1J (ORCPT + 99 others); Wed, 12 Apr 2023 05:27:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230184AbjDLJ0U (ORCPT ); Wed, 12 Apr 2023 05:26:20 -0400 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0E0667DAF; Wed, 12 Apr 2023 02:26:15 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4PxHQC4g5Vz4f3wgK; Wed, 12 Apr 2023 17:26:11 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.124.27]) by APP4 (Coremail) with SMTP id gCh0CgDHL7MpeTZkL5_1HA--.3769S21; Wed, 12 Apr 2023 17:26:13 +0800 (CST) From: Kemeng Shi To: tytso@mit.edu, adilger.kernel@dilger.ca, ojaswin@linux.ibm.com Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, shikemeng@huaweicloud.com Subject: [PATCH v2 19/19] ext4: add first unit test for ext4_mb_new_blocks_simple in mballoc Date: Thu, 13 Apr 2023 01:28:33 +0800 Message-Id: <20230412172833.2317696-20-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20230412172833.2317696-1-shikemeng@huaweicloud.com> References: <20230412172833.2317696-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: gCh0CgDHL7MpeTZkL5_1HA--.3769S21 X-Coremail-Antispam: 1UD129KBjvJXoW3CFWftw4rJF4fXFyDJF17trb_yoWDAF1Dpa n3AF1Ykr45WFnrWayxK34Fq3WSgw18Zr1Utryfu34rCFyIyryfAFn7tF10yF4FyFWxXFnr Xa1Y9ry7CrWxGa7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPI14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2jI8I6cxK62vIxIIY0VWUZVW8XwA2048vs2IY02 0E87I2jVAFwI0_JF0E3s1l82xGYIkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0 rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6x IIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xv wVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFc xC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_ Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2 IErcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Gr1j6F4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr 0_Cr1lIxAIcVC2z280aVCY1x0267AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0pRv JPtUUUUU= 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762963164966435235?= X-GMAIL-MSGID: =?utf-8?q?1762963164966435235?= Here are prepared work: 1. Include mballoc-test.c to mballoc.c to be able test static function in mballoc.c. 2. Implement static stub to avoid read IO to disk. 3. Construct fake super_block. Only partial members are set, more members will be set when more functions are tested. Then unit test for ext4_mb_new_blocks_simple is added. Signed-off-by: Kemeng Shi --- fs/ext4/mballoc-test.c | 319 +++++++++++++++++++++++++++++++++++++++++ fs/ext4/mballoc.c | 4 + 2 files changed, 323 insertions(+) create mode 100644 fs/ext4/mballoc-test.c diff --git a/fs/ext4/mballoc-test.c b/fs/ext4/mballoc-test.c new file mode 100644 index 000000000000..2ec3efe45b3f --- /dev/null +++ b/fs/ext4/mballoc-test.c @@ -0,0 +1,319 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * KUnit test of ext4 multiblocks allocation. + */ + +#include +#include + +#include "ext4.h" + +struct mb_grp_ctx { + struct buffer_head bitmap_bh; + struct ext4_group_desc desc; + /* one group descriptor for each group descriptor for simplicity */ + struct buffer_head gd_bh; +}; + +struct mb_ctx { + struct mb_grp_ctx *grp_ctx; +}; + +#define MB_CTX(sb) ((struct mb_ctx *)((struct super_block *)sb + 1)) +#define MB_GRP_CTX(sb, group) (&MB_CTX(sb)->grp_ctx[group]) + +static struct super_block *alloc_fake_super_block(void) +{ + struct ext4_super_block *es = kzalloc(sizeof(*es), GFP_KERNEL); + struct ext4_sb_info *sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); + struct super_block *sb = kzalloc(sizeof(*sb) + + sizeof(struct mb_ctx), + GFP_KERNEL); + + if (sb == NULL || sbi == NULL || es == NULL) + goto out; + + sbi->s_es = es; + sb->s_fs_info = sbi; + return sb; + +out: + kfree(sb); + kfree(sbi); + kfree(es); + return NULL; +} + +static void free_fake_super_block(struct super_block *sb) +{ + struct ext4_sb_info *sbi = EXT4_SB(sb); + + kfree(sbi->s_es); + kfree(sbi); + kfree(sb); +} + +struct ext4_block_layout { + unsigned char blocksize_bits; + unsigned int cluster_bits; + unsigned long blocks_per_group; + ext4_group_t group_count; + unsigned long desc_size; +}; + +static void init_sb_layout(struct super_block *sb, + struct ext4_block_layout *layout) +{ + struct ext4_sb_info *sbi = EXT4_SB(sb); + struct ext4_super_block *es = sbi->s_es; + + sb->s_blocksize = 1UL << layout->blocksize_bits; + sb->s_blocksize_bits = layout->blocksize_bits; + + sbi->s_groups_count = layout->group_count; + sbi->s_blocks_per_group = layout->blocks_per_group; + sbi->s_cluster_bits = layout->cluster_bits; + sbi->s_cluster_ratio = 1U << layout->cluster_bits; + sbi->s_clusters_per_group = layout->blocks_per_group >> + layout->cluster_bits; + sbi->s_desc_size = layout->desc_size; + + es->s_first_data_block = cpu_to_le32(0); + es->s_blocks_count_lo = cpu_to_le32(layout->blocks_per_group * + layout->group_count); +} + +static int mb_grp_ctx_init(struct super_block *sb, + struct mb_grp_ctx *grp_ctx) +{ + grp_ctx->bitmap_bh.b_data = kzalloc(EXT4_BLOCK_SIZE(sb), GFP_KERNEL); + if (grp_ctx->bitmap_bh.b_data == NULL) + return -ENOMEM; + + get_bh(&grp_ctx->bitmap_bh); + get_bh(&grp_ctx->gd_bh); + return 0; +} + +static void mb_grp_ctx_release(struct mb_grp_ctx *grp_ctx) +{ + kfree(grp_ctx->bitmap_bh.b_data); + grp_ctx->bitmap_bh.b_data = NULL; +} + +static void mb_ctx_mark_used(struct super_block *sb, ext4_group_t group, + unsigned int start, unsigned int len) +{ + struct mb_grp_ctx *grp_ctx = MB_GRP_CTX(sb, group); + + mb_set_bits(grp_ctx->bitmap_bh.b_data, start, len); +} + +/* called after init_sb_layout */ +static int mb_ctx_init(struct super_block *sb) +{ + struct mb_ctx *ctx = MB_CTX(sb); + ext4_group_t i, ngroups = ext4_get_groups_count(sb); + + ctx->grp_ctx = kcalloc(ngroups, sizeof(struct mb_grp_ctx), + GFP_KERNEL); + if (ctx->grp_ctx == NULL) + return -ENOMEM; + + for (i = 0; i < ngroups; i++) + if (mb_grp_ctx_init(sb, &ctx->grp_ctx[i])) + goto out; + + /* + * first data block(first cluster in first group) is used by + * metadata, mark it used to avoid to alloc data block at first + * block which will fail ext4_sb_block_valid check. + */ + mb_set_bits(ctx->grp_ctx[0].bitmap_bh.b_data, 0, 1); + + return 0; +out: + while (i-- > 0) + mb_grp_ctx_release(&ctx->grp_ctx[i]); + kfree(ctx->grp_ctx); + return -ENOMEM; +} + +static void mb_ctx_release(struct super_block *sb) +{ + struct mb_ctx *ctx = MB_CTX(sb); + ext4_group_t i, ngroups = ext4_get_groups_count(sb); + + for (i = 0; i < ngroups; i++) + mb_grp_ctx_release(&ctx->grp_ctx[i]); + kfree(ctx->grp_ctx); +} + +struct buffer_head * +ext4_read_block_bitmap_nowait_stub(struct super_block *sb, ext4_group_t block_group, + bool ignore_locked) +{ + struct mb_grp_ctx *grp_ctx = MB_GRP_CTX(sb, block_group); + + get_bh(&grp_ctx->bitmap_bh); + return &grp_ctx->bitmap_bh; +} + +int ext4_wait_block_bitmap_stub(struct super_block *sb, + ext4_group_t block_group, + struct buffer_head *bh) +{ + return 0; +} + +struct ext4_group_desc *ext4_get_group_desc_stub(struct super_block *sb, + ext4_group_t block_group, + struct buffer_head **bh) +{ + struct mb_grp_ctx *grp_ctx = MB_GRP_CTX(sb, block_group); + + if (bh != NULL) + *bh = &grp_ctx->gd_bh; + + return &grp_ctx->desc; +} + +int ext4_mb_mark_group_bb_stub(struct ext4_mark_context *mc, + ext4_group_t group, ext4_grpblk_t blkoff, + ext4_grpblk_t len, int flags) +{ + struct mb_grp_ctx *grp_ctx = MB_GRP_CTX(mc->sb, group); + struct buffer_head *bitmap_bh = &grp_ctx->bitmap_bh; + + if (mc->state) + mb_set_bits(bitmap_bh->b_data, blkoff, len); + else + mb_clear_bits(bitmap_bh->b_data, blkoff, len); + + return 0; +} + +#define TEST_BLOCKSIZE_BITS 10 +#define TEST_CLUSTER_BITS 3 +#define TEST_BLOCKS_PER_GROUP 8192 +#define TEST_GROUP_COUNT 4 +#define TEST_DESC_SIZE 64 +#define TEST_GOAL_GROUP 1 +static int mballoc_test_init(struct kunit *test) +{ + struct ext4_block_layout layout = { + .blocksize_bits = TEST_BLOCKSIZE_BITS, + .cluster_bits = TEST_CLUSTER_BITS, + .blocks_per_group = TEST_BLOCKS_PER_GROUP, + .group_count = TEST_GROUP_COUNT, + .desc_size = TEST_DESC_SIZE, + }; + struct super_block *sb; + int ret; + + sb = alloc_fake_super_block(); + if (sb == NULL) + return -ENOMEM; + + init_sb_layout(sb, &layout); + + ret = mb_ctx_init(sb); + if (ret != 0) { + free_fake_super_block(sb); + return ret; + } + + test->priv = sb; + kunit_activate_static_stub(test, + ext4_read_block_bitmap_nowait, + ext4_read_block_bitmap_nowait_stub); + kunit_activate_static_stub(test, + ext4_wait_block_bitmap, + ext4_wait_block_bitmap_stub); + kunit_activate_static_stub(test, + ext4_get_group_desc, + ext4_get_group_desc_stub); + kunit_activate_static_stub(test, + ext4_mb_mark_group_bb, + ext4_mb_mark_group_bb_stub); + return 0; +} + +static void mballoc_test_exit(struct kunit *test) +{ + struct super_block *sb = (struct super_block *)test->priv; + + mb_ctx_release(sb); + free_fake_super_block(sb); +} + +static void test_new_blocks_simple(struct kunit *test) +{ + struct super_block *sb = (struct super_block *)test->priv; + struct inode inode = { .i_sb = sb, }; + struct ext4_allocation_request ar; + ext4_group_t i, goal_group = TEST_GOAL_GROUP; + int err = 0; + ext4_fsblk_t found; + struct ext4_sb_info *sbi = EXT4_SB(sb); + + ar.inode = &inode; + + /* get block at goal */ + ar.goal = ext4_group_first_block_no(sb, goal_group); + found = ext4_mb_new_blocks_simple(&ar, &err); + KUNIT_ASSERT_EQ_MSG(test, ar.goal, found, + "failed to alloc block at goal, expected %llu found %llu", + ar.goal, found); + + /* get block after goal in goal group */ + ar.goal = ext4_group_first_block_no(sb, goal_group); + found = ext4_mb_new_blocks_simple(&ar, &err); + KUNIT_ASSERT_EQ_MSG(test, ar.goal + EXT4_C2B(sbi, 1), found, + "failed to alloc block after goal in goal group, expected %llu found %llu", + ar.goal + 1, found); + + /* get block after goal group */ + mb_ctx_mark_used(sb, goal_group, 0, EXT4_CLUSTERS_PER_GROUP(sb)); + ar.goal = ext4_group_first_block_no(sb, goal_group); + found = ext4_mb_new_blocks_simple(&ar, &err); + KUNIT_ASSERT_EQ_MSG(test, + ext4_group_first_block_no(sb, goal_group + 1), found, + "failed to alloc block after goal group, expected %llu found %llu", + ext4_group_first_block_no(sb, goal_group + 1), found); + + /* get block before goal group */ + for (i = goal_group; i < ext4_get_groups_count(sb); i++) + mb_ctx_mark_used(sb, i, 0, EXT4_CLUSTERS_PER_GROUP(sb)); + ar.goal = ext4_group_first_block_no(sb, goal_group); + found = ext4_mb_new_blocks_simple(&ar, &err); + KUNIT_ASSERT_EQ_MSG(test, + ext4_group_first_block_no(sb, 0) + EXT4_C2B(sbi, 1), found, + "failed to alloc block before goal group, expected %llu found %llu", + ext4_group_first_block_no(sb, 0 + EXT4_C2B(sbi, 1)), found); + + /* no block available, fail to allocate block */ + for (i = 0; i < ext4_get_groups_count(sb); i++) + mb_ctx_mark_used(sb, i, 0, EXT4_CLUSTERS_PER_GROUP(sb)); + ar.goal = ext4_group_first_block_no(sb, goal_group); + found = ext4_mb_new_blocks_simple(&ar, &err); + KUNIT_ASSERT_NE_MSG(test, err, 0, + "unexpectedly get block when no block is available"); +} + + +static struct kunit_case ext4_mballoc_test_cases[] = { + KUNIT_CASE(test_new_blocks_simple), + {} +}; + +static struct kunit_suite ext4_mballoc_test_suite = { + .name = "ext4_mballoc_test", + .init = mballoc_test_init, + .exit = mballoc_test_exit, + .test_cases = ext4_mballoc_test_cases, +}; + +kunit_test_suites(&ext4_mballoc_test_suite); + +MODULE_LICENSE("GPL v2"); diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index f95a48bc8e31..ff1249673233 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -6518,3 +6518,7 @@ ext4_mballoc_query_range( return error; } + +#ifdef CONFIG_EXT4_KUNIT_TESTS +#include "mballoc-test.c" +#endif