Er, surely the same goes for sys_sendfile? Why have a new system
call rather than just swapping the 'in' and 'out' fds?

There is an assumption that one is a linear stream of output (in this
case a socket) and the other one is a page cache based file.

That's an implementation detail and it's not clear we should be exposing it
to the user. It's not entirely insane to contemplate socket->socket or
file->file sendfile either -- would we invent new system calls for those
too? File descriptors are file descriptors.

I was rather disappointed when file->file sendfile was [purposefully?]
broken in 2.5.x...