1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-13 13:18:06 +03:00

Optimization on POSIX platforms that have fstatat.

Tests show significant speedup in directory listings
by using fstatat instead of a full pathname walk.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>

Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Mon Jun 10 20:14:12 CEST 2013 on sn-devel-104
This commit is contained in:
Jeremy Allison 2013-05-24 10:33:38 -07:00 committed by Andreas Schneider
parent da2cf8a947
commit 2a65e8befe

View File

@ -376,11 +376,30 @@ static struct dirent *vfswrap_readdir(vfs_handle_struct *handle,
START_PROFILE(syscall_readdir);
result = readdir(dirp);
/* Default Posix readdir() does not give us stat info.
* Set to invalid to indicate we didn't return this info. */
if (sbuf)
SET_STAT_INVALID(*sbuf);
END_PROFILE(syscall_readdir);
if (sbuf) {
/* Default Posix readdir() does not give us stat info.
* Set to invalid to indicate we didn't return this info. */
SET_STAT_INVALID(*sbuf);
#if defined(HAVE_DIRFD) && defined(HAVE_FSTATAT)
if (result != NULL) {
/* See if we can efficiently return this. */
struct stat st;
int flags = (lp_posix_pathnames() ?
AT_SYMLINK_NOFOLLOW : 0);
int ret = fstatat(dirfd(dirp),
result->d_name,
&st,
flags);
if (ret == 0) {
init_stat_ex_from_stat(sbuf,
&st,
lp_fake_dir_create_times(
SNUM(handle->conn)));
}
}
#endif
}
return result;
}