Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp1832811imm; Mon, 3 Sep 2018 10:35:38 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYINA+foD0PiuFjNu/Al8TrQOxZVE3w77QY/H3xe+fjFdslh1lZdpBAi2MsHPyRF6qI5P2S X-Received: by 2002:a63:4e5f:: with SMTP id o31-v6mr27266823pgl.256.1535996138925; Mon, 03 Sep 2018 10:35:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535996138; cv=none; d=google.com; s=arc-20160816; b=L564Da+q1SX1rCj/TdS1fxas0u7EeeWcSKXOsiq8dS4V0BnmZnC3QE/1ajfuzwo9BL CoP+B9q5RowFUApECwhv4FiYnOkhJ974QfMGFiIuXEI2CPQuG2cVm/TwmQcP81ydrkSd fDiZLHb2yrHXQiRWA/JJ+g8scgYFBmiyC0k9sX0qYwDEXHGCBJNcAhxiQY3tLRREEr2N HXK6ApTxwIyfrVH+jCWydKxrjFlrOcpnNKs69hVSUdJ/0HcYZJJzKN/YCFG0BRh5Ti3V Dpbhvg4KIye4Sja2tCoXeerYqcF13ilL5tpmC89CX3z0M1wkssmtFdRF1J77yRjiurGd oqzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=hkodNzjotoLxUhqmc42ALIunRgvlir6uFZKlnB4FFfk=; b=SgV9Kq1Wz+vGVlmqRVZ2sDX4oRL4BwGWUBtXmAhalL3Za6mdRCAKw530XUzFJymrbj b6AsEsYHl8isQh7RV5E9gn2Fi/rMlXFkwuNLBr/tv4xlalwFuq6F3wn9H8oYSHnA7olz bnPvxKkgFJHYpZbWK3AUEGPQdiGixZxWAs+ZlvDQtP+Y7bhNZtGqBrhhZZiYriUpy1US VV3NY5oTwP5kLbFsIQCm2N4F1gNG8IMroao+prDyPLDfIEvly1oCWiRSXTbXZbPjO4JC Avj8/E1IXk25QWmLffb6uuvRqlV+mWccrK9vG1X1ZZSHaJVtW7Ubyon0GYfsUUTnLYRs 2mcg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a84-v6si19308449pfj.300.2018.09.03.10.35.23; Mon, 03 Sep 2018 10:35:38 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730708AbeICVz2 (ORCPT + 99 others); Mon, 3 Sep 2018 17:55:28 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:47754 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728335AbeICVz2 (ORCPT ); Mon, 3 Sep 2018 17:55:28 -0400 Received: from localhost (ip-213-127-74-90.ip.prioritytelecom.net [213.127.74.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 284ADD16; Mon, 3 Sep 2018 17:34:17 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wang Shilong , Theodore Tso Subject: [PATCH 4.18 045/123] ext4: fix race when setting the bitmap corrupted flag Date: Mon, 3 Sep 2018 18:56:29 +0200 Message-Id: <20180903165721.373576375@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180903165719.499675257@linuxfoundation.org> References: <20180903165719.499675257@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Wang Shilong commit 9af0b3d1257756394ebbd06b14937b557e3a756b upstream. Whenever we hit block or inode bitmap corruptions we set bit and then reduce this block group free inode/clusters counter to expose right available space. However some of ext4_mark_group_bitmap_corrupted() is called inside group spinlock, some are not, this could make it happen that we double reduce one block group free counters from system. Always hold group spinlock for it could fix it, but it looks a little heavy, we could use test_and_set_bit() to fix race problems here. Signed-off-by: Wang Shilong Signed-off-by: Theodore Ts'o Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- fs/ext4/super.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -776,26 +776,26 @@ void ext4_mark_group_bitmap_corrupted(st 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; - if ((flags & EXT4_GROUP_INFO_BBITMAP_CORRUPT) && - !EXT4_MB_GRP_BBITMAP_CORRUPT(grp)) { - percpu_counter_sub(&sbi->s_freeclusters_counter, - grp->bb_free); - set_bit(EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT, - &grp->bb_state); + if (flags & EXT4_GROUP_INFO_BBITMAP_CORRUPT) { + ret = ext4_test_and_set_bit(EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT, + &grp->bb_state); + if (!ret) + percpu_counter_sub(&sbi->s_freeclusters_counter, + grp->bb_free); } - if ((flags & EXT4_GROUP_INFO_IBITMAP_CORRUPT) && - !EXT4_MB_GRP_IBITMAP_CORRUPT(grp)) { - if (gdp) { + if (flags & EXT4_GROUP_INFO_IBITMAP_CORRUPT) { + ret = ext4_test_and_set_bit(EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT, + &grp->bb_state); + if (!ret && gdp) { int count; count = ext4_free_inodes_count(sb, gdp); percpu_counter_sub(&sbi->s_freeinodes_counter, count); } - set_bit(EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT, - &grp->bb_state); } }