Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp5063461pxj; Wed, 26 May 2021 01:46:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw4uxOYmSyxYLbCQUAfc77KsBlNq5tpxbvEdksXqSFsY5akYSUVL2lekovuBPoRf4Y1hi1M X-Received: by 2002:a02:83c2:: with SMTP id j2mr2075414jah.6.1622018786308; Wed, 26 May 2021 01:46:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622018786; cv=none; d=google.com; s=arc-20160816; b=B4ER7oxUiDZj5/TTw8ueC9xD8Eu3Q0UDN58Qovfpl1ah+OlRDAbIgRiUU3C2hlpRFG vZQ2hnz2ymCT0wZOGKbSO8eD0ctSfCRzhA0EtQlr7AifeNz1CZSRDQtlnZvc/TUhRRk/ DsFJ8BIxtVk5AUkY8V9g5euPwx+Wsog1TC8lDL483xHOlK0gKYMYZB8+in6DGS+0COqj nQtMxdZGi+Rbj2zolcWBAk9yMsYgMFi/0bkw5AYZaa2B8GOcybrx+tfnIUnbKnuzvM8J mIqaxadyeSpBOIrh9TllQK01tCd0oVcZXjLMMg9vtGdFFzAEMRU5Jlv7FIBJE51zNTNH G94g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:references:cc :to:subject:from:dkim-signature; bh=TA9xJ9PtHz9pmM6zL8ig8SFoo1C9SL8VTQvVBosCszM=; b=Mkr+nU9v4uPogYocrGwYEJDHh3DIQdtB7IPJT9fkvSA/MnsgXESiJ7I+oCF8PCskRP SRZo14TrUfpRS/a21VE9SI9ry5jJ271CaKs6mVEp1ozgU6xLDiHDrnIa9zRdiZP4yXv8 Ui7jmp694mPiJPdRTzXLe28EBR5jUwY5t3ynsw8BCr0vKFP6klRCT0Xc7D9tP1DOi3r9 7v/XE29JmsC6lOxPRWrPIT7wuYcwNAy2UikuRzxGtK89/Xkn1EEzGj6X79FwXxU3Ek89 rye2TDJFdjzVOHLnHtD9O1hyPxgusKJMUrpXwDmrQrbAV8tsQjnx4rT3aLV/AZWUwGdx fcow== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jMNPGl5h; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i35si24468324jav.20.2021.05.26.01.46.13; Wed, 26 May 2021 01:46:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jMNPGl5h; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233125AbhEZIpS (ORCPT + 99 others); Wed, 26 May 2021 04:45:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38648 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233056AbhEZIpR (ORCPT ); Wed, 26 May 2021 04:45:17 -0400 Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 329B1C061574; Wed, 26 May 2021 01:43:46 -0700 (PDT) Received: by mail-pf1-x42a.google.com with SMTP id x18so409001pfi.9; Wed, 26 May 2021 01:43:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=TA9xJ9PtHz9pmM6zL8ig8SFoo1C9SL8VTQvVBosCszM=; b=jMNPGl5hZ2TsiFuoj5fApo2D75V2A9G6MsWKqnShLLkvlDCrV1E5tBiDCfKJ8Zc0LJ KWdswe46yHbXRTC6SmhS/VMQ64P+UTqF2fH3EbpdlHVn+xZD+Q/IetynJm9zft3RQpbA X/MrvWNVaZ+3juwoFve3LlA0xiyd4m0PJfFGi5z+pmowhCj8op/V9tz98kE7PDEi8W+A +am3qCB+gzBpzdbrJVJr3inEQG0Jt90JIWdRub5wk/2iIWygPUKN79apY2TQdVbe494U FTauRXZPIsZsgcVh+UWmU6bq3A87l6zSU66PsBC0sYEoDvFJDIi6UaxQTiT5lCxV1Omc VYHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=TA9xJ9PtHz9pmM6zL8ig8SFoo1C9SL8VTQvVBosCszM=; b=loFTjOu/tcY+zUIbemudhXPR3bEgYAJu0CyMW1GLFWZku60CVbhgDm5fv9Gs4O6QOG /G/XGec2pt1Qgqa1cFhH5HPIAYSyaSOGSWZ/iR/vR41KfYCqUj6kIVWKrNnkxZ935P57 R/UxwvDaCoArHODOKdp45vNmGGaocd1cYiSmqBdpHZXr9XDQ+PSzLKG/cN95eib4i3XW WYETwCF57BKQpZfbTf/HSMZd0Cpv6Tmm9PNXAunYfr2t2Hfmq4wpwplS4KRfPDheDfsJ 8HI8oSjwi4aHM9bNAPpAsOz+2evrLy99eoEBPHIQIm6tI+fM17ohF+aQJUmlJH6/kQ5U lsVw== X-Gm-Message-State: AOAM531PzwfWi5cOEiS91Zhzviyu0+eJ39KpJE2xHMIlAsXeEVpk4KeM ghBKj8Y0TExx6zZm+nvInwKkUjPNWLA= X-Received: by 2002:a63:e104:: with SMTP id z4mr16040008pgh.249.1622018625839; Wed, 26 May 2021 01:43:45 -0700 (PDT) Received: from jianchwadeMacBook-Pro.local ([154.48.252.66]) by smtp.gmail.com with ESMTPSA id 66sm17008428pgj.9.2021.05.26.01.43.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 26 May 2021 01:43:45 -0700 (PDT) From: Wang Jianchao Subject: [PATCH V2 5/7] ext4: get buddy cache after insert successfully To: Theodore Ts'o , Andreas Dilger Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, lishujin@kuaishou.com References: <164ffa3b-c4d5-6967-feba-b972995a6dfb@gmail.com> <49382052-6238-f1fb-40d1-b6b801b39ff7@gmail.com> <48e33dea-d15e-f211-0191-e01bd3eb17b3@gmail.com> <67eeb65a-d413-c4f9-c06f-d5dcceca0e4f@gmail.com> Message-ID: <93458049-0d43-617a-a5e7-c7e10325443a@gmail.com> Date: Wed, 26 May 2021 16:43:43 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.10.2 MIME-Version: 1.0 In-Reply-To: <67eeb65a-d413-c4f9-c06f-d5dcceca0e4f@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org The getting of bd_bitmap_page and bd_buddy_page should be done after insert the ext4_free_data successfully. Otherwise, nobody can put them. Signed-off-by: Wang Jianchao --- fs/ext4/mballoc.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index b23010c..3e8ad43 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5116,21 +5116,12 @@ static int ext4_insert_free_data( struct ext4_sb_info *sbi, struct ext4_group_info *db = e4b->bd_info; struct super_block *sb = e4b->bd_sb; struct ext4_sb_info *sbi = EXT4_SB(sb); + bool first = RB_EMPTY_ROOT(&db->bb_free_root); BUG_ON(!ext4_handle_valid(handle)); BUG_ON(e4b->bd_bitmap_page == NULL); BUG_ON(e4b->bd_buddy_page == NULL); - if (!db->bb_free_root.rb_node) { - /* first free block exent. We need to - protect buddy cache from being freed, - * otherwise we'll refresh it from - * on-disk bitmap and lose not-yet-available - * blocks */ - get_page(e4b->bd_buddy_page); - get_page(e4b->bd_bitmap_page); - } - if (ext4_insert_free_data(sbi, &db->bb_free_root, nfd)) { ext4_grp_locked_error(sb, e4b->bd_group, 0, ext4_group_first_block_no(sb, e4b->bd_group) + @@ -5140,6 +5131,15 @@ static int ext4_insert_free_data( struct ext4_sb_info *sbi, return 0; } + if (first) { + /* first free block exent. We need to protect buddy + * cache from being freed, otherwise we'll refresh it + * from on-disk bitmap and lose not-yet-available blocks + */ + get_page(e4b->bd_buddy_page); + get_page(e4b->bd_bitmap_page); + } + spin_lock(&sbi->s_md_lock); list_add_tail(&nfd->efd_list, &sbi->s_freed_data_list); sbi->s_mb_free_pending += nfd->efd_count; -- 1.8.3.1