ceph: don't use special DIO path for encrypted inodes
authorJeff Layton <jlayton@kernel.org>
Thu, 25 Aug 2022 13:31:19 +0000 (09:31 -0400)
committerIlya Dryomov <idryomov@gmail.com>
Thu, 24 Aug 2023 09:24:36 +0000 (11:24 +0200)
Eventually I want to merge the synchronous and direct read codepaths,
possibly via new netfs infrastructure. For now, the direct path is not
crypto-enabled, so use the sync read/write paths instead.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Xiubo Li <xiubli@redhat.com>
Reviewed-and-tested-by: Luís Henriques <lhenriques@suse.de>
Reviewed-by: Milind Changire <mchangir@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/file.c

index 24ee84f257fb3af333cc8c5783c69b67912b3b55..f4c3da5b38fe82d4f72bfb50f05e9c85fafd1e3f 100644 (file)
@@ -1738,7 +1738,9 @@ again:
                     ceph_cap_string(got));
 
                if (!ceph_has_inline_data(ci)) {
-                       if (!retry_op && (iocb->ki_flags & IOCB_DIRECT)) {
+                       if (!retry_op &&
+                           (iocb->ki_flags & IOCB_DIRECT) &&
+                           !IS_ENCRYPTED(inode)) {
                                ret = ceph_direct_read_write(iocb, to,
                                                             NULL, NULL);
                                if (ret >= 0 && ret < len)
@@ -2024,7 +2026,7 @@ retry_snap:
 
                /* we might need to revert back to that point */
                data = *from;
-               if (iocb->ki_flags & IOCB_DIRECT)
+               if ((iocb->ki_flags & IOCB_DIRECT) && !IS_ENCRYPTED(inode))
                        written = ceph_direct_read_write(iocb, &data, snapc,
                                                         &prealloc_cf);
                else