git: 947bff6a04ed - main - vm/vm_mmap.c: simplify code by using the SET_ERRNOX() values
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 13 Jun 2025 19:40:30 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=947bff6a04ed9f508d8fd0e5e1d8ac56d8888e80
commit 947bff6a04ed9f508d8fd0e5e1d8ac56d8888e80
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-06-13 17:33:49 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2025-06-13 19:39:55 +0000
vm/vm_mmap.c: simplify code by using the SET_ERRNOX() values
to avoid duplicating the error values.
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D50836
---
sys/vm/vm_mmap.c | 79 +++++++++++++++++++++++---------------------------------
1 file changed, 32 insertions(+), 47 deletions(-)
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c
index 8444a8cbf021..9ba2ec426d7f 100644
--- a/sys/vm/vm_mmap.c
+++ b/sys/vm/vm_mmap.c
@@ -192,14 +192,12 @@ kern_mmap(struct thread *td, const struct mmap_req *mrp)
check_fp_fn = mrp->mr_check_fp_fn;
if ((prot & ~(_PROT_ALL | PROT_MAX(_PROT_ALL))) != 0) {
- SET_ERROR0(EINVAL, "unknown PROT bits");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL, "unknown PROT bits"));
}
max_prot = PROT_MAX_EXTRACT(prot);
prot = PROT_EXTRACT(prot);
if (max_prot != 0 && (max_prot & prot) != prot) {
- SET_ERROR0(ENOTSUP, "prot is not subset of max_prot");
- return (ENOTSUP);
+ return (SET_ERROR0(ENOTSUP, "prot is not subset of max_prot"));
}
p = td->td_proc;
@@ -232,10 +230,9 @@ kern_mmap(struct thread *td, const struct mmap_req *mrp)
if (!SV_CURPROC_FLAG(SV_AOUT)) {
if ((len == 0 && p->p_osrel >= P_OSREL_MAP_ANON) ||
((flags & MAP_ANON) != 0 && (fd != -1 || pos != 0))) {
- SET_ERROR2(EINVAL,
+ return (SET_ERROR2(EINVAL,
"offset not zero/fd not -1 for MAP_ANON",
- fd, pos);
- return (EINVAL);
+ fd, pos));
}
} else {
if ((flags & MAP_ANON) != 0)
@@ -245,8 +242,8 @@ kern_mmap(struct thread *td, const struct mmap_req *mrp)
if (flags & MAP_STACK) {
if ((fd != -1) || ((prot & (PROT_READ | PROT_WRITE)) !=
(PROT_READ | PROT_WRITE))) {
- SET_ERROR1(EINVAL, "MAP_STACK with prot < rw", prot);
- return (EINVAL);
+ return (SET_ERROR1(EINVAL, "MAP_STACK with prot < rw",
+ prot));
}
flags |= MAP_ANON;
pos = 0;
@@ -255,28 +252,23 @@ kern_mmap(struct thread *td, const struct mmap_req *mrp)
MAP_STACK | MAP_NOSYNC | MAP_ANON | MAP_EXCL | MAP_NOCORE |
MAP_PREFAULT_READ | MAP_GUARD | MAP_32BIT |
MAP_ALIGNMENT_MASK)) != 0) {
- SET_ERROR0(EINVAL, "reserved flag set");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL, "reserved flag set"));
}
if ((flags & (MAP_EXCL | MAP_FIXED)) == MAP_EXCL) {
- SET_ERROR0(EINVAL, "EXCL without FIXED");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL, "EXCL without FIXED"));
}
if ((flags & (MAP_SHARED | MAP_PRIVATE)) == (MAP_SHARED |
MAP_PRIVATE)) {
- SET_ERROR0(EINVAL, "both SHARED and PRIVATE set");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL, "both SHARED and PRIVATE set"));
}
if (prot != PROT_NONE &&
(prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC)) != 0) {
- SET_ERROR1(EINVAL, "invalid prot", prot);
- return (EINVAL);
+ return (SET_ERROR1(EINVAL, "invalid prot", prot));
}
if ((flags & MAP_GUARD) != 0 && (prot != PROT_NONE || fd != -1 ||
pos != 0 || (flags & ~(MAP_FIXED | MAP_GUARD | MAP_EXCL |
MAP_32BIT | MAP_ALIGNMENT_MASK)) != 0)) {
- SET_ERROR0(EINVAL, "GUARD with wrong parameters");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL, "GUARD with wrong parameters"));
}
/*
@@ -298,8 +290,7 @@ kern_mmap(struct thread *td, const struct mmap_req *mrp)
if (align != 0 && align != MAP_ALIGNED_SUPER &&
(align >> MAP_ALIGNMENT_SHIFT >= sizeof(void *) * NBBY ||
align >> MAP_ALIGNMENT_SHIFT < PAGE_SHIFT)) {
- SET_ERROR1(EINVAL, "bad alignment", align);
- return (EINVAL);
+ return (SET_ERROR1(EINVAL, "bad alignment", align));
}
/*
@@ -314,8 +305,8 @@ kern_mmap(struct thread *td, const struct mmap_req *mrp)
*/
addr -= pageoff;
if ((addr & PAGE_MASK) != 0) {
- SET_ERROR1(EINVAL, "fixed mapping not aligned", addr);
- return (EINVAL);
+ return (SET_ERROR1(EINVAL, "fixed mapping not aligned",
+ addr));
}
/* Address range must be all in user VM space. */
@@ -324,9 +315,8 @@ kern_mmap(struct thread *td, const struct mmap_req *mrp)
return (EINVAL);
}
if (flags & MAP_32BIT && addr + size > MAP_32BIT_MAX_ADDR) {
- SET_ERROR0(EINVAL,
- "fixed 32bit mapping does not fit into 4G");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL,
+ "fixed 32bit mapping does not fit into 4G"));
}
} else if (flags & MAP_32BIT) {
/*
@@ -1324,8 +1314,7 @@ vm_mmap_vnode(struct thread *td, vm_size_t objsize,
vm_pager_update_writecount(obj, 0, objsize);
}
} else {
- SET_ERROR0(EINVAL, "non-reg file");
- error = EINVAL;
+ error = SET_ERROR0(EINVAL, "non-reg file");
goto done;
}
if ((error = VOP_GETATTR(vp, &va, cred)))
@@ -1416,8 +1405,7 @@ vm_mmap_cdev(struct thread *td, vm_size_t objsize, vm_prot_t prot,
(prot & VM_PROT_WRITE) != 0)
return (EACCES);
if ((flags & (MAP_PRIVATE | MAP_COPY)) != 0) {
- SET_ERROR0(EINVAL, "cdev mapping must be shared");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL, "cdev mapping must be shared"));
}
/*
@@ -1444,8 +1432,8 @@ vm_mmap_cdev(struct thread *td, vm_size_t objsize, vm_prot_t prot,
obj = vm_pager_allocate(OBJT_DEVICE, cdev, objsize, prot, *foff,
td->td_ucred);
if (obj == NULL) {
- SET_ERROR0(EINVAL, "cdev driver does not support mmap");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL,
+ "cdev driver does not support mmap"));
}
*objp = obj;
*flagsp = flags;
@@ -1464,8 +1452,7 @@ vm_mmap(vm_map_t map, vm_offset_t *addr, vm_size_t size, vm_prot_t prot,
boolean_t writecounted;
if (size == 0) {
- SET_ERROR0(EINVAL, "zero-sized req");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL, "zero-sized req"));
}
size = round_page(size);
@@ -1492,8 +1479,8 @@ vm_mmap(vm_map_t map, vm_offset_t *addr, vm_size_t size, vm_prot_t prot,
handle, &foff, &object, &writecounted);
break;
default:
- SET_ERROR1(EINVAL, "unsupported backing obj type", handle_type);
- error = EINVAL;
+ error = SET_ERROR1(EINVAL, "unsupported backing obj type",
+ handle_type);
break;
}
if (error)
@@ -1575,8 +1562,7 @@ vm_mmap_object(vm_map_t map, vm_offset_t *addr, vm_size_t size, vm_prot_t prot,
* exec).
*/
if ((foff & PAGE_MASK) != 0) {
- SET_ERROR1(EINVAL, "offset not page-aligned", foff);
- return (EINVAL);
+ return (SET_ERROR1(EINVAL, "offset not page-aligned", foff));
}
if ((flags & MAP_FIXED) == 0) {
@@ -1584,21 +1570,20 @@ vm_mmap_object(vm_map_t map, vm_offset_t *addr, vm_size_t size, vm_prot_t prot,
*addr = round_page(*addr);
} else {
if (*addr != trunc_page(*addr)) {
- SET_ERROR1(EINVAL,
- "non-fixed mapping address not aligned", *addr);
- return (EINVAL);
+ return (SET_ERROR1(EINVAL,
+ "non-fixed mapping address not aligned", *addr));
}
fitit = false;
}
if (flags & MAP_ANON) {
if (object != NULL) {
- SET_ERROR0(EINVAL, "anon mapping backed by an object");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL,
+ "anon mapping backed by an object"));
}
if (foff != 0) {
- SET_ERROR0(EINVAL, "anon mapping with non-zero offset");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL,
+ "anon mapping with non-zero offset"));
}
docow = 0;
} else if (flags & MAP_PREFAULT_READ)
@@ -1619,8 +1604,8 @@ vm_mmap_object(vm_map_t map, vm_offset_t *addr, vm_size_t size, vm_prot_t prot,
docow |= MAP_WRITECOUNT;
if (flags & MAP_STACK) {
if (object != NULL) {
- SET_ERROR0(EINVAL, "stack mapping backed by an object");
- return (EINVAL);
+ return (SET_ERROR0(EINVAL,
+ "stack mapping backed by an object"));
}
docow |= MAP_STACK_AREA;
}