mm: fix fault vs invalidate race for linear mappings
[firefly-linux-kernel-4.4.55.git] / fs / gfs2 / ops_vm.c
index aa0dbd2aac1bd31bdd3cb4ebf8265fe9b874d47d..d5a98cbfebdc8356bfb39fadf7f02c806a0f18eb 100644 (file)
@@ -66,7 +66,7 @@ static int alloc_page_backing(struct gfs2_inode *ip, struct page *page)
        if (error)
                goto out_gunlock_q;
 
-       error = gfs2_trans_begin(sdp, al->al_rgd->rd_ri.ri_length +
+       error = gfs2_trans_begin(sdp, al->al_rgd->rd_length +
                                 ind_blocks + RES_DINODE +
                                 RES_STATFS + RES_QUOTA, 0);
        if (error)
@@ -138,6 +138,8 @@ static struct page *gfs2_sharewrite_nopage(struct vm_area_struct *area,
        if (alloc_required) {
                error = alloc_page_backing(ip, result);
                if (error) {
+                       if (area->vm_flags & VM_CAN_INVALIDATE)
+                               unlock_page(result);
                        page_cache_release(result);
                        result = NULL;
                        goto out;