From nobody Thu Apr 2 11:41:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4B203C07E9D for ; Sat, 24 Sep 2022 02:01:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232671AbiIXCBp (ORCPT ); Fri, 23 Sep 2022 22:01:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49518 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229623AbiIXCBa (ORCPT ); Fri, 23 Sep 2022 22:01:30 -0400 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 29F73A407F; Fri, 23 Sep 2022 19:01:30 -0700 (PDT) Received: from canpemm500010.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4MZBy43kdjzpVHx; Sat, 24 Sep 2022 09:58:36 +0800 (CST) Received: from huawei.com (10.175.127.227) by canpemm500010.china.huawei.com (7.192.105.118) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Sat, 24 Sep 2022 10:01:27 +0800 From: Ye Bin To: , , CC: , , Ye Bin Subject: [PATCH -next v2 1/2] ext4: remove unnecessary drop path references in mext_check_coverage() Date: Sat, 24 Sep 2022 10:12:10 +0800 Message-ID: <20220924021211.3831551-2-yebin10@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220924021211.3831551-1-yebin10@huawei.com> References: <20220924021211.3831551-1-yebin10@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To canpemm500010.china.huawei.com (7.192.105.118) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" According to Jan Kara's suggestion: "The use in mext_check_coverage() can be actually removed - get_ext_path() -> ext4_find_extent() takes care of dropping the reference= s." So remove unnecessary call ext4_ext_drop_refs() in mext_check_coverage(). Signed-off-by: Ye Bin Reviewed-by: Jan Kara --- fs/ext4/move_extent.c | 1 - 1 file changed, 1 deletion(-) diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c index 701f1d6a217f..782bbda2a717 100644 --- a/fs/ext4/move_extent.c +++ b/fs/ext4/move_extent.c @@ -103,7 +103,6 @@ mext_check_coverage(struct inode *inode, ext4_lblk_t fr= om, ext4_lblk_t count, if (unwritten !=3D ext4_ext_is_unwritten(ext)) goto out; from +=3D ext4_ext_get_actual_len(ext); - ext4_ext_drop_refs(path); } ret =3D 1; out: --=20 2.31.1 From nobody Thu Apr 2 11:41:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 480EEC6FA82 for ; Sat, 24 Sep 2022 02:01:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233002AbiIXCBu (ORCPT ); Fri, 23 Sep 2022 22:01:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229514AbiIXCBb (ORCPT ); Fri, 23 Sep 2022 22:01:31 -0400 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3298AA74C7; Fri, 23 Sep 2022 19:01:30 -0700 (PDT) Received: from canpemm500010.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4MZBwY6YjxzlXK5; Sat, 24 Sep 2022 09:57:17 +0800 (CST) Received: from huawei.com (10.175.127.227) by canpemm500010.china.huawei.com (7.192.105.118) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Sat, 24 Sep 2022 10:01:28 +0800 From: Ye Bin To: , , CC: , , Ye Bin Subject: [PATCH -next v2 2/2] ext4: factor out ext4_free_ext_path() Date: Sat, 24 Sep 2022 10:12:11 +0800 Message-ID: <20220924021211.3831551-3-yebin10@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220924021211.3831551-1-yebin10@huawei.com> References: <20220924021211.3831551-1-yebin10@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To canpemm500010.china.huawei.com (7.192.105.118) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Factor out ext4_free_ext_path() to free extent path. As after previous patch 'ext4_ext_drop_refs()' is only used in 'extents.c', so make it static. Signed-off-by: Ye Bin Reviewed-by: Jan Kara --- fs/ext4/ext4.h | 2 +- fs/ext4/extents.c | 107 ++++++++++++++++----------------------- fs/ext4/extents_status.c | 3 +- fs/ext4/fast_commit.c | 6 +-- fs/ext4/migrate.c | 3 +- fs/ext4/move_extent.c | 9 ++-- fs/ext4/verity.c | 6 +-- 7 files changed, 54 insertions(+), 82 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index e6674504ca2a..648ea9ccf65e 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -3713,7 +3713,7 @@ extern int ext4_ext_insert_extent(handle_t *, struct = inode *, extern struct ext4_ext_path *ext4_find_extent(struct inode *, ext4_lblk_t, struct ext4_ext_path **, int flags); -extern void ext4_ext_drop_refs(struct ext4_ext_path *); +extern void ext4_free_ext_path(struct ext4_ext_path *); extern int ext4_ext_check_inode(struct inode *inode); extern ext4_lblk_t ext4_ext_next_allocated_block(struct ext4_ext_path *pat= h); extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fie= info, diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index c148bb97b527..4653acfa1723 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -106,6 +106,25 @@ static int ext4_ext_trunc_restart_fn(struct inode *ino= de, int *dropped) return 0; } =20 +static void ext4_ext_drop_refs(struct ext4_ext_path *path) +{ + int depth, i; + + if (!path) + return; + depth =3D path->p_depth; + for (i =3D 0; i <=3D depth; i++, path++) { + brelse(path->p_bh); + path->p_bh =3D NULL; + } +} + +void ext4_free_ext_path(struct ext4_ext_path *path) +{ + ext4_ext_drop_refs(path); + kfree(path); +} + /* * Make sure 'handle' has at least 'check_cred' credits. If not, restart * transaction with 'restart_cred' credits. The function drops i_data_sem @@ -632,8 +651,7 @@ int ext4_ext_precache(struct inode *inode) ext4_set_inode_state(inode, EXT4_STATE_EXT_PRECACHED); out: up_read(&ei->i_data_sem); - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); return ret; } =20 @@ -720,19 +738,6 @@ static void ext4_ext_show_move(struct inode *inode, st= ruct ext4_ext_path *path, #define ext4_ext_show_move(inode, path, newblock, level) #endif =20 -void ext4_ext_drop_refs(struct ext4_ext_path *path) -{ - int depth, i; - - if (!path) - return; - depth =3D path->p_depth; - for (i =3D 0; i <=3D depth; i++, path++) { - brelse(path->p_bh); - path->p_bh =3D NULL; - } -} - /* * ext4_ext_binsearch_idx: * binary search for the closest index of the given block @@ -951,8 +956,7 @@ ext4_find_extent(struct inode *inode, ext4_lblk_t block, return path; =20 err: - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); if (orig_path) *orig_path =3D NULL; return ERR_PTR(ret); @@ -2170,8 +2174,7 @@ int ext4_ext_insert_extent(handle_t *handle, struct i= node *inode, err =3D ext4_ext_dirty(handle, inode, path + path->p_depth); =20 cleanup: - ext4_ext_drop_refs(npath); - kfree(npath); + ext4_free_ext_path(npath); return err; } =20 @@ -3057,8 +3060,7 @@ int ext4_ext_remove_space(struct inode *inode, ext4_l= blk_t start, } } out: - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); path =3D NULL; if (err =3D=3D -EAGAIN) goto again; @@ -4371,8 +4373,7 @@ int ext4_ext_map_blocks(handle_t *handle, struct inod= e *inode, allocated =3D map->m_len; ext4_ext_show_leaf(inode, path); out: - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); =20 trace_ext4_ext_map_blocks_exit(inode, flags, map, err ? err : allocated); @@ -5241,8 +5242,7 @@ ext4_ext_shift_extents(struct inode *inode, handle_t = *handle, break; } out: - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); return ret; } =20 @@ -5534,15 +5534,13 @@ static int ext4_insert_range(struct file *file, lof= f_t offset, loff_t len) EXT4_GET_BLOCKS_METADATA_NOFAIL); } =20 - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); if (ret < 0) { up_write(&EXT4_I(inode)->i_data_sem); goto out_stop; } } else { - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); } =20 ret =3D ext4_es_remove_extent(inode, offset_lblk, @@ -5762,10 +5760,8 @@ ext4_swap_extents(handle_t *handle, struct inode *in= ode1, count -=3D len; =20 repeat: - ext4_ext_drop_refs(path1); - kfree(path1); - ext4_ext_drop_refs(path2); - kfree(path2); + ext4_free_ext_path(path1); + ext4_free_ext_path(path2); path1 =3D path2 =3D NULL; } return replaced_count; @@ -5844,8 +5840,7 @@ int ext4_clu_mapped(struct inode *inode, ext4_lblk_t = lclu) } =20 out: - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); =20 return err ? err : mapped; } @@ -5912,8 +5907,7 @@ int ext4_ext_replay_update_ex(struct inode *inode, ex= t4_lblk_t start, ret =3D ext4_ext_dirty(NULL, inode, &path[path->p_depth]); up_write(&EXT4_I(inode)->i_data_sem); out: - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); ext4_mark_inode_dirty(NULL, inode); return ret; } @@ -5931,8 +5925,7 @@ void ext4_ext_replay_shrink_inode(struct inode *inode= , ext4_lblk_t end) return; ex =3D path[path->p_depth].p_ext; if (!ex) { - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); ext4_mark_inode_dirty(NULL, inode); return; } @@ -5945,8 +5938,7 @@ void ext4_ext_replay_shrink_inode(struct inode *inode= , ext4_lblk_t end) ext4_ext_dirty(NULL, inode, &path[path->p_depth]); up_write(&EXT4_I(inode)->i_data_sem); ext4_mark_inode_dirty(NULL, inode); - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); } } =20 @@ -5985,13 +5977,11 @@ int ext4_ext_replay_set_iblocks(struct inode *inode) return PTR_ERR(path); ex =3D path[path->p_depth].p_ext; if (!ex) { - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); goto out; } end =3D le32_to_cpu(ex->ee_block) + ext4_ext_get_actual_len(ex); - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); =20 /* Count the number of data blocks */ cur =3D 0; @@ -6021,30 +6011,26 @@ int ext4_ext_replay_set_iblocks(struct inode *inode) if (IS_ERR(path)) goto out; numblks +=3D path->p_depth; - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); while (cur < end) { path =3D ext4_find_extent(inode, cur, NULL, 0); if (IS_ERR(path)) break; ex =3D path[path->p_depth].p_ext; if (!ex) { - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); return 0; } cur =3D max(cur + 1, le32_to_cpu(ex->ee_block) + ext4_ext_get_actual_len(ex)); ret =3D skip_hole(inode, &cur); if (ret < 0) { - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); break; } path2 =3D ext4_find_extent(inode, cur, NULL, 0); if (IS_ERR(path2)) { - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); break; } for (i =3D 0; i <=3D max(path->p_depth, path2->p_depth); i++) { @@ -6058,10 +6044,8 @@ int ext4_ext_replay_set_iblocks(struct inode *inode) if (cmp1 !=3D cmp2 && cmp2 !=3D 0) numblks++; } - ext4_ext_drop_refs(path); - ext4_ext_drop_refs(path2); - kfree(path); - kfree(path2); + ext4_free_ext_path(path); + ext4_free_ext_path(path2); } =20 out: @@ -6088,13 +6072,11 @@ int ext4_ext_clear_bb(struct inode *inode) return PTR_ERR(path); ex =3D path[path->p_depth].p_ext; if (!ex) { - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); return 0; } end =3D le32_to_cpu(ex->ee_block) + ext4_ext_get_actual_len(ex); - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); =20 cur =3D 0; while (cur < end) { @@ -6113,8 +6095,7 @@ int ext4_ext_clear_bb(struct inode *inode) ext4_fc_record_regions(inode->i_sb, inode->i_ino, 0, path[j].p_block, 1, 1); } - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); } ext4_mb_mark_bb(inode->i_sb, map.m_pblk, map.m_len, 0); ext4_fc_record_regions(inode->i_sb, inode->i_ino, diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c index 23167efda95e..cd0a861853e3 100644 --- a/fs/ext4/extents_status.c +++ b/fs/ext4/extents_status.c @@ -667,8 +667,7 @@ static void ext4_es_insert_extent_ext_check(struct inod= e *inode, } } out: - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); } =20 static void ext4_es_insert_extent_ind_check(struct inode *inode, diff --git a/fs/ext4/fast_commit.c b/fs/ext4/fast_commit.c index 067969f342eb..085cca17d72f 100644 --- a/fs/ext4/fast_commit.c +++ b/fs/ext4/fast_commit.c @@ -1776,8 +1776,7 @@ static int ext4_fc_replay_add_range(struct super_bloc= k *sb, ret =3D ext4_ext_insert_extent( NULL, inode, &path, &newex, 0); up_write((&EXT4_I(inode)->i_data_sem)); - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); if (ret) goto out; goto next; @@ -1932,8 +1931,7 @@ static void ext4_fc_set_bitmaps_and_counters(struct s= uper_block *sb) for (j =3D 0; j < path->p_depth; j++) ext4_mb_mark_bb(inode->i_sb, path[j].p_block, 1, 1); - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); } cur +=3D ret; ext4_mb_mark_bb(inode->i_sb, map.m_pblk, diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c index 54e7d3c95fd7..0a220ec9862d 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c @@ -56,8 +56,7 @@ static int finish_range(handle_t *handle, struct inode *i= node, retval =3D ext4_ext_insert_extent(handle, inode, &path, &newext, 0); err_out: up_write((&EXT4_I(inode)->i_data_sem)); - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); lb->first_pblock =3D 0; return retval; } diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c index 782bbda2a717..1f314eb6917d 100644 --- a/fs/ext4/move_extent.c +++ b/fs/ext4/move_extent.c @@ -32,8 +32,7 @@ get_ext_path(struct inode *inode, ext4_lblk_t lblock, if (IS_ERR(path)) return PTR_ERR(path); if (path[ext_depth(inode)].p_ext =3D=3D NULL) { - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); *ppath =3D NULL; return -ENODATA; } @@ -106,8 +105,7 @@ mext_check_coverage(struct inode *inode, ext4_lblk_t fr= om, ext4_lblk_t count, } ret =3D 1; out: - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); return ret; } =20 @@ -693,8 +691,7 @@ ext4_move_extents(struct file *o_filp, struct file *d_f= ilp, __u64 orig_blk, ext4_discard_preallocations(donor_inode, 0); } =20 - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); ext4_double_up_write_data_sem(orig_inode, donor_inode); unlock_two_nondirectories(orig_inode, donor_inode); =20 diff --git a/fs/ext4/verity.c b/fs/ext4/verity.c index b051d19b5c8a..20cadfb740dc 100644 --- a/fs/ext4/verity.c +++ b/fs/ext4/verity.c @@ -298,16 +298,14 @@ static int ext4_get_verity_descriptor_location(struct= inode *inode, last_extent =3D path[path->p_depth].p_ext; if (!last_extent) { EXT4_ERROR_INODE(inode, "verity file has no extents"); - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); return -EFSCORRUPTED; } =20 end_lblk =3D le32_to_cpu(last_extent->ee_block) + ext4_ext_get_actual_len(last_extent); desc_size_pos =3D (u64)end_lblk << inode->i_blkbits; - ext4_ext_drop_refs(path); - kfree(path); + ext4_free_ext_path(path); =20 if (desc_size_pos < sizeof(desc_size_disk)) goto bad; --=20 2.31.1