Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Jun 2014 14:34:34 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r267275 - projects/sendfile/sys/kern
Message-ID:  <201406091434.s59EYYeV044557@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Mon Jun  9 14:34:33 2014
New Revision: 267275
URL: http://svnweb.freebsd.org/changeset/base/267275

Log:
  - In sf_io_done() remove a hack that did a zero length pru_send,
    and instead call pru_ready. This is more efficient and makes
    sendfile() working on AF_LOCAL sockets.
  
  - Mark mbufs as M_NOTREADY only if sendfile_swapin() reported
    that it issued I/Os.
  
  Sponsored by:	Netflix
  Sponsored by:	Nginx, Inc.

Modified:
  projects/sendfile/sys/kern/uipc_syscalls.c

Modified: projects/sendfile/sys/kern/uipc_syscalls.c
==============================================================================
--- projects/sendfile/sys/kern/uipc_syscalls.c	Mon Jun  9 14:31:35 2014	(r267274)
+++ projects/sendfile/sys/kern/uipc_syscalls.c	Mon Jun  9 14:34:33 2014	(r267275)
@@ -2715,22 +2715,9 @@ sf_io_done(void *arg)
 	if (!refcount_release(&sfio->nios))
 		return;
 
-	so  = sfio->sock_fp->f_data;
+	so = sfio->sock_fp->f_data;
 
-	if (sbready(&so->so_snd, sfio->m, sfio->npages) == 0) {
-		struct mbuf *m;
-
-		m = m_get(M_NOWAIT, MT_DATA);
-		if (m == NULL) {
-			panic("XXXGL");
-		}
-		m->m_len = 0;
-		CURVNET_SET(so->so_vnet);
-		/* XXXGL: curthread */
-		(void )(so->so_proto->pr_usrreqs->pru_send)
-		    (so, 0, m, NULL, NULL, curthread);
-		CURVNET_RESTORE();
-	}
+	(void)(so->so_proto->pr_usrreqs->pru_ready)(so, sfio->m, sfio->npages);
 
 	/* XXXGL: curthread */
 	fdrop(sfio->sock_fp, curthread);
@@ -3141,7 +3128,8 @@ retry_space:
 			m0->m_data = (char *)sf_buf_kva(sf) +
 			    (vmoff(i, off) & PAGE_MASK);
 			m0->m_len = xfsize(i, npages, off, space);
-			m0->m_flags |= M_NOTREADY;
+			if (nios)
+				m0->m_flags |= M_NOTREADY;
 
 			if (i == 0)
 				sfio->m = m0;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201406091434.s59EYYeV044557>