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>