Skip to content

Commit 6b69040

Browse files
z00467499smfrench
authored andcommitted
cifs/smb3: Fix data inconsistent when zero file range
CIFS implements the fallocate(FALLOC_FL_ZERO_RANGE) with send SMB ioctl(FSCTL_SET_ZERO_DATA) to server. It just set the range of the remote file to zero, but local page cache not update, then the data inconsistent with server, which leads the xfstest generic/008 failed. So we need to remove the local page caches before send SMB ioctl(FSCTL_SET_ZERO_DATA) to server. After next read, it will re-cache it. Fixes: 3017562 ("[SMB3] Enable fallocate -z support for SMB3 mounts") Reported-by: Hulk Robot <[email protected]> Signed-off-by: Zhang Xiaoxu <[email protected]> Reviewed-by: Pavel Shilovsky <[email protected]> Cc: [email protected] # v3.17 Signed-off-by: Steve French <[email protected]>
1 parent 95a3d8f commit 6b69040

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

fs/cifs/smb2ops.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3188,6 +3188,11 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
31883188
trace_smb3_zero_enter(xid, cfile->fid.persistent_fid, tcon->tid,
31893189
ses->Suid, offset, len);
31903190

3191+
/*
3192+
* We zero the range through ioctl, so we need remove the page caches
3193+
* first, otherwise the data may be inconsistent with the server.
3194+
*/
3195+
truncate_pagecache_range(inode, offset, offset + len - 1);
31913196

31923197
/* if file not oplocked can't be sure whether asking to extend size */
31933198
if (!CIFS_CACHE_READ(cifsi))

0 commit comments

Comments
 (0)