[PATCH] ceph: truncate page cache when doing DIO in encrypted inodes

From: Luís Henriques
Date: Fri Apr 01 2022 - 07:38:05 EST


When doing DIO on an encrypted node, we need to truncate the page cache in
the range being written to, otherwise the cache will include invalid data.

Signed-off-by: Luís Henriques <lhenriques@xxxxxxx>
---
fs/ceph/file.c | 5 +++++
1 file changed, 5 insertions(+)

This patch should fix generic/647 fstest when run with test_dummy_encryption.

diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 5072570c2203..0f31c4d352a4 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -1895,6 +1895,11 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
req->r_inode = inode;
req->r_mtime = mtime;

+ if (IS_ENCRYPTED(inode) && (iocb->ki_flags & IOCB_DIRECT))
+ truncate_inode_pages_range(
+ inode->i_mapping, write_pos,
+ PAGE_ALIGN(write_pos + write_len) - 1);
+
/* Set up the assertion */
if (rmw) {
/*