summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvi Weiss <thnkslprpt@gmail.com>2026-08-10 12:47:01 +0300
committerDavid Sterba <dsterba@suse.com>2026-09-02 22:19:30 +0200
commitd0285dfbc3b46f41395b26ee2f4a16d99fb3e736 (patch)
treef30604f57f701b51d3de4ddac617f821356da9a3
parent529c01c3dc0d322c103611c35b01d71ea04562b2 (diff)
downloadlinux-next-d0285dfbc3b46f41395b26ee2f4a16d99fb3e736.tar.gz
linux-next-d0285dfbc3b46f41395b26ee2f4a16d99fb3e736.zip
btrfs: send: fix lost error return value in will_overwrite_ref()
The direct-return refactoring in commit b3047a42f55d ("btrfs: send: directly return from will_overwrite_ref() and simplify it") changed will_overwrite_ref() to return directly instead of going through the common out label. That resulted in a negative return value from is_inode_existent() to start being converted to 0, making lookup errors unable to be distinguished from the inode not existing. process_recorded_refs() expects negative errors from will_overwrite_ref() and aborts processing when it receives one. Return the value from is_inode_existent() to restore the previous error propagation behavior as it was before the refactor. Fixes: b3047a42f55d ("btrfs: send: directly return from will_overwrite_ref() and simplify it") Signed-off-by: Avi Weiss <thnkslprpt@gmail.com> Reviewed-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--fs/btrfs/send.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index f88623bbc491..5c59b9abedcd 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -2065,7 +2065,7 @@ static int will_overwrite_ref(struct send_ctx *sctx, u64 dir, u64 dir_gen,
ret = is_inode_existent(sctx, dir, dir_gen, NULL, &parent_root_dir_gen);
if (ret <= 0)
- return 0;
+ return ret;
/*
* If we have a parent root we need to verify that the parent dir was