Whamcloud - gitweb
LU-3963 libcfs: remove last cfs wrappers for cpu node handling
[fs/lustre-release.git] / lustre / llite / llite_mmap.c
index 77ec4d5..817a33a 100644 (file)
 #include "llite_internal.h"
 #include <linux/lustre_compat25.h>
 
-struct page *ll_nopage(struct vm_area_struct *vma, unsigned long address,
-                       int *type);
-
-static struct vm_operations_struct ll_file_vm_ops;
+static const struct vm_operations_struct ll_file_vm_ops;
 
 void policy_from_vma(ldlm_policy_data_t *policy,
                             struct vm_area_struct *vma, unsigned long addr,
@@ -102,10 +99,10 @@ struct vm_area_struct *our_vma(struct mm_struct *mm, unsigned long addr,
  * \retval EINVAL if env can't allocated
  * \return other error codes from cl_io_init.
  */
-struct cl_io *ll_fault_io_init(struct vm_area_struct *vma,
-                              struct lu_env **env_ret,
-                              struct cl_env_nest *nest,
-                              pgoff_t index, unsigned long *ra_flags)
+static struct cl_io *
+ll_fault_io_init(struct vm_area_struct *vma, struct lu_env **env_ret,
+                struct cl_env_nest *nest, pgoff_t index,
+                unsigned long *ra_flags)
 {
        struct file            *file = vma->vm_file;
        struct inode           *inode = file->f_dentry->d_inode;
@@ -320,10 +317,21 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
                vio->u.fault.ft_vma       = vma;
                vio->u.fault.ft_vmpage    = NULL;
                vio->u.fault.fault.ft_vmf = vmf;
+               vio->u.fault.fault.ft_flags = 0;
+               vio->u.fault.fault.ft_flags_valid = 0;
+
+               /* May call ll_readpage() */
+               ll_cl_add(vma->vm_file, env, io);
 
                result = cl_io_loop(env, io);
 
-               fault_ret = vio->u.fault.fault.ft_flags;
+               ll_cl_remove(vma->vm_file, env);
+
+               /* ft_flags are only valid if we reached
+                * the call to filemap_fault */
+               if (vio->u.fault.fault.ft_flags_valid)
+                       fault_ret = vio->u.fault.fault.ft_flags;
+
                vmpage = vio->u.fault.ft_vmpage;
                if (result != 0 && vmpage != NULL) {
                        page_cache_release(vmpage);
@@ -432,14 +440,14 @@ static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
  */
 static void ll_vm_open(struct vm_area_struct * vma)
 {
-        struct inode *inode    = vma->vm_file->f_dentry->d_inode;
-        struct ccc_object *vob = cl_inode2ccc(inode);
+       struct inode *inode    = vma->vm_file->f_dentry->d_inode;
+       struct ccc_object *vob = cl_inode2ccc(inode);
 
-        ENTRY;
-        LASSERT(vma->vm_file);
-        LASSERT(cfs_atomic_read(&vob->cob_mmap_cnt) >= 0);
-        cfs_atomic_inc(&vob->cob_mmap_cnt);
-        EXIT;
+       ENTRY;
+       LASSERT(vma->vm_file);
+       LASSERT(atomic_read(&vob->cob_mmap_cnt) >= 0);
+       atomic_inc(&vob->cob_mmap_cnt);
+       EXIT;
 }
 
 /**
@@ -447,22 +455,14 @@ static void ll_vm_open(struct vm_area_struct * vma)
  */
 static void ll_vm_close(struct vm_area_struct *vma)
 {
-        struct inode      *inode = vma->vm_file->f_dentry->d_inode;
-        struct ccc_object *vob   = cl_inode2ccc(inode);
-
-        ENTRY;
-        LASSERT(vma->vm_file);
-        cfs_atomic_dec(&vob->cob_mmap_cnt);
-        LASSERT(cfs_atomic_read(&vob->cob_mmap_cnt) >= 0);
-        EXIT;
-}
-
-/* return the user space pointer that maps to a file offset via a vma */
-static inline unsigned long file_to_user(struct vm_area_struct *vma, __u64 byte)
-{
-       return vma->vm_start +
-              (byte - ((__u64)vma->vm_pgoff << PAGE_CACHE_SHIFT));
+       struct inode      *inode = vma->vm_file->f_dentry->d_inode;
+       struct ccc_object *vob   = cl_inode2ccc(inode);
 
+       ENTRY;
+       LASSERT(vma->vm_file);
+       atomic_dec(&vob->cob_mmap_cnt);
+       LASSERT(atomic_read(&vob->cob_mmap_cnt) >= 0);
+       EXIT;
 }
 
 /* XXX put nice comment here.  talk about __free_pte -> dirty pages and
@@ -482,7 +482,7 @@ int ll_teardown_mmaps(struct address_space *mapping, __u64 first, __u64 last)
         RETURN(rc);
 }
 
-static struct vm_operations_struct ll_file_vm_ops = {
+static const struct vm_operations_struct ll_file_vm_ops = {
        .fault                  = ll_fault,
        .page_mkwrite           = ll_page_mkwrite,
        .open                   = ll_vm_open,