| From stable+bounces-171730-greg=kroah.com@vger.kernel.org Tue Aug 19 04:40:32 2025 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 18 Aug 2025 22:40:16 -0400 |
| Subject: btrfs: send: add and use helper to rename current inode when processing refs |
| To: stable@vger.kernel.org |
| Cc: Filipe Manana <fdmanana@suse.com>, David Sterba <dsterba@suse.com>, Sasha Levin <sashal@kernel.org> |
| Message-ID: <20250819024020.291759-3-sashal@kernel.org> |
| |
| From: Filipe Manana <fdmanana@suse.com> |
| |
| [ Upstream commit ec666c84deba56f714505b53556a97565f72db86 ] |
| |
| Extract the logic to rename the current inode at process_recorded_refs() |
| into a helper function and use it, therefore removing duplicated logic |
| and making it easier for an upcoming patch by avoiding yet more duplicated |
| logic. |
| |
| Signed-off-by: Filipe Manana <fdmanana@suse.com> |
| Reviewed-by: David Sterba <dsterba@suse.com> |
| Signed-off-by: David Sterba <dsterba@suse.com> |
| Stable-dep-of: 005b0a0c24e1 ("btrfs: send: use fallocate for hole punching with send stream v2") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/btrfs/send.c | 23 +++++++++++++++-------- |
| 1 file changed, 15 insertions(+), 8 deletions(-) |
| |
| --- a/fs/btrfs/send.c |
| +++ b/fs/btrfs/send.c |
| @@ -4166,6 +4166,19 @@ out: |
| return ret; |
| } |
| |
| +static int rename_current_inode(struct send_ctx *sctx, |
| + struct fs_path *current_path, |
| + struct fs_path *new_path) |
| +{ |
| + int ret; |
| + |
| + ret = send_rename(sctx, current_path, new_path); |
| + if (ret < 0) |
| + return ret; |
| + |
| + return fs_path_copy(current_path, new_path); |
| +} |
| + |
| /* |
| * This does all the move/link/unlink/rmdir magic. |
| */ |
| @@ -4451,13 +4464,10 @@ static int process_recorded_refs(struct |
| * it depending on the inode mode. |
| */ |
| if (is_orphan && can_rename) { |
| - ret = send_rename(sctx, valid_path, cur->full_path); |
| + ret = rename_current_inode(sctx, valid_path, cur->full_path); |
| if (ret < 0) |
| goto out; |
| is_orphan = false; |
| - ret = fs_path_copy(valid_path, cur->full_path); |
| - if (ret < 0) |
| - goto out; |
| } else if (can_rename) { |
| if (S_ISDIR(sctx->cur_inode_mode)) { |
| /* |
| @@ -4465,10 +4475,7 @@ static int process_recorded_refs(struct |
| * dirs, we always have one new and one deleted |
| * ref. The deleted ref is ignored later. |
| */ |
| - ret = send_rename(sctx, valid_path, |
| - cur->full_path); |
| - if (!ret) |
| - ret = fs_path_copy(valid_path, |
| + ret = rename_current_inode(sctx, valid_path, |
| cur->full_path); |
| if (ret < 0) |
| goto out; |