Re: [PATCH] btrfs: send: propagate errors from is_inode_existent()

Qu Wenruo <[email protected]>
Newsgroups org.kernel.vger.linux-btrfs,org.kernel.vger.linux-kernel
Message-ID <[email protected]>

在 2026/8/10 19:17, Avi Weiss 写道:
> The direct-return refactor 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 <[email protected]>
> ---
>   fs/btrfs/send.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
> index 3ae480c7474b..a888202397ed 100644
> --- a/fs/btrfs/send.c
> +++ b/fs/btrfs/send.c
> @@ -2066,7 +2066,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;

This behavior seems consistent with the later lookup_dir_item_inode(), 
where if we got ENOENT we just return 0.

Are you sure if we want to return -ENOENT in this case?
>   
>   	/*
>   	 * If we have a parent root we need to verify that the parent dir was
> 
> base-commit: af5534fe2fbc006e83d75d6283dfc5ec75d5d780
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.