From nobody Tue Feb 10 20:47:09 2026 Received: from out-179.mta1.migadu.com (out-179.mta1.migadu.com [95.215.58.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DF2501EA73 for ; Fri, 23 Aug 2024 03:20:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724383218; cv=none; b=B/QSyw6iOxttOSMw7OVdGrkC9J45MQ+RkYi6ajwe5Gr0i//dBWfRU+YWPtVi1GN3ODUufGcOvBhXVm8N9Um8UyANku4znxC2+fBqzsCNU86XEiuBOtddFoLCE+xHq1dHf8kQ3O8fc/wrlwrt1ccR/POUxGMYpEQ3xcocpimd60A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724383218; c=relaxed/simple; bh=eB58hHDqk1em9OZVfRdeIxjwv+XgL7FEdMCZMChYpC0=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=ELDVzR8a17ykkgZ+jmlbGkCj62SLtCdlQ+YPJpmLkUdINPjVV1oqKkHiXKN7mnaWaWb+GUJH99p1F7sRC6SvWaVuv2CkAjhbgVD82S9P6bBJ9I5Mgp3ItzUJ+Cd8otBh/GhioRUvtxNX0CfFy99rfVrLH/iP0odBo2vVYFOQqTU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=sRqJLCG4; arc=none smtp.client-ip=95.215.58.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="sRqJLCG4" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1724383213; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=1G+1z+3fDUC9nUFepNnbT58XaeAXVmyPg6wTBI+VKAg=; b=sRqJLCG4+1Tvv4Dq4Gd2MAePGR1kXtnbcI3lB3FtHuK5LsfX5fP157Kl5OJRWxiNhm2gMT Ub1tP5uzZP1/nFprc6kWnUQ32gE7yHZ3ZISMrq47pwCOYM5bUumXW9VN1Pcit32TCrdlaW 2vFCtF/G1Jc5ApSXNAlmyP8mb7m0xsw= From: Youling Tang To: Kent Overstreet Cc: linux-bcachefs@vger.kernel.org, linux-kernel@vger.kernel.org, youling.tang@linux.dev, Youling Tang Subject: [PATCH] bcachefs: Remove the handling of bch2_trans_iter_exit() in __bch2_bkey_get_iter() Date: Fri, 23 Aug 2024 11:19:55 +0800 Message-Id: <20240823031955.202795-1-youling.tang@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Youling Tang - Reduces bkey_err() calls. - Avoid redundant calls to bch2_trans_iter_exit() in some functions. Signed-off-by: Youling Tang --- fs/bcachefs/alloc_background.c | 9 +++++---- fs/bcachefs/btree_iter.h | 5 ++--- fs/bcachefs/fsck.c | 5 +++-- fs/bcachefs/inode.c | 4 ++-- fs/bcachefs/io_write.c | 2 +- fs/bcachefs/lru.c | 2 +- fs/bcachefs/move.c | 4 +++- fs/bcachefs/movinggc.c | 3 ++- fs/bcachefs/quota.c | 3 ++- fs/bcachefs/subvolume.c | 5 +++-- 10 files changed, 24 insertions(+), 18 deletions(-) diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c index fd3a2522bc3e..9ac5c0a62041 100644 --- a/fs/bcachefs/alloc_background.c +++ b/fs/bcachefs/alloc_background.c @@ -460,7 +460,7 @@ bch2_trans_start_alloc_update_noupdate(struct btree_tra= ns *trans, struct btree_i BTREE_ITER_intent); int ret =3D bkey_err(k); if (unlikely(ret)) - return ERR_PTR(ret); + goto err; =20 struct bkey_i_alloc_v4 *a =3D bch2_alloc_to_v4_mut_inlined(trans, k); ret =3D PTR_ERR_OR_ZERO(a); @@ -693,7 +693,7 @@ static int bch2_bucket_do_index(struct btree_trans *tra= ns, BTREE_ITER_intent); ret =3D bkey_err(old); if (ret) - return ret; + goto err; =20 if (ca->mi.freespace_initialized && c->curr_recovery_pass > BCH_RECOVERY_PASS_check_alloc_info && @@ -738,7 +738,7 @@ static noinline int bch2_bucket_gen_update(struct btree= _trans *trans, BTREE_ITER_with_updates); ret =3D bkey_err(k); if (ret) - return ret; + goto out; =20 if (k.k->type !=3D KEY_TYPE_bucket_gens) { bkey_bucket_gens_init(&g->k_i); @@ -750,6 +750,7 @@ static noinline int bch2_bucket_gen_update(struct btree= _trans *trans, g->v.gens[offset] =3D gen; =20 ret =3D bch2_trans_update(trans, &iter, &g->k_i, 0); +out: bch2_trans_iter_exit(trans, &iter); return ret; } @@ -1373,7 +1374,7 @@ static noinline_for_stack int bch2_check_discard_free= space_key(struct btree_tran alloc_k =3D bch2_bkey_get_iter(trans, &alloc_iter, BTREE_ID_alloc, pos, 0= ); ret =3D bkey_err(alloc_k); if (ret) - return ret; + goto out; =20 if (fsck_err_on(!bch2_dev_bucket_exists(c, pos), trans, need_discard_freespace_key_to_invalid_dev_bucket, diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h index dca62375d7d3..7fbc5a796c4c 100644 --- a/fs/bcachefs/btree_iter.h +++ b/fs/bcachefs/btree_iter.h @@ -552,8 +552,7 @@ static inline struct bkey_s_c __bch2_bkey_get_iter(stru= ct btree_trans *trans, =20 if (!bkey_err(k) && type && k.k->type !=3D type) k =3D bkey_s_c_err(-BCH_ERR_ENOENT_bkey_type_mismatch); - if (unlikely(bkey_err(k))) - bch2_trans_iter_exit(trans, iter); + return k; } =20 @@ -586,9 +585,9 @@ static inline int __bch2_bkey_get_val_typed(struct btre= e_trans *trans, memcpy(val, k.v, b); if (unlikely(b < sizeof(*val))) memset((void *) val + b, 0, sizeof(*val) - b); - bch2_trans_iter_exit(trans, &iter); } =20 + bch2_trans_iter_exit(trans, &iter); return ret; } =20 diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c index 9138944c5ae6..83a343f1e186 100644 --- a/fs/bcachefs/fsck.c +++ b/fs/bcachefs/fsck.c @@ -930,7 +930,7 @@ static int check_inode_dirent_inode(struct btree_trans = *trans, struct bkey_s_c i struct bkey_s_c_dirent d =3D inode_get_dirent(trans, &dirent_iter, inode,= &inode_snapshot); int ret =3D bkey_err(d); if (ret && !bch2_err_matches(ret, ENOENT)) - return ret; + goto err; =20 if (fsck_err_on(ret, trans, inode_points_to_missing_dirent, @@ -955,6 +955,7 @@ static int check_inode_dirent_inode(struct btree_trans = *trans, struct bkey_s_c i } =20 ret =3D 0; +err: fsck_err: bch2_trans_iter_exit(trans, &dirent_iter); printbuf_exit(&buf); @@ -1971,7 +1972,7 @@ static int check_dirent_to_subvol(struct btree_trans = *trans, struct btree_iter * 0, subvolume); ret =3D bkey_err(s.s_c); if (ret && !bch2_err_matches(ret, ENOENT)) - return ret; + goto out; =20 if (ret) { if (fsck_err(trans, dirent_to_missing_subvol, diff --git a/fs/bcachefs/inode.c b/fs/bcachefs/inode.c index 2be6be33afa3..6cb4028f6f60 100644 --- a/fs/bcachefs/inode.c +++ b/fs/bcachefs/inode.c @@ -343,7 +343,7 @@ int bch2_inode_peek_nowarn(struct btree_trans *trans, flags|BTREE_ITER_cached); ret =3D bkey_err(k); if (ret) - return ret; + goto err; =20 ret =3D bkey_is_inode(k.k) ? 0 : -BCH_ERR_ENOENT_inode; if (ret) @@ -1081,7 +1081,7 @@ static int may_delete_deleted_inode(struct btree_tran= s *trans, k =3D bch2_bkey_get_iter(trans, &inode_iter, BTREE_ID_inodes, pos, BTREE_= ITER_cached); ret =3D bkey_err(k); if (ret) - return ret; + goto out; =20 ret =3D bkey_is_inode(k.k) ? 0 : -BCH_ERR_ENOENT_inode; if (fsck_err_on(!bkey_is_inode(k.k), diff --git a/fs/bcachefs/io_write.c b/fs/bcachefs/io_write.c index 1d4761d15002..3ba374b47f4b 100644 --- a/fs/bcachefs/io_write.c +++ b/fs/bcachefs/io_write.c @@ -219,7 +219,7 @@ static inline int bch2_extent_update_i_size_sectors(str= uct btree_trans *trans, BTREE_ITER_cached); int ret =3D bkey_err(k); if (unlikely(ret)) - return ret; + goto err; =20 /* * varint_decode_fast(), in the inode .invalid method, reads up to 7 diff --git a/fs/bcachefs/lru.c b/fs/bcachefs/lru.c index 96f2f4f8c397..40bc732e996f 100644 --- a/fs/bcachefs/lru.c +++ b/fs/bcachefs/lru.c @@ -91,7 +91,7 @@ int bch2_lru_check_set(struct btree_trans *trans, time), 0); int ret =3D bkey_err(lru_k); if (ret) - return ret; + goto err; =20 if (lru_k.k->type !=3D KEY_TYPE_set) { ret =3D bch2_btree_write_buffer_maybe_flush(trans, referring_k, last_flu= shed); diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c index 7d3920e03742..4148fc312ab2 100644 --- a/fs/bcachefs/move.c +++ b/fs/bcachefs/move.c @@ -439,8 +439,10 @@ int bch2_move_get_io_opts_one(struct btree_trans *tran= s, SPOS(0, extent_k.k->p.inode, extent_k.k->p.snapshot), BTREE_ITER_cached); ret =3D bkey_err(k); - if (bch2_err_matches(ret, BCH_ERR_transaction_restart)) + if (bch2_err_matches(ret, BCH_ERR_transaction_restart)) { + bch2_trans_iter_exit(trans, &iter); return ret; + } =20 if (!ret && bkey_is_inode(k.k)) { struct bch_inode_unpacked inode; diff --git a/fs/bcachefs/movinggc.c b/fs/bcachefs/movinggc.c index deef4f024d20..7ee2e74eb7fc 100644 --- a/fs/bcachefs/movinggc.c +++ b/fs/bcachefs/movinggc.c @@ -88,7 +88,7 @@ static int bch2_bucket_is_movable(struct btree_trans *tra= ns, b->k.bucket, BTREE_ITER_cached); ret =3D bkey_err(k); if (ret) - return ret; + goto out; =20 a =3D bch2_alloc_to_v4(k, &_a); b->k.gen =3D a->gen; @@ -98,6 +98,7 @@ static int bch2_bucket_is_movable(struct btree_trans *tra= ns, a->fragmentation_lru && a->fragmentation_lru <=3D time; =20 +out: bch2_trans_iter_exit(trans, &iter); return ret; } diff --git a/fs/bcachefs/quota.c b/fs/bcachefs/quota.c index c32a05e252e2..504d39a9da65 100644 --- a/fs/bcachefs/quota.c +++ b/fs/bcachefs/quota.c @@ -828,7 +828,7 @@ static int bch2_set_quota_trans(struct btree_trans *tra= ns, BTREE_ITER_slots|BTREE_ITER_intent); ret =3D bkey_err(k); if (unlikely(ret)) - return ret; + goto err; =20 if (k.k->type =3D=3D KEY_TYPE_quota) new_quota->v =3D *bkey_s_c_to_quota(k).v; @@ -844,6 +844,7 @@ static int bch2_set_quota_trans(struct btree_trans *tra= ns, new_quota->v.c[Q_INO].hardlimit =3D cpu_to_le64(qdq->d_ino_hardlimit); =20 ret =3D bch2_trans_update(trans, &iter, &new_quota->k_i, 0); +err: bch2_trans_iter_exit(trans, &iter); return ret; } diff --git a/fs/bcachefs/subvolume.c b/fs/bcachefs/subvolume.c index dbe834cb349f..c5358f452fc1 100644 --- a/fs/bcachefs/subvolume.c +++ b/fs/bcachefs/subvolume.c @@ -419,12 +419,13 @@ static int __bch2_subvolume_delete(struct btree_trans= *trans, u32 subvolid) bch2_fs_inconsistent_on(bch2_err_matches(ret, ENOENT), trans->c, "missing subvolume %u", subvolid); if (ret) - return ret; + goto err; =20 snapid =3D le32_to_cpu(subvol.v->snapshot); =20 ret =3D bch2_btree_delete_at(trans, &iter, 0) ?: bch2_snapshot_node_set_deleted(trans, snapid); +err: bch2_trans_iter_exit(trans, &iter); return ret; } @@ -648,7 +649,7 @@ static int __bch2_fs_upgrade_for_subvolumes(struct btre= e_trans *trans) SPOS(0, BCACHEFS_ROOT_INO, U32_MAX), 0); ret =3D bkey_err(k); if (ret) - return ret; + goto err; =20 if (!bkey_is_inode(k.k)) { bch_err(trans->c, "root inode not found"); --=20 2.34.1