From owner-svn-src-projects@FreeBSD.ORG Sun Dec 1 19:55:52 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 931EAA05; Sun, 1 Dec 2013 19:55:52 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 7321817DA; Sun, 1 Dec 2013 19:55:52 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rB1JtqWX082537; Sun, 1 Dec 2013 19:55:52 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rB1JtqZe082536; Sun, 1 Dec 2013 19:55:52 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201312011955.rB1JtqZe082536@svn.freebsd.org> From: Gleb Smirnoff Date: Sun, 1 Dec 2013 19:55:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r258809 - projects/sendfile/sys/kern X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Dec 2013 19:55:52 -0000 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;