struct dentry *dentry = file->f_path.dentry;
lower_file = wrapfs_lower_file(file);
- err = vfs_read(lower_file, buf, count, ppos);
+ err = kernel_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 = vfs_write(lower_file, buf, count, ppos);
+ err = kernel_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),
return err;
}
-static int wrapfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
- struct kstat *stat)
+static int wrapfs_getattr(const struct path *path, struct kstat *stat,
+ u32 request_mask, unsigned int flags)
{
int err;
+ struct dentry *dentry = path->dentry;
struct kstat lower_stat;
struct path lower_path;
wrapfs_get_lower_path(dentry, &lower_path);
- err = vfs_getattr(&lower_path, &lower_stat);
+ err = vfs_getattr(&lower_path, &lower_stat, request_mask, flags);
if (err)
goto out;
fsstack_copy_attr_all(d_inode(dentry),
inode->i_ino = lower_inode->i_ino;
wrapfs_set_lower_inode(inode, lower_inode);
- inode->i_version++;
+ atomic64_inc(&inode->i_version);
/* use different set of inode ops for symlinks & directories */
if (S_ISDIR(lower_inode->i_mode))
#include "wrapfs.h"
-static int wrapfs_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+static int wrapfs_fault(struct vm_fault *vmf)
{
int err;
+ struct vm_area_struct *vma = vmf->vma;
struct file *file, *lower_file;
const struct vm_operations_struct *lower_vm_ops;
struct vm_area_struct lower_vma;
* take an explicit file pointer.
*/
lower_vma.vm_file = lower_file;
- err = lower_vm_ops->fault(&lower_vma, vmf);
+ err = lower_vm_ops->fault(vmf);
return err;
}
-static int wrapfs_page_mkwrite(struct vm_area_struct *vma,
- struct vm_fault *vmf)
+static int wrapfs_page_mkwrite(struct vm_fault *vmf)
{
int err = 0;
+ struct vm_area_struct *vma = vmf->vma;
struct file *file, *lower_file;
const struct vm_operations_struct *lower_vm_ops;
struct vm_area_struct lower_vma;
* ->page_mkwrite to take an explicit file pointer.
*/
lower_vma.vm_file = lower_file;
- err = lower_vm_ops->page_mkwrite(&lower_vma, vmf);
+ err = lower_vm_ops->page_mkwrite(vmf);
out:
return err;
}
/* memset everything up to the inode to 0 */
memset(i, 0, offsetof(struct wrapfs_inode_info, vfs_inode));
- i->vfs_inode.i_version = 1;
+ atomic64_set(&i->vfs_inode.i_version, 1);
return &i->vfs_inode;
}
.remount_fs = wrapfs_remount_fs,
.evict_inode = wrapfs_evict_inode,
.umount_begin = wrapfs_umount_begin,
- .show_options = generic_show_options,
.alloc_inode = wrapfs_alloc_inode,
.destroy_inode = wrapfs_destroy_inode,
.drop_inode = generic_delete_inode,