diff options
Diffstat (limited to 'fs/gfs2/ops_vm.c')
-rw-r--r-- | fs/gfs2/ops_vm.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/gfs2/ops_vm.c b/fs/gfs2/ops_vm.c index dc287d2e3a66..927d739d4685 100644 --- a/fs/gfs2/ops_vm.c +++ b/fs/gfs2/ops_vm.c | |||
@@ -112,7 +112,7 @@ static int gfs2_sharewrite_fault(struct vm_area_struct *vma, | |||
112 | struct gfs2_holder i_gh; | 112 | struct gfs2_holder i_gh; |
113 | int alloc_required; | 113 | int alloc_required; |
114 | int error; | 114 | int error; |
115 | int ret = VM_FAULT_MINOR; | 115 | int ret = 0; |
116 | 116 | ||
117 | error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh); | 117 | error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh); |
118 | if (error) | 118 | if (error) |
@@ -132,14 +132,19 @@ static int gfs2_sharewrite_fault(struct vm_area_struct *vma, | |||
132 | set_bit(GFF_EXLOCK, &gf->f_flags); | 132 | set_bit(GFF_EXLOCK, &gf->f_flags); |
133 | ret = filemap_fault(vma, vmf); | 133 | ret = filemap_fault(vma, vmf); |
134 | clear_bit(GFF_EXLOCK, &gf->f_flags); | 134 | clear_bit(GFF_EXLOCK, &gf->f_flags); |
135 | if (ret & (VM_FAULT_ERROR | FAULT_RET_NOPAGE)) | 135 | if (ret & VM_FAULT_ERROR) |
136 | goto out_unlock; | 136 | goto out_unlock; |
137 | 137 | ||
138 | if (alloc_required) { | 138 | if (alloc_required) { |
139 | /* XXX: do we need to drop page lock around alloc_page_backing?*/ | 139 | /* XXX: do we need to drop page lock around alloc_page_backing?*/ |
140 | error = alloc_page_backing(ip, vmf->page); | 140 | error = alloc_page_backing(ip, vmf->page); |
141 | if (error) { | 141 | if (error) { |
142 | if (ret & FAULT_RET_LOCKED) | 142 | /* |
143 | * VM_FAULT_LOCKED should always be the case for | ||
144 | * filemap_fault, but it may not be in a future | ||
145 | * implementation. | ||
146 | */ | ||
147 | if (ret & VM_FAULT_LOCKED) | ||
143 | unlock_page(vmf->page); | 148 | unlock_page(vmf->page); |
144 | page_cache_release(vmf->page); | 149 | page_cache_release(vmf->page); |
145 | ret = VM_FAULT_OOM; | 150 | ret = VM_FAULT_OOM; |