From: Chris Torek Date: Sat, 14 Feb 2026 16:50:00 GMT Subject: Re: [PATCH] copy.c: use `sendfile()` for in-kernel file copying on Linux Message-ID: In-Reply-To: Ah, more importantly, FreeBSD's sendfile only operates on sockets. Both systems also need fallback code for un-handled cases. Chris On Sat, Feb 14, 2026 at 1:22 AM George Hu wrote: > > On 2/13/26 11:36 PM, Chris Torek wrote: > > > On Fri, Feb 13, 2026 at 4:47 AM George Hu wrote: > >> The `sendfile()` system call copies data between one file descriptor > >> and another within the kernel, which is more efficient than the > >> combination of `read()` and `write()`. > > sendfile() is found on other systems (notably BSDs), so perhaps ... > > > >> Signed-off-by: George Hu > >> --- > >> copy.c | 17 +++++++++++++++++ > >> 1 file changed, 17 insertions(+) > >> > >> diff --git a/copy.c b/copy.c > >> index b668209b6c..d4b7cde764 100644 > >> --- a/copy.c > >> +++ b/copy.c > >> @@ -7,8 +7,23 @@ > >> #include "strbuf.h" > >> #include "abspath.h" > >> > >> +#ifdef __linux__ > > ... this and the subsequent ifdef should be based on the feature, > > rather than the OS. > > > > Chris > > Hello, > > Although the `sendfile()` system call exists in both Linux and BSDs, > their semantics and APIs differ. > The Linux prototype of `sendfile()` is: > > ssize_t sendfile(int out_fd, int in_fd, off_t *_Nullable offset, size_t > count); > > While FreeBSD exposes: > > int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr > *hdtr, off_t *sbytes, int flags); > > George