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)
{
return ret;
}
+EXPORT_SYMBOL(vfs_write);
static inline loff_t file_pos_read(struct file *file)
{
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),
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),
* 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;
}
* ->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;
}