]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
btrfs: send: add and use helper to rename current inode when processing refs
authorFilipe Manana <fdmanana@suse.com>
Tue, 19 Aug 2025 02:15:57 +0000 (22:15 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Aug 2025 14:31:04 +0000 (16:31 +0200)
[ 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

index deecd92cc512389994f4386d02328ddd3eeb2383..3a960ac1f3c36619065a3528c6bd4f5a3d3ba210 100644 (file)
@@ -4165,6 +4165,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.
  */
@@ -4450,13 +4463,10 @@ static int process_recorded_refs(struct send_ctx *sctx, int *pending_move)
                 * 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)) {
                                /*
@@ -4464,10 +4474,7 @@ static int process_recorded_refs(struct send_ctx *sctx, int *pending_move)
                                 * 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;