[PATCH 3/3] linux: Optimize realpath stack usage
Paul Eggert
eggert@cs.ucla.edu
Mon Aug 10 21:25:53 GMT 2020
On 8/10/20 1:48 PM, Adhemerval Zanella wrote:
> Regarding syscalls usage, for a sucessful path without symlinks it
> trades 2 syscalls (getcwd/lstat) for 5 (openat, readlink, fstat, stat,
> and close).
Thanks for looking into this.
There's no need for the new __resolve_path function to call __lstat64. It does
that only to determine whether the file is a symlink or a directory, and it can
do the former with __readlink (which it's gonna do already) and the latter by
going into the next iteration and seeing whether it gets NOTDIR. Avoiding
__lstat64 means we don't have to worry about irrelevant EOVERFLOW hassles.
In the Linux __realpath_system, the code should be prepared for the /proc
syscall to fail because /proc is not mounted. It can fall back on __resolve_path
in that case. The code should be prepared for the fstat64 to fail due to
EOVERFLOW. And I'm not quite getting why the code is comparing fstat64's result
to stat64's result -- perhaps explain this in a comment and how EOVERFLOW is
dealt with?
More information about the Libc-alpha
mailing list