ANDROID: sdcardfs: support direct-IO (DIO) operations
authorDaniel Rosenberg <drosen@google.com>
Fri, 24 Feb 2017 23:49:45 +0000 (15:49 -0800)
committerStricted <info@stricted.net>
Thu, 11 Oct 2018 16:03:20 +0000 (18:03 +0200)
This comes from the wrapfs patch
2e346c83b26e Wrapfs: support direct-IO (DIO) operations

Signed-off-by: Li Mengyang <li.mengyang@stonybrook.edu>
Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
Signed-off-by: Daniel Rosenberg <drosen@google.com>
Bug: 34133558
Change-Id: I3fd779c510ab70d56b1d918f99c20421b524cdc4

fs/sdcardfs/mmap.c
fs/sdcardfs/sdcardfs.h

index c807d7f18f8baeed1c80045a915d74df60c9b360..5241d414b296249f1eebc2448a8312221beb9beb 100644 (file)
@@ -53,27 +53,14 @@ static ssize_t sdcardfs_direct_IO(int rw, struct kiocb *iocb,
                              unsigned long nr_segs)
 {
        /*
-     * This function returns zero on purpose in order to support direct IO.
-        * __dentry_open checks a_ops->direct_IO and returns EINVAL if it is null.
-     *
-        * However, this function won't be called by certain file operations
-     * including generic fs functions.  * reads and writes are delivered to
-     * the lower file systems and the direct IOs will be handled by them.
-        *
-     * NOTE: exceptionally, on the recent kernels (since Linux 3.8.x),
-     * swap_writepage invokes this function directly.
+        * This function should never be called directly.  We need it
+        * to exist, to get past a check in open_check_o_direct(),
+        * which is called from do_last().
         */
-       printk(KERN_INFO "%s, operation is not supported\n", __func__);
-       return 0;
+       return -EINVAL;
 }
 
-/*
- * XXX: the default address_space_ops for sdcardfs is empty.  We cannot set
- * our inode->i_mapping->a_ops to NULL because too many code paths expect
- * the a_ops vector to be non-NULL.
- */
 const struct address_space_operations sdcardfs_aops = {
-       /* empty on purpose */
        .direct_IO      = sdcardfs_direct_IO,
 };
 
index b47bc0b933156c87def35dd68c95a9d889a0b362..44509c67b4ec89dc3cee6b3528b56ee682aba71b 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/dcache.h>
 #include <linux/file.h>
 #include <linux/fs.h>
+#include <linux/aio.h>
 #include <linux/mm.h>
 #include <linux/mount.h>
 #include <linux/namei.h>