diff options
| author | Avi Weiss <thnkslprpt@gmail.com> | 2026-08-10 12:47:01 +0300 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2026-09-02 22:19:30 +0200 |
| commit | d0285dfbc3b46f41395b26ee2f4a16d99fb3e736 (patch) | |
| tree | f30604f57f701b51d3de4ddac617f821356da9a3 | |
| parent | 529c01c3dc0d322c103611c35b01d71ea04562b2 (diff) | |
| download | linux-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.c | 2 |
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 |
