Whamcloud - gitweb
LU-12043 llite: fix to submit complete read block with ra disabled
[fs/lustre-release.git] / lustre / llite / vvp_page.c
index 7fb019c..884db91 100644 (file)
@@ -89,6 +89,8 @@ static int vvp_page_own(const struct lu_env *env,
        struct vvp_page *vpg    = cl2vvp_page(slice);
        struct page     *vmpage = vpg->vpg_page;
 
+       ENTRY;
+
        LASSERT(vmpage != NULL);
        if (nonblock) {
                if (!trylock_page(vmpage))
@@ -105,7 +107,7 @@ static int vvp_page_own(const struct lu_env *env,
        lock_page(vmpage);
        wait_on_page_writeback(vmpage);
 
-       return 0;
+       RETURN(0);
 }
 
 static void vvp_page_assume(const struct lu_env *env,
@@ -134,10 +136,14 @@ static void vvp_page_disown(const struct lu_env *env,
 {
        struct page *vmpage = cl2vm_page(slice);
 
+       ENTRY;
+
        LASSERT(vmpage != NULL);
        LASSERT(PageLocked(vmpage));
 
        unlock_page(cl2vm_page(slice));
+
+       EXIT;
 }
 
 static void vvp_page_discard(const struct lu_env *env,
@@ -150,7 +156,7 @@ static void vvp_page_discard(const struct lu_env *env,
        LASSERT(vmpage != NULL);
        LASSERT(PageLocked(vmpage));
 
-       if (vpg->vpg_defer_uptodate && !vpg->vpg_ra_used)
+       if (vpg->vpg_defer_uptodate && !vpg->vpg_ra_used && vmpage->mapping)
                ll_ra_stats_inc(vmpage->mapping->host, RA_STAT_DISCARDED);
 
        generic_error_remove_page(vmpage->mapping, vmpage);
@@ -160,14 +166,12 @@ static void vvp_page_delete(const struct lu_env *env,
                            const struct cl_page_slice *slice)
 {
        struct page      *vmpage = cl2vm_page(slice);
-       struct inode     *inode  = vmpage->mapping->host;
-       struct cl_object *obj    = slice->cpl_obj;
        struct cl_page   *page   = slice->cpl_page;
        int refc;
 
        LASSERT(PageLocked(vmpage));
        LASSERT((struct cl_page *)vmpage->private == page);
-       LASSERT(inode == vvp_object_inode(obj));
+
 
        /* Drop the reference count held in vvp_page_init */
        refc = atomic_dec_return(&page->cp_ref);
@@ -471,12 +475,12 @@ int vvp_page_init(const struct lu_env *env, struct cl_object *obj,
                atomic_inc(&page->cp_ref);
                SetPagePrivate(vmpage);
                vmpage->private = (unsigned long)page;
-               cl_page_slice_add(page, &vpg->vpg_cl, obj, index,
+               cl_page_slice_add(page, &vpg->vpg_cl, obj,
                                &vvp_page_ops);
        } else {
                struct vvp_object *clobj = cl2vvp(obj);
 
-               cl_page_slice_add(page, &vpg->vpg_cl, obj, index,
+               cl_page_slice_add(page, &vpg->vpg_cl, obj,
                                &vvp_transient_page_ops);
                atomic_inc(&clobj->vob_transient_pages);
        }