Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 Dec 2013 19:55:52 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r258809 - projects/sendfile/sys/kern
Message-ID:  <201312011955.rB1JtqZe082536@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Sun Dec  1 19:55:51 2013
New Revision: 258809
URL: http://svnweb.freebsd.org/changeset/base/258809

Log:
  Simplify SF_MNOWAIT handling introducing several variables.

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

Modified: projects/sendfile/sys/kern/uipc_syscalls.c
==============================================================================
--- projects/sendfile/sys/kern/uipc_syscalls.c	Sun Dec  1 19:45:04 2013	(r258808)
+++ projects/sendfile/sys/kern/uipc_syscalls.c	Sun Dec  1 19:55:51 2013	(r258809)
@@ -2337,7 +2337,7 @@ vn_sendfile(struct file *fp, int sockfd,
 	struct shmfd *shmfd;
 	struct vattr va;
 	off_t off, fsbytes, sbytes, rem, obj_size;
-	int error, bsize, hdrlen, mnw;
+	int error, bsize, hdrlen, mwait, merror, sfwait;
 	bool inflight_called;
 
 	pg = NULL;
@@ -2345,7 +2345,6 @@ vn_sendfile(struct file *fp, int sockfd,
 	so = NULL;
 	m = NULL;
 	fsbytes = sbytes = 0;
-	mnw = 0;
 	rem = nbytes;
 	obj_size = 0;
 	inflight_called = false;
@@ -2365,8 +2364,15 @@ vn_sendfile(struct file *fp, int sockfd,
 	 * caller to retry later.
 	 * XXX: Experimental.
 	 */
-	if (flags & SF_MNOWAIT)
-		mnw = 1;
+	if (flags & SF_MNOWAIT) {
+		mwait = M_NOWAIT;
+		merror = EAGAIN;
+		sfwait = SFB_NOWAIT;
+	} else {
+		mwait = M_WAITOK;
+		merror = ENOBUFS;
+		sfwait = SFB_CATCH;
+	}
 
 #ifdef MAC
 	error = mac_socket_check_send(td->td_ucred, so);
@@ -2389,9 +2395,9 @@ vn_sendfile(struct file *fp, int sockfd,
 			else
 				nbytes = 0;
 		}
-		mh = m_uiotombuf(hdr_uio, (mnw ? M_NOWAIT : M_WAITOK), 0, 0, 0);
+		mh = m_uiotombuf(hdr_uio, mwait, 0, 0, 0);
 		if (mh == NULL) {
-			error = mnw ? EAGAIN : ENOBUFS;
+			error = merror;
 			goto out;
 		}
 		hdrlen = m_length(mh, &mhtail);
@@ -2558,8 +2564,9 @@ retry_space:
 			 * threads might exhaust the buffers and then
 			 * deadlock.
 			 */
-			sf = sf_buf_alloc(pg, (mnw || m != NULL) ? SFB_NOWAIT :
-			    SFB_CATCH);
+			if (m != NULL)
+				sfwait = SFB_NOWAIT;
+			sf = sf_buf_alloc(pg, sfwait);
 			if (sf == NULL) {
 				SFSTAT_INC(sf_allocfail);
 				vm_page_lock(pg);
@@ -2568,7 +2575,7 @@ retry_space:
 				    ("%s: object disappeared", __func__));
 				vm_page_unlock(pg);
 				if (m == NULL)
-					error = (mnw ? EAGAIN : EINTR);
+					error = merror;
 				break;
 			}
 
@@ -2576,16 +2583,16 @@ retry_space:
 			 * Get an mbuf and set it up as having
 			 * external storage.
 			 */
-			m0 = m_get((mnw ? M_NOWAIT : M_WAITOK), MT_DATA);
+			m0 = m_get(mwait, MT_DATA);
 			if (m0 == NULL) {
-				error = (mnw ? EAGAIN : ENOBUFS);
+				error = merror;
 				(void)sf_buf_mext(NULL, NULL, sf);
 				break;
 			}
 			if (m_extadd(m0, (caddr_t )sf_buf_kva(sf), PAGE_SIZE,
-			    sf_buf_mext, sfs, sf, M_RDONLY, EXT_SFBUF,
-			    (mnw ? M_NOWAIT : M_WAITOK)) != 0) {
-				error = (mnw ? EAGAIN : ENOBUFS);
+			    sf_buf_mext, sfs, sf, M_RDONLY, EXT_SFBUF, mwait)
+			    != 0) {
+				error = merror;
 				(void)sf_buf_mext(NULL, NULL, sf);
 				m_freem(m0);
 				break;



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