Why does readdir() open files ?

Ben RUBSON ben.rubson@gmail.com
Wed Mar 28 16:36:00 GMT 2018


On 28 Mar 2018, Ben RUBSON wrote:

> Hi,
>
> I'm porting a FUSE FS to Cygwin, and I focus especially on readdir()  
> performance.
>
> What I see is that when readdir() occurs, each file of the directory is  
> as expected (at least I think) stated (getattr), but also opened (open).
> The first block of the file was even red, until I set the notexec mount  
> option.
>
> My question is, why is every file opened ?
> This is quite a performance killer, particularly for a FUSE FS.
>
> I thought this was to calculate the inode number, I then set the ihash  
> mount option, but it did not help.

I may be totally wrong, but perhaps the culprit is the following code path ?
https://github.com/mirror/newlib-cygwin/blob/master/winsup/cygwin/fhandler_disk_file.cc#L2262
Perhaps we simply don't need to open the file if (!hasgood_inode ()) ?

That would be a nice performance improvement !

Thank you again,

Ben



More information about the Cygwin-developers mailing list