]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Sun, 28 Jun 2020 22:14:14 +0000 (18:14 -0400)
committerSasha Levin <sashal@kernel.org>
Sun, 28 Jun 2020 22:14:14 +0000 (18:14 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/cifs-smb3-fix-data-inconsistent-when-punch-hole.patch [new file with mode: 0644]
queue-4.19/cifs-smb3-fix-data-inconsistent-when-zero-file-range.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/cifs-smb3-fix-data-inconsistent-when-punch-hole.patch b/queue-4.19/cifs-smb3-fix-data-inconsistent-when-punch-hole.patch
new file mode 100644 (file)
index 0000000..cf49cff
--- /dev/null
@@ -0,0 +1,57 @@
+From ace587e47b8e66f1dcf31c5a4cd213c53e93c76f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 23 Jun 2020 07:31:53 -0400
+Subject: cifs/smb3: Fix data inconsistent when punch hole
+
+From: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
+
+[ Upstream commit acc91c2d8de4ef46ed751c5f9df99ed9a109b100 ]
+
+When punch hole success, we also can read old data from file:
+  # strace -e trace=pread64,fallocate xfs_io -f -c "pread 20 40" \
+           -c "fpunch 20 40" -c"pread 20 40" file
+  pread64(3, " version 5.8.0-rc1+"..., 40, 20) = 40
+  fallocate(3, FALLOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE, 20, 40) = 0
+  pread64(3, " version 5.8.0-rc1+"..., 40, 20) = 40
+
+CIFS implements the fallocate(FALLOCATE_FL_PUNCH_HOLE) with send SMB
+ioctl(FSCTL_SET_ZERO_DATA) to server. It just set the range of the
+remote file to zero, but local page caches not updated, then the
+local page caches inconsistent with server.
+
+Also can be found by xfstests generic/316.
+
+So, we need to remove the page caches before send the SMB
+ioctl(FSCTL_SET_ZERO_DATA) to server.
+
+Fixes: 31742c5a33176 ("enable fallocate punch hole ("fallocate -p") for SMB3")
+Suggested-by: Pavel Shilovsky <pshilov@microsoft.com>
+Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
+Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
+Cc: stable@vger.kernel.org # v3.17
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/cifs/smb2ops.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
+index 6fc16329ceb45..0b830ac8a9e72 100644
+--- a/fs/cifs/smb2ops.c
++++ b/fs/cifs/smb2ops.c
+@@ -2248,6 +2248,12 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon,
+               return rc;
+       }
++      /*
++       * We implement the punch hole through ioctl, so we need remove the page
++       * caches first, otherwise the data may be inconsistent with the server.
++       */
++      truncate_pagecache_range(inode, offset, offset + len - 1);
++
+       cifs_dbg(FYI, "offset %lld len %lld", offset, len);
+       fsctl_buf.FileOffset = cpu_to_le64(offset);
+-- 
+2.25.1
+
diff --git a/queue-4.19/cifs-smb3-fix-data-inconsistent-when-zero-file-range.patch b/queue-4.19/cifs-smb3-fix-data-inconsistent-when-zero-file-range.patch
new file mode 100644 (file)
index 0000000..4b072cd
--- /dev/null
@@ -0,0 +1,49 @@
+From d460cdbd9602e3790016392a429b6f9b27dfb03f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 23 Jun 2020 07:31:54 -0400
+Subject: cifs/smb3: Fix data inconsistent when zero file range
+
+From: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
+
+[ Upstream commit 6b69040247e14b43419a520f841f2b3052833df9 ]
+
+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: 30175628bf7f5 ("[SMB3] Enable fallocate -z support for SMB3 mounts")
+Reported-by: Hulk Robot <hulkci@huawei.com>
+Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
+Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
+Cc: stable@vger.kernel.org # v3.17
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/cifs/smb2ops.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
+index 0b830ac8a9e72..2a523139a05fb 100644
+--- a/fs/cifs/smb2ops.c
++++ b/fs/cifs/smb2ops.c
+@@ -2180,6 +2180,12 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
+       inode = d_inode(cfile->dentry);
+       cifsi = CIFS_I(inode);
++      /*
++       * We zero the range through ioctl, so we need remove the page caches
++       * first, otherwise the data may be inconsistent with the server.
++       */
++      truncate_pagecache_range(inode, offset, offset + len - 1);
++
+       /* if file not oplocked can't be sure whether asking to extend size */
+       if (!CIFS_CACHE_READ(cifsi))
+               if (keep_size == false) {
+-- 
+2.25.1
+
index ace56feeac692618eae804e97ade72bcd80fe090..0172e316a1c68623e270282cb563bcf7898ede85 100644 (file)
@@ -54,3 +54,5 @@ xhci-fix-incorrect-ep_state_mask.patch
 xhci-fix-enumeration-issue-when-setting-max-packet-size-for-fs-devices.patch
 xhci-return-if-xhci-doesn-t-support-lpm.patch
 cdc-acm-add-disable_echo-quirk-for-microchip-smsc-chip.patch
+cifs-smb3-fix-data-inconsistent-when-punch-hole.patch
+cifs-smb3-fix-data-inconsistent-when-zero-file-range.patch