diff options
author | Steve French <stfrench@microsoft.com> | 2019-12-02 21:46:54 -0600 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2019-12-03 15:48:02 -0600 |
commit | 43f8a6a74ee2442b9410ed297f5d4c77e7cb5ace (patch) | |
tree | 0eabdc6fb77016e544ea32569722114e67b8a6b9 /fs/cifs/file.c | |
parent | 9e8fae2597405ab1deac8909928eb8e99876f639 (diff) | |
download | linux-43f8a6a74ee2442b9410ed297f5d4c77e7cb5ace.tar.gz linux-43f8a6a74ee2442b9410ed297f5d4c77e7cb5ace.tar.bz2 linux-43f8a6a74ee2442b9410ed297f5d4c77e7cb5ace.zip |
smb3: query attributes on file close
Since timestamps on files on most servers can be updated at
close, and since timestamps on our dentries default to one
second we can have stale timestamps in some common cases
(e.g. open, write, close, stat, wait one second, stat - will
show different mtime for the first and second stat).
The SMB2/SMB3 protocol allows querying timestamps at close
so add the code to request timestamp and attr information
(which is cheap for the server to provide) to be returned
when a file is closed (it is not needed for the many
paths that call SMB2_close that are from compounded
query infos and close nor is it needed for some of
the cases where a directory close immediately follows a
directory open.
Signed-off-by: Steve French <stfrench@microsoft.com>
Acked-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Diffstat (limited to 'fs/cifs/file.c')
-rw-r--r-- | fs/cifs/file.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c index 9ae41042fa3d..043288b5c728 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -496,7 +496,9 @@ void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, unsigned int xid; xid = get_xid(); - if (server->ops->close) + if (server->ops->close_getattr) + server->ops->close_getattr(xid, tcon, cifs_file); + else if (server->ops->close) server->ops->close(xid, tcon, &cifs_file->fid); _free_xid(xid); } |