2012-09-24 12:47:24

by Kasatkin, Dmitry

[permalink] [raw]
Subject: ext4_readdir ignores filldir error code

Hello,

I noticed following in ext4_readdir() and in other file systems..

filldir returns error in "error":
error = filldir(dirent, de->name, ...)

But function itself returns "ret"

What I can see is that when filldir fails, ext4_readir quits, but with
no error....
while (!error && !stored && filp->f_pos < inode->i_size) {


Is it by design or an error?

- Dmitry


2012-09-24 15:07:34

by Jan Kara

[permalink] [raw]
Subject: Re: ext4_readdir ignores filldir error code

Hello,

On Mon 24-09-12 15:47:24, Kasatkin, Dmitry wrote:
> I noticed following in ext4_readdir() and in other file systems..
>
> filldir returns error in "error":
> error = filldir(dirent, de->name, ...)
>
> But function itself returns "ret"
>
> What I can see is that when filldir fails, ext4_readir quits, but with
> no error....
> while (!error && !stored && filp->f_pos < inode->i_size) {
>
>
> Is it by design or an error?
It works as designed (although I agree that the design is a bit odd).
Note that filler functions also set dirent->error which is then used by
e.g. getdents() syscall to set return value.

Honza
--
Jan Kara <[email protected]>
SUSE Labs, CR