From patchwork Tue May 29 11:45:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wang Shilong X-Patchwork-Id: 922017 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; 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.b="mqAG0CUY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40wBk43Fmcz9s0q for ; Tue, 29 May 2018 21:45:32 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933366AbeE2Lpb (ORCPT ); Tue, 29 May 2018 07:45:31 -0400 Received: from mail-pl0-f68.google.com ([209.85.160.68]:33840 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933158AbeE2Lp3 (ORCPT ); Tue, 29 May 2018 07:45:29 -0400 Received: by mail-pl0-f68.google.com with SMTP id ay10-v6so8811657plb.1 for ; Tue, 29 May 2018 04:45:29 -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=Pcvq5Xk+gd+PfsqwcZXK/tiNSXYACW3h6qJBQ5jgVLM=; b=mqAG0CUYROiA9pf0tIlEuvQdpEh2UH82KLxA4pTUSU/c2K0jTizoR1sBfpQiUK9F/I bExz/3e4h2riL3zjvlcNe5esJDiLVmIBtOU9umXoHYHw9l3KQ2mrawqwgJXIJXK7EwOg 438kw2lDBFYuz/8Wvvlz9+wttsX4OziCpBWmOL+PvGX2QEx8e1s+C9soEqD1nC62EeAn Wugd/3KBL37xw3VW9CyWFNGjWTbKeMqrsZ8Hc6GjS/RCGuMkizIzi8cmd6JgMiStNOvr cuGmlXHypZ/tDjepd33McXEp2ijic7HyFYPmcFH3/Mfch2Ni6EpOrkqXZiAouu0PJOT5 +MRw== 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=Pcvq5Xk+gd+PfsqwcZXK/tiNSXYACW3h6qJBQ5jgVLM=; b=W9dTNTF2EYc4LucKp/jaoUzlLhhqFj/YdT3BlHbABCThH6A2pqMHgqObyupgE6Kwwm fi5ZXhum5Mrr/fFVifAn4FvdyMXSkJnvj7FXN3PZjUZlnyVCQ3FRnHjgoW+cWim1oFTp JBotNwuV1mr/uuNbyyoSBkBJgCIs0X1L9NuWwO8D4/mvXbADgZl1BAcHpWzLIRlqptx6 Lh4ZOX5LDRjDy9bGO3+3gh/baDwrndcs69zX+49uYWfs1L0I5RmX9jYrvFLcwVz6XxFb uTLEwWctSsIJiXBJdaAL/K2PRzDlZ/IKQuj+5LUfwoJvwuydRCtgnj94ZqvsVtmHK2CC enUQ== X-Gm-Message-State: ALKqPwf2AwsMBAqv7ps0+0jfv8RMGnOppMmmmQXQ1b6h3n9SLQYX8RoL moA6dZEMMUcvZ7gyDWezxDDnGA== X-Google-Smtp-Source: ADUXVKJzsJKE5jYoo2om1wk2Cvf+9HPhFifdaidv7PF4PzZDZzS3zooDPe5qgRpvu3Icoq8IrAwNZw== X-Received: by 2002:a17:902:b706:: with SMTP id d6-v6mr2027781pls.105.1527594328534; Tue, 29 May 2018 04:45:28 -0700 (PDT) Received: from localhost.localdomain (fs276ec80e.tkyc203.ap.nuro.jp. [39.110.200.14]) by smtp.gmail.com with ESMTPSA id s16-v6sm51226151pfm.114.2018.05.29.04.45.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 29 May 2018 04:45:27 -0700 (PDT) From: Wang Shilong X-Google-Original-From: Wang Shilong To: linux-ext4@vger.kernel.org Cc: andreas.dilger@intel.com, sihara@ddn.com, wshilong@ddn.com Subject: [PATCH 3/5] ext4: optimize to reduce redundant ext4_error() Date: Tue, 29 May 2018 20:45:15 +0900 Message-Id: <1527594317-9214-3-git-send-email-wshilong1991@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1527594317-9214-1-git-send-email-wshilong1991@gmail.com> References: <1527594317-9214-1-git-send-email-wshilong1991@gmail.com> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Wang Shilong only call ext4_error() if new corrupted bit set, this could save us repeated error messages and unecessary super block write. Suggested-by: Andreas Dilger Signed-off-by: Wang Shilong Reviewed-by: Andreas Dilger --- fs/ext4/ext4.h | 25 ++++++++++++++++--------- fs/ext4/super.c | 14 ++++++++++---- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index ed5b988..26f8c12 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -2530,9 +2530,9 @@ extern int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup); extern const char *ext4_decode_error(struct super_block *sb, int errno, char nbuf[16]); -extern void __ext4_mark_group_bitmap_corrupted(struct super_block *sb, - ext4_group_t block_group, - unsigned int flags); +extern int __ext4_mark_group_bitmap_corrupted(struct super_block *sb, + ext4_group_t block_group, + unsigned int flags); extern __printf(4, 5) void __ext4_error(struct super_block *, const char *, unsigned int, @@ -2596,9 +2596,12 @@ void __ext4_grp_locked_error(const char *, unsigned int, flags, fmt, ##__VA_ARGS__) #define ext4_mark_group_bitmap_corrupted(sb, group, flags, fmt, ...) \ do { \ - __ext4_error(sb, __func__, __LINE__, \ - fmt, ##__VA_ARGS__); \ - __ext4_mark_group_bitmap_corrupted(sb, group, flags); \ + int ret; \ + ret = __ext4_mark_group_bitmap_corrupted(sb, group, \ + flags); \ + if (ret) \ + __ext4_error(sb, __func__, __LINE__, \ + fmt, ##__VA_ARGS__); \ } while (0) @@ -2648,9 +2651,13 @@ void __ext4_grp_locked_error(const char *, unsigned int, } while (0) #define ext4_mark_group_bitmap_corrupted(sb, group, flags, fmt, ...) \ do { \ - no_printk(fmt, ##__VA_ARGS__); \ - __ext4_error(sb, "", 0, " "); \ - __ext4_mark_group_bitmap_corrupted(sb, group, flags); \ + int ret; \ + ret = __ext4_mark_group_bitmap_corrupted(sb, group, \ + flags); \ + if (ret) { \ + no_printk(fmt, ##__VA_ARGS__); \ + __ext4_error(sb, "", 0, " "); \ + } \ } while (0) #endif diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 554bceb..9f88991 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -766,21 +766,24 @@ void __ext4_grp_locked_error(const char *function, unsigned int line, return; } -void __ext4_mark_group_bitmap_corrupted(struct super_block *sb, - ext4_group_t group, - unsigned int flags) +int __ext4_mark_group_bitmap_corrupted(struct super_block *sb, + ext4_group_t group, + unsigned int flags) { struct ext4_sb_info *sbi = EXT4_SB(sb); struct ext4_group_info *grp = ext4_get_group_info(sb, group); struct ext4_group_desc *gdp = ext4_get_group_desc(sb, group, NULL); int ret; + int set = 0; if (flags & EXT4_GROUP_INFO_BBITMAP_CORRUPT) { ret = ext4_test_and_set_bit(EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT, &grp->bb_state); - if (!ret) + if (!ret) { percpu_counter_sub(&sbi->s_freeclusters_counter, grp->bb_free); + set = 1; + } } if (flags & EXT4_GROUP_INFO_IBITMAP_CORRUPT) { @@ -792,8 +795,11 @@ void __ext4_mark_group_bitmap_corrupted(struct super_block *sb, count = ext4_free_inodes_count(sb, gdp); percpu_counter_sub(&sbi->s_freeinodes_counter, count); + set = 1; } } + + return set; } void ext4_update_dynamic_rev(struct super_block *sb)