From: nspmangalore@gmail.com
To: linux-cifs@vger.kernel.org, smfrench@gmail.com, pc@manguebit.com,
bharathsm@microsoft.com, tom@talpey.com
Cc: Shyam Prasad N <sprasad@microsoft.com>
Subject: [PATCH 3/7] cifs: smb2_close_getattr should also update i_size
Date: Sun, 21 Jan 2024 03:32:44 +0000 [thread overview]
Message-ID: <20240121033248.125282-3-sprasad@microsoft.com> (raw)
In-Reply-To: <20240121033248.125282-1-sprasad@microsoft.com>
From: Shyam Prasad N <sprasad@microsoft.com>
SMB2 CLOSE command with SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB
flag set is already used by the code for SMB3+.
smb2_close_getattr is the function that uses this to
update the inode attributes.
However, we were skipping the EndOfFile info that's returned
by the server. There is a small chance that the file size
may have been changed in the small window between the client
sending the close request (thereby giving up lease if it had)
to the point that the server returns the response.
This change uses the field to update the inode size.
Also, it is a valid case for a zero AllocationSize to be returned
by the server for the file. We were discarding such values, thereby
resulting in stale i_blocks value. Fixed that here too.
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
---
fs/smb/client/smb2ops.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c
index d9553c2556a2..e23577584ed6 100644
--- a/fs/smb/client/smb2ops.c
+++ b/fs/smb/client/smb2ops.c
@@ -1433,9 +1433,9 @@ smb2_close_getattr(const unsigned int xid, struct cifs_tcon *tcon,
* but instead 512 byte (2**9) size is required for
* calculating num blocks.
*/
- if (le64_to_cpu(file_inf.AllocationSize) > 4096)
- inode->i_blocks =
- (512 - 1 + le64_to_cpu(file_inf.AllocationSize)) >> 9;
+ inode->i_blocks = (512 - 1 + le64_to_cpu(file_inf.AllocationSize)) >> 9;
+
+ inode->i_size = le64_to_cpu(file_inf.EndOfFile);
/* End of file and Attributes should not have to be updated on close */
spin_unlock(&inode->i_lock);
--
2.34.1
next prev parent reply other threads:[~2024-01-21 3:33 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-21 3:32 [PATCH 1/7] cifs: handle servers that still advertise multichannel after disabling nspmangalore
2024-01-21 3:32 ` [PATCH 2/7] cifs: cifs_pick_channel should try selecting active channels nspmangalore
2024-01-21 3:32 ` nspmangalore [this message]
2024-01-23 7:22 ` [PATCH 3/7] cifs: smb2_close_getattr should also update i_size Shyam Prasad N
2024-01-23 7:47 ` Shyam Prasad N
2024-01-24 2:27 ` Steve French
2024-01-21 3:32 ` [PATCH 4/7] cifs: translate network errors on send to -ECONNABORTED nspmangalore
2024-01-21 3:32 ` [PATCH 5/7] cifs: helper function to check replayable error codes nspmangalore
2024-01-21 3:32 ` [PATCH 6/7] cifs: commands that are retried should have replay flag set nspmangalore
2024-01-21 3:32 ` [PATCH 7/7] cifs: set replay flag for retries of write command nspmangalore
2024-01-21 4:02 ` Steve French
2024-01-21 4:02 ` [PATCH 1/7] cifs: handle servers that still advertise multichannel after disabling Steve French
2024-01-23 4:39 ` Shyam Prasad N
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240121033248.125282-3-sprasad@microsoft.com \
--to=nspmangalore@gmail.com \
--cc=bharathsm@microsoft.com \
--cc=linux-cifs@vger.kernel.org \
--cc=pc@manguebit.com \
--cc=smfrench@gmail.com \
--cc=sprasad@microsoft.com \
--cc=tom@talpey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox