From owner-svn-src-user@FreeBSD.ORG Mon Oct 31 00:10:12 2011 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 28132106566B; Mon, 31 Oct 2011 00:10:12 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 184FC8FC0C; Mon, 31 Oct 2011 00:10:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p9V0ABfb090764; Mon, 31 Oct 2011 00:10:11 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p9V0ABwh090762; Mon, 31 Oct 2011 00:10:11 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201110310010.p9V0ABwh090762@svn.freebsd.org> From: Jeff Roberson Date: Mon, 31 Oct 2011 00:10:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r226954 - user/attilio/vmcontention/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Oct 2011 00:10:12 -0000 Author: jeff Date: Mon Oct 31 00:10:11 2011 New Revision: 226954 URL: http://svn.freebsd.org/changeset/base/226954 Log: - Convert object->cache usage to the radix tree. Modified: user/attilio/vmcontention/sys/kern/uipc_shm.c Modified: user/attilio/vmcontention/sys/kern/uipc_shm.c ============================================================================== --- user/attilio/vmcontention/sys/kern/uipc_shm.c Sun Oct 30 23:31:03 2011 (r226953) +++ user/attilio/vmcontention/sys/kern/uipc_shm.c Mon Oct 31 00:10:11 2011 (r226954) @@ -289,10 +289,23 @@ shm_dotruncate(struct shmfd *shmfd, off_ * a page swapped out to disk? */ if ((length & PAGE_MASK) && - (m = vm_page_lookup(object, OFF_TO_IDX(length))) != NULL && - m->valid != 0) { - int base = (int)length & PAGE_MASK; - int size = PAGE_SIZE - base; + (m = vm_radix_lookup(&object->rtree, OFF_TO_IDX(length), + VM_RADIX_ANY)) != NULL) { + int base; + int size; + + if (m->flags & PG_CACHED) { + mtx_lock(&vm_page_queue_free_mtx); + if (m->object == object) + vm_page_cache_remove(m); + mtx_unlock(&vm_page_queue_free_mtx); + goto out; + } + if (m->valid != 0 || m->object != object) + goto out; + + base = (int)length & PAGE_MASK; + size = PAGE_SIZE - base; pmap_zero_page_area(m, base, size); @@ -311,10 +324,6 @@ shm_dotruncate(struct shmfd *shmfd, off_ base = roundup2(base, DEV_BSIZE); vm_page_clear_dirty(m, base, PAGE_SIZE - base); - } else if ((length & PAGE_MASK) && - __predict_false(object->cache != NULL)) { - vm_page_cache_free(object, OFF_TO_IDX(length), - nobjsize); } } else { @@ -326,6 +335,7 @@ shm_dotruncate(struct shmfd *shmfd, off_ } object->charge += delta; } +out: shmfd->shm_size = length; mtx_lock(&shm_timestamp_lock); vfs_timestamp(&shmfd->shm_ctime);