summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_syscalls.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-03-16 07:19:12 +0000
committeralc <alc@FreeBSD.org>2003-03-16 07:19:12 +0000
commit4641d3d127dcdaae61daa54f6eee3d51be117e44 (patch)
treeb0b84c7d63f3af90789b77ca4c9413356ecd7a01 /sys/kern/uipc_syscalls.c
parentc1838df6038e28d81384d7cf1c41a66c07de573c (diff)
downloadFreeBSD-src-4641d3d127dcdaae61daa54f6eee3d51be117e44.zip
FreeBSD-src-4641d3d127dcdaae61daa54f6eee3d51be117e44.tar.gz
Pass the sf buf to MEXTADD() as the optional argument. This permits
the simplification of socow_iodone() and sf_buf_free(); they don't have to reverse engineer the sf buf from the data's address.
Diffstat (limited to 'sys/kern/uipc_syscalls.c')
-rw-r--r--sys/kern/uipc_syscalls.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index 285eaca..6773452 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -1661,8 +1661,6 @@ sf_buf_alloc()
return (sf);
}
-#define dtosf(x) (&sf_bufs[((uintptr_t)(x) - (uintptr_t)sf_base) >> PAGE_SHIFT])
-
/*
* Detatch mapped page and release resources back to the system.
*/
@@ -1672,7 +1670,7 @@ sf_buf_free(void *addr, void *args)
struct sf_buf *sf;
struct vm_page *m;
- sf = dtosf(addr);
+ sf = args;
pmap_qremove((vm_offset_t)addr, 1);
m = sf->m;
vm_page_lock_queues();
@@ -1955,14 +1953,14 @@ retry_lookup:
MGETHDR(m, M_TRYWAIT, MT_DATA);
if (m == NULL) {
error = ENOBUFS;
- sf_buf_free((void *)sf->kva, NULL);
+ sf_buf_free((void *)sf->kva, sf);
sbunlock(&so->so_snd);
goto done;
}
/*
* Setup external storage for mbuf.
*/
- MEXTADD(m, sf->kva, PAGE_SIZE, sf_buf_free, NULL, M_RDONLY,
+ MEXTADD(m, sf->kva, PAGE_SIZE, sf_buf_free, sf, M_RDONLY,
EXT_SFBUF);
m->m_data = (char *) sf->kva + pgoff;
m->m_pkthdr.len = m->m_len = xfsize;
OpenPOWER on IntegriCloud