From owner-svn-src-user@FreeBSD.ORG Fri Nov 20 23:14:09 2009 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 312DD1065670; Fri, 20 Nov 2009 23:14:09 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0562D8FC18; Fri, 20 Nov 2009 23:14:09 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAKNE8Tf059222; Fri, 20 Nov 2009 23:14:08 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAKNE8f8059220; Fri, 20 Nov 2009 23:14:08 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911202314.nAKNE8f8059220@svn.freebsd.org> From: Kip Macy Date: Fri, 20 Nov 2009 23:14:08 +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: r199618 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs 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: Fri, 20 Nov 2009 23:14:09 -0000 Author: kmacy Date: Fri Nov 20 23:14:08 2009 New Revision: 199618 URL: http://svn.freebsd.org/changeset/base/199618 Log: - call in to zio pipeline even in the case of a page cache hit, but bypass the I/O stages Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Nov 20 22:22:53 2009 (r199617) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Nov 20 23:14:08 2009 (r199618) @@ -1303,17 +1303,21 @@ arc_buf_add_ref(arc_buf_t *buf, void* ta void arc_binval(spa_t *spa, dva_t *dva) { - uint64_t blkno = dva->dva_word[1] & ~(1UL<<63); - struct vnode *vp = spa_get_vnode(spa); - struct bufobj *bo = &vp->v_bufobj; + uint64_t blkno; + struct vnode *vp; + struct bufobj *bo; struct buf *bp; if (zfs_page_cache_disable) return; - if (blkno == 0) + if (dva == NULL || spa == NULL || blkno == 0) return; + blkno = dva->dva_word[1] & ~(1UL<<63); + vp = spa_get_vnode(spa); + bo = &vp->v_bufobj; + BO_LOCK(bo); bp = gbincore(bo, blkno); if (bp != NULL) { @@ -1408,7 +1412,7 @@ arc_getblk(arc_buf_t *buf) bo = &vp->v_bufobj; newbp = NULL; - if ((size < PAGE_SIZE)) { + if (size < PAGE_SIZE) { data = zio_buf_alloc(size); } else if ((buf->b_hdr->b_flags & ARC_BUF_CLONING) || BUF_EMPTY(buf->b_hdr)) { @@ -2961,21 +2965,6 @@ top: ASSERT(hdr->b_datacnt == 0); hdr->b_datacnt = 1; } - /* - * We hit in the page cache - * - */ - if (buf->b_bp != NULL) { - if ((buf->b_bp->b_flags & (B_CACHE|B_INVAL)) == B_CACHE) { - /* - * track the number of times - * the buffer was found in the cache - */ - ARCSTAT_BUMP(arcstat_page_cache_hits); - mutex_exit(hash_lock); - goto top; - } - } acb = kmem_zalloc(sizeof (arc_callback_t), KM_SLEEP); acb->acb_done = done; @@ -3077,6 +3066,20 @@ top: rzio = zio_read(pio, spa, bp, buf->b_data, size, arc_read_done, buf, priority, zio_flags, zb); + /* + * We hit in the page cache + * + */ + if ((buf->b_bp != NULL) && + ((buf->b_bp->b_flags & (B_CACHE|B_INVAL)) == B_CACHE)) { + /* + * track the number of times + * the buffer was found in the cache + */ + ARCSTAT_BUMP(arcstat_page_cache_hits); + rzio->io_pipeline = ZIO_INTERLOCK_STAGES; + } + if (*arc_flags & ARC_WAIT) return (zio_wait(rzio));