summaryrefslogtreecommitdiff
path: root/sys/vm/vm_unix.c
diff options
context:
space:
mode:
authorDavid Malone <dwmalone@FreeBSD.org>2000-10-06 13:03:50 +0000
committerDavid Malone <dwmalone@FreeBSD.org>2000-10-06 13:03:50 +0000
commita77c9610f2f1968aa6e4ef0a6be80ce0ad7a03ae (patch)
treea7fae1032e06e28a0e9fa598ba92f87be818e2a4 /sys/vm/vm_unix.c
parent016f1c3e2310ecaf549eb9e64ec0c853489da142 (diff)
Notes
Diffstat (limited to 'sys/vm/vm_unix.c')
-rw-r--r--sys/vm/vm_unix.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/vm/vm_unix.c b/sys/vm/vm_unix.c
index d5e9f58aab60..bea87f07be60 100644
--- a/sys/vm/vm_unix.c
+++ b/sys/vm/vm_unix.c
@@ -73,8 +73,14 @@ obreak(p, uap)
base = round_page((vm_offset_t) vm->vm_daddr);
new = round_page((vm_offset_t)uap->nsize);
+ old = base + ctob(vm->vm_dsize);
if (new > base) {
- if ((new - base) > (unsigned) p->p_rlimit[RLIMIT_DATA].rlim_cur)
+ /*
+ * We check resource limits here, but alow processes to
+ * reduce their usage, even if they remain over the limit.
+ */
+ if (new > old &&
+ (new - base) > (unsigned) p->p_rlimit[RLIMIT_DATA].rlim_cur)
return ENOMEM;
if (new >= VM_MAXUSER_ADDRESS)
return (ENOMEM);
@@ -87,8 +93,6 @@ obreak(p, uap)
return EINVAL;
}
- old = base + ctob(vm->vm_dsize);
-
if (new > old) {
vm_size_t diff;