Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1001324yba; Thu, 4 Apr 2019 02:08:33 -0700 (PDT) X-Google-Smtp-Source: APXvYqzpBJkgvthRVEzjyewqh2FB6gSeMteSRvWFqfbUMso8ieUgjGlpAhiB1MGeh7ndpDuCmzJ2 X-Received: by 2002:a63:6e0e:: with SMTP id j14mr4607395pgc.203.1554368913435; Thu, 04 Apr 2019 02:08:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554368913; cv=none; d=google.com; s=arc-20160816; b=EiD41XSWDSxl/v9foTnre/XXEKy4ZwpIsDDPzkvkBKWVRBSE/LEHWEBVmtKetOBzkP f/E2VwGhibjTgFRRVI7hsyRXSvOKe8QBa04QV0rb1TKUEV7GHqktPniF6IHqfSGwUIRQ Ukr0g/FRhmuw8qjfansjCAjIcq0jjnlguo6D63aXC3w3i1mEw13UU2+ZpqJrcxKarFpB 8ZEsd8fJfPnnTIJ5NFSmOkBHQNaRjeuzocuPP/xUE2XB7fb6fxCDCf13N9DTCa8izQP7 cTTUZ8B/CzmeOox5EURG0nMHYiCivHzea2HMff7FWU8U+gmf3C2eGCbKKAcFC0soV2+Y ttZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=3px8orgEq9eZzp0HpedpKlb5IcLFNMIrP79cA+gntUo=; b=CyMROtB5WpZRgxduOxf5H5rOFVmiAABzq+XwZ4/Qunuu0wgwm/HcnF/+45ezFZJY+Z pEBcFnpq2GJVWH8hb7gqtebUGYMWZLqJRchqPm36SF+0sdjsgbyuB+mTAAKEPiyjX6HX 8tK7ZxzZLrFFNx8h96okIbopb14FdWAz6yrUHqmsIMcJEd3NAnI9dWq2d2x3CZMZRfsp KL10578Icm9hXfEbDtfB1htApVLGhhcTYo+DDs0NCf2hwdFay7USMYF27IVXx/P7cWza BqEP0Ecg0lwTGER8CIGU3CGvZ/w0/tC5vj7Ql8GFUo9UbKH2+C1xxmSezi7OgoX+fzLz OVDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=VUKPdVNw; 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 u33si16033860pga.341.2019.04.04.02.08.17; Thu, 04 Apr 2019 02:08:33 -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; dkim=pass header.i=@kernel.org header.s=default header.b=VUKPdVNw; 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 S1728723AbfDDJHo (ORCPT + 99 others); Thu, 4 Apr 2019 05:07:44 -0400 Received: from mail.kernel.org ([198.145.29.99]:46548 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732545AbfDDJHm (ORCPT ); Thu, 4 Apr 2019 05:07:42 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B8E7821741; Thu, 4 Apr 2019 09:07:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554368861; bh=N5kc2olOPduKa+Pk+gx7Qb277zuRT520PDCo514OHrc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VUKPdVNw6A4PdldOmIBED6T4TAa7O5N+yysX0x29utEIwb3okZvyolUayAcyawZ7U ffPol22G/Au2QG+kB5AApGJBPVSJBTQs3UOy/5B7d8i5SL6VEd1D2Yfsqn9HoKmqr3 yGoujG3J7ddO5rufowprdEWJVeMVMLcsyf4knuj8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "zhangyi (F)" , Theodore Tso , Jan Kara , Jari Ruusu Subject: [PATCH 5.0 001/246] ext4: cleanup bh release code in ext4_ind_remove_space() Date: Thu, 4 Apr 2019 10:45:01 +0200 Message-Id: <20190404084619.308275834@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190404084619.236418459@linuxfoundation.org> References: <20190404084619.236418459@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 5.0-stable review patch. If anyone has any objections, please let me know. ------------------ From: zhangyi (F) commit 5e86bdda41534e17621d5a071b294943cae4376e upstream. Currently, we are releasing the indirect buffer where we are done with it in ext4_ind_remove_space(), so we can see the brelse() and BUFFER_TRACE() everywhere. It seems fragile and hard to read, and we may probably forget to release the buffer some day. This patch cleans up the code by putting of the code which releases the buffers to the end of the function. Signed-off-by: zhangyi (F) Signed-off-by: Theodore Ts'o Reviewed-by: Jan Kara Cc: Jari Ruusu Signed-off-by: Greg Kroah-Hartman --- fs/ext4/indirect.c | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) --- a/fs/ext4/indirect.c +++ b/fs/ext4/indirect.c @@ -1219,6 +1219,7 @@ int ext4_ind_remove_space(handle_t *hand ext4_lblk_t offsets[4], offsets2[4]; Indirect chain[4], chain2[4]; Indirect *partial, *partial2; + Indirect *p = NULL, *p2 = NULL; ext4_lblk_t max_block; __le32 nr = 0, nr2 = 0; int n = 0, n2 = 0; @@ -1260,7 +1261,7 @@ int ext4_ind_remove_space(handle_t *hand } - partial = ext4_find_shared(inode, n, offsets, chain, &nr); + partial = p = ext4_find_shared(inode, n, offsets, chain, &nr); if (nr) { if (partial == chain) { /* Shared branch grows from the inode */ @@ -1285,13 +1286,11 @@ int ext4_ind_remove_space(handle_t *hand partial->p + 1, (__le32 *)partial->bh->b_data+addr_per_block, (chain+n-1) - partial); - BUFFER_TRACE(partial->bh, "call brelse"); - brelse(partial->bh); partial--; } end_range: - partial2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); + partial2 = p2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); if (nr2) { if (partial2 == chain2) { /* @@ -1321,16 +1320,14 @@ end_range: (__le32 *)partial2->bh->b_data, partial2->p, (chain2+n2-1) - partial2); - BUFFER_TRACE(partial2->bh, "call brelse"); - brelse(partial2->bh); partial2--; } goto do_indirects; } /* Punch happened within the same level (n == n2) */ - partial = ext4_find_shared(inode, n, offsets, chain, &nr); - partial2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); + partial = p = ext4_find_shared(inode, n, offsets, chain, &nr); + partial2 = p2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); /* Free top, but only if partial2 isn't its subtree. */ if (nr) { @@ -1387,15 +1384,7 @@ end_range: partial->p + 1, partial2->p, (chain+n-1) - partial); - while (partial > chain) { - BUFFER_TRACE(partial->bh, "call brelse"); - brelse(partial->bh); - } - while (partial2 > chain2) { - BUFFER_TRACE(partial2->bh, "call brelse"); - brelse(partial2->bh); - } - return 0; + goto cleanup; } /* @@ -1410,8 +1399,6 @@ end_range: partial->p + 1, (__le32 *)partial->bh->b_data+addr_per_block, (chain+n-1) - partial); - BUFFER_TRACE(partial->bh, "call brelse"); - brelse(partial->bh); partial--; } if (partial2 > chain2 && depth2 <= depth) { @@ -1419,11 +1406,21 @@ end_range: (__le32 *)partial2->bh->b_data, partial2->p, (chain2+n2-1) - partial2); - BUFFER_TRACE(partial2->bh, "call brelse"); - brelse(partial2->bh); partial2--; } } + +cleanup: + while (p && p > chain) { + BUFFER_TRACE(p->bh, "call brelse"); + brelse(p->bh); + p--; + } + while (p2 && p2 > chain2) { + BUFFER_TRACE(p2->bh, "call brelse"); + brelse(p2->bh); + p2--; + } return 0; do_indirects: @@ -1431,7 +1428,7 @@ do_indirects: switch (offsets[0]) { default: if (++n >= n2) - return 0; + break; nr = i_data[EXT4_IND_BLOCK]; if (nr) { ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 1); @@ -1439,7 +1436,7 @@ do_indirects: } case EXT4_IND_BLOCK: if (++n >= n2) - return 0; + break; nr = i_data[EXT4_DIND_BLOCK]; if (nr) { ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 2); @@ -1447,7 +1444,7 @@ do_indirects: } case EXT4_DIND_BLOCK: if (++n >= n2) - return 0; + break; nr = i_data[EXT4_TIND_BLOCK]; if (nr) { ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 3); @@ -1456,5 +1453,5 @@ do_indirects: case EXT4_TIND_BLOCK: ; } - return 0; + goto cleanup; }