On 6/23/26 19:12, Nhat Pham wrote:
> On Tue, Jun 23, 2026 at 4:15 AM Pavel Tikhomirov
> <[email protected]> wrote:
>>
>> Overlayfs forwards data I/O to the real (upper/lower) file, so the page
>> cache lives in the real inode's mapping and cachestat() on an overlay
>> fd returned all zeroes.
>>
>> Implement the ->cachestat() file operation by forwarding to the real
>> file via vfs_cachestat(), the same way ovl_fadvise() forwards
>> for fadvise.
>>
>> Signed-off-by: Pavel Tikhomirov <[email protected]>
>> ---
>> fs/overlayfs/file.c | 18 ++++++++++++++++++
>> 1 file changed, 18 insertions(+)
>>
>> diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
>> index 27cc07738f33b..a7e252a91ea43 100644
>> --- a/fs/overlayfs/file.c
>> +++ b/fs/overlayfs/file.c
>> @@ -518,6 +518,21 @@ static int ovl_fadvise(struct file *file, loff_t
>> offset, loff_t len, int advice)
>> return vfs_fadvise(realfile, offset, len, advice);
>> }
>>
>> +#ifdef CONFIG_CACHESTAT_SYSCALL
>> +static int ovl_cachestat(struct file *file, struct cachestat_range *csr,
>> + struct cachestat *cs)
>> +{
>> + struct file *realfile;
>> +
>> + realfile = ovl_real_file(file);
>> + if (IS_ERR(realfile))
>> + return PTR_ERR(realfile);
>
> We're propagating the error of ovl_real_file() all the way to
> userspace right? I think we need to handle this.
>
> For example, we might get -EIO here, which is unexpected and
> undocumented from cachestat's POV.
>
> Maybe handle it and just return -EBADF or sth like that (with some
> updated documentations, etc.)
>
> The rest LGTM, but I'll let overlayfs maintainers check the
> overlayfs-specific bits :)
Yeh, we probably can use EBADF here instead of propagating:
Man cachestat(2) says:
EBADF Invalid file descriptor.
not really a bad fd here, but probably close enough not to rewrite man.
I'm a bit hesitant though, since in other overlayfs operations we already
propagate, maybe that was by design?
>
>> +
>> + with_ovl_creds(file_inode(file)->i_sb)
>> + return vfs_cachestat(realfile, csr, cs);
>> +}
--
Best regards, Pavel Tikhomirov
Senior Software Developer, Virtuozzo.