]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: send: add and use helper to rename current inode when processing refs
authorFilipe Manana <fdmanana@suse.com>
Wed, 12 Feb 2025 11:49:47 +0000 (11:49 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 18 Mar 2025 19:35:45 +0000 (20:35 +0100)
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>
fs/btrfs/send.c

index 6e27a7d77b25db9160cea3b456940371aad717ce..653e0b9a94caa404b7ab858e8f9b7677fc71dd9b 100644 (file)
@@ -4133,6 +4133,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.
  */
@@ -4418,13 +4431,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)) {
                                /*
@@ -4432,10 +4442,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;