From patchwork Mon Oct 19 09:02:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1384103 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=ryv+WlYp; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CF9kq0Lc9z9sT6 for ; Mon, 19 Oct 2020 20:02:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729757AbgJSJCm (ORCPT ); Mon, 19 Oct 2020 05:02:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46758 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728441AbgJSJCm (ORCPT ); Mon, 19 Oct 2020 05:02:42 -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 73182C0613CE for ; Mon, 19 Oct 2020 02:02:42 -0700 (PDT) Received: by mail-pj1-x1043.google.com with SMTP id a1so5309881pjd.1 for ; Mon, 19 Oct 2020 02:02:42 -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=yw181Un+iNI85L/oY3AH/ewIof756biovKz5jt1zJSs=; b=ryv+WlYpodxIsrXun+fWrS07Wh3YP4hXslWhI0YO+OO98KrIOjp36ICrrIi2xrRolW 7MFnPjk8/sf7PbtKo3PtKv1cOZrdvcbgAhQuVTd3zYoA9ZomRERM+3pg4Oa76WKzCgXT ikP/AeDWF4ADqnFv4FeI3r1mQoEppLT2+W2aV2hZj0RhqwGGjRg7loNO09CjDCMqewty lmNe548PUZ140p6MzEuW4EvCOJU/jwTZla0KruTYH1megEy5D5opJqzri5PAftI5OsNh STPnF7LZMU2kruRzaMhuVcW7imaGLoXbIPmqE5svSjLdZ7D4wtflPPw4CtBIrn/hejpG QaCA== 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=yw181Un+iNI85L/oY3AH/ewIof756biovKz5jt1zJSs=; b=FNdHQZWCAhpkc4bei735cx49MmF7w6OXyQRgfoSAhbD/VLSlOcdQ0PmxlDwpgYF9ev uuboMSwzyTH5JbN8Tga1gd6+npThO1YVzdu6uoTMEJ72N3w90aq1pM7Vm/1OkE9ZGx0/ zCyNBP9ibQfND7gD1wnDHXlTBoeDFpPLJzRaEGZ4LRS9CEUmeIInL2nq7vHVxwfqhXMb lFqQa8vDzAJcF+q1MMofmFBDxa5FKgwm2THya5zDb1AcXcoFT8moz57K3oaOoR30Ekn0 xPpBCQMyE9hv86e+Pur9Ks2nNOxCHa7+YJCqcAvhN/rgdu7S1xpZxciNm6Dx7UaNXSC8 ojJg== X-Gm-Message-State: AOAM532DmsjAfodQVGvVXQigHQ8xOXAGV2EfnJeVEO0Q9Yp02xCdOOTx d4rsNP2PcZ6Lt45+QwU3O8KfsVgO6uU= X-Google-Smtp-Source: ABdhPJzEFLCIWLXaUbzzn6P7/RlOzjnS8mW20VDSUhIIqFHs31H2u32QGyiPqyQJ8yCYtGrpcWQ7yQ== X-Received: by 2002:a17:902:b111:b029:d4:cf7c:2ff1 with SMTP id q17-20020a170902b111b02900d4cf7c2ff1mr16629205plr.59.1603098162021; Mon, 19 Oct 2020 02:02:42 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id 14sm11422880pjn.48.2020.10.19.02.02.40 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Oct 2020 02:02:41 -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 v2 1/8] ext4: use ASSERT() to replace J_ASSERT() Date: Mon, 19 Oct 2020 17:02:31 +0800 Message-Id: <1603098158-30406-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 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 | 6 +++--- fs/ext4/namei.c | 12 ++++-------- fs/ext4/super.c | 2 +- 7 files changed, 22 insertions(+), 16 deletions(-) diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index dea738b..386cfc3 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)); + 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 250e905..512f833 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 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 6476994..f9e33c7 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); + 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..1223a18 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); + ASSERT(!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))); + 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 09096fe..8113898 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -825,7 +825,7 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode, int create = map_flags & EXT4_GET_BLOCKS_CREATE; int err; - J_ASSERT(handle != NULL || create == 0); + ASSERT(handle != NULL || create == 0); map.m_lblk = block; map.m_len = 1; @@ -840,8 +840,8 @@ 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(handle != NULL); + ASSERT(create != 0); + ASSERT(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 b735372..1cb9424 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 @@ -849,7 +845,7 @@ struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir, break; } } - assert (at == p - 1); + ASSERT(at == p - 1); } at = p - 1; @@ -1265,8 +1261,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); + ASSERT(count < dx_get_limit(entries)); + ASSERT(old < entries + count); memmove(new + 1, new, (char *)(entries + count) - (char *)(new)); dx_set_hash(new, hash); dx_set_block(new, block); @@ -2959,7 +2955,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) || + 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 9d01318..8aa163a 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)); + ASSERT(list_empty(&sbi->s_orphan)); sync_blockdev(sb->s_bdev); invalidate_bdev(sb->s_bdev); From patchwork Mon Oct 19 09:02:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1384104 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=BCY06CJM; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CF9kr32jNz9sSG for ; Mon, 19 Oct 2020 20:02:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729772AbgJSJCo (ORCPT ); Mon, 19 Oct 2020 05:02:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728441AbgJSJCn (ORCPT ); Mon, 19 Oct 2020 05:02:43 -0400 Received: from mail-pf1-x444.google.com (mail-pf1-x444.google.com [IPv6:2607:f8b0:4864:20::444]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D2320C0613CE for ; Mon, 19 Oct 2020 02:02:43 -0700 (PDT) Received: by mail-pf1-x444.google.com with SMTP id e15so2405805pfh.6 for ; Mon, 19 Oct 2020 02:02:43 -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=XpfG+4jXy7K1bkPX3W7h6p4E1sSG2ZJ02T8UEM6O1EE=; b=BCY06CJMeIOX23knlSNZsYIjJjhQAkLVn1mtyE6ajBaO47qgqbyhc+xSzP9AE2uSkG uaf/jjlVCO5HM9fcpoPqbLxm5eMD8+j2z0GIj5LMO2w/7sDybIvNf+Aoj92cGEsgbWkP 7RIyQwzIZglV0s4TrK4K2SA09D9Z8LGIMkZu9iKF8O6PAMJ5Aiw9fsY0aVW0PE5pq2G1 0oEtl26QR6ciDTOtRaHO/wsBmgREZEHOaGCgqilAeNO1GGJ05nVTdJSZKfEi+mPTlx9j cvjM0Ks4x9mCcB+1noCjTfKS6iYIyWx9qKCXFmPQbdUW3sA8+b1dEnlcAlAVzQkrgdQ+ v0mQ== 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=XpfG+4jXy7K1bkPX3W7h6p4E1sSG2ZJ02T8UEM6O1EE=; b=EXqkEgrPR9F3Ds9woPzR5M2wZ1j4W//Fy6SIa7YPps3tcCtibqfOwZxNIFlcnW8djA wamVRKf8KOxWVQrGPGizIGVhovdTkBKHKFJBIKg7Gf4uzP/ILW8qebbSlGffQ+1SrFuF SetmnNviLBQal3h/BDQheEbCZmtVfCdQQ9C7py/fSUBut/SXuFLb3K3dVEVdJkaQq2SJ 1QIA2sShZiKlI61P5QgScOuBALr0XGyyZ0DwaQLnOx31KmD6pjJsSsAvO32aMCagVavW RW1wkV11XOPxtTHpO7vH1FaAXPiBnDy5I04cFnnWvVINtAfNNDgWAbAddMAZEhE9gOdD h+7w== X-Gm-Message-State: AOAM531Zj7pRJsbvT9P1Q4X6kcXOTBT/bDDWmNtWqkmLw4Omi9RCSzK7 7GU3IEDq2chZvljlXd8JUTIMBeCrhcI= X-Google-Smtp-Source: ABdhPJzr0qJK/m6h8frGqpVLA3k1B8LZpuQ1WQRngLRwk1fwC8wdK/1qWWLUWfkxl+d80Pbz3bXczQ== X-Received: by 2002:a62:5215:0:b029:156:6a80:a257 with SMTP id g21-20020a6252150000b02901566a80a257mr15696001pfb.63.1603098163441; Mon, 19 Oct 2020 02:02:43 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id 14sm11422880pjn.48.2020.10.19.02.02.42 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Oct 2020 02:02:42 -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 v2 2/8] ext4: remove redundant mb_regenerate_buddy() Date: Mon, 19 Oct 2020 17:02:32 +0800 Message-Id: <1603098158-30406-2-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603098158-30406-1-git-send-email-brookxu@tencent.com> References: <1603098158-30406-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org 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 --- fs/ext4/mballoc.c | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 74a48d6..03337c8 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 @@ -1510,7 +1492,6 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b, block); ext4_mark_group_bitmap_corrupted(sb, e4b->bd_group, EXT4_GROUP_INFO_BBITMAP_CORRUPT); - mb_regenerate_buddy(e4b); goto done; } From patchwork Mon Oct 19 09:02:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1384105 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=FVn1TQ4C; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CF9kv0b2Kz9sSG for ; Mon, 19 Oct 2020 20:02:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729795AbgJSJCq (ORCPT ); Mon, 19 Oct 2020 05:02:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728441AbgJSJCq (ORCPT ); Mon, 19 Oct 2020 05:02:46 -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 27B7CC0613CE for ; Mon, 19 Oct 2020 02:02:45 -0700 (PDT) Received: by mail-pl1-x643.google.com with SMTP id v12so4642500ply.12 for ; Mon, 19 Oct 2020 02:02:45 -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=r3sZO1kwTuy79OCycDSs7UKZ99C2F8Th3DIIU2eTHdI=; b=FVn1TQ4CtngXb02CEjN5RDiC+gW/CfaqGUl059aeFxN/t+sm2DHHeWAMkQuawAe06x E6EH8sEWmqAaXHs48A0NFDYQGI0CbQJ7X9KdtEFc+/Ct5PBwIk/PvSqmy3Ttkox13X9S tu4/OZ2Jol+FxjjMHlnMEAbTPSVwOX1V6Weoea8x3dWra8ZToJIITa1fyZESPqDOxnGH G7nQ6IgHktjmiamQxSW8iixB+gnTH3vAYqezrwHWRl15UtR4FVBcLMM0Tt8RCP2NbOFd 5pj1BeUvU6Uc9aYTme9UU6rp0dbjIIl82bCi4zxvLbmcLPJZPrulyALwsLMD0e/0AL+W EBWA== 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=r3sZO1kwTuy79OCycDSs7UKZ99C2F8Th3DIIU2eTHdI=; b=PcNoQHDi03IZCx4fmcvKVNqXZLdH5ia058kjqmySzm6hxsJKwBvxKx6WCJMG7G5shc 0YJFVTaojVMujDZabCRdvWL1A1NnVZFYUvCOm1mPRe6ErdQ9Qmr8CbujBko2W+HuwyjJ cNbopcdhPggS5IxZI2f1gqUtDpOQqRp/P5lnM6hIP3UBK7ptB19f6y9jIBKLntuyT85M uADzRwUQUF21nSeMc8ygE9fz+nxRbqaR/tbfpYvywYvlMoCHIMv9CY6raz6R9sYoWL5G pvEpdp2Lyk6/pll8D3jYuDJCuoDcakKpsGW1BVxwMXUPeeaaoi/1nNKVY+8QH4/sqErS yyFw== X-Gm-Message-State: AOAM5309M4t9I+EcRz7AB0BKucH5nM3sfojL93I2Tm1Prm2MocsJxv1S QSepSph3sl6ogAFrF20p82I= X-Google-Smtp-Source: ABdhPJwjX7GgwxrJTEEHJRBnRXaSFS9Hoy5sVlY/lpZcJCnvqNmvu5qYFrROWLX/neF62lpORu8e0A== X-Received: by 2002:a17:902:8341:b029:d4:e3fa:e464 with SMTP id z1-20020a1709028341b02900d4e3fae464mr16238082pln.66.1603098164777; Mon, 19 Oct 2020 02:02:44 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id 14sm11422880pjn.48.2020.10.19.02.02.43 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Oct 2020 02:02:44 -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 v2 3/8] ext4: simplify the code of mb_find_order_for_block Date: Mon, 19 Oct 2020 17:02:33 +0800 Message-Id: <1603098158-30406-3-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603098158-30406-1-git-send-email-brookxu@tencent.com> References: <1603098158-30406-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org 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 --- 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 03337c8..56075ce 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 Mon Oct 19 09:02:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1384106 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=C0iY+RlZ; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CF9kv5Tk5z9sTm for ; Mon, 19 Oct 2020 20:02:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729815AbgJSJCq (ORCPT ); Mon, 19 Oct 2020 05:02:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729773AbgJSJCq (ORCPT ); Mon, 19 Oct 2020 05:02:46 -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 877C0C0613CE for ; Mon, 19 Oct 2020 02:02:46 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id a200so5606060pfa.10 for ; Mon, 19 Oct 2020 02:02:46 -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=dVogl0W51ro2Kw5mHE5fasRPtHB4GYwajX7vEboekgo=; b=C0iY+RlZBOz8ZhXCqOtH0pBaZSDcGsZsbd2MC9BcYlg2/HAtkUGie8nRGvYthM8nhW 27UxQaSu6Iv0roZzbiUnRiFZK49lqRFahbQN8Go5zl3NnAvw1S3dTmHFSsA/9XJlhuyG 1vn7Ol5IP8WofpCmM07lk76VH6qjDN517O18t3b2Es9O846PxkMlE36+nJHXM8tNLyLQ J0PyTDx0oTMutM8EYY72eYqPiuzjJ0p6rEg7mUaJyEunqJ+l/vDs7VLtbA6qFSXHxs07 vbL0O6nWa5HFg2CZ/DFWqdQ0d3g7bvHKbWb/CY74yl9XURvXVlPZHn5pC7GWk9/Yydth pE+g== 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=dVogl0W51ro2Kw5mHE5fasRPtHB4GYwajX7vEboekgo=; b=hOzprMXDXQmNOSf16SaDvzaJfvA26mAzB15g7NrY93C4AyI26/HE0m9FklKdd43eVo udPRoFEWvPXaLmyCrP2Z0kdxo5hbAmz7UwbA1IevDq39LxdG94wQ2mUrm1qdgwoabfcm F/oeY7HCmrd57hq65xvhd6cP1Ll6S+8VPgIwmWUFtgNEFBvrsy5rLvfk+Zh3Ta8uqpjg /kap/97RVPTMpluwoZDU0cfcSqGRq/q+Y+2jR2qVDFcvkyQPmpGbir7oO6QZk1wFcE60 6hV9BXspH35KODedwQo4pr3WgC6/xtOdUENu0X44iWSKxkVCQt/hdH0m38YsZQZH/H0U NeNg== X-Gm-Message-State: AOAM531U/MdQ3r0VcR6idpA3jx8fIzob5FJcAq9k8T90OiUx4cCdf7q3 TITULEgwB+ovOC6bLFIyNco= X-Google-Smtp-Source: ABdhPJzevVbUCRIByNiO81/LZjndcQk69kmkKoGEP6V9iy5p+4M7AQ7gWbJreAIzg4XUAX/2jAeV4Q== X-Received: by 2002:a65:5c86:: with SMTP id a6mr13452500pgt.227.1603098166145; Mon, 19 Oct 2020 02:02:46 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id 14sm11422880pjn.48.2020.10.19.02.02.45 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Oct 2020 02:02:45 -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 v2 4/8] ext4: add the gdt block of meta_bg to system_zone Date: Mon, 19 Oct 2020 17:02:34 +0800 Message-Id: <1603098158-30406-4-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603098158-30406-1-git-send-email-brookxu@tencent.com> References: <1603098158-30406-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org 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 Mon Oct 19 09:02:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1384107 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=SZmcdPxB; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CF9kw6wbwz9sSG for ; Mon, 19 Oct 2020 20:02:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729831AbgJSJCs (ORCPT ); Mon, 19 Oct 2020 05:02:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729819AbgJSJCs (ORCPT ); Mon, 19 Oct 2020 05:02:48 -0400 Received: from mail-pl1-x642.google.com (mail-pl1-x642.google.com [IPv6:2607:f8b0:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0DD57C0613D0 for ; Mon, 19 Oct 2020 02:02:48 -0700 (PDT) Received: by mail-pl1-x642.google.com with SMTP id b19so4671305pld.0 for ; Mon, 19 Oct 2020 02:02:48 -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=SZmcdPxBPtPl+9dGjHScgO3iZ2ntkSAHJnHH4++P+3bJh/Wyw1MSm8NwFvsam9PRCO erE5F5Yy6ru5NhWNn0AAzRVeroiEWLG/KrZvj/JBNNYZAXO1UPyH2qteE6DFP2yTjsE/ bJAWvcZmxPM7USudEVyZNlq9rxVWmBbHgSaL8dHtGutlRRmXmbboTooqjVIAWKrVzIcx INfCwKznn0vXlA7CzLnr3MHLJ0WlIxnFRViOb/pLlyYCcNq5NXY/gqSm3wuFDSuFS83t H+ZzsY83urqXff/TzgIqMoNJqcdTnd8ytWIhSppj3TJcUmlxsw2H6dAhPuFjZ2sX3Fji hvww== 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=HkoLP0QQwvW6qkNpKQIIIP4PA1Utlv1Y3FSkilLj06xyQRWG7zb6ZPNvJQYVgx2tGb 6mjO0Ra+t5hsWSESMWaT+9lx7t98/FmuV3j4cMSWwCbx94fPrur+oqTH6inhzTdsiGQH Q0///tIpQr2kgWUzW3tk/FmMTrXRz20HBlETxibR6erGSESVVZKAkq6Gc2FLxu3U+o3n poX6gbMDH/SZ6FYI/swL99SBD7Lek8/TerURvGEy488JzHIypy+kJ0pc5qE3zaj2qX83 //TV50zlINDJsOZ7FQce1Nj03Gqr7FrAwDSqeltkf7LCyxJBWG2Tt4OKGGezFvMDA4u/ hX9Q== X-Gm-Message-State: AOAM532HUtydEgupvCv6biLVd/2iBeC4t+JBib3azrI8G01BCViNOqZu ENZekSWeYCdg0nhB66txbas= X-Google-Smtp-Source: ABdhPJykhI/qPrUhuWucrrw16UQhb9//l0q9twP0TLg8k1FiGmWEMOORsHSPFyWkZQpD1y4M7JBegg== X-Received: by 2002:a17:902:b70a:b029:d2:6391:a80f with SMTP id d10-20020a170902b70ab02900d26391a80fmr16247841pls.0.1603098167587; Mon, 19 Oct 2020 02:02:47 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id 14sm11422880pjn.48.2020.10.19.02.02.46 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Oct 2020 02:02:47 -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 v2 5/8] ext4: update ext4_data_block_valid related comments Date: Mon, 19 Oct 2020 17:02:35 +0800 Message-Id: <1603098158-30406-5-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603098158-30406-1-git-send-email-brookxu@tencent.com> References: <1603098158-30406-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 --- 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 Mon Oct 19 09:02:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1384108 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=ANbeFq/O; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CF9ky0xMxz9sTm for ; Mon, 19 Oct 2020 20:02:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729873AbgJSJCt (ORCPT ); Mon, 19 Oct 2020 05:02:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729819AbgJSJCt (ORCPT ); Mon, 19 Oct 2020 05:02:49 -0400 Received: from mail-pj1-x1044.google.com (mail-pj1-x1044.google.com [IPv6:2607:f8b0:4864:20::1044]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4AE3AC0613CE for ; Mon, 19 Oct 2020 02:02:49 -0700 (PDT) Received: by mail-pj1-x1044.google.com with SMTP id j8so5301345pjy.5 for ; Mon, 19 Oct 2020 02:02:49 -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=DJWE+V6oYUUVNrPztdFbqBlbq/KadGB/t9tBIq7b4/4=; b=ANbeFq/ODGH8qElF1lX44XO2tXeTLwFzy25YQ44OVVKQeZJ1x65AE8taAvgJ8cZU5z 5FW/cmvcLXUX+n96S/J2qzbc9E/oEetmKZkfVcTUalJZJdZ4+oukBScfbiX0MEkYZjhi O54j34I2LwNpYTabCNN7NVjLNPVXe8xRBfcBy9AaLUNhFFmRSucBvAh9GgNKN5E4WmPx Byo9lF+bb6HPqPDCLSkndKvVgcrzCEbeuZliz6JzBF5j6jLvfYwugh9HiQG4ulWFoaVS LDXvqfXliG9nZDM2KT3qs2JltLfVDUaOTi15jnAhCz4C4MbnXNMDSFGlZcULUFRMzhfk T1uw== 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=DJWE+V6oYUUVNrPztdFbqBlbq/KadGB/t9tBIq7b4/4=; b=mrpAZimoM6o5vChK5frSKYxdhm/ue7OlYMTsqGObIff1VVSgOafGx6Gll+5U0k8ioB 3OYcRBCL+Z7mPnp7hy8mwIBm7UAEVn266UqGl/2grfmsiNUDZ+E/JtYcUvEMa0PM7MBY B7w99tiyuW+MNmnE6jclp1tubkSuXZp895IRwDnOQxf+y5G4uG8gT5X2bFmqKbVWEgf0 DNUnmdXrhCYJoQqMBuk2HJIm6U9UA8P8MIkA8RVBL2AE6WccN5Rw9//mvPtaK+zAwQSC Dlkcmn39i3V8XwFXjGZVg6N/zaoS41VVXZxgclqXHc8yig3niM+vADhRfJsS8ryj6pSQ 9ZLA== X-Gm-Message-State: AOAM5317PDJW1pFrVSC+afOjzY6rYezS/uoBBVhfe3BgU1uuOPEITTnp 0trIyCuUiEi1grHqChjD3yqkjFB+LqY= X-Google-Smtp-Source: ABdhPJzL1LlTb8eTeOw7C19qsPvIdXhyuruDGC9c4zNE24oZnxZmSJ0Ave4fbfMm2vrYU6inrFHgig== X-Received: by 2002:a17:90a:b896:: with SMTP id o22mr16254844pjr.130.1603098168901; Mon, 19 Oct 2020 02:02:48 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id 14sm11422880pjn.48.2020.10.19.02.02.47 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Oct 2020 02:02:48 -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 v2 6/8] ext4: add a helper function to validate metadata block Date: Mon, 19 Oct 2020 17:02:36 +0800 Message-Id: <1603098158-30406-6-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603098158-30406-1-git-send-email-brookxu@tencent.com> References: <1603098158-30406-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org 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 512f833..1ea700d 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -2701,7 +2701,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 56075ce..e0a4265 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5044,6 +5044,49 @@ static void ext4_try_merge_freed_extent(struct ext4_sb_info *sbi, return 0; } +/* + * 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; +} + /** * ext4_free_blocks() -- Free given blocks and update quota * @handle: handle for this transaction @@ -5170,13 +5213,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 */ @@ -5362,11 +5399,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 Mon Oct 19 09:02:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1384109 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=gBb9/nqK; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CF9kz34rDz9sTv for ; Mon, 19 Oct 2020 20:02:51 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729886AbgJSJCv (ORCPT ); Mon, 19 Oct 2020 05:02:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46800 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729819AbgJSJCu (ORCPT ); Mon, 19 Oct 2020 05:02:50 -0400 Received: from mail-pg1-x541.google.com (mail-pg1-x541.google.com [IPv6:2607:f8b0:4864:20::541]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D419C0613CE for ; Mon, 19 Oct 2020 02:02:50 -0700 (PDT) Received: by mail-pg1-x541.google.com with SMTP id b23so5649384pgb.3 for ; Mon, 19 Oct 2020 02:02:50 -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=SrEv0QX1jveOnz0dw1eCJkac0+vhIFQKGu76aPey5uY=; b=gBb9/nqKcBdzVBRem2muKT8H4EuT7xrBT8lY7+KMzPor5SUHD5GDbGN6RyeqDJkaWL xzVKTH1XU9jIEN/4OQyj9tR4HC4d+JWOZkFIom+C7d8MM0iDiAwHsPWGRqg0FrDuifU+ SduOCFgETeoeSFhS73PDUo4vpjFPaQUE7VQLZV1g/Y/QohVMPnrQ4mCzXrVbGGnXASGv GifW9N5OuOutFHH+rcK9+XTGWTW5h2zHUGepsoiqU8NnHu/x0CQLunCxS8SeakaZ+1wZ eF+FRj0eGQtabDUGbvoKsDRaTbCRDXMcol3Dqz3NkV1+eezJk/a9OzcJCQQqoVN/4N8k cQUw== 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=SrEv0QX1jveOnz0dw1eCJkac0+vhIFQKGu76aPey5uY=; b=TLgAGyIGe7fpyBJGhb+qIR74bZg5EU37oB8x6yAer+VITDbokQeSjaHn7M7cErzTFc 2wFV3u5Mu4QHltTYBxHx7kOSuQHIIigiUmTyMITf6cktdXe+GuwkAJWy2naN5BhKsbkb j8OCW46tKls6xQugUoakdgapT5v3crIMhgX5ZMaWeP4zzCYylq+dyx00q5ckXGIYX1mq 5BGSrJ5vdDZb3yCMX1CGQztS98IsKJDJEcDAC5bawxJaTdZDOhMax19d8Sntfhnjz4up UhrCAtOo3qaIEpbrSkAZrpy9dvhs9CBUobk7Nj9hcXkP5ZP0ulElpWEqmbAzcEMzwJuQ eHhQ== X-Gm-Message-State: AOAM531XfkQNrvOGy8wpvF+VfyDZfDIALBF4EoUbkF05bXknh3hw8y/j 7qss+YAJwPO/XWQT9Nflz2k= X-Google-Smtp-Source: ABdhPJxy3Uqcju9mYOqHEbFwuC6LP6OY5oackRm55hlqHREHFJsx2e//WsLXxXtdncsBHR6VzZDoEA== X-Received: by 2002:aa7:9811:0:b029:15d:2c0e:e947 with SMTP id e17-20020aa798110000b029015d2c0ee947mr3432414pfl.76.1603098170201; Mon, 19 Oct 2020 02:02:50 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id 14sm11422880pjn.48.2020.10.19.02.02.49 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Oct 2020 02:02:49 -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 v2 7/8] ext4: delete invalid code inside ext4_xattr_block_set() Date: Mon, 19 Oct 2020 17:02:37 +0800 Message-Id: <1603098158-30406-7-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603098158-30406-1-git-send-email-brookxu@tencent.com> References: <1603098158-30406-1-git-send-email-brookxu@tencent.com> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Delete invalid code inside ext4_xattr_block_set(). Signed-off-by: Chunguang Xu --- fs/ext4/xattr.c | 1 - 1 file changed, 1 deletion(-) diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index cba4b87..56728f3 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 Mon Oct 19 09:02:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1384110 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=X2GfLteB; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CF9l04TXBz9sT6 for ; Mon, 19 Oct 2020 20:02:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729910AbgJSJCw (ORCPT ); Mon, 19 Oct 2020 05:02:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729819AbgJSJCv (ORCPT ); Mon, 19 Oct 2020 05:02:51 -0400 Received: from mail-pl1-x644.google.com (mail-pl1-x644.google.com [IPv6:2607:f8b0:4864:20::644]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E4CB0C0613CE for ; Mon, 19 Oct 2020 02:02:51 -0700 (PDT) Received: by mail-pl1-x644.google.com with SMTP id t4so2030303plq.13 for ; Mon, 19 Oct 2020 02:02:51 -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=OedUPmF7/A4PIBRmhVl3v8GbYgX7GmC+T8sMcHl04l0=; b=X2GfLteBc2yW6kKSEefBI0P5mI1AuWSF7ZAig1pLESq6gMVVCtF2btl3koWjSGrqg2 mwCdBmKdJ4OwVGyOo748QwagCg6UMhKPhWI8FtB+N7eMl6x8O+uIJlOH6kB9H9nParap NF+Aayfk6o+9UyBUTO86t5aanqvlkn2Mm0HkzXPPYaBkM9Jpyc2GrmCIdTleiGPtFVsi Iwa6zN3tHsOHS+8BbxJLSHUcTKxavP6EtqRRNRA3hit+PB61dKST/wQqbrTWo090xd1i jlG+8iPWnyiJ68TYnpIFwuAUai0iQQ5t+lGY39Hwsv03GEovZqvL22NzO5ziTS4ovwe7 pR5A== 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=OedUPmF7/A4PIBRmhVl3v8GbYgX7GmC+T8sMcHl04l0=; b=e/qI1HJ6+R67ZkeWY+BQG+Efm/H+e8ujC6U1afeOqcdMXsUHTY21cg74ZQ3XueqWqU 2t4uchnU6gJq+8yogacJU0NBCuvbRGWUE0C3OY2T88pmTKkx7y7ClV1UMS/xC60ca9N6 poaJ8+G6vQBB4pU3nPMK/fnZzhpJ7Tu/rDbrZgaDOHPCPBRXv1Dq0n7nm2BjQQYkm/16 0x/FDuPhOIf/YsxEKg9nz0LhnIZFPs+MSro/JhZUThc2ZCMKXzJD6FLzeewpHrSLm3rQ hyqYaXuDWWVls5LGIAJfr90vwh6lvDWll7nb+dMCHNo/6UCruTMO2h/A51yn3oVQ5eSn dieg== X-Gm-Message-State: AOAM530jM+Y/Y/cI6H9N/gfP8+iSGp8G3t7wWQTST1DRXQVIs/L4RNeR ++Y/lWptRPPHyEwMaFgUxsM= X-Google-Smtp-Source: ABdhPJxnXGFhPHWLCuZU+MqsKSCLTOCB4Zji/rmD+RxkXQM1qP+jPlmLzKpkpEXKTUzUzyTg9zXx4g== X-Received: by 2002:a17:902:9b89:b029:d2:42a6:88f with SMTP id y9-20020a1709029b89b02900d242a6088fmr16123575plp.71.1603098171568; Mon, 19 Oct 2020 02:02:51 -0700 (PDT) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id 14sm11422880pjn.48.2020.10.19.02.02.50 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Oct 2020 02:02:51 -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 v2 8/8] ext4: fix a memory leak of ext4_free_data Date: Mon, 19 Oct 2020 17:02:38 +0800 Message-Id: <1603098158-30406-8-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603098158-30406-1-git-send-email-brookxu@tencent.com> References: <1603098158-30406-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 e0a4265..aa6732a 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5015,6 +5015,7 @@ static void ext4_try_merge_freed_extent(struct ext4_sb_info *sbi, 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; } }