Re: [RESEND PATCH 2/2] erofs-utils: lib: honor rebuild whiteouts for recreated dirs

"zhaoyifan (H)" <[email protected]> Tue, 23 Jun 2026 10:56:45 +0800
Newsgroups org.ozlabs.lists.linux-erofs
Message-ID <[email protected]>
On 2026/6/22 11:58, Gao Xiang wrote:
>
>
> On 2026/6/22 11:42, Yifan Zhao wrote:
>> When rebuilding from upper to lower, a whiteout below an already
>> recreated directory should keep that directory but stop older lower
>> entries from being merged into it.
>>
>> Mark the existing directory opaque before applying the generic
>> non-directory bailout.
>>
>> Reported-by: cayoub-oai <[email protected]>
>
> I hope it could be a real email if the reporter
> can give us, which helps us to give the exact
> credits too..
>
>> Closes: https://github.com/erofs/erofs-utils/issues/49
>> Assisted-by: Codex:GPT-5.5
>> Signed-off-by: Yifan Zhao <[email protected]>
>> ---
>>   lib/rebuild.c | 8 +++++++-
>>   1 file changed, 7 insertions(+), 1 deletion(-)
>>
>> diff --git a/lib/rebuild.c b/lib/rebuild.c
>> index 51dfe18..108a464 100644
>> --- a/lib/rebuild.c
>> +++ b/lib/rebuild.c
>> @@ -401,7 +401,13 @@ static int erofs_rebuild_dirent_iter(struct 
>> erofs_dir_context *ctx)
>>               .nid = ctx->de_nid
>>           };
>>           ret = erofs_read_inode_from_disk(&src);
>> -        if (ret || !S_ISDIR(src.i_mode))
>> +        if (ret)
>> +            goto out;
>
>         if (S_ISDIR(d->inode->i_mode) &&
>             erofs_inode_is_whiteout(&src))
>
> I guess?  If the upper is not a directory, I think
> it should be ignored instead?
>
S_ISDIR has already been checked earlier in this block, so I think 
current logic is enouth.


Thanks,

Yifan

> Thanks,
> Gao Xiang