|
@@ -310,10 +310,16 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|
vio->u.fault.ft_vma = vma;
|
|
vio->u.fault.ft_vma = vma;
|
|
vio->u.fault.ft_vmpage = NULL;
|
|
vio->u.fault.ft_vmpage = NULL;
|
|
vio->u.fault.fault.ft_vmf = vmf;
|
|
vio->u.fault.fault.ft_vmf = vmf;
|
|
|
|
+ vio->u.fault.fault.ft_flags = 0;
|
|
|
|
+ vio->u.fault.fault.ft_flags_valid = 0;
|
|
|
|
|
|
result = cl_io_loop(env, io);
|
|
result = cl_io_loop(env, io);
|
|
|
|
|
|
- fault_ret = vio->u.fault.fault.ft_flags;
|
|
|
|
|
|
+ /* 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;
|
|
vmpage = vio->u.fault.ft_vmpage;
|
|
if (result != 0 && vmpage != NULL) {
|
|
if (result != 0 && vmpage != NULL) {
|
|
page_cache_release(vmpage);
|
|
page_cache_release(vmpage);
|