wrapfs: port to new kernel
authorErez Zadok <ezk@cs.sunysb.edu>
Mon, 16 Dec 2019 03:14:21 +0000 (22:14 -0500)
committerErez Zadok <ezk@cs.sunysb.edu>
Mon, 16 Dec 2019 03:14:21 +0000 (22:14 -0500)
fs/read_write.c
fs/wrapfs/file.c
fs/wrapfs/mmap.c

index 58f30537c47a0a9d04cdba4abbd78188379ae463..e1216aef8df9328dbd188366a08d5cd8359d2b55 100644 (file)
@@ -459,6 +459,7 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
 
        return ret;
 }
+EXPORT_SYMBOL(vfs_read);
 
 static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
 {
@@ -557,6 +558,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
 
        return ret;
 }
+EXPORT_SYMBOL(vfs_write);
 
 static inline loff_t file_pos_read(struct file *file)
 {
index 6204a3f424fa509c7791109b190011d615138bcd..ef3b6d335650a01260586c46f85149e7334a7b6a 100644 (file)
@@ -19,7 +19,7 @@ static ssize_t wrapfs_read(struct file *file, char __user *buf,
        struct dentry *dentry = file->f_path.dentry;
 
        lower_file = wrapfs_lower_file(file);
-       err = kernel_read(lower_file, buf, count, ppos);
+       err = vfs_read(lower_file, buf, count, ppos);
        /* update our inode atime upon a successful lower read */
        if (err >= 0)
                fsstack_copy_attr_atime(d_inode(dentry),
@@ -37,7 +37,7 @@ static ssize_t wrapfs_write(struct file *file, const char __user *buf,
        struct dentry *dentry = file->f_path.dentry;
 
        lower_file = wrapfs_lower_file(file);
-       err = kernel_write(lower_file, buf, count, ppos);
+       err = vfs_write(lower_file, buf, count, ppos);
        /* update our inode times+sizes upon a successful lower write */
        if (err >= 0) {
                fsstack_copy_inode_size(d_inode(dentry),
index 946b98aeabce00d3037ac99f338cd63cb98c5d55..5e94bd473807b75f49ec18393de7cb09c7b2adde 100644 (file)
@@ -36,7 +36,9 @@ static int wrapfs_fault(struct vm_fault *vmf)
         * take an explicit file pointer.
         */
        lower_vma.vm_file = lower_file;
+       vmf->vma = &lower_vma; /* override vma temporarily */
        err = lower_vm_ops->fault(vmf);
+       vmf->vma = vma; /* restore vma*/
        return err;
 }
 
@@ -68,7 +70,9 @@ static int wrapfs_page_mkwrite(struct vm_fault *vmf)
         * ->page_mkwrite to take an explicit file pointer.
         */
        lower_vma.vm_file = lower_file;
+       vmf->vma = &lower_vma; /* override vma temporarily */
        err = lower_vm_ops->page_mkwrite(vmf);
+       vmf->vma = vma; /* restore vma */
 out:
        return err;
 }