Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1133346yba; Wed, 24 Apr 2019 15:50:49 -0700 (PDT) X-Google-Smtp-Source: APXvYqwW2E1B+Vtw+NdKRXJAf04p1zO4Z/n74jAlXOFAx+YFvsJBcy44EKlcDb8bVcNwGQpedCTU X-Received: by 2002:a17:902:e287:: with SMTP id cf7mr35440791plb.217.1556146249694; Wed, 24 Apr 2019 15:50:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556146249; cv=none; d=google.com; s=arc-20160816; b=hRq8DyK3RFt014brjgizqKbVNU9fYMy4LGklAIca2tlrlcszYd7mq7+OP9b0PFvlhj kj5QIjsUPgCkLxvDQLRaKcc+l4Tz0yPk4A3WGDjpLYHlRo/kFopRyixfcjuiI21xp9oB X2R2An9QtFlmJiOR5GYE8Q94CxO4ukIzoOAQsk532Wk6IGJAodmt33GxQJYQOwptutD+ YeJN+8O5rqxKBxaDxHPflv4x4WjPlpBEWaY5WrFgfBhqRE3M1TmPFTEoXyqLi5I8NNwH RDUwhSRhVE+kN6jQa0bxAmjHQrW1Ry4265sTNNiUwV07QaMYd7uQh4qk6MoXvCPaPLjb CGXw== 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=1PpLmhiWRACGj0+kcOHjyHEtgzJpJuAekIiqADVDFy8=; b=BMyLnbvga8/4zLhrP0OQdywUif2r9WNnKL1OyNb1QycGK3j+UvZNCFpwru35ZHFjoh HdplzMVT6rYXETcd9KDipSLuvvyxAIFwPvjBSO3EO/6JwMl841tNFcBCnr3uwhXN2f9H 8rMcUqAwtbHlTgc7JQXKcIcCGdOY2xgiWwI0HaRM2/C0mzYG6ofAEOeIb2RNp38LzC+e 4cd0u3sRDrsvTkriz+2dGQoQ4a6wzLn4Dv1ZOWnszqk1OiWOM/Vl4W/Tfp5gpksmL7HR nJdV1GRO3c5wsObY+OGJsKo36mmlbsfjVnua9TAQBFqNp8elPlW5MMUvaw+Yv3vQURFs VVhA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=pkRMlnDB; 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 p14si10136415plo.182.2019.04.24.15.50.34; Wed, 24 Apr 2019 15:50:49 -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=pkRMlnDB; 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 S2388516AbfDXRQx (ORCPT + 99 others); Wed, 24 Apr 2019 13:16:53 -0400 Received: from mail.kernel.org ([198.145.29.99]:41550 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388081AbfDXRQw (ORCPT ); Wed, 24 Apr 2019 13:16:52 -0400 Received: from localhost (62-193-50-229.as16211.net [62.193.50.229]) (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 71CD92190C; Wed, 24 Apr 2019 17:16:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556126210; bh=Iu5e9ZoxFnZXV9BoeD7yjWV/H+LrEQ7kmeRSaupRf2s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pkRMlnDBWnU/bIqwsQHPOKkb83OXATHjlHmSqnewC1zdxmobsfwpFyNF6soWVwXgG 1B4KWe4RpGxO86wrJLKbGPVMaD78jzdi2O6w4vAxKzUQ3TDvhj3NgECqiwqWy4svFh xI74ENIyHilwp/axUNlJ9LopsdUESi8/y4Ex7bps= 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 4.4 003/168] ext4: cleanup bh release code in ext4_ind_remove_space() Date: Wed, 24 Apr 2019 19:07:27 +0200 Message-Id: <20190424170923.651391223@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190424170923.452349382@linuxfoundation.org> References: <20190424170923.452349382@linuxfoundation.org> User-Agent: quilt/0.66 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 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 @@ -1323,6 +1323,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; @@ -1364,7 +1365,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 */ @@ -1389,13 +1390,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) { /* @@ -1425,16 +1424,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) { @@ -1491,15 +1488,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; } /* @@ -1514,8 +1503,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) { @@ -1523,11 +1510,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: @@ -1535,7 +1532,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); @@ -1543,7 +1540,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); @@ -1551,7 +1548,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); @@ -1560,5 +1557,5 @@ do_indirects: case EXT4_TIND_BLOCK: ; } - return 0; + goto cleanup; }