Messages in this thread | | | Date | Tue, 11 Nov 2003 08:53:23 -0500 | From | Jakub Jelinek <> | Subject | Re: OT: why no file copy() libc/syscall ?? |
| |
On Tue, Nov 11, 2003 at 02:38:59PM +0100, Rogier Wolff wrote: > On Mon, Nov 10, 2003 at 08:05:11PM -0500, Albert Cahalan wrote: > > So open the file, change context, and then: > > > > long copy_fd_to_file(int fd, const char *name, ...) > > > > (if you can no longer read from the OPEN fd, > > either we override that or we just don't care > > about such mostly-fictional cases) > > > Actually, I think we should have a: > > long copy_fd_to_fd (int src, int dst, int len) > > type of systemcall.
We have one, sendfile(2).
> It should do something like: > > while ((nbytes = read (src, buf, BUFSIZE)) >= 0) { > if (write (dst, buf, nbytes) < 0) > return totbytes; > totbytes += nbytes; > } > > but it allows kernel-space to optimize this whenever possible. Kernel > then becomes responsible for detecting and handling the optimizable > cases. > > The kernel then becomes something > > if (islocalfile (src) && issocket (dst)) > /* Call the old sendfile */ > return sendfile (....); > > if (isCIFS (src), isCIFS(dst)) > /* Tell remote host to copy the file. */ > return CIFS_copy_file (....); > > ...
Can you explain why this cannot be in sys_sendfile? It doesn't make much sense to provide any default in the kernel, that's something the userland can handle equally well. But e.g. the CIFS copy can be done as sendfile hook.
Jakub - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |