[PATCH v7] erofs-utils: add support for fuse 2/3 lowlevel API

Li Yiyan lyy0627 at sjtu.edu.cn
Thu Aug 31 23:15:19 AEST 2023


Hi Xiang:

I'm very sorry that I made a mistake. erofs_getxattr can behave
correctly in various situations. I will remove the workaround in
the new version.

On 2023/8/31 19:05, Gao Xiang wrote:
> 
> 
> On 2023/8/31 18:48, Li Yiyan wrote:
> 
> ...
> 
>>>> +
>>>> +     vi->sbi = &sbi;
>>>> +     vi->nid = (erofs_nid_t)ino;
>>>> +     ret = erofs_read_inode_from_disk(vi);
>>>> +     if (ret < 0) {
>>>> +             fuse_reply_err(req, EIO);
>>>
>>> Maybe reply -ret? Since there are other errors in
>>> erofs_read_inode_from_disk.
>>
>> No. As mentioned in declaration, param err represents the *positive* error value,
>> or zero for success.
> 
> I think Jianan meant:
>     if (ret < 0) {
>         fuse_reply_err(req, -err);
> 
> instead.
> 
>>>
> 
> ...
> 
>>>
>>>> +             return;
>>>> +     }
>>>> +
>>>> +     if (bufsize == 0)
>>>> +             bufsize = EROFSFUSE_XATTR_BUF_SIZE;
>>>
>>> Why do we need to reconfigure bufsize here? erofs_listxattr should
>>> handle bufsize of 0.
>>
>>
>> This is a workaround for the time being, I will propose a patch to modify the lib
>> to solve this problem.
>>
>> As mentioned in https://man7.org/linux/man-pages/man2/listxattr.2.html:
>>
>> "If size is specified as zero, these calls return the current size of the list of
>> extended attribute names ( and leave list unchanged). This can be used to determine
>> the size of the buffer that should be supplied in a subsequent call."
>>
>> Therefore, buf=0 means that we need to use fuse_reply_xattr to return the requested
>> size of the buffer. Only when buf is not 0 do we need to copy xattr to buffer.
>> At present, the erofs_getxattr cannot solve this problem, so a workaround is
>> made on the fuse layer to temporarily solve this problem and
>> control the extent of the patch.
> 
> Are you sure that erofs_listxattr() cannot accept NULL buffers?
> I'm totally confused.
> 
> Anyway, if erofs_listxattr() unmeet your requirement for whatever
> reasons, please fix this instead.
> 
> Thanks,
> Gao Xiang

Thanks,
Yiyan


More information about the Linux-erofs mailing list