diff options
Diffstat (limited to 'kernel/futex.c')
-rw-r--r-- | kernel/futex.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/kernel/futex.c b/kernel/futex.c index 5c3f45d07c53..a12425051ee9 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
@@ -346,15 +346,20 @@ static int futex_handle_fault(unsigned long address, | |||
346 | vma = find_vma(mm, address); | 346 | vma = find_vma(mm, address); |
347 | if (vma && address >= vma->vm_start && | 347 | if (vma && address >= vma->vm_start && |
348 | (vma->vm_flags & VM_WRITE)) { | 348 | (vma->vm_flags & VM_WRITE)) { |
349 | switch (handle_mm_fault(mm, vma, address, 1)) { | 349 | int fault; |
350 | case VM_FAULT_MINOR: | 350 | fault = handle_mm_fault(mm, vma, address, 1); |
351 | ret = 0; | 351 | if (unlikely((fault & VM_FAULT_ERROR))) { |
352 | current->min_flt++; | 352 | #if 0 |
353 | break; | 353 | /* XXX: let's do this when we verify it is OK */ |
354 | case VM_FAULT_MAJOR: | 354 | if (ret & VM_FAULT_OOM) |
355 | ret = -ENOMEM; | ||
356 | #endif | ||
357 | } else { | ||
355 | ret = 0; | 358 | ret = 0; |
356 | current->maj_flt++; | 359 | if (fault & VM_FAULT_MAJOR) |
357 | break; | 360 | current->maj_flt++; |
361 | else | ||
362 | current->min_flt++; | ||
358 | } | 363 | } |
359 | } | 364 | } |
360 | if (!fshared) | 365 | if (!fshared) |