diff options
author | Paulo Alcantara (SUSE) <pc@cjr.nz> | 2019-12-18 18:11:37 -0300 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2019-12-23 09:04:44 -0600 |
commit | 046aca3c25fd28da591f59a2dc1a01848e81e0b2 (patch) | |
tree | 88c92721b67434a5ae982956cb5f300a6bcd8297 /fs/cifs/cifsglob.h | |
parent | 7935799e041ae10d380d04ea23868240f082bd11 (diff) | |
download | lwn-046aca3c25fd28da591f59a2dc1a01848e81e0b2.tar.gz lwn-046aca3c25fd28da591f59a2dc1a01848e81e0b2.zip |
cifs: Optimize readdir on reparse points
When listing a directory with thounsands of files and most of them are
reparse points, we simply marked all those dentries for revalidation
and then sending additional (compounded) create/getinfo/close requests
for each of them.
Instead, upon receiving a response from an SMB2_QUERY_DIRECTORY
(FileIdFullDirectoryInformation) command, the directory entries that
have a file attribute of FILE_ATTRIBUTE_REPARSE_POINT will contain an
EaSize field with a reparse tag in it, so we parse it and mark the
dentry for revalidation only if it is a DFS or a symlink.
Signed-off-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs/cifs/cifsglob.h')
-rw-r--r-- | fs/cifs/cifsglob.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index ce9bac756c2a..40705e862451 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h @@ -1693,6 +1693,7 @@ struct cifs_fattr { struct timespec64 cf_atime; struct timespec64 cf_mtime; struct timespec64 cf_ctime; + u32 cf_cifstag; }; static inline void free_dfs_info_param(struct dfs_info3_param *param) |