aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-05-27 18:57:31 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-05-27 18:57:31 -0400
commit5d22fc25d4fc8096d2d7df27ea1893d4e055e764 (patch)
tree464a86dc3d004dd334e37a8fe7e7b42f8511581e /mm
parent287980e49ffc0f6d911601e7e352a812ed27768e (diff)
mm: remove more IS_ERR_VALUE abuses
The do_brk() and vm_brk() return value was "unsigned long" and returned the starting address on success, and an error value on failure. The reasons are entirely historical, and go back to it basically behaving like the mmap() interface does. However, nobody actually wanted that interface, and it causes totally pointless IS_ERR_VALUE() confusion. What every single caller actually wants is just the simpler integer return of zero for success and negative error number on failure. So just convert to that much clearer and more common calling convention, and get rid of all the IS_ERR_VALUE() uses wrt vm_brk(). Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/mmap.c16
-rw-r--r--mm/nommu.c2
2 files changed, 9 insertions, 9 deletions
diff --git a/mm/mmap.c b/mm/mmap.c
index d3d9a94ca031..de2c1769cc68 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -168,7 +168,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
168 return next; 168 return next;
169} 169}
170 170
171static unsigned long do_brk(unsigned long addr, unsigned long len); 171static int do_brk(unsigned long addr, unsigned long len);
172 172
173SYSCALL_DEFINE1(brk, unsigned long, brk) 173SYSCALL_DEFINE1(brk, unsigned long, brk)
174{ 174{
@@ -224,7 +224,7 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
224 goto out; 224 goto out;
225 225
226 /* Ok, looks good - let it rip. */ 226 /* Ok, looks good - let it rip. */
227 if (do_brk(oldbrk, newbrk-oldbrk) != oldbrk) 227 if (do_brk(oldbrk, newbrk-oldbrk) < 0)
228 goto out; 228 goto out;
229 229
230set_brk: 230set_brk:
@@ -2625,7 +2625,7 @@ static inline void verify_mm_writelocked(struct mm_struct *mm)
2625 * anonymous maps. eventually we may be able to do some 2625 * anonymous maps. eventually we may be able to do some
2626 * brk-specific accounting here. 2626 * brk-specific accounting here.
2627 */ 2627 */
2628static unsigned long do_brk(unsigned long addr, unsigned long len) 2628static int do_brk(unsigned long addr, unsigned long len)
2629{ 2629{
2630 struct mm_struct *mm = current->mm; 2630 struct mm_struct *mm = current->mm;
2631 struct vm_area_struct *vma, *prev; 2631 struct vm_area_struct *vma, *prev;
@@ -2636,7 +2636,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
2636 2636
2637 len = PAGE_ALIGN(len); 2637 len = PAGE_ALIGN(len);
2638 if (!len) 2638 if (!len)
2639 return addr; 2639 return 0;
2640 2640
2641 flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags; 2641 flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
2642 2642
@@ -2703,13 +2703,13 @@ out:
2703 if (flags & VM_LOCKED) 2703 if (flags & VM_LOCKED)
2704 mm->locked_vm += (len >> PAGE_SHIFT); 2704 mm->locked_vm += (len >> PAGE_SHIFT);
2705 vma->vm_flags |= VM_SOFTDIRTY; 2705 vma->vm_flags |= VM_SOFTDIRTY;
2706 return addr; 2706 return 0;
2707} 2707}
2708 2708
2709unsigned long vm_brk(unsigned long addr, unsigned long len) 2709int vm_brk(unsigned long addr, unsigned long len)
2710{ 2710{
2711 struct mm_struct *mm = current->mm; 2711 struct mm_struct *mm = current->mm;
2712 unsigned long ret; 2712 int ret;
2713 bool populate; 2713 bool populate;
2714 2714
2715 if (down_write_killable(&mm->mmap_sem)) 2715 if (down_write_killable(&mm->mmap_sem))
@@ -2718,7 +2718,7 @@ unsigned long vm_brk(unsigned long addr, unsigned long len)
2718 ret = do_brk(addr, len); 2718 ret = do_brk(addr, len);
2719 populate = ((mm->def_flags & VM_LOCKED) != 0); 2719 populate = ((mm->def_flags & VM_LOCKED) != 0);
2720 up_write(&mm->mmap_sem); 2720 up_write(&mm->mmap_sem);
2721 if (populate) 2721 if (populate && !ret)
2722 mm_populate(addr, len); 2722 mm_populate(addr, len);
2723 return ret; 2723 return ret;
2724} 2724}
diff --git a/mm/nommu.c b/mm/nommu.c
index c8bd59a03c71..c2e58880207f 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -1682,7 +1682,7 @@ void exit_mmap(struct mm_struct *mm)
1682 } 1682 }
1683} 1683}
1684 1684
1685unsigned long vm_brk(unsigned long addr, unsigned long len) 1685int vm_brk(unsigned long addr, unsigned long len)
1686{ 1686{
1687 return -ENOMEM; 1687 return -ENOMEM;
1688} 1688}