Re: [GSoC 2026] - Implementation of sendfile(2) syscall

Henrique Brito <[email protected]> Sun, 8 Mar 2026 15:34:07 -0300
Newsgroups gmane.os.netbsd.devel.kernel
Message-ID <[email protected]>
Hi,

On Fri, 6 Mar 2026 13:20:49 +0100, Reinoud**Zandijk wrote:

> Well, looking at sendfile(2), i wonder what the difference is between
> sendfile(2) and copy_file_range(2) that seems more generic; is it that
> sendfile can also copy non-seekable 

Exactly, the copy_file_range(2) only works with regular files, but offers
more flexibility for that case.

The sendfile(2) can be used with a broader set of file types:
- Regular File -> Regular File
- Regular File -> Socket
- Regular File -> Pipe
- Socket -> Pipe (according to man page, this should desugars to a splice in the Linux implementation)

> Can't sendfile(2) be implemented
> then as a copy_file_range(2) when they are both regular files?

There should not be any problem with using copy_file_range(2) when both
sendfile(2) file descriptors are regular files.
Both syscalls are implemented in a similar way (with reads & writes),
but I noticed the Compat Linux emulation for copy_file_range(2)
uses a 8192 byte buffer, while this one for sendfile(2) is using MAXBSIZE.
I wonder if there is a specific reason for the smaller buffer size,
as it may impact performance.

> It would be nice if file systems could get a VOP call on this; some FSes can
> then internally just copy its administration or references without even
> needing to load from and save to disc. FSes then can by defaukt bail out or
> decide its not feasable if say its not possible for whatever reason like it
> crosses mountpoints and the generic data read/write copy-in-the-kernel code
> could then take over.

That makes sense to me, I believe Linux does something similar in its
sendfile/splice implementation.
That said, for the purpose of emulation, I believe the read/write loops
in the kernel are sufficient, though the VOP would provide a nice optimization.

This seems like a potential GSoC project, would it be a|reasonable| scope
for someone still new to kernel development?

Thank you,
Henrique Brito