From patchwork Sat Nov 7 15:58:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1396176 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=FQSPwAYe; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CT2461T0Tz9sTD for ; Sun, 8 Nov 2020 02:58:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726043AbgKGP6o (ORCPT ); Sat, 7 Nov 2020 10:58:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55382 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726455AbgKGP6n (ORCPT ); Sat, 7 Nov 2020 10:58:43 -0500 Received: from mail-pl1-x62e.google.com (mail-pl1-x62e.google.com [IPv6:2607:f8b0:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 19151C0613CF for ; Sat, 7 Nov 2020 07:58:42 -0800 (PST) Received: by mail-pl1-x62e.google.com with SMTP id x15so1576616pll.2 for ; Sat, 07 Nov 2020 07:58:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=TpF3slMatQgkTK4jzVKgzgOPdgG3dN/vynMXvLn747k=; b=FQSPwAYelJHxN1NrYTp6XKNOub1eXIBZvJkwQ/ZLlWY62MhqQAmpVvswdLyNvtOn8F jt58dTDaaazcMZfVPrrghOVyRRZsojU4JUtN0ZYtF59pjhKmV/Q9v/PM1x6XTcZTE3DZ XQ2RirRRrpJ+u3LA0UZVV/Zq6ei9z2Lc4aPhVG9h6qA7hLDemdItcsilsBQDK3ngMz8G 1PJOBRBdR3H03DGSMNpC8/JDJ1lYKftEaLCWvw9sznZsdtzk1uxtiYqyF1GAT1n5hGa5 ZAX3/mE7AgFFC8v4tM2U1aw4L+fLMZEniNj+z3lkv+nE7tqBflaz1h6RxcZk4bab77X1 Bc3g== 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=TpF3slMatQgkTK4jzVKgzgOPdgG3dN/vynMXvLn747k=; b=uFjpMIHTfo1KVuSV4w15vCot8hlTENFzTe8VAfkiUwPpSvhwZIixDC2o3/zJ+hoP7I wrr1Ciph/yrghhZl+hdhTq+/gHnvviUkEDjDM2JiKZpmNZXR+wgv/njMXyPMJEBYScii 4yFXbz/CslvjivAnQjEnBVPdXuN0aSiUMsHiLFEMlstVoS8wnR6JsWMkXg2aptCNfiZV W+dkoDHzYYI3A/+f5aokIG1sx/+gYWouUr2Z8//xhZC/obJq1TkU95PU9YC32GF6VRxi uGfSPzZPuHaw/eEBWKcy9B5PvpZmaLU+B0OXNCbdoRKpNKILkA3XfgAuOjusxDmqLB+c 5w3w== X-Gm-Message-State: AOAM532g3FUP7SJeu480q8/XLeqgpxqbcMXKKxrDK3QawFkyKevWDGPV B3QpSvztYIoSZKTrBiUw+DY5d2c4RYA= X-Google-Smtp-Source: ABdhPJzc2sQ5md5qvuw5cfDvaqbcN4TG87qy50yd7BBg2Gp4I+4iR5bH7n+IjPNub6XKc+rf2COFVg== X-Received: by 2002:a17:90a:d590:: with SMTP id v16mr4780100pju.88.1604764721517; Sat, 07 Nov 2020 07:58:41 -0800 (PST) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id e81sm6049956pfh.104.2020.11.07.07.58.40 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Nov 2020 07:58:41 -0800 (PST) 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 RESEND 1/8] ext4: use ext4_assert() to replace J_ASSERT() Date: Sat, 7 Nov 2020 23:58:11 +0800 Message-Id: <1604764698-4269-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 1b399ca..bd88b4a 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 a42ca95..7e74279 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 0d8385a..67fa932 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -830,8 +830,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; @@ -846,9 +846,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 3350926..9177352 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); + ext4_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); + 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); @@ -2961,7 +2957,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 c3b8645..5006c42 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 Sat Nov 7 15:58:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1396175 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=eDDsEmrY; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CT24551ZMz9sRR for ; Sun, 8 Nov 2020 02:58:45 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727789AbgKGP6n (ORCPT ); Sat, 7 Nov 2020 10:58:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55388 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726284AbgKGP6n (ORCPT ); Sat, 7 Nov 2020 10:58:43 -0500 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 4CBCDC0613D2 for ; Sat, 7 Nov 2020 07:58:43 -0800 (PST) Received: by mail-pl1-x641.google.com with SMTP id t18so2405950plo.0 for ; Sat, 07 Nov 2020 07:58:43 -0800 (PST) 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=prCHr1Qm4fANZO9EoAFrXQE5GSwUExCTKLrBWMgi4jg=; b=eDDsEmrYthzmZmOSh02CJhiiRMCC1AiQD+eTzybjWdiInc7BivC8eKkDrhUyPS2z13 +/zC6HtukDX5Jc6jc+ND9s2+Mzu3723XzS/Zl4kU669zG/gRslcJ1irduZ3V/yWX+F2l 9PqXyfotzEhlYGL8v0rD7mM2dG6m5nChVPTJpMvbH96AmkHVbgbTOQwy+R/8zwe123ZA 6ONF0uv3OYgX99MyxtehZ3snDU92ih0i4Lbe43QgG3l/i+eg0FZ2lqUaXIFIH3VJVFLe uT0KnYZ95PtgLY5/EIDvh6E2D9bWohKobzFUiNlbgpmCfiP7bRIrjvfCgBoA15yU0Jwj w4fA== 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=prCHr1Qm4fANZO9EoAFrXQE5GSwUExCTKLrBWMgi4jg=; b=gFRIS3SZ7gC93D/c6jV8QrYyw76JN2CVQi3dHHjJEOx/w6KH75dVHErMEqkz9Zynsy JWSQZB6J/K8wf8rnwDajmlauCVcmfxoQzTJe3uC4I5R/m0fn+IabJcfqA3kQU9TN1s+e 8mccURS6/X9ZnUoeJWC7OCy2MWo1303/42lOvKAN4RET8ROTPG9943/mHbXa9cwhf/Hu 1ACnE4G7hSES9rfmslGhydU/spzhsyktbYIZHr4iBjHrgkSSLi4GR7udp3508WSeQkrA vH884Q8mE9yVz38HQQyTH95M/FHFYJZ3hHRrZyYBSR6hXYoEH7jCw0n1sgrozqcGN+bc ALdA== X-Gm-Message-State: AOAM533SPR7QrYSB4P+7oRmGbtGxcAHOOc6ykjSwZF1f/Dq4G9bS3Ywa bGWSeRbpaLs8TbRxPFB7YdaZBXXEcn4= X-Google-Smtp-Source: ABdhPJwO2/7sRwwDj5Djs/yB1qAlqo+yq3uaVO3tD9rNxNeh5vkFdMVia+7xRQi5ITGGXzAfjh/ajw== X-Received: by 2002:a17:90a:15c8:: with SMTP id w8mr4856377pjd.66.1604764722867; Sat, 07 Nov 2020 07:58:42 -0800 (PST) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id e81sm6049956pfh.104.2020.11.07.07.58.41 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Nov 2020 07:58:42 -0800 (PST) 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 RESEND 2/8] ext4: remove redundant mb_regenerate_buddy() Date: Sat, 7 Nov 2020 23:58:12 +0800 Message-Id: <1604764698-4269-2-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1604764698-4269-1-git-send-email-brookxu@tencent.com> References: <1604764698-4269-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 24af9ed..5b74555 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 Sat Nov 7 15:58:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1396177 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=O9LP0Zxv; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CT24653mDz9sTL for ; Sun, 8 Nov 2020 02:58:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728226AbgKGP6p (ORCPT ); Sat, 7 Nov 2020 10:58:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55394 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726455AbgKGP6o (ORCPT ); Sat, 7 Nov 2020 10:58:44 -0500 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 AA609C0613CF for ; Sat, 7 Nov 2020 07:58:44 -0800 (PST) Received: by mail-pl1-x641.google.com with SMTP id z1so2387212plo.12 for ; Sat, 07 Nov 2020 07:58:44 -0800 (PST) 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=UK0TErdVmcOrSacHj6mFbyNWWpawXVpUQSnBIx3kPo4=; b=O9LP0Zxvy9QKTBEzIrqUggl5RFEnbnrfOcL/OSlRUFBKYYMf/dnruwuussqpo3XEaZ gY5FoBp1FMQsP8aa73bFEeb0n5yRkcJvQlKtm5XSew/iIE97QXKyHM4HTmXDxlkuUNIo eDHL8LCfIEoNPdUyhGfEi2SbedXWicu+GEms4a6QBzZMBpcTpbs8A7jvW5I5afkW5mUU AZQ1S74/sSwwnT/LmU70fIOdb7jbW3sZOSmzq5nP6upKjR19T2Yts45Y2DJRxGi0bsUF DmPjYfrCcO7P4YfLvABBHOyzRCDWLf5Ojk88gLpJ1d+706USHA7F4/6tkAwe9Dq9/isG w8zg== 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=UK0TErdVmcOrSacHj6mFbyNWWpawXVpUQSnBIx3kPo4=; b=Avg11e2HEFKT1AZ/+DkrXDeg2/iPrLi5mFkKsqUb5yAE6Krwr5Zq6cdy3DN1CRGQaM upFQzTjhJTMEAdUqoCWcvP093cxIKj0NxOxNnTa95Ea1lXFaryQS3EvA3bXgRymQaOee xWDlf9qMM1L8PtxNsdPLO89Ejv3e3zpNOIG1DBHwx987/MU8z54ipyRDab1AdaBqNQmE 6fa6mzuoxK7uD/hheUo0deuA65TSP/61GO14IRbZnVvXJo3aXnAsekpQ19J4RE1vX9Ii h1kL5eQLn7CIN/UdKvE4goPz1fYy/kKvfCoq0KKS/rytOhzwglCMEZ2OZtleZPYaQy7M SyGQ== X-Gm-Message-State: AOAM531rCBsuglOh353BuEZDwS71RZBVr2xdXHKtMvuqJSEruJ90zUAI QPFnfM/reVU98Yp2onBc0M91q5pHNwk= X-Google-Smtp-Source: ABdhPJz4whgFRWYkmkbQxRLDoMs0kadBsa1GmLHfyMGeLGRBq3o71fBF6vh9zW8qUnR5d7GM0hCWzw== X-Received: by 2002:a17:90b:3d6:: with SMTP id go22mr3294649pjb.53.1604764724310; Sat, 07 Nov 2020 07:58:44 -0800 (PST) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id e81sm6049956pfh.104.2020.11.07.07.58.43 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Nov 2020 07:58:43 -0800 (PST) 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 RESEND 3/8] ext4: simplify the code of mb_find_order_for_block Date: Sat, 7 Nov 2020 23:58:13 +0800 Message-Id: <1604764698-4269-3-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1604764698-4269-1-git-send-email-brookxu@tencent.com> References: <1604764698-4269-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 5b74555..29dfeb04 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 Sat Nov 7 15:58:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1396178 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=Ugt5zqyg; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CT2473b2Qz9sRR for ; Sun, 8 Nov 2020 02:58:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728250AbgKGP6q (ORCPT ); Sat, 7 Nov 2020 10:58:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728232AbgKGP6q (ORCPT ); Sat, 7 Nov 2020 10:58:46 -0500 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 1F132C0613CF for ; Sat, 7 Nov 2020 07:58:46 -0800 (PST) Received: by mail-pl1-x644.google.com with SMTP id f21so2398569plr.5 for ; Sat, 07 Nov 2020 07:58:46 -0800 (PST) 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=Ugt5zqyglxr4wcVRzZRt/n9XmIHABJ69wyWavwqjmS8LAac2O7svUChjucGQ1ZzHAS itko9kRbTuTQIhm4w+ywH5eQ3BryREhrH5HPyAZ3Db6p47EQCUcYhJ8FM1hkLgQrgBBe O89uOhhBo87TFBN4TvbVJkMwawzBEcnene7kBv9U/ezZ1iU+qaroPc1xz3sNaTjtQ4RR P31ufmXaZhQDaM91IoiTZ7Vj4xE6CDnn6m/aHrjXGG4IHOuGFIzuPvbMbkMB37hzJpL+ 096nzPtTmcMC8KXnbpT8QQ9yLseiKHrCdDlJxSVrZYdSqrwv9z8Y56qLquoAaXcHXcVJ ptOQ== 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=kPXaXhTNxN1DiQ+9aF+bQitGSHNP0k6dBarRAXl6MhLXH+51iDpvHj3SkA9Q3ucBJs JyMPBPrmox7UiJLWIBcd8/9SoDdWzVf3dYZ4W7SwOvQvU29zzLLxszTVeKNUFfXyLcpZ btSByLAaiFOAJhSXoEK9/rJ4piN03xfz2/5N90mrnspnfDT27GKGmO6AIxvFgPTb8+Zg q/vOY8Bj1uJjdnNPkuqwP0xkoGzeGoAUortkPAr5OOh0Fiij7FKG4b99MaKcVtiI+raP pzYtYi5p3w9nzAD5RtALRVvcg/Du8DTwNN/EAhoK9jhr4Xi8kfXP0+WlcjpguLcsBDds 6SHA== X-Gm-Message-State: AOAM533HCGzTzwSeSNIu2xQoKGAf/+tBoRAzUx+HcX8KjggDOkwikYbP 7MVIq0jshi3kBDdII0xuoBs= X-Google-Smtp-Source: ABdhPJxoOWiJID6Byf5QTFXomS07OQbRNiTEht7w22X+ZJvgP4J0woFy37UZ5070IM6puwX/XvOw5A== X-Received: by 2002:a17:902:222:b029:d3:b4d2:105e with SMTP id 31-20020a1709020222b02900d3b4d2105emr6159076plc.32.1604764725712; Sat, 07 Nov 2020 07:58:45 -0800 (PST) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id e81sm6049956pfh.104.2020.11.07.07.58.44 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Nov 2020 07:58:45 -0800 (PST) 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 RESEND 4/8] ext4: add the gdt block of meta_bg to system_zone Date: Sat, 7 Nov 2020 23:58:14 +0800 Message-Id: <1604764698-4269-4-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1604764698-4269-1-git-send-email-brookxu@tencent.com> References: <1604764698-4269-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 Sat Nov 7 15:58:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1396181 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=VwyvrD9b; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CT24D5kSsz9sVD for ; Sun, 8 Nov 2020 02:58:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728269AbgKGP6v (ORCPT ); Sat, 7 Nov 2020 10:58:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55410 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726614AbgKGP6t (ORCPT ); Sat, 7 Nov 2020 10:58:49 -0500 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 7216FC0613CF for ; Sat, 7 Nov 2020 07:58:47 -0800 (PST) Received: by mail-pj1-x1043.google.com with SMTP id oc3so945380pjb.4 for ; Sat, 07 Nov 2020 07:58:47 -0800 (PST) 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=SaUx96VUhaTpzSCRpCpRjcp0sUfE4sJlXfupVTrZ5Jg=; b=VwyvrD9bhzm4fBzMUD/ytS9sekUljXtP7EzsZ1e7g+hiz4JpS6f/xDL4GpirziW9H2 Ss/3toiEvgcqemsK3luHuQjS80J2MSwSecqudGMD3pZxtHjgSu97g6TbTqZgUhM9oPCc RCDyUwS31xt1VufCeOZPFEj4qzildJQer/aGpgDdGXJ+TxlOzVw7LMu1XCz/zTw5Iug7 Iit4hldlem7g3OOEPrrf1qxiL3n/BQiNPcdTVZY62L/F5d9JxEdKKBs6eWgGEkHdKhlk lYEuPa+1X1E9vv0UQRZBk3dVKzWutYfs4b5/MryUs0+M6eqcq/GK6dpYBgd/V4aIBLX8 Fszw== 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=SaUx96VUhaTpzSCRpCpRjcp0sUfE4sJlXfupVTrZ5Jg=; b=SuhHhGZGAd89ABB7X502SWVSu9WNtv7BnpAYSrEUcOPj1qzZs9Zh6s8gTP2yAX7y6s 2ONWWLL2HVOJenBmsdzEZdIK8ySvIlct1LelgQLOJ6TkfJzAW0h2KBMLOwO9uZb8F93E scKlb28917euI2u4pHTeq9llYwVdnVJ+FLARy+gnLsYZ26cidDjym9zfX6IN00jYRoDt BjsOsENEyEi7ibpWnPqpnQNU8MD63o/IKoho/LNY0hSlLw9YgVv/mF5SGiBZDPua+84Z hLHL+ZcFZcL26e52+iknQ30ao/MPpIVD2cf3GD17+GyjBNcpMLovJ2ghOFvaXkk6WPXm BjHw== X-Gm-Message-State: AOAM5327ehesQ13Mx8JhtVHop+4ACSQGKYQ08LFM6n+1Gw5l7gLIiOP5 MeVjE/LqCpiJwWgWKd+R7mCYoIjKACI= X-Google-Smtp-Source: ABdhPJwAfFIN4gSLjqk3JYzIx2Mdk+NQ+xdd+vhJ7t9DA90rEVphOy7A6FpW1fQkHoQedkyXkZlYzg== X-Received: by 2002:a17:90a:1b84:: with SMTP id w4mr4718275pjc.65.1604764727114; Sat, 07 Nov 2020 07:58:47 -0800 (PST) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id e81sm6049956pfh.104.2020.11.07.07.58.45 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Nov 2020 07:58:46 -0800 (PST) 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 RESEND 5/8] ext4: update ext4_data_block_valid related comments Date: Sat, 7 Nov 2020 23:58:15 +0800 Message-Id: <1604764698-4269-5-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1604764698-4269-1-git-send-email-brookxu@tencent.com> References: <1604764698-4269-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 Sat Nov 7 15:58:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1396179 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=CQUHCzSU; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CT24C1BTrz9sRK for ; Sun, 8 Nov 2020 02:58:51 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726207AbgKGP6u (ORCPT ); Sat, 7 Nov 2020 10:58:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726297AbgKGP6t (ORCPT ); Sat, 7 Nov 2020 10:58:49 -0500 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 ECDBEC0613D2 for ; Sat, 7 Nov 2020 07:58:48 -0800 (PST) Received: by mail-pl1-x642.google.com with SMTP id g11so2384170pll.13 for ; Sat, 07 Nov 2020 07:58:48 -0800 (PST) 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=+lZahwwfV9r2OInABAfNirNFAo1rXbypb6sLrp5REfw=; b=CQUHCzSUj+ZhNwrLn9kTJnY3IOW6OqQ3vUOi5/x13kKq7MgkcN4px0PaGhyAu3wEUo hgzQfs6i+jXkIaVUMDtNnrftt4OotYHME/GEBeX8g7FlqjpoPJH47nxWQD9nmEsVdVAi zZPIzERzrUZQBFGXc604cbebfXZPV7oCRMZ4okZ4s9GxSo+O9FWCSiseo6/CDhvTfl2C gAGLsDjqt0OuGbTCcRtl9BsaE1drwpuPm7QAzMCSrY5p1vvxAvIbfBsaKCbey83VzuwP gai9tNcb3oG3Zz4bP4d95LgeCORB7O2dqd66qFEa9SEPHTmjOQ1aTmLAwLkJ0XWa3rmc iTjA== 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=+lZahwwfV9r2OInABAfNirNFAo1rXbypb6sLrp5REfw=; b=GTdW5rPudcDqlqmRXDeyH/U6WxTzZBc9WKyIy+xnyefbVuPXlB/XHyw79N3TFBvV6Z MU0iVrRo3bIWUmizaNzOted2RnBLty8rKau3PJUHysMrzQH31SVfmb16KSmZE3rDv2he mx+pULi4ddSlkxJ8fHnNYcxuYxcQdbUTH3cOV4oM/OmDSI0HZeX92F2vxfnfkauPRjbR XOxVsgZ8bAnsXvOHVXZYeHGBtIUAhYAi28Xp53EolLUFwBSGnFpDACy2mDkQuV9dUDze DbgiTVLNlJ46ZZJBKjZh/aVok3F0Cv3WYsUbsWzDPNcH5iwQGXUPHHjPA6SonRZVXotu gAoQ== X-Gm-Message-State: AOAM5332o3cis/wxWm2DZVvt/DMj9iyqCd5VooQZdtU4fDNY34JegXlI Ln9KPQnXp1qdUR6gXJwkHnSPXMMi7vo= X-Google-Smtp-Source: ABdhPJxCXPGCdcIfDepJKgKyzn0cnsSUOfmPNWoSNF5riodvKPX0jlG1nLg4EnagOFFNhgXF0TAz8A== X-Received: by 2002:a17:902:8508:b029:d5:af79:8b40 with SMTP id bj8-20020a1709028508b02900d5af798b40mr5890736plb.28.1604764728478; Sat, 07 Nov 2020 07:58:48 -0800 (PST) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id e81sm6049956pfh.104.2020.11.07.07.58.47 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Nov 2020 07:58:48 -0800 (PST) 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: Sat, 7 Nov 2020 23:58:16 +0800 Message-Id: <1604764698-4269-6-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1604764698-4269-1-git-send-email-brookxu@tencent.com> References: <1604764698-4269-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 bd88b4a..73d59cb 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -2801,7 +2801,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 29dfeb04..d8704fe 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 Sat Nov 7 15:58:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1396180 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=RUdgbl5B; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CT24D0xghz9sRK for ; Sun, 8 Nov 2020 02:58:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728276AbgKGP6v (ORCPT ); Sat, 7 Nov 2020 10:58:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55414 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726455AbgKGP6u (ORCPT ); Sat, 7 Nov 2020 10:58:50 -0500 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 3A238C0613D3 for ; Sat, 7 Nov 2020 07:58:50 -0800 (PST) Received: by mail-pl1-x641.google.com with SMTP id u2so2385327pls.10 for ; Sat, 07 Nov 2020 07:58:50 -0800 (PST) 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=yyvd3jwAS4NyqEI8cpEn4CNVrLNCqfQyDPupxbVc788=; b=RUdgbl5BqUqNTnEU6AohlLmbirUbQ6dLdKkb02bTMuETpPWMNKgUfR9t/3aU3/f/KU Cj/XPhkriP3VgWS1Ku+lU2+ln/OxIGGQfvC2lZhSi+C8ZQ7kWhRZzxHZR8w3HTBuOY0P rTdrxIQXvFN8HEBtFp7Rc3nOFuKJGo97xqyrf4HiAKbN4osBRvho4QpJpPdt6cC3wSr5 hacKEai8Gw5LaalNQJiqxtNpfqv7p1BRjk3ajH4RNthsCscwLuI9pQo/o5RzoTSXa9et 79MpNkqwxqAGBlQGSlVKTRBY0ooGHuW7DGshnEbtobxIK3J2AHAQQQCg8VZKnNfrXg4b u/Jg== 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=yyvd3jwAS4NyqEI8cpEn4CNVrLNCqfQyDPupxbVc788=; b=fG/PGUy9fYlvKyKv2ceooFrQqnBV60Wcp67bwu54MTP9IrGi614RIgcsvXkdYmvKzo /vVzWjNtmfA0+ATD09hWWW8djEsJ2Z/rBX769Sglc3hdvBaEo+Q8aTHjjECHIFlV6j8v yZnChrYAPQW4dsYu8n0ZhVsjpUutmGdibU7iS5igtV/Kym8JhoWOUVAccY7jCHlF8OYe b3UWpwZoVdI99Du4nEl9QT2i9EpP0sIh1MNEeCtRt16X4qda7er7uClpMkiBCzsaXXfR 0GYqWYKgfTMuBBYVzYGpAKQhbNjrCCf+asaK3YCIfskbOEQ98s5wHBJdxk5acSVT7wuN m90Q== X-Gm-Message-State: AOAM531AqskEfNtNoADQG2qzlrKcBucY1oB8SpzwhvRwAqj/0XcKj2Wi VVKFDQLxqZODpSXRBz2zBpY= X-Google-Smtp-Source: ABdhPJzw7sKie+oYcY+YfWIUxzCF1vh/GNPKXuqaPapcJ1oJbAp0Ecf6ABVIYgUk1ABBGEl70bD6/g== X-Received: by 2002:a17:902:788e:b029:d6:9a57:ccab with SMTP id q14-20020a170902788eb02900d69a57ccabmr2897758pll.41.1604764729886; Sat, 07 Nov 2020 07:58:49 -0800 (PST) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id e81sm6049956pfh.104.2020.11.07.07.58.48 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Nov 2020 07:58:49 -0800 (PST) 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 RESEND 7/8] ext4: delete invalid code inside ext4_xattr_block_set() Date: Sat, 7 Nov 2020 23:58:17 +0800 Message-Id: <1604764698-4269-7-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1604764698-4269-1-git-send-email-brookxu@tencent.com> References: <1604764698-4269-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 Sat Nov 7 15:58:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: brookxu X-Patchwork-Id: 1396182 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=lrnIhRND; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CT24F4RDKz9sVL for ; Sun, 8 Nov 2020 02:58:53 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728279AbgKGP6w (ORCPT ); Sat, 7 Nov 2020 10:58:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55422 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728277AbgKGP6v (ORCPT ); Sat, 7 Nov 2020 10:58:51 -0500 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 A2688C0613CF for ; Sat, 7 Nov 2020 07:58:51 -0800 (PST) Received: by mail-pl1-x642.google.com with SMTP id t22so2392526plr.9 for ; Sat, 07 Nov 2020 07:58:51 -0800 (PST) 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=EuMKHOGVtCHy/SsM/4YamOXvYmvC13aMqqVm5IpN+b4=; b=lrnIhRNDAjvq3fh6Oe0E9VSQIpU4pyVKGoImQeOwEEPfVkCIx3h0ZiXN9OVQlBgZZ9 wwVtji9ErejmcKxwZFvBQz2N5BnIHNeN2+UgGuOjbtoZTxtl/tBNvxoIUfGHndJX0U/n qhpiTsuzHCWwaNj9aKc3z36cbFjgRz63sSSIRg/N5JUFlyMtW21xP7r/X9rXyzFK6/lw 2M4kH2Oxw38hug4DjiU+g3nYiYUu4hFZ+ZCQ3zNFDI+HY5cXdoykyNP5YDDB9vRtRzUS P7TYnM21kBVShfqD8EURnKbE8gPshKi2BPd5qUflecCs9PsCwrbN5+7RyvXTQq8onzth 1jVA== 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=EuMKHOGVtCHy/SsM/4YamOXvYmvC13aMqqVm5IpN+b4=; b=MsTVL0c6anwWKTzfjo0Knw4SkRHdWpbyZB+Oi8Gz8juhm52phN/LdGDsH+YdDfg+A5 s4MMgby8CT6jb9hbZwayHRyO+OuXxbxg5ZGMJU7AVEbXkluAvzNhIm73AvhppwJZlTu2 igt5/bDanCYnlTi3NCKJtWyF5DO+lMDuB98O6HOhSnHpYkqXe3C6vWYdMzuFOxmH1B7D 5qYUxUQyFhcvYpFX5mPHYu9EPZom3e1CaIrovtZ3+QJ/D0vrdz/eEjzZoLscrWnYbsDI Hq3ipdb3lMXLFgLOJRp5SmpMiPZ+GOlHp1bIGg2UL5PA3FsYYGL2QRvhxhE0cQZIoc6h ixTw== X-Gm-Message-State: AOAM530+RBBBkDKOiIpZ+o8ihwKVvVsaN4qOaxsxESWgI0qyZFfpNw2w 8K4sSK+6fSwNj9uHp2S2tUQ= X-Google-Smtp-Source: ABdhPJykmxjfApXbvpqDIYJcuBYdCvI4JaA5zYAngMsSpOeUlclEp8+Bj3suoZ+b9FJbERRxv4Hp2A== X-Received: by 2002:a17:902:b7c4:b029:d6:855a:df2c with SMTP id v4-20020a170902b7c4b02900d6855adf2cmr5974971plz.26.1604764731245; Sat, 07 Nov 2020 07:58:51 -0800 (PST) Received: from VM-0-6-centos.localdomain ([119.28.90.140]) by smtp.gmail.com with ESMTPSA id e81sm6049956pfh.104.2020.11.07.07.58.50 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Nov 2020 07:58:50 -0800 (PST) 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 RESEND 8/8] ext4: fix a memory leak of ext4_free_data Date: Sat, 7 Nov 2020 23:58:18 +0800 Message-Id: <1604764698-4269-8-git-send-email-brookxu@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1604764698-4269-1-git-send-email-brookxu@tencent.com> References: <1604764698-4269-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 d8704fe..03b4522 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; } }