diff options
author | andre <andre@FreeBSD.org> | 2013-08-25 10:57:09 +0000 |
---|---|---|
committer | andre <andre@FreeBSD.org> | 2013-08-25 10:57:09 +0000 |
commit | 6c0efad132654ea9bfc4e58975d1d58ce8d4b424 (patch) | |
tree | c06b97898de2cde2e64243afc1672aebf11ef915 /sys/kern/uipc_syscalls.c | |
parent | 8e41c705d027e43af7d37c3bc669b20ac317fd2b (diff) | |
download | FreeBSD-src-6c0efad132654ea9bfc4e58975d1d58ce8d4b424.zip FreeBSD-src-6c0efad132654ea9bfc4e58975d1d58ce8d4b424.tar.gz |
Give (*ext_free) an int return value allowing for very sophisticated
external mbuf buffer management capabilities in the future.
For now only EXT_FREE_OK is defined with current legacy behavior.
Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'sys/kern/uipc_syscalls.c')
-rw-r--r-- | sys/kern/uipc_syscalls.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index 7c19bc6..72663a2 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -1854,7 +1854,7 @@ struct sendfile_sync { /* * Detach mapped page and release resources back to the system. */ -void +int sf_buf_mext(struct mbuf *mb, void *addr, void *args) { vm_page_t m; @@ -1873,13 +1873,14 @@ sf_buf_mext(struct mbuf *mb, void *addr, void *args) vm_page_free(m); vm_page_unlock(m); if (addr == NULL) - return; + return (EXT_FREE_OK); sfs = addr; mtx_lock(&sfs->mtx); KASSERT(sfs->count> 0, ("Sendfile sync botchup count == 0")); if (--sfs->count == 0) cv_signal(&sfs->cv); mtx_unlock(&sfs->mtx); + return (EXT_FREE_OK); } /* @@ -2315,14 +2316,14 @@ retry_space: m0 = m_get((mnw ? M_NOWAIT : M_WAITOK), MT_DATA); if (m0 == NULL) { error = (mnw ? EAGAIN : ENOBUFS); - sf_buf_mext(NULL, NULL, sf); + (void)sf_buf_mext(NULL, NULL, sf); break; } if (m_extadd(m0, (caddr_t )sf_buf_kva(sf), PAGE_SIZE, sf_buf_mext, sfs, sf, M_RDONLY, EXT_SFBUF, (mnw ? M_NOWAIT : M_WAITOK)) != 0) { error = (mnw ? EAGAIN : ENOBUFS); - sf_buf_mext(NULL, NULL, sf); + (void)sf_buf_mext(NULL, NULL, sf); m_freem(m0); break; } |