From owner-svn-src-projects@FreeBSD.ORG Tue Dec 24 09:19:50 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 2828A539; Tue, 24 Dec 2013 09:19:50 +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 13F071D87; Tue, 24 Dec 2013 09:19:50 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rBO9JnU6008165; Tue, 24 Dec 2013 09:19:49 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.7/8.14.7/Submit) id rBO9Jn9q008164; Tue, 24 Dec 2013 09:19:49 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201312240919.rBO9Jn9q008164@svn.freebsd.org> From: Gleb Smirnoff Date: Tue, 24 Dec 2013 09:19:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r259819 - 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.17 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: Tue, 24 Dec 2013 09:19:50 -0000 Author: glebius Date: Tue Dec 24 09:19:49 2013 New Revision: 259819 URL: http://svnweb.freebsd.org/changeset/base/259819 Log: Inline functions are more readable. Modified: projects/sendfile/sys/kern/uipc_syscalls.c Modified: projects/sendfile/sys/kern/uipc_syscalls.c ============================================================================== --- projects/sendfile/sys/kern/uipc_syscalls.c Tue Dec 24 08:49:55 2013 (r259818) +++ projects/sendfile/sys/kern/uipc_syscalls.c Tue Dec 24 09:19:49 2013 (r259819) @@ -2089,44 +2089,62 @@ freebsd4_sendfile(struct thread *td, str } #endif /* COMPAT_FREEBSD4 */ + /* + * How much data to put into page i of n. + * Only first and last pages are special. + */ +static inline off_t +xfsize(int i, int n, off_t off, off_t len) +{ + + if (i == 0) + return (omin(PAGE_SIZE - (off & PAGE_MASK), len)); + + if (i == n - 1) + return ((off + len) & PAGE_MASK); + + return (PAGE_SIZE); +} + +/* + * Offset within object for i page. + */ +static inline vm_offset_t +vmoff(int i, off_t off) +{ + + if (i == 0) + return ((vm_offset_t)off); + + return (trunc_page(off + i * PAGE_SIZE)); +} + static void sendfile_swapin(vm_object_t obj, vm_page_t *pa, int npages, off_t off, off_t len) { int rv; - /* - * Macros to calculate size and offset for given (i) page, - * starting from offset (o) with maximum length of (l). - * Used in this function and vn_sendfile(). - */ -#define XFSIZE(i, o, l) ((i) == 0 ? \ - omin(PAGE_SIZE - ((o) & PAGE_MASK), (l)) : \ - ((i) == (npages - 1) ? \ - (((o) + (l)) & PAGE_MASK) : PAGE_SIZE)) -#define OFFSET(i, o) (vm_offset_t)((i) == 0 ? (o) : \ - trunc_page((o) + i * PAGE_SIZE)) - VM_OBJECT_WLOCK(obj); for (int i = 0; i < npages; i++) - pa[i] = vm_page_grab(obj, OFF_TO_IDX(OFFSET(i, off)), + pa[i] = vm_page_grab(obj, OFF_TO_IDX(vmoff(i, off)), VM_ALLOC_WIRED | VM_ALLOC_NORMAL); for (int i = 0; i < npages; i++) { int j, a; - if (vm_page_is_valid(pa[i], OFFSET(i, off) & PAGE_MASK, - XFSIZE(i, off, len))) { + if (vm_page_is_valid(pa[i], vmoff(i, off) & PAGE_MASK, + xfsize(i, npages, off, len))) { vm_page_xunbusy(pa[i]); continue; } for (j = i + 1; j < npages; j++) - if (vm_page_is_valid(pa[j], OFFSET(j, off) & PAGE_MASK, - XFSIZE(j, off, len))) + if (vm_page_is_valid(pa[j], vmoff(j, off) & PAGE_MASK, + xfsize(j, npages, off, len))) break; - while (!vm_pager_has_page(obj, OFF_TO_IDX(OFFSET(i, off)), + while (!vm_pager_has_page(obj, OFF_TO_IDX(vmoff(i, off)), NULL, &a) && i < j) { pmap_zero_page(pa[i]); pa[i]->valid = VM_PAGE_BITS_ALL; @@ -2147,17 +2165,17 @@ sendfile_swapin(vm_object_t obj, vm_page i += a; for (j = i - a; a > 0 && j < npages; a--, j++) KASSERT(pa[j] == vm_page_lookup(obj, - OFF_TO_IDX(OFFSET(j, off))), + OFF_TO_IDX(vmoff(j, off))), ("pa[j] %p lookup %p\n", pa[j], - vm_page_lookup(obj, OFF_TO_IDX(OFFSET(j, off))))); + vm_page_lookup(obj, OFF_TO_IDX(vmoff(j, off))))); } for (int i = 0; i < npages; i++) KASSERT((pa[i]->wire_count > 0 && vm_page_is_valid(pa[i], - OFFSET(i, off) & PAGE_MASK, XFSIZE(i, off, len))), + vmoff(i, off) & PAGE_MASK, xfsize(i, npages, off, len))), ("wrong page %p state off 0x%jx len 0x%jx", - pa[i], (uintmax_t)OFFSET(i, off), - (uintmax_t)XFSIZE(i, off, len))); + pa[i], (uintmax_t)vmoff(i, off), + (uintmax_t)xfsize(i, npages, off, len))); VM_OBJECT_WUNLOCK(obj); } @@ -2513,8 +2531,8 @@ retry_space: break; } m0->m_data = (char *)sf_buf_kva(sf) + - (OFFSET(i, off) & PAGE_MASK); - m0->m_len = XFSIZE(i, off, space); + (vmoff(i, off) & PAGE_MASK); + m0->m_len = xfsize(i, npages, off, space); /* Append to mbuf chain. */ if (mtail != NULL)