| From fd09b7d3b352105f08b8e02f7afecf7e816380ef Mon Sep 17 00:00:00 2001 |
| From: Steve French <stfrench@microsoft.com> |
| Date: Thu, 2 Aug 2018 20:28:18 -0500 |
| Subject: smb3: Do not send SMB3 SET_INFO if nothing changed |
| |
| From: Steve French <stfrench@microsoft.com> |
| |
| commit fd09b7d3b352105f08b8e02f7afecf7e816380ef upstream. |
| |
| An earlier commit had a typo which prevented the |
| optimization from working: |
| |
| commit 18dd8e1a65dd ("Do not send SMB3 SET_INFO request if nothing is changing") |
| |
| Thank you to Metze for noticing this. Also clear a |
| reserved field in the FILE_BASIC_INFO struct we send |
| that should be zero (all the other fields in that |
| struct were set or cleared explicitly already in |
| cifs_set_file_info). |
| |
| Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com> |
| CC: Stable <stable@vger.kernel.org> # 4.9.x+ |
| Reported-by: Stefan Metzmacher <metze@samba.org> |
| Signed-off-by: Steve French <stfrench@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/cifs/inode.c | 2 ++ |
| fs/cifs/smb2inode.c | 2 +- |
| 2 files changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/fs/cifs/inode.c |
| +++ b/fs/cifs/inode.c |
| @@ -1122,6 +1122,8 @@ cifs_set_file_info(struct inode *inode, |
| if (!server->ops->set_file_info) |
| return -ENOSYS; |
| |
| + info_buf.Pad = 0; |
| + |
| if (attrs->ia_valid & ATTR_ATIME) { |
| set_time = true; |
| info_buf.LastAccessTime = |
| --- a/fs/cifs/smb2inode.c |
| +++ b/fs/cifs/smb2inode.c |
| @@ -267,7 +267,7 @@ smb2_set_file_info(struct inode *inode, |
| int rc; |
| |
| if ((buf->CreationTime == 0) && (buf->LastAccessTime == 0) && |
| - (buf->LastWriteTime == 0) && (buf->ChangeTime) && |
| + (buf->LastWriteTime == 0) && (buf->ChangeTime == 0) && |
| (buf->Attributes == 0)) |
| return 0; /* would be a no op, no sense sending this */ |
| |