Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 May 2014 10:33:06 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r266795 - projects/sendfile/sys/kern
Message-ID:  <201405281033.s4SAX6OE087253@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Wed May 28 10:33:06 2014
New Revision: 266795
URL: http://svnweb.freebsd.org/changeset/base/266795

Log:
  Revert r262911. Remove the sfpgrabnowait hack. We are now trying another
  approach to the problem. For now, let the sfpgrabnowait be just stored
  in svn history.

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

Modified: projects/sendfile/sys/kern/uipc_syscalls.c
==============================================================================
--- projects/sendfile/sys/kern/uipc_syscalls.c	Wed May 28 09:06:36 2014	(r266794)
+++ projects/sendfile/sys/kern/uipc_syscalls.c	Wed May 28 10:33:06 2014	(r266795)
@@ -133,10 +133,6 @@ static int	filt_sfsync(struct knote *kn,
 static SYSCTL_NODE(_kern_ipc, OID_AUTO, sendfile, CTLFLAG_RW, 0,
     "sendfile(2) tunables");
 
-static int sfpgrabnowait = 0;
-SYSCTL_INT(_kern_ipc_sendfile, OID_AUTO, pgrabnowait, CTLFLAG_RW,
-    &sfpgrabnowait, 0, "Use VM_ALLOC_NOWAIT when SF_NODISKIO is requested");
-
 static int sfreadahead = 0;
 SYSCTL_INT(_kern_ipc_sendfile, OID_AUTO, readahead, CTLFLAG_RW,
     &sfreadahead, 0, "Read this more pages than socket buffer can accept");
@@ -2714,29 +2710,17 @@ sf_io_done(void *arg)
 }
 
 static int
-sendfile_swapin(vm_object_t obj, struct sf_io *sfio, off_t off, off_t len,
-    int flags)
+sendfile_swapin(vm_object_t obj, struct sf_io *sfio, off_t off, off_t len)
 {
 	vm_page_t *pa = sfio->pa;
 	int npages = sfio->npages;
 	int nios;
 
 	nios = 0;
-	if (sfpgrabnowait && (flags & SF_NODISKIO))
-		flags = VM_ALLOC_NOWAIT;
-	else
-		flags = 0;
-
 	VM_OBJECT_WLOCK(obj);
-	for (int i = 0; i < npages; i++) {
+	for (int i = 0; i < npages; i++)
 		pa[i] = vm_page_grab(obj, OFF_TO_IDX(vmoff(i, off)),
-		    VM_ALLOC_WIRED | VM_ALLOC_NORMAL | flags);
-		if (pa[i] == NULL) {
-			npages = sfio->npages = i;
-			sfio->rhpages = 0;
-			break;
-		}
-	}
+		    VM_ALLOC_WIRED | VM_ALLOC_NORMAL);
 
 	for (int i = 0; i < npages; i++) {
 		int j, a, count, rv;
@@ -3077,37 +3061,7 @@ retry_space:
 		sfio->npages = npages;
 		sfio->rhpages = rhpages;
 
-		nios = sendfile_swapin(obj, sfio, off, space, flags);
-
-		if (sfio->npages != npages) {
-			/*
-			 * sendfile_swapin() encountered a busy page,
-			 * and was called with SF_NODISKIO. We don't
-			 * return EBUSY, like old I/O blocking sendfile
-			 * did, because situtation is different. No
-			 * extra operation like read(2) or aio_read(2)
-			 * is required from userland. We just need it
-			 * to retry soonish.
-			 * We rely on remote side ACKing our data to
-			 * drive this timeout. And in the worst case,
-			 * when we do not have data to send, we put
-			 * the socket on the notification queue immediately.
-			 */
-			error = EAGAIN;
-			if (sfio->npages == 0 && hdrlen == 0) {
-				if (vp != NULL)
-					VOP_UNLOCK(vp, 0);
-				SOCKBUF_LOCK(&so->so_snd);
-				if (!sbused(&so->so_snd))
-					sowwakeup_locked(so);
-				else
-					SOCKBUF_UNLOCK(&so->so_snd);
-				free(sfio, M_TEMP);
-				goto done;
-			}
-			fixspace(npages, sfio->npages, off, &space);
-			npages = sfio->npages;
-		}
+		nios = sendfile_swapin(obj, sfio, off, space);
 
 		/*
 		 * Loop and construct maximum sized mbuf chain to be bulk
@@ -3186,8 +3140,7 @@ retry_space:
 			mh = NULL;
 		}
 
-		if (m == NULL) {
-			KASSERT(error, ("%s: no mbuf and no error", __func__));
+		if (error) {
 			free(sfio, M_TEMP);
 			goto done;
 		}



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