From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 00/12] btrfs-progs: fix btrfs_path leak, part 2
Date: Fri, 30 Oct 2026 14:49:36 +1030 [thread overview]
Message-ID: <fe13dd4e-ceee-41cd-b0b7-d47e7a0c5426@suse.com> (raw)
In-Reply-To: <cover.1793333606.git.wqu@suse.com>
在 2026/10/30 14:45, Qu Wenruo 写道:
> This is the part 2, focusing on the on-stack btrfs_path.
This obviously rely on the part 1.
For the full patchset series, one can fetch it from the github PR:
https://github.com/kdave/btrfs-progs/pull/1191
>
> Unlike heap-allocated btrfs_path, which needs proper btrfs_free_path()
> call, or the btrfs_path itself along with the held ebs will leak.
>
> The on-stack one only leaks the held ebs, but still we should fix them.
>
> Just by the amount of code, one should know this is largely generated by
> LLM, although I spent more time drafting the plan and review the final
> patch.
>
> There are some extra notes other than just converting existing
> "btrfs_path" on-stack declaration to BTRFS_PATH_AUTO_RELEASE:
>
> - If a label is only for cleanup, remove the label when possible
> As a lot of call sites can directly return without jumping to the
> cleanup label.
>
> Also cleanup some "ret = x; return ret;" patterns.
>
> - Keep dedicated btrfs_release_path() if needed
> As our C code is not fully aligning the path lifespan with the scope,
> we still need to manually release path halfway for certain call sites.
>
> E.g. before calling btrfs_commit_transaction(),
> btrfs_abort_transaction(), btrfs_search_slot(), close_ctree() or
> before lowmem mode modifying the tree.
>
> Releasing the path before btrfs_commit_transaction() is to follow the
> kernel convension. There are a lot of existing call sites breaking it,
> so here we do not intentionally fix them.
>
> This will require a dedicated change in the future.
>
> - Reduce the lifespan of btrfs_path when possible
> E.g. the path is only utilized inside a loop or if () branch, declare
> path there.
>
> This applies to patch 01~08, which are all straightforward conversion
> with minor cleanups.
>
> After that, the code review process exposed some other bugs in the
> touched functions, which are all pretty simple and low severity ones.
> Patch 09~12 are to fix those minor bugs.
>
> Qu Wenruo (12):
> btrfs-progs: kernel-shared: use BTRFS_PATH_AUTO_RELEASE() for on-stack
> paths
> btrfs-progs: common, convert, image: use BTRFS_PATH_AUTO_RELEASE() for
> on-stack paths
> btrfs-progs: mkfs: use BTRFS_PATH_AUTO_RELEASE() for on-stack paths
> btrfs-progs: tune: use BTRFS_PATH_AUTO_RELEASE() for on-stack paths
> btrfs-progs: cmds: use BTRFS_PATH_AUTO_RELEASE() for on-stack paths
> btrfs-progs: check: use BTRFS_PATH_AUTO_RELEASE() for repair,
> qgroup-verify and mode-common
> btrfs-progs: check: use BTRFS_PATH_AUTO_RELEASE() for lowmem mode
> btrfs-progs: check: use BTRFS_PATH_AUTO_RELEASE() for original mode
> btrfs-progs: check: fix fixup_extent_flags() retry path
> btrfs-progs: fix missing transaction commit in
> truncate_free_ino_items()
> btrfs-progs: dump-tree: fix exit code and leak on open failure
> btrfs-progs: check: return error if fill_csum_tree_from_fs() fails to
> read a root
>
> check/main.c | 235 +++++++++++--------------------
> check/mode-common.c | 141 +++++++------------
> check/mode-lowmem.c | 202 +++++++++-----------------
> check/qgroup-verify.c | 29 ++--
> check/repair.c | 5 +-
> cmds/device.c | 11 +-
> cmds/inspect-dump-tree.c | 11 +-
> cmds/rescue-chunk-recover.c | 43 ++----
> cmds/rescue-fix-data-checksum.c | 10 +-
> cmds/rescue.c | 7 +-
> cmds/restore.c | 126 +++++++----------
> common/clear-cache.c | 79 ++++-------
> common/root-tree-utils.c | 10 +-
> convert/main.c | 9 +-
> convert/source-ext2.c | 3 +-
> convert/source-fs.c | 3 +-
> image/common.c | 2 +-
> image/image-create.c | 2 +-
> image/image-restore.c | 20 +--
> kernel-shared/extent-tree.c | 62 +++-----
> kernel-shared/file.c | 3 +-
> kernel-shared/free-space-cache.c | 24 ++--
> kernel-shared/inode.c | 8 +-
> kernel-shared/print-tree.c | 9 +-
> kernel-shared/volumes.c | 15 +-
> mkfs/main.c | 42 ++----
> mkfs/rootdir.c | 36 ++---
> tests/btree-test.c | 2 +-
> tune/change-csum.c | 50 ++-----
> tune/change-uuid.c | 38 ++---
> tune/convert-remap-tree.c | 12 +-
> tune/quota.c | 19 ++-
> 32 files changed, 447 insertions(+), 821 deletions(-)
>
> --
> 2.56.0
prev parent reply other threads:[~2026-10-30 4:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-30 4:15 [PATCH 00/12] btrfs-progs: fix btrfs_path leak, part 2 Qu Wenruo
2026-10-30 4:15 ` [PATCH 01/12] btrfs-progs: kernel-shared: use BTRFS_PATH_AUTO_RELEASE() for on-stack paths Qu Wenruo
2026-10-30 4:15 ` [PATCH 02/12] btrfs-progs: common, convert, image: " Qu Wenruo
2026-10-30 4:15 ` [PATCH 03/12] btrfs-progs: mkfs: " Qu Wenruo
2026-10-30 4:15 ` [PATCH 04/12] btrfs-progs: tune: " Qu Wenruo
2026-10-30 4:15 ` [PATCH 05/12] btrfs-progs: cmds: " Qu Wenruo
2026-10-30 4:15 ` [PATCH 06/12] btrfs-progs: check: use BTRFS_PATH_AUTO_RELEASE() for repair, qgroup-verify and mode-common Qu Wenruo
2026-10-30 4:15 ` [PATCH 07/12] btrfs-progs: check: use BTRFS_PATH_AUTO_RELEASE() for lowmem mode Qu Wenruo
2026-10-30 4:15 ` [PATCH 08/12] btrfs-progs: check: use BTRFS_PATH_AUTO_RELEASE() for original mode Qu Wenruo
2026-10-30 4:15 ` [PATCH 09/12] btrfs-progs: check: fix fixup_extent_flags() retry path Qu Wenruo
2026-10-30 4:15 ` [PATCH 10/12] btrfs-progs: fix missing transaction commit in truncate_free_ino_items() Qu Wenruo
2026-10-30 4:15 ` [PATCH 11/12] btrfs-progs: dump-tree: fix exit code and leak on open failure Qu Wenruo
2026-10-30 4:15 ` [PATCH 12/12] btrfs-progs: check: return error if fill_csum_tree_from_fs() fails to read a root Qu Wenruo
2026-10-30 4:19 ` Qu Wenruo [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fe13dd4e-ceee-41cd-b0b7-d47e7a0c5426@suse.com \
--to=wqu@suse.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox