diff options
Diffstat (limited to 'drivers/char/mem.c')
-rw-r--r-- | drivers/char/mem.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/char/mem.c b/drivers/char/mem.c index 089020e0ee5a..4f1813e04754 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c | |||
@@ -646,7 +646,8 @@ static inline size_t read_zero_pagealigned(char __user * buf, size_t size) | |||
646 | count = size; | 646 | count = size; |
647 | 647 | ||
648 | zap_page_range(vma, addr, count, NULL); | 648 | zap_page_range(vma, addr, count, NULL); |
649 | zeromap_page_range(vma, addr, count, PAGE_COPY); | 649 | if (zeromap_page_range(vma, addr, count, PAGE_COPY)) |
650 | break; | ||
650 | 651 | ||
651 | size -= count; | 652 | size -= count; |
652 | buf += count; | 653 | buf += count; |
@@ -713,11 +714,14 @@ out: | |||
713 | 714 | ||
714 | static int mmap_zero(struct file * file, struct vm_area_struct * vma) | 715 | static int mmap_zero(struct file * file, struct vm_area_struct * vma) |
715 | { | 716 | { |
717 | int err; | ||
718 | |||
716 | if (vma->vm_flags & VM_SHARED) | 719 | if (vma->vm_flags & VM_SHARED) |
717 | return shmem_zero_setup(vma); | 720 | return shmem_zero_setup(vma); |
718 | if (zeromap_page_range(vma, vma->vm_start, vma->vm_end - vma->vm_start, vma->vm_page_prot)) | 721 | err = zeromap_page_range(vma, vma->vm_start, |
719 | return -EAGAIN; | 722 | vma->vm_end - vma->vm_start, vma->vm_page_prot); |
720 | return 0; | 723 | BUG_ON(err == -EEXIST); |
724 | return err; | ||
721 | } | 725 | } |
722 | #else /* CONFIG_MMU */ | 726 | #else /* CONFIG_MMU */ |
723 | static ssize_t read_zero(struct file * file, char * buf, | 727 | static ssize_t read_zero(struct file * file, char * buf, |