From patchwork Wed Oct 21 09:15:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1385454 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=Ulv4II0B; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CGPxV0cntz9sRk for ; Wed, 21 Oct 2020 20:16:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437537AbgJUJQM (ORCPT ); Wed, 21 Oct 2020 05:16:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437430AbgJUJQM (ORCPT ); Wed, 21 Oct 2020 05:16:12 -0400 Received: from mail-pl1-x62c.google.com (mail-pl1-x62c.google.com [IPv6:2607:f8b0:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 37E09C0613CE for ; Wed, 21 Oct 2020 02:16:12 -0700 (PDT) Received: by mail-pl1-x62c.google.com with SMTP id t18so918641plo.1 for ; Wed, 21 Oct 2020 02:16:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=YFIgq6IHz+ANfoFvWyvqx6bIjmzvr6Z3VjVW5Q2qCA4=; b=Ulv4II0BEf0QkCY4V4/thju68+KuBdtmb1NZcq+orn6jtWQQbXaZUjyJttHADXuLm9 fdui3yyq9bHVOMlpTY5s5eYhhZ2s4SPpJwHp4KoIvifaiR6C3HF7NIwyWOXLABauR/F6 vTBdCoZDacxZ5kvDwQi+jIOg/53Vxp8uHQ2l2vfmCyBCRchWSv5xWmJcu1wtxsQ62CWS +G5ljs8F9JvkqZaDqwDtxdrkGndw4p23a8aUJCow3rJXQ1x8AoS4eJnn97um73ynp2Tu zKpSH1cOE5m8Mv11Oi8IXb6EfWz8YCNLtNCXmuvT0Am3qfWQl+xpyxR1KnCAYtPMHeRq eMqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=YFIgq6IHz+ANfoFvWyvqx6bIjmzvr6Z3VjVW5Q2qCA4=; b=tNvZxoYFqEbQaEkXLSZFx1KjDBucfjmwcsfybFOQQJMnFpZd/Iy9G8y8zoc6plOuvv cSZp2bR8ExxMZyIy+0e7a3hY3TTrQdPpH1VKbUkp2N1dWTnsQIphu/J6LIlz6ZAqqbRH bA+fEur4VDgQIlNgtG7p5TYbq3+8uFSbNpjYRIpNo1GyYtYY1ZVEs8pPmRAr9HjZIJoO yvvh9pypOOAaYzyTYEFxh40xc+/ZW5qJCj+I5ZhhGau5r8Ze6SHVF023Kv8izCrNoS6W d07vi3pxFt6YeqUXfca3pc4RKkKH3x0dg4Lf0PCJ6nYBVoVrk61P1tJcODS9hLJfArJg 0+oQ== X-Gm-Message-State: AOAM532Oo18hKbxCEdMQCyEJRv2BPjso9KXG+iqPcWHQRnK6jP+F2p31 vU5dQYXKikyljgpznyRPUMtNYj086PU= X-Google-Smtp-Source: ABdhPJwjww64UUCCOuFDIfok5LHoNmjtNkbigyFW/cWxYsx3t4tABLCb8OP6nhWyi+oIMSBS4EcqRQ== X-Received: by 2002:a17:90a:f183:: with SMTP id bv3mr1073386pjb.23.1603271771631; Wed, 21 Oct 2020 02:16:11 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id x16sm1573002pff.14.2020.10.21.02.16.10 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 02:16:11 -0700 (PDT) From: Chunguang Xu X-Google-Original-From: Chunguang Xu To: tytso@mit.edu, adilger.kernel@dilger.ca Cc: linux-ext4@vger.kernel.org Subject: [PATCH 1/8] ext4: use ext4_assert() to replace J_ASSERT() Date: Wed, 21 Oct 2020 17:15:21 +0800 Message-Id: <1603271728-7198-1-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Chunguang Xu There are currently multiple forms of assertion, such as J_ASSERT(). J_ASEERT() is provided for the jbd module, which is a public module. Maybe we should use custom ASSERT() like other file systems, such as xfs, which would be better. Signed-off-by: Chunguang Xu Reviewed-by: Andreas Dilger --- fs/ext4/balloc.c | 2 +- fs/ext4/ext4.h | 10 ++++++++++ fs/ext4/fsync.c | 2 +- fs/ext4/indirect.c | 4 ++-- fs/ext4/inode.c | 10 +++++----- fs/ext4/namei.c | 12 ++++-------- fs/ext4/super.c | 2 +- 7 files changed, 24 insertions(+), 18 deletions(-) diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index 1d640b1..2d7f4eb 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c @@ -185,7 +185,7 @@ static int ext4_init_block_bitmap(struct super_block *sb, struct ext4_sb_info *sbi = EXT4_SB(sb); ext4_fsblk_t start, tmp; - J_ASSERT_BH(bh, buffer_locked(bh)); + ext4_assert(buffer_locked(bh)); /* If checksum is bad mark all blocks used to prevent allocation * essentially implementing a per-group read-only flag. */ diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 18a6df4..e7344ef 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -98,6 +98,16 @@ #define ext_debug(ino, fmt, ...) no_printk(fmt, ##__VA_ARGS__) #endif +#define ext4_assert(assert) \ +do { \ + if (unlikely(!(assert))) { \ + printk(KERN_EMERG \ + "Assertion failure in %s() at %s:%d: '%s'\n", \ + __func__, __FILE__, __LINE__, #assert); \ + BUG(); \ + } \ +} while (0) + /* data type for block offset of block group */ typedef int ext4_grpblk_t; diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c index 81a545f..123a0cb 100644 --- a/fs/ext4/fsync.c +++ b/fs/ext4/fsync.c @@ -136,7 +136,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync) if (unlikely(ext4_forced_shutdown(sbi))) return -EIO; - J_ASSERT(ext4_journal_current_handle() == NULL); + ext4_assert(ext4_journal_current_handle() == NULL); trace_ext4_sync_file_enter(file, datasync); diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c index 05efa682..bffc5e4 100644 --- a/fs/ext4/indirect.c +++ b/fs/ext4/indirect.c @@ -534,8 +534,8 @@ int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, ext4_fsblk_t first_block = 0; trace_ext4_ind_map_blocks_enter(inode, map->m_lblk, map->m_len, flags); - J_ASSERT(!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))); - J_ASSERT(handle != NULL || (flags & EXT4_GET_BLOCKS_CREATE) == 0); + ext4_assert(!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))); + ext4_assert(handle != NULL || (flags & EXT4_GET_BLOCKS_CREATE) == 0); depth = ext4_block_to_path(inode, map->m_lblk, offsets, &blocks_to_boundary); diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 2154e08..97ebf61 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -828,8 +828,8 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode, int create = map_flags & EXT4_GET_BLOCKS_CREATE; int err; - J_ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) - || handle != NULL || create == 0); + ext4_assert((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) + || handle != NULL || create == 0); map.m_lblk = block; map.m_len = 1; @@ -844,9 +844,9 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode, if (unlikely(!bh)) return ERR_PTR(-ENOMEM); if (map.m_flags & EXT4_MAP_NEW) { - J_ASSERT(create != 0); - J_ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) - || (handle != NULL)); + ext4_assert(create != 0); + ext4_assert((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) + || (handle != NULL)); /* * Now that we do not always journal data, we should diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index cde3460..fa16578 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -182,10 +182,6 @@ static struct buffer_head *__ext4_read_dirblock(struct inode *inode, return bh; } -#ifndef assert -#define assert(test) J_ASSERT(test) -#endif - #ifdef DX_DEBUG #define dxtrace(command) command #else @@ -850,7 +846,7 @@ struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir, break; } } - assert (at == p - 1); + ext4_assert(at == p - 1); } at = p - 1; @@ -1266,8 +1262,8 @@ static void dx_insert_block(struct dx_frame *frame, u32 hash, ext4_lblk_t block) struct dx_entry *old = frame->at, *new = old + 1; int count = dx_get_count(entries); - assert(count < dx_get_limit(entries)); - assert(old < entries + count); + ext4_assert(count < dx_get_limit(entries)); + ext4_assert(old < entries + count); memmove(new + 1, new, (char *)(entries + count) - (char *)(new)); dx_set_hash(new, hash); dx_set_block(new, block); @@ -2971,7 +2967,7 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode) * hold i_mutex, or the inode can not be referenced from outside, * so i_nlink should not be bumped due to race */ - J_ASSERT((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || + ext4_assert((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) || inode->i_nlink == 0); BUFFER_TRACE(sbi->s_sbh, "get_write_access"); diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 5308f0d..7773d7c 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1251,7 +1251,7 @@ static void ext4_put_super(struct super_block *sb) * in-memory list had better be clean by this point. */ if (!list_empty(&sbi->s_orphan)) dump_orphan_list(sb, sbi); - J_ASSERT(list_empty(&sbi->s_orphan)); + ext4_assert(list_empty(&sbi->s_orphan)); sync_blockdev(sb->s_bdev); invalidate_bdev(sb->s_bdev); From patchwork Wed Oct 21 09:15:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1385455 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=AUFxeApK; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CGPxV6GbLz9sTD for ; Wed, 21 Oct 2020 20:16:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437549AbgJUJQO (ORCPT ); Wed, 21 Oct 2020 05:16:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437538AbgJUJQN (ORCPT ); Wed, 21 Oct 2020 05:16:13 -0400 Received: from mail-pf1-x443.google.com (mail-pf1-x443.google.com [IPv6:2607:f8b0:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 614D5C0613CF for ; Wed, 21 Oct 2020 02:16:13 -0700 (PDT) Received: by mail-pf1-x443.google.com with SMTP id 10so1122064pfp.5 for ; Wed, 21 Oct 2020 02:16:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=DYPRUGrJa1UcR6EzKh7Vsiy0NCh65P8azvf+4W9rR10=; b=AUFxeApKqTLVdORbPZwrlbvLJFlbXzTMVh/NzQ/kVoDPp8cHG8n4M3V/jF452wWXiB 98SgpcGYZlcfl9/bUaZL89DgCNbKN552XJix9+Rum4mTQ+Db7hQ+/qJltkkux9uQa+5+ NAgQW9c1dLh6DnOGkwNi2/itZ/6gk2ux2PNlfanm8E4bvK2+A7xLANKLiO7H8OKrgGMg Sl/AgTTAMylcZ6OLx9BQGhp995FaAmoTi+Vojhbacb5LWks1M4WhKslxxZd7ZjOilrBn 8kRjIHXNzRtBe8UpqPbF7x8mZHz5jvUVNX/hwsMxWkRoyPvPKBLWLvFQMWEefU5dMIwf BmRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=DYPRUGrJa1UcR6EzKh7Vsiy0NCh65P8azvf+4W9rR10=; b=DQ5SCCt8xHQMssvzYm1s480ElHzaksoDa+AChMvE/TqFxKnZlVUn6ClqIig8IlM/Et 6lhoutGUulYpJlzPvl9R3IQv96CcITPlftQIze0onpe/ZHw+svXskzjZYOCBA6KFzIRy ZdiBN5II2jEt8sQDYEFhMEt0unwgd5azsZT+lHM1Iy3dPUdXoAZuqr2CLxasKFPIMG8c 7C5cMsNIFR0EfIBaQCxQYCDT8f+0Q7G0c69nO886ULVwbf+jrU6SDYxYVcFN/42Sh5CQ EiUqsgXJbQdjvMts2TrM8HlT3V1P0WhWn+nCgnm6n0M9ihuMvq+1+OOTq/RyE4KC2zKb vlwA== X-Gm-Message-State: AOAM530hziRcSX1L2uXsU8fY8fv4UqvIWTLknMUE8T5HzeFOTIJ2w019 alifncZEcIlH7T60OK1Fz4AzX1GbfTY= X-Google-Smtp-Source: ABdhPJxTEFzIul1z3OZVo1Jc6a+h7gZHJFHcRaittJ9cCUQC574Eezzjns3t7VAv7TbSIyN54HGgUg== X-Received: by 2002:aa7:9048:0:b029:152:883a:9a94 with SMTP id n8-20020aa790480000b0290152883a9a94mr2496532pfo.24.1603271772992; Wed, 21 Oct 2020 02:16:12 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id x16sm1573002pff.14.2020.10.21.02.16.11 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 02:16:12 -0700 (PDT) From: Chunguang Xu X-Google-Original-From: Chunguang Xu To: tytso@mit.edu, adilger.kernel@dilger.ca Cc: linux-ext4@vger.kernel.org Subject: [PATCH 2/8] ext4: remove redundant mb_regenerate_buddy() Date: Wed, 21 Oct 2020 17:15:22 +0800 Message-Id: <1603271728-7198-2-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603271728-7198-1-git-send-email-brookxu@tencent.com> References: <1603271728-7198-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Chunguang Xu After this patch (163a203), if an abnormal bitmap is detected, we will mark the group as corrupt, and we will not use this group in the future. Therefore, it should be meaningless to regenerate the buddy bitmap of this group, It might be better to delete it. Signed-off-by: Chunguang Xu Reviewed-by: Andreas Dilger --- fs/ext4/mballoc.c | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 85abbfb..22301f3 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -822,24 +822,6 @@ void ext4_mb_generate_buddy(struct super_block *sb, spin_unlock(&sbi->s_bal_lock); } -static void mb_regenerate_buddy(struct ext4_buddy *e4b) -{ - int count; - int order = 1; - void *buddy; - - while ((buddy = mb_find_buddy(e4b, order++, &count))) { - ext4_set_bits(buddy, 0, count); - } - e4b->bd_info->bb_fragments = 0; - memset(e4b->bd_info->bb_counters, 0, - sizeof(*e4b->bd_info->bb_counters) * - (e4b->bd_sb->s_blocksize_bits + 2)); - - ext4_mb_generate_buddy(e4b->bd_sb, e4b->bd_buddy, - e4b->bd_bitmap, e4b->bd_group); -} - /* The buddy information is attached the buddy cache inode * for convenience. The information regarding each group * is loaded via ext4_mb_load_buddy. The information involve @@ -1512,7 +1494,6 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b, sb, e4b->bd_group, EXT4_GROUP_INFO_BBITMAP_CORRUPT); } - mb_regenerate_buddy(e4b); goto done; } From patchwork Wed Oct 21 09:15:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1385456 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=YNFFfBwj; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CGPxW3GX1z9sTR for ; Wed, 21 Oct 2020 20:16:15 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437557AbgJUJQP (ORCPT ); Wed, 21 Oct 2020 05:16:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437538AbgJUJQO (ORCPT ); Wed, 21 Oct 2020 05:16:14 -0400 Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC956C0613CE for ; Wed, 21 Oct 2020 02:16:14 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id f19so1103236pfj.11 for ; Wed, 21 Oct 2020 02:16:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=A9db66j5jgBwQHfPYVkQHfIXD2LLsb4yznWteentD3Y=; b=YNFFfBwjI90ifdG/sAEfyOZ1tUaGOOYvf4nr80E3oNMJj1+gCbOKv8/KglcfasyTOG S6oP2iy5mUI23N9tZ+9L4tDQy2WnGlesXt9O7LXA6uSuewXXl6KWGhbwY4ZBR0s0wC5N 6TQ9DWHi4fe9G+fnqQA3sV8grrXGDd8+5xl5Kcka+JIecXHQJdQ8BW/YWdCx7bxSSXuw vCYG8aT/2qvqyfbJj+oe0vrCVjfKVbWJOJf7goV7UtsXhm9qnKXLlUXYkCy9BJrle20E QFSrYUpJwES2pmqLvkQYu0/b+HHSt4SG5sjOit+UA07Fo8Z4t2Az7/wjUyA0ZHAgF0Tq 6sBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=A9db66j5jgBwQHfPYVkQHfIXD2LLsb4yznWteentD3Y=; b=fJmLhPGpU3KnDXhkUl+xme7O2inwYZQ9cOUavtDazgJE6woEhNEiBEGvFA7bIQKzB9 CUJY8ieedXaPrRfQQcvpUECTc6R+f0fxfKQbCOqeT61MUGrj3rMA/T5NJAeDqrpOXUWJ ywpRQ1sAe1LSYNay6YrT1oHV7bqWkon8MMvNeFgf2nsMqdPzUNmkNfkX/Io0O2NnU0mA RhXZHz5SKFxiwJn0/yzAQNTk2WY9c9MXuKR/vMeMEVlImbbnO8QaZw2JSAiPnEVwbnb7 2sf0xnqstXFAm1WTeRvs0FpevOS2V/OpqUzbX0PPLsjVDvQmi+P/qKuMpKt5bjPw6t7T Rmfg== X-Gm-Message-State: AOAM531wTbpj//hhd/zmHSE0AKts5tqKwHGKaBuOgO2z6/L1dNOheERi M4Y+6DIxlvmroTHPid8Wl2I= X-Google-Smtp-Source: ABdhPJwDUuGnIwIwClcyeH47ggGrqEBlLaCSAVS0nhhBdYJcxMb7TSNk5lmsKk5wPUo2x7+ZLev20Q== X-Received: by 2002:aa7:8b0b:0:b029:152:900d:2288 with SMTP id f11-20020aa78b0b0000b0290152900d2288mr2430480pfd.53.1603271774437; Wed, 21 Oct 2020 02:16:14 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id x16sm1573002pff.14.2020.10.21.02.16.13 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 02:16:13 -0700 (PDT) From: Chunguang Xu X-Google-Original-From: Chunguang Xu To: tytso@mit.edu, adilger.kernel@dilger.ca Cc: linux-ext4@vger.kernel.org Subject: [PATCH 3/8] ext4: simplify the code of mb_find_order_for_block Date: Wed, 21 Oct 2020 17:15:23 +0800 Message-Id: <1603271728-7198-3-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603271728-7198-1-git-send-email-brookxu@tencent.com> References: <1603271728-7198-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Chunguang Xu The code of mb_find_order_for_block is a bit obscure, but we can simplify it with mb_find_buddy(), make the code more concise. Signed-off-by: Chunguang Xu Reviewed-by: Andreas Dilger --- fs/ext4/mballoc.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 22301f3..2efb489 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -1289,22 +1289,18 @@ static void ext4_mb_unload_buddy(struct ext4_buddy *e4b) static int mb_find_order_for_block(struct ext4_buddy *e4b, int block) { - int order = 1; - int bb_incr = 1 << (e4b->bd_blkbits - 1); + int order = 1, max; void *bb; BUG_ON(e4b->bd_bitmap == e4b->bd_buddy); BUG_ON(block >= (1 << (e4b->bd_blkbits + 3))); - bb = e4b->bd_buddy; while (order <= e4b->bd_blkbits + 1) { - block = block >> 1; - if (!mb_test_bit(block, bb)) { + bb = mb_find_buddy(e4b, order, &max); + if (!mb_test_bit(block >> order, bb)) { /* this block is part of buddy of order 'order' */ return order; } - bb += bb_incr; - bb_incr >>= 1; order++; } return 0; From patchwork Wed Oct 21 09:15:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1385457 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=tXTPTzPS; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CGPxX6p6Mz9sTD for ; Wed, 21 Oct 2020 20:16:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437562AbgJUJQQ (ORCPT ); Wed, 21 Oct 2020 05:16:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44942 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437538AbgJUJQQ (ORCPT ); Wed, 21 Oct 2020 05:16:16 -0400 Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 230C5C0613CE for ; Wed, 21 Oct 2020 02:16:16 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id x13so1111565pfa.9 for ; Wed, 21 Oct 2020 02:16:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AF8FR3F/ClJ6EJNVBH1gLQ9CWvyd1d97y/TI4TUHyk4=; b=tXTPTzPSjFRrnGyT2VMA17ffTLhqXUFAxCJXH5vwnklf3kpeVW9o5FkyYBKLqEwM2E 2JhBw/MPD1X7lB62wFEkR3S/zyCXGEQPEp+65Uv8PtRPWRLpU0ecP/tWd+fLGjJ0psOa NG+Ucx7cRX6CnqyVOv8fQBR5xxvvIGLFrhPg2mT3BcYSz3jjnTyE2Ytelw9yEFXWcHCa ikd5gq4acaxPd7OaA8DfQGh0ySpWr+dgtbf/jFZT2XvwPA1ZCl/6AY/LteZ1Doa3C7pW RhvP+AmH66wf8tr0ZOOW8I6YMWRBDkIbQd2Y03bD8Y3r17tIyIBV+jktHz5qeriEEXF0 HBvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=AF8FR3F/ClJ6EJNVBH1gLQ9CWvyd1d97y/TI4TUHyk4=; b=lMLWs98hteCYG1l6HFF0B/OoDxO01XDdz7qAe5DhiLPAVlY1IGMKWYbc78HwZbnBfC VwYWCeQnXfvZdby9Sjsh7ZOcKafn2S1FMbq0gFRlw/ccf6kmjIyvJkINzbqkHTd3aW92 /v1iE0fAix5aEoqV50gn86KfWU0q1dl/fUAoBKL2GMf4S2RE6jWcNUfW123tqTPNLX7u jETVPMgRVDJ1N2ppiTyFSnmmPm86qdKmuWCafxYPxctwY+KwN5RueiRqNEFl6LiVCysM Z0jr91KQxv6Y7+GJZC3irUNqu3HCwEdtQq/xrM+x7HK3xE3BVb1TsHjbSuGL8Szi9wKM axDw== X-Gm-Message-State: AOAM532x+wS/J+CLb7+8jHkn0+pZOQLbnjWu44R7SWsilDf6+pJE+UAL 4WjYuYHwGLWrg6lrT1tO7gE= X-Google-Smtp-Source: ABdhPJyYNyMqriLnrM5UcIuArx/ish+yeU1UknUsN5C6NNt/xouZ/XHdqUazTBQDMLZoZ2JUHgrrLQ== X-Received: by 2002:aa7:96fb:0:b029:152:879f:4782 with SMTP id i27-20020aa796fb0000b0290152879f4782mr2505207pfq.45.1603271775751; Wed, 21 Oct 2020 02:16:15 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id x16sm1573002pff.14.2020.10.21.02.16.14 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 02:16:15 -0700 (PDT) From: Chunguang Xu X-Google-Original-From: Chunguang Xu To: tytso@mit.edu, adilger.kernel@dilger.ca Cc: linux-ext4@vger.kernel.org Subject: [PATCH 4/8] ext4: add the gdt block of meta_bg to system_zone Date: Wed, 21 Oct 2020 17:15:24 +0800 Message-Id: <1603271728-7198-4-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603271728-7198-1-git-send-email-brookxu@tencent.com> References: <1603271728-7198-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Chunguang Xu In order to avoid poor search efficiency of system_zone, the system only adds metadata of some sparse group to system_zone. In the meta_bg scenario, the non-sparse group may contain gdt blocks. Perhaps we should add these blocks to system_zone to improve fault tolerance without significantly reducing system performance. Signed-off-by: Chunguang Xu --- fs/ext4/block_validity.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c index 8e6ca23..37025e3 100644 --- a/fs/ext4/block_validity.c +++ b/fs/ext4/block_validity.c @@ -218,6 +218,7 @@ int ext4_setup_system_zone(struct super_block *sb) struct ext4_group_desc *gdp; ext4_group_t i; int flex_size = ext4_flex_bg_size(sbi); + int gd_blks; int ret; system_blks = kzalloc(sizeof(*system_blks), GFP_KERNEL); @@ -226,13 +227,16 @@ int ext4_setup_system_zone(struct super_block *sb) for (i=0; i < ngroups; i++) { cond_resched(); - if (ext4_bg_has_super(sb, i) && - ((i < 5) || ((i % flex_size) == 0))) { - ret = add_system_zone(system_blks, - ext4_group_first_block_no(sb, i), - ext4_bg_num_gdb(sb, i) + 1, 0); - if (ret) - goto err; + if ((i < 5) || ((i % flex_size) == 0)) { + gd_blks = ext4_bg_has_super(sb, i) + + ext4_bg_num_gdb(sb, i); + if (gd_blks) { + ret = add_system_zone(system_blks, + ext4_group_first_block_no(sb, i), + gd_blks, 0); + if (ret) + goto err; + } } gdp = ext4_get_group_desc(sb, i, NULL); ret = add_system_zone(system_blks, From patchwork Wed Oct 21 09:15:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1385458 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=NCtqH4mF; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CGPxZ3mMpz9sRk for ; Wed, 21 Oct 2020 20:16:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437567AbgJUJQS (ORCPT ); Wed, 21 Oct 2020 05:16:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437538AbgJUJQR (ORCPT ); Wed, 21 Oct 2020 05:16:17 -0400 Received: from mail-pj1-x1042.google.com (mail-pj1-x1042.google.com [IPv6:2607:f8b0:4864:20::1042]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B46FC0613CE for ; Wed, 21 Oct 2020 02:16:17 -0700 (PDT) Received: by mail-pj1-x1042.google.com with SMTP id gv6so825381pjb.4 for ; Wed, 21 Oct 2020 02:16:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=E38ZZ1fQoNa0caGRoy68OnxGvPl91asXRgtOYleWvek=; b=NCtqH4mFIz/5VQkTSFXe9A05g05ay+tqjTmzQ+nUtOGMKFLGTCgNfgtCdZKw9l515K ut5hCIoF0lxdBSnGo9BytCNZw2Vkn8NgVSTdiTJXce8OaB1pE/ZrfjZtiZ+jNsrXdgbg HytlPUvhzKxrMEvJykQe70UTSArpMrowZW8pYm9p6MditnlBKxaa4/3+ogDZtCxulA6Q oLQAAsTHdHLPD5KYQ4WAlxBTHtnpE5g7R6RdwGF0eQPD7X4xMgjYzx4sQyjffHD31l0F jOjhUjyEloKPPCstrYFaQPF2+gI1ndupkxkoW9Vv3MDWeTGiAjdOd2nHFrkc3D+ZsQl3 gghg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=E38ZZ1fQoNa0caGRoy68OnxGvPl91asXRgtOYleWvek=; b=L78oh5Nd2HJc5zRKuGEFH9CP5Qs/0XvutEZ8GHZRgkCqnrqvXGx5b2ChfrJN5DS4OO G1G9KR+1be+QveWH27h/J5Fe2DOlvW+Jh7K4ehFc1Tzo4hM2s7soo3Fs4AWQpeNmiHmy kIQh4rzYFwPONYeVP8EPEo/tF1f0Blq7fR4IH1d7v7N9PDdSHJozbM5W31pcf8Xj0luP DzfH0xoDn2IP8NbFVVQcF8buT0yQ8PyVoz7TQj8MNibP+J375LbFMkS9zByK1AS5oEFB Y5AjouUHF6s05aMxiYuDl85TIGKwxLONR34QaSetUZlEG9LI6YWO7YDfYDgksMYiwbAf B4gw== X-Gm-Message-State: AOAM532aIWl6kyUZUSMIFny5CARcU2eLlxQFuyoyIOhconj9yjy0aUSG wReZSW1aHFinJgttBBsYdgM= X-Google-Smtp-Source: ABdhPJw35+kyRP4egs/DlkSga3XowCzS7OJ1IXSVS5WYkw8iCFfRxsrmEavhQsDkPXlNom6DMAXKOA== X-Received: by 2002:a17:90a:4e0c:: with SMTP id n12mr2369658pjh.78.1603271777060; Wed, 21 Oct 2020 02:16:17 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id x16sm1573002pff.14.2020.10.21.02.16.15 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 02:16:16 -0700 (PDT) From: Chunguang Xu X-Google-Original-From: Chunguang Xu To: tytso@mit.edu, adilger.kernel@dilger.ca Cc: linux-ext4@vger.kernel.org Subject: [PATCH 5/8] ext4: update ext4_data_block_valid related comments Date: Wed, 21 Oct 2020 17:15:25 +0800 Message-Id: <1603271728-7198-5-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603271728-7198-1-git-send-email-brookxu@tencent.com> References: <1603271728-7198-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Chunguang Xu Since ext4_data_block_valid() has been renamed to ext4_inode_block_valid(), the related comments need to be updated. Signed-off-by: Chunguang Xu Reviewed-by: Andreas Dilger --- fs/ext4/block_validity.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c index 37025e3..07e9dc3 100644 --- a/fs/ext4/block_validity.c +++ b/fs/ext4/block_validity.c @@ -206,7 +206,7 @@ static void ext4_destroy_system_zone(struct rcu_head *rcu) * * The update of system_blks pointer in this function is protected by * sb->s_umount semaphore. However we have to be careful as we can be - * racing with ext4_data_block_valid() calls reading system_blks rbtree + * racing with ext4_inode_block_valid() calls reading system_blks rbtree * protected only by RCU. That's why we first build the rbtree and then * swap it in place. */ @@ -262,7 +262,7 @@ int ext4_setup_system_zone(struct super_block *sb) /* * System blks rbtree complete, announce it once to prevent racing - * with ext4_data_block_valid() accessing the rbtree at the same + * with ext4_inode_block_valid() accessing the rbtree at the same * time. */ rcu_assign_pointer(sbi->s_system_blks, system_blks); @@ -282,7 +282,7 @@ int ext4_setup_system_zone(struct super_block *sb) * * The update of system_blks pointer in this function is protected by * sb->s_umount semaphore. However we have to be careful as we can be - * racing with ext4_data_block_valid() calls reading system_blks rbtree + * racing with ext4_inode_block_valid() calls reading system_blks rbtree * protected only by RCU. So we first clear the system_blks pointer and * then free the rbtree only after RCU grace period expires. */ From patchwork Wed Oct 21 09:15:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1385459 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=XvFF4zuX; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CGPxb4WlRz9sRk for ; Wed, 21 Oct 2020 20:16:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437569AbgJUJQT (ORCPT ); Wed, 21 Oct 2020 05:16:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44962 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437538AbgJUJQS (ORCPT ); Wed, 21 Oct 2020 05:16:18 -0400 Received: from mail-pj1-x1043.google.com (mail-pj1-x1043.google.com [IPv6:2607:f8b0:4864:20::1043]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC75EC0613CE for ; Wed, 21 Oct 2020 02:16:18 -0700 (PDT) Received: by mail-pj1-x1043.google.com with SMTP id gv6so825410pjb.4 for ; Wed, 21 Oct 2020 02:16:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=k32nD6EHoa9vKyvN08CV3SJ7B2KH77AbzW3Lidp0RO8=; b=XvFF4zuXFgCeosWabppgNjbUgQ9nGmPxtZwgejP0BZD8PMclmtM4qUnwUSPmEyjKtI +0N8WOUGwDt1kWxcZV9juZCh6sgdeoYUl62YXzZx6vlGP8VQkUIuSYnO17A2GDqdeNSz j5kcOM24y0pxOktCTOb5dyXUecs93ngLH8kmMmhYKvM7j03Dc6acrf0eENh9gw50HjRv 2v2EXZLurvaKfgAW7igAOqIgMEW56mpZ8EQZKNWxq1UYVGJcxhhf63KFcaE45zlabKG6 /OtavVZMnhnDEp6cyPwZc28wcM/5hWZs3oU0JU1Y1On3Ag7YedVMzblxDgymz0U5XSE/ e+FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=k32nD6EHoa9vKyvN08CV3SJ7B2KH77AbzW3Lidp0RO8=; b=dWxALOi8LoOOVktFjsncdfGo0J9SeapkbF06LeWlfcCzN++PUKnRbG9YxvdgBcA71f a6MfgmRg+hLltM4h3YitabHgDXRGZcQrxp96mEK8Wczzc3xR/nt07qj4EtG8xid7oDBr Cv4tJGWOjDOlLDiKmnx9ce8SlpWEeuddzs0osCh1+YxEwLFN0hVmJ7kzMJ8gh4j5n0b6 iYIZOEJsIX/Gq0/muwU+TRHTQ7o7PrkD2ru4iNSfocPGczDD0KSnVK12Ioj86YdmY1TN 58tAkV1NofCW3BUTwJbcnyuCcJM0KJsGFYffQogHBc3gAyECF6zEq702tEToSLe7MdCS vX/w== X-Gm-Message-State: AOAM533CKCI6rhEPanpXRamywnDZ29mmb3UyLWH5pTMzFglF/sjc+YZI 7cfI7BJVfiAQA7B7F6uRUFB9kGn6lnc= X-Google-Smtp-Source: ABdhPJxERrImnnN+262qV+HrUw0VOZPb+sgxAlfRAbDCtebmMWGF/HretdPqVSznSWhFl9DV/pMcdg== X-Received: by 2002:a17:902:8545:b029:d5:dbd4:4ab5 with SMTP id d5-20020a1709028545b02900d5dbd44ab5mr2426203plo.31.1603271778376; Wed, 21 Oct 2020 02:16:18 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id x16sm1573002pff.14.2020.10.21.02.16.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 02:16:17 -0700 (PDT) From: Chunguang Xu X-Google-Original-From: Chunguang Xu To: tytso@mit.edu, adilger.kernel@dilger.ca Cc: linux-ext4@vger.kernel.org Subject: [PATCH 6/8] ext4: add a helper function to validate metadata block Date: Wed, 21 Oct 2020 17:15:26 +0800 Message-Id: <1603271728-7198-6-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603271728-7198-1-git-send-email-brookxu@tencent.com> References: <1603271728-7198-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Chunguang Xu There is a need to check whether a block or a segment overlaps with metadata, since information of system_zone is incomplete, we need a more accurate function. Now we check whether it overlaps with block bitmap, inode bitmap, and inode table. Perhaps it is better to add a check of super_block and block group descriptor and provide a helper function. Signed-off-by: Chunguang Xu --- fs/ext4/ext4.h | 5 ++++- fs/ext4/mballoc.c | 57 +++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index e7344ef..d3ff7d9 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -2784,7 +2784,10 @@ extern ext4_group_t ext4_mb_prefetch(struct super_block *sb, unsigned int nr, int *cnt); extern void ext4_mb_prefetch_fini(struct super_block *sb, ext4_group_t group, unsigned int nr); - +extern int ext4_metadata_block_overlaps(struct super_block *sb, + ext4_group_t block_group, + ext4_fsblk_t block, + unsigned long count); extern void ext4_free_blocks(handle_t *handle, struct inode *inode, struct buffer_head *bh, ext4_fsblk_t block, unsigned long count, int flags); diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 2efb489..2b1bc6c 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5061,6 +5061,49 @@ static void ext4_try_merge_freed_extent(struct ext4_sb_info *sbi, kmem_cache_free(ext4_free_data_cachep, entry); } +/* + * Returns 1 if the passed-in block region (block, block+count) + * overlaps with some other filesystem metadata blocks. Others, + * return 0. + */ +int ext4_metadata_block_overlaps(struct super_block *sb, + ext4_group_t block_group, + ext4_fsblk_t block, + unsigned long count) +{ + struct ext4_sb_info *sbi = EXT4_SB(sb); + struct ext4_group_desc *gdp; + int gd_first = ext4_group_first_block_no(sb, block_group); + int itable, gd_blk; + int ret = 0; + + gdp = ext4_get_group_desc(sb, block_group, NULL); + // check block bitmap and inode bitmap + if (in_range(ext4_block_bitmap(sb, gdp), block, count) || + in_range(ext4_inode_bitmap(sb, gdp), block, count)) + ret = 1; + + // check inode table + itable = ext4_inode_table(sb, gdp); + if (!(block >= itable + sbi->s_itb_per_group || + block + count - 1 < itable)) + ret = 1; + + /* check super_block and block group descriptor table, the + * reserved space of the block group descriptor is managed + * by resize_inode, it may not be processed now due to + * performance. + */ + gd_blk = ext4_bg_has_super(sb, block_group) + + ext4_bg_num_gdb(sb, block_group); + if (gd_blk) { + if (!(block >= gd_first + gd_blk || + block + count - 1 < gd_first)) + ret = 1; + } + return ret; +} + static noinline_for_stack int ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b, struct ext4_free_data *new_entry) @@ -5360,13 +5403,7 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode, goto error_return; } - if (in_range(ext4_block_bitmap(sb, gdp), block, count) || - in_range(ext4_inode_bitmap(sb, gdp), block, count) || - in_range(block, ext4_inode_table(sb, gdp), - sbi->s_itb_per_group) || - in_range(block + count - 1, ext4_inode_table(sb, gdp), - sbi->s_itb_per_group)) { - + if (ext4_metadata_block_overlaps(sb, block_group, block, count)) { ext4_error(sb, "Freeing blocks in system zone - " "Block = %llu, count = %lu", block, count); /* err = 0. ext4_std_error should be a no op */ @@ -5552,11 +5589,7 @@ int ext4_group_add_blocks(handle_t *handle, struct super_block *sb, goto error_return; } - if (in_range(ext4_block_bitmap(sb, desc), block, count) || - in_range(ext4_inode_bitmap(sb, desc), block, count) || - in_range(block, ext4_inode_table(sb, desc), sbi->s_itb_per_group) || - in_range(block + count - 1, ext4_inode_table(sb, desc), - sbi->s_itb_per_group)) { + if (ext4_metadata_block_overlaps(sb, block_group, block, count)) { ext4_error(sb, "Adding blocks in system zones - " "Block = %llu, count = %lu", block, count); From patchwork Wed Oct 21 09:15:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1385460 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=EcZLK2Yk; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CGPxf2853z9sSC for ; Wed, 21 Oct 2020 20:16:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437571AbgJUJQW (ORCPT ); Wed, 21 Oct 2020 05:16:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44972 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437537AbgJUJQV (ORCPT ); Wed, 21 Oct 2020 05:16:21 -0400 Received: from mail-pl1-x643.google.com (mail-pl1-x643.google.com [IPv6:2607:f8b0:4864:20::643]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D7F0C0613CE for ; Wed, 21 Oct 2020 02:16:20 -0700 (PDT) Received: by mail-pl1-x643.google.com with SMTP id 1so916763ple.2 for ; Wed, 21 Oct 2020 02:16:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=f/RkicABsSjW7TwvRLZnei7YjJ26D6NVyW5bvWOhGCE=; b=EcZLK2Yk1hKd0i3vxhJbBTOABXjJYPoyqQgqEPZjHYZjFsabkUcTo2wnH4AYzCT9x8 BQGvD4oMMsZlrHibj1nMyzdu4zvg+03BU8iQXzel+KUeTLIQ0kTYw2zizB1HyWIBxuIs TeQDEWctzVIpRvKMJbFMzhJbJAmmJqYvG69oo+v3IQZCevrOM8qHHBr2X2iLWpVejLQd RjUCpStt2fVOVmbbTMFVXQ5mxjLi0UtQJJY3EGg+uXRjATI258zIWwy4zATyE+kEEtlj IhpIIV1aRFHYPhpTHEtg9DyByS82+AArDVsMorr8bVTqU0sbDMM/WGroUPAnW7uyk+eX 7shA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=f/RkicABsSjW7TwvRLZnei7YjJ26D6NVyW5bvWOhGCE=; b=q56QxXYzfJVVvjySueciSc/MbsaRDzjx5hV1lADUYVy9bUghEG4lTPi+arKvZpZa7+ uHjqOTJkMxi7IMEt9c2rkZU6hx4Jpnxz+CxAXE98dTsPPRX//hv7P3ufsaW79lzOILTz 0GqqrGoDUh+EiQ6DqPrwiESMWTraYTFvBAKLw+ok5oxpvm3oymWJN/4omkCEWxztiSFp wCYTZM8TR94kaWWOUkKanXOAzanMO67/Zr8xPRWoMiAG9SU+mZzvgkejBgE/BvAKoLQ8 KRqpPtxHftGGhBXORGEvNjFOTPWZpNUs6iFl+rdOM2SQgwaPxEBS1j25IKwaohAgaBAb j6AA== X-Gm-Message-State: AOAM533oJCBtmk6PPlaePcqrUI2MAuahMZUwem4PVeT0hBG43+u0vx7o wvtHrbVRrRujxWswWhlqXD9HIGEbdLE= X-Google-Smtp-Source: ABdhPJztyd1Fee+I3AAJ/Mnnghy6wJtaF1AWQFw7VfZCu1JXdS88vAfct9DaD8deh7yKMD+FcMpkcQ== X-Received: by 2002:a17:902:b211:b029:d5:e4b6:ebd9 with SMTP id t17-20020a170902b211b02900d5e4b6ebd9mr2779320plr.54.1603271779884; Wed, 21 Oct 2020 02:16:19 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id x16sm1573002pff.14.2020.10.21.02.16.18 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 02:16:19 -0700 (PDT) From: Chunguang Xu X-Google-Original-From: Chunguang Xu To: tytso@mit.edu, adilger.kernel@dilger.ca Cc: linux-ext4@vger.kernel.org Subject: [PATCH 7/8] ext4: delete invalid code inside ext4_xattr_block_set() Date: Wed, 21 Oct 2020 17:15:27 +0800 Message-Id: <1603271728-7198-7-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603271728-7198-1-git-send-email-brookxu@tencent.com> References: <1603271728-7198-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Chunguang Xu Delete invalid code inside ext4_xattr_block_set(). Signed-off-by: Chunguang Xu Reviewed-by: Andreas Dilger --- fs/ext4/xattr.c | 1 - 1 file changed, 1 deletion(-) diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index 6127e94..4e3b1f8 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -1927,7 +1927,6 @@ struct ext4_xattr_block_find { } else { /* Allocate a buffer where we construct the new block. */ s->base = kzalloc(sb->s_blocksize, GFP_NOFS); - /* assert(header == s->base) */ error = -ENOMEM; if (s->base == NULL) goto cleanup; From patchwork Wed Oct 21 09:15:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1385461 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=gx1qsd8s; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CGPxg1jjlz9sSC for ; Wed, 21 Oct 2020 20:16:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437572AbgJUJQW (ORCPT ); Wed, 21 Oct 2020 05:16:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44976 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437538AbgJUJQV (ORCPT ); Wed, 21 Oct 2020 05:16:21 -0400 Received: from mail-pl1-x641.google.com (mail-pl1-x641.google.com [IPv6:2607:f8b0:4864:20::641]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94FAFC0613CF for ; Wed, 21 Oct 2020 02:16:21 -0700 (PDT) Received: by mail-pl1-x641.google.com with SMTP id h2so890971pll.11 for ; Wed, 21 Oct 2020 02:16:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7kggVtH7GurY0g+oTU6IbXHwke3vNpqmW+8LOm34gBE=; b=gx1qsd8sDJt5RTHl6zkqAQbbhY4SrLGzxtn8kYtue5wPARnR3t2XkHb7oSG3VOeDdA CswTzBaoqK3GOfA6umxhWo6oGveCOWNF0eyzXTFGELD80GzdnRJNAOFQCZuB10hFSgYD fx+vKKKu2KJ4EH1zjGnMIO4vSNZGYR6O7UBnboBR5j3+mqvo1rJJIl1FcESWZFbq6ukH 634DuHa3sl/KrDb77O4F/IoooOVL9e9VGflBxxKf7RCvZzjOgebPd58pfsIeIcahbeHa gfV9NFMRnZMU0vw8E7RFDy4N4+AfSovbFAIayXMtXzE0ET5zZq/ABBo9+Jo1TLungU+U TNzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7kggVtH7GurY0g+oTU6IbXHwke3vNpqmW+8LOm34gBE=; b=MgFSznKnbt9m8WYIQcE7v7PLePVEJ4wiJCv7CuBsKv0oI9N4+aprWP8pJqDyuvBgjG jP5VFvUdIQJGs8wRYALJ4tEYGeEKPGkkV8XtseEYJgyBAog2nQaXLI+qBLgPSc0EhZ+I /FdrypE1zDrlQAC9gvZKbpfB1bHWiNmj78qDsmuiONkBd2ESvo+o4dbkWa6GdRB9ZxJQ GKWS0SlxjDAUCTIH+J5bpGjXhoX4G3nHQZfXaGJjFQRorv3qN3CFx634tXNUanVmo3Ua gUcKxfJkBACAceruPVi17Sh1/fGy+18GLW/7UK7S/tCDYYQJdvkYWq5jZ/qmpHY7KK4X HbAw== X-Gm-Message-State: AOAM533/+1ZLe0YAm63/f1CiAfZE4c3XdkfooMkM9XP1NfkwrZi5SpYU FqsSmY9DjtSwa1nifaQwWPQ= X-Google-Smtp-Source: ABdhPJwppnAfEvyHJQ/6ufxfu2RiLbUdGwjUS/oZp5h0PUbSo8NfpQoAuiqBnGKFNPpQve03gOEWow== X-Received: by 2002:a17:902:9a89:b029:d5:ad3c:cf53 with SMTP id w9-20020a1709029a89b02900d5ad3ccf53mr2528088plp.8.1603271781183; Wed, 21 Oct 2020 02:16:21 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id x16sm1573002pff.14.2020.10.21.02.16.20 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 02:16:20 -0700 (PDT) From: Chunguang Xu X-Google-Original-From: Chunguang Xu To: tytso@mit.edu, adilger.kernel@dilger.ca Cc: linux-ext4@vger.kernel.org Subject: [PATCH 8/8] ext4: fix a memory leak of ext4_free_data Date: Wed, 21 Oct 2020 17:15:28 +0800 Message-Id: <1603271728-7198-8-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603271728-7198-1-git-send-email-brookxu@tencent.com> References: <1603271728-7198-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Chunguang Xu When freeing metadata, we will create an ext4_free_data and insert it into the pending free list. After the current transaction is committed, the object will be freed. ext4_mb_free_metadata() will check whether the area to be freed overlaps with the pending free list. If true, return directly. At this time, ext4_free_data is leaked. Fortunately, the probability of this problem is relatively small, maybe we should fix this problem. Signed-off-by: Chunguang Xu --- fs/ext4/mballoc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 2b1bc6c..3af4903 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5146,6 +5146,7 @@ int ext4_metadata_block_overlaps(struct super_block *sb, ext4_group_first_block_no(sb, group) + EXT4_C2B(sbi, cluster), "Block already on to-be-freed list"); + kmem_cache_free(ext4_free_data_cachep, new_entry); return 0; } }