linux-cifs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Updated patch for the corruption with cache=none and mmap
@ 2022-09-19 21:37 Ronnie Sahlberg
  2022-09-19 21:37 ` [PATCH] cifs: destage dirty pages before re-reading them for cache=none Ronnie Sahlberg
  2022-09-20 23:46 ` Updated patch for the corruption with cache=none and mmap ronnie sahlberg
  0 siblings, 2 replies; 13+ messages in thread
From: Ronnie Sahlberg @ 2022-09-19 21:37 UTC (permalink / raw)
  To: linux-cifs; +Cc: Steve French

Steve, Enzo,

Updated patch that removes the redundant conditionals that Enzo pointed out
on the list.



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [PATCH] cifs: destage dirty pages before re-reading them for cache=none
@ 2022-09-20  4:32 Ronnie Sahlberg
  2022-09-20  4:44 ` Steve French
  2022-09-20 19:08 ` Tom Talpey
  0 siblings, 2 replies; 13+ messages in thread
From: Ronnie Sahlberg @ 2022-09-20  4:32 UTC (permalink / raw)
  To: linux-cifs
  Cc: Steve French, Ronnie Sahlberg, stable, Paulo Alcantara, Enzo Matsumiya

This is the opposite case of kernel bugzilla 216301.
If we mmap a file using cache=none and then proceed to update the mmapped
area these updates are not reflected in a later pread() of that part of the
file.
To fix this we must first destage any dirty pages in the range before
we allow the pread() to proceed.

Cc: stable@vger.kernel.org
Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
Reviewed-by: Enzo Matsumiya <ematsumiya@suse.de>
Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
---
 fs/cifs/file.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 6f38b134a346..7d756721e1a6 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -4271,6 +4271,15 @@ static ssize_t __cifs_readv(
 		len = ctx->len;
 	}
 
+	if (direct) {
+		rc = filemap_write_and_wait_range(file->f_inode->i_mapping,
+						  offset, offset + len - 1);
+		if (rc) {
+			kref_put(&ctx->refcount, cifs_aio_ctx_release);
+			return -EAGAIN;
+		}
+	}
+
 	/* grab a lock here due to read response handlers can access ctx */
 	mutex_lock(&ctx->aio_mutex);
 
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread
* Improved fix for reading stale data when cache=none
@ 2022-09-19  5:39 Ronnie Sahlberg
  2022-09-19  5:39 ` [PATCH] cifs: destage dirty pages before re-reading them for cache=none Ronnie Sahlberg
  0 siblings, 1 reply; 13+ messages in thread
From: Ronnie Sahlberg @ 2022-09-19  5:39 UTC (permalink / raw)
  To: linux-cifs; +Cc: Steve French

Steve, List

Please find a better patch to fix the data corruption issue I posted earlier
for when doing direct reads to an mmaped file after the mmaped area has changed.

The main difference is that I now destage and invalidate only the range that
is affected by the pread() and not the whole file so impact on performance should be reduced.
(that said, with cache=none there is probably no expectation of high performance in the first place )





^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2022-09-20 23:46 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-19 21:37 Updated patch for the corruption with cache=none and mmap Ronnie Sahlberg
2022-09-19 21:37 ` [PATCH] cifs: destage dirty pages before re-reading them for cache=none Ronnie Sahlberg
2022-09-20  1:43   ` Tom Talpey
2022-09-20  4:08     ` Leif Sahlberg
2022-09-20  4:10       ` Steve French
2022-09-20 23:46 ` Updated patch for the corruption with cache=none and mmap ronnie sahlberg
  -- strict thread matches above, loose matches on Subject: below --
2022-09-20  4:32 [PATCH] cifs: destage dirty pages before re-reading them for cache=none Ronnie Sahlberg
2022-09-20  4:44 ` Steve French
2022-09-20 19:08 ` Tom Talpey
2022-09-19  5:39 Improved fix for reading stale data when cache=none Ronnie Sahlberg
2022-09-19  5:39 ` [PATCH] cifs: destage dirty pages before re-reading them for cache=none Ronnie Sahlberg
2022-09-19 14:46   ` Paulo Alcantara
2022-09-19 14:54   ` Enzo Matsumiya
2022-09-19 21:21     ` ronnie sahlberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).