From owner-svn-src-projects@FreeBSD.ORG Mon Aug 26 15:34:19 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 ESMTP id 99D7198F; Mon, 26 Aug 2013 15:34:19 +0000 (UTC) (envelope-from mav@FreeBSD.org) 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 6D10A2BEF; Mon, 26 Aug 2013 15:34:19 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r7QFYJaj045323; Mon, 26 Aug 2013 15:34:19 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r7QFYJAT045321; Mon, 26 Aug 2013 15:34:19 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201308261534.r7QFYJAT045321@svn.freebsd.org> From: Alexander Motin Date: Mon, 26 Aug 2013 15:34:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r254912 - projects/camlock/sys/geom/nop 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.14 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: Mon, 26 Aug 2013 15:34:19 -0000 Author: mav Date: Mon Aug 26 15:34:18 2013 New Revision: 254912 URL: http://svnweb.freebsd.org/changeset/base/254912 Log: Make GEOM NOP support direct dispatch by locking statistics update. Modified: projects/camlock/sys/geom/nop/g_nop.c projects/camlock/sys/geom/nop/g_nop.h Modified: projects/camlock/sys/geom/nop/g_nop.c ============================================================================== --- projects/camlock/sys/geom/nop/g_nop.c Mon Aug 26 14:14:25 2013 (r254911) +++ projects/camlock/sys/geom/nop/g_nop.c Mon Aug 26 15:34:18 2013 (r254912) @@ -107,6 +107,7 @@ g_nop_start(struct bio *bp) gp = bp->bio_to->geom; sc = gp->softc; G_NOP_LOGREQ(bp, "Request received."); + mtx_lock(&sc->sc_lock); switch (bp->bio_cmd) { case BIO_READ: sc->sc_reads++; @@ -119,6 +120,7 @@ g_nop_start(struct bio *bp) failprob = sc->sc_wfailprob; break; } + mtx_unlock(&sc->sc_lock); if (failprob > 0) { u_int rval; @@ -224,6 +226,7 @@ g_nop_create(struct gctl_req *req, struc sc->sc_writes = 0; sc->sc_readbytes = 0; sc->sc_wrotebytes = 0; + mtx_init(&sc->sc_lock, "gnop lock", NULL, MTX_DEF); gp->softc = sc; gp->start = g_nop_start; gp->orphan = g_nop_orphan; @@ -232,10 +235,12 @@ g_nop_create(struct gctl_req *req, struc gp->dumpconf = g_nop_dumpconf; newpp = g_new_providerf(gp, "%s", gp->name); + newpp->flags |= G_PF_DIRECT_SEND | G_PF_DIRECT_RECEIVE; newpp->mediasize = size; newpp->sectorsize = secsize; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error != 0) { gctl_error(req, "Cannot attach to provider %s.", pp->name); @@ -251,6 +256,7 @@ fail: g_detach(cp); g_destroy_consumer(cp); g_destroy_provider(newpp); + mtx_destroy(&sc->sc_lock); g_free(gp->softc); g_destroy_geom(gp); return (error); @@ -259,10 +265,12 @@ fail: static int g_nop_destroy(struct g_geom *gp, boolean_t force) { + struct g_nop_softc *sc; struct g_provider *pp; g_topology_assert(); - if (gp->softc == NULL) + sc = gp->softc; + if (sc == NULL) return (ENXIO); pp = LIST_FIRST(&gp->provider); if (pp != NULL && (pp->acr != 0 || pp->acw != 0 || pp->ace != 0)) { @@ -277,8 +285,9 @@ g_nop_destroy(struct g_geom *gp, boolean } else { G_NOP_DEBUG(0, "Device %s removed.", gp->name); } - g_free(gp->softc); gp->softc = NULL; + mtx_destroy(&sc->sc_lock); + g_free(sc); g_wither_geom(gp, ENXIO); return (0); Modified: projects/camlock/sys/geom/nop/g_nop.h ============================================================================== --- projects/camlock/sys/geom/nop/g_nop.h Mon Aug 26 14:14:25 2013 (r254911) +++ projects/camlock/sys/geom/nop/g_nop.h Mon Aug 26 15:34:18 2013 (r254912) @@ -65,6 +65,7 @@ struct g_nop_softc { uintmax_t sc_writes; uintmax_t sc_readbytes; uintmax_t sc_wrotebytes; + struct mtx sc_lock; }; #endif /* _KERNEL */