svn commit: r258613 - head/sys/kern
Konstantin Belousov
kostikbel at gmail.com
Tue Nov 26 07:35:13 UTC 2013
On Tue, Nov 26, 2013 at 02:02:05AM +0000, Adrian Chadd wrote:
> Author: adrian
> Date: Tue Nov 26 02:02:05 2013
> New Revision: 258613
> URL: http://svnweb.freebsd.org/changeset/base/258613
>
> Log:
> Refactor out the sendfile copyout in order to make vn_sendfile()
> callable from the kernel.
>
> Right now vn_sendfile() can't be called from anything other than
> a syscall handler _and_ return the number of bytes queued.
> This simply moves the copyout() to do_sendfile() so that any kernel
> code can initiate vn_sendfile() outside of a syscall context.
>
> Tested:
>
> * tiny little sendfile program spitting things out a tcp socket
>
> Sponsored by: Netflix, Inc.
>
> Modified:
> head/sys/kern/uipc_syscalls.c
>
> Modified: head/sys/kern/uipc_syscalls.c
> ==============================================================================
> --- head/sys/kern/uipc_syscalls.c Tue Nov 26 01:30:10 2013 (r258612)
> +++ head/sys/kern/uipc_syscalls.c Tue Nov 26 02:02:05 2013 (r258613)
> @@ -1908,6 +1908,7 @@ do_sendfile(struct thread *td, struct se
> struct file *fp;
> cap_rights_t rights;
> int error;
> + off_t sbytes;
>
> /*
> * File offset must be positive. If it goes beyond EOF
> @@ -1947,9 +1948,11 @@ do_sendfile(struct thread *td, struct se
> }
>
> error = fo_sendfile(fp, uap->s, hdr_uio, trl_uio, uap->offset,
> - uap->nbytes, uap->sbytes, uap->flags, compat ? SFK_COMPAT : 0, td);
> + uap->nbytes, &sbytes, uap->flags, compat ? SFK_COMPAT : 0, td);
> fdrop(fp, td);
> -
> + if (uap->sbytes != NULL) {
> + copyout(&sbytes, uap->sbytes, sizeof(off_t));
> + }
> out:
> free(hdr_uio, M_IOV);
> free(trl_uio, M_IOV);
> @@ -2546,7 +2549,7 @@ out:
> td->td_retval[0] = 0;
> }
> if (sent != NULL) {
> - copyout(&sbytes, sent, sizeof(off_t));
> + (*sent) = sbytes;
> }
> if (obj != NULL)
> vm_object_deallocate(obj);
This breaks compat32 sendfile(2).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/svn-src-all/attachments/20131126/82ded8ee/attachment.sig>
More information about the svn-src-all
mailing list