git: d17cbe46983c - main - sendfile: retire SF_SYNC
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 24 Jun 2025 22:25:07 UTC
The branch main has been updated by glebius:
URL: https://cgit.FreeBSD.org/src/commit/?id=d17cbe46983c08ba0567b0ffd71434abd35aa205
commit d17cbe46983c08ba0567b0ffd71434abd35aa205
Author: Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2025-06-24 21:26:10 +0000
Commit: Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2025-06-24 22:24:04 +0000
sendfile: retire SF_SYNC
The flag was added in b75a1171d8ba4 for the sake of Varnish. However, that
idea didn't work. Quoting email from Poul-Henning:
"We had to give up sendfile(), the overhead of keeping track of everything
between the network stack and VM system made ate any gain we saw. ... I
dont think we ever shipped a version where sendfile was enabled by
default."
PR: 287348
---
lib/libsys/sendfile.2 | 8 +-------
sys/kern/kern_sendfile.c | 6 +++++-
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/lib/libsys/sendfile.2 b/lib/libsys/sendfile.2
index 07a563d5ef82..6000e3e9828f 100644
--- a/lib/libsys/sendfile.2
+++ b/lib/libsys/sendfile.2
@@ -23,7 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd March 30, 2020
+.Dd June 24, 2025
.Dt SENDFILE 2
.Os
.Sh NAME
@@ -147,12 +147,6 @@ in a different context.
.It Dv SF_NOCACHE
The data sent to socket will not be cached by the virtual memory system,
and will be freed directly to the pool of free pages.
-.It Dv SF_SYNC
-.Nm
-sleeps until the network stack no longer references the VM pages
-of the file, making subsequent modifications to it safe.
-Please note that this is not a guarantee that the data has actually
-been sent.
.It Dv SF_USER_READAHEAD
.Nm
has some internal heuristics to do readahead when sending data.
diff --git a/sys/kern/kern_sendfile.c b/sys/kern/kern_sendfile.c
index 25c1f357dfd4..17b53208157a 100644
--- a/sys/kern/kern_sendfile.c
+++ b/sys/kern/kern_sendfile.c
@@ -798,7 +798,11 @@ vn_sendfile(struct file *fp, int sockfd, struct uio *hdr_uio,
SFSTAT_INC(sf_syscalls);
SFSTAT_ADD(sf_rhpages_requested, SF_READAHEAD(flags));
- if (flags & SF_SYNC) {
+ if (__predict_false(flags & SF_SYNC)) {
+ gone_in(16, "Warning! %s[%u] uses SF_SYNC sendfile(2) flag. "
+ "Please follow up to https://bugs.freebsd.org/"
+ "bugzilla/show_bug.cgi?id=287348. ",
+ td->td_proc->p_comm, td->td_proc->p_pid);
sfs = malloc(sizeof(*sfs), M_SENDFILE, M_WAITOK | M_ZERO);
mtx_init(&sfs->mtx, "sendfile", NULL, MTX_DEF);
cv_init(&sfs->cv, "sendfile");