diff options
author | 2023-11-25 23:55:05 -0300 | |
---|---|---|
committer | 2024-01-07 15:46:05 -0600 | |
commit | 67ec9949b0dfe78c99e110dd975eb7dc5645630c (patch) | |
tree | 5953ae20533a50ad3990bdcea0a7f6fd79b7208b /fs/smb/client/inode.c | |
parent | smb: client: allow creating special files via reparse points (diff) | |
download | wireguard-linux-67ec9949b0dfe78c99e110dd975eb7dc5645630c.tar.xz wireguard-linux-67ec9949b0dfe78c99e110dd975eb7dc5645630c.zip |
smb: client: optimise reparse point querying
Reduce number of roundtrips to server when querying reparse points in
->query_path_info() by sending a single compound request of
create+get_reparse+get_info+close.
Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs/smb/client/inode.c')
-rw-r--r-- | fs/smb/client/inode.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c index b73bf8a93443..8d6282bbc7ed 100644 --- a/fs/smb/client/inode.c +++ b/fs/smb/client/inode.c @@ -1078,6 +1078,9 @@ static int reparse_info_to_fattr(struct cifs_open_info_data *data, &rsp_iov, &rsp_buftype); if (!rc) iov = &rsp_iov; + } else if (data->reparse.io.buftype != CIFS_NO_BUFFER && + data->reparse.io.iov.iov_base) { + iov = &data->reparse.io.iov; } rc = -EOPNOTSUPP; @@ -1097,7 +1100,7 @@ static int reparse_info_to_fattr(struct cifs_open_info_data *data, /* Check for cached reparse point data */ if (data->symlink_target || data->reparse.buf) { rc = 0; - } else if (server->ops->parse_reparse_point) { + } else if (iov && server->ops->parse_reparse_point) { rc = server->ops->parse_reparse_point(cifs_sb, iov, data); } |