Date: Mon, 26 Aug 2013 07:48:50 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r254898 - projects/camlock/sys/geom/raid Message-ID: <201308260748.r7Q7mots089832@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mav Date: Mon Aug 26 07:48:50 2013 New Revision: 254898 URL: http://svnweb.freebsd.org/changeset/base/254898 Log: Declare partial (receive sides only) direct dispatch support for GEOM RAID. All real work is done in separate thread, so this just allows to switch there easier. System-wide this saves up to 25% of context switches per request. Unfortunately we can't allow direct send there due to the sxlock held during respective calls. Modified: projects/camlock/sys/geom/raid/g_raid.c projects/camlock/sys/geom/raid/md_ddf.c projects/camlock/sys/geom/raid/md_intel.c projects/camlock/sys/geom/raid/md_jmicron.c projects/camlock/sys/geom/raid/md_nvidia.c projects/camlock/sys/geom/raid/md_promise.c projects/camlock/sys/geom/raid/md_sii.c Modified: projects/camlock/sys/geom/raid/g_raid.c ============================================================================== --- projects/camlock/sys/geom/raid/g_raid.c Mon Aug 26 07:17:41 2013 (r254897) +++ projects/camlock/sys/geom/raid/g_raid.c Mon Aug 26 07:48:50 2013 (r254898) @@ -792,6 +792,7 @@ g_raid_open_consumer(struct g_raid_softc if (pp == NULL) return (NULL); cp = g_new_consumer(sc->sc_geom); + cp->flags |= G_CF_DIRECT_RECEIVE; if (g_attach(cp, pp) != 0) { g_destroy_consumer(cp); return (NULL); @@ -1673,6 +1674,7 @@ g_raid_launch_provider(struct g_raid_vol } pp = g_new_providerf(sc->sc_geom, "%s", name); + pp->flags |= G_PF_DIRECT_RECEIVE; pp->private = vol; pp->mediasize = vol->v_mediasize; pp->sectorsize = vol->v_sectorsize; @@ -2247,6 +2249,7 @@ g_raid_taste(struct g_class *mp, struct */ gp->orphan = g_raid_taste_orphan; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_RECEIVE; g_attach(cp, pp); geom = NULL; Modified: projects/camlock/sys/geom/raid/md_ddf.c ============================================================================== --- projects/camlock/sys/geom/raid/md_ddf.c Mon Aug 26 07:17:41 2013 (r254897) +++ projects/camlock/sys/geom/raid/md_ddf.c Mon Aug 26 07:48:50 2013 (r254898) @@ -2143,6 +2143,7 @@ g_raid_md_taste_ddf(struct g_raid_md_obj } rcp = g_new_consumer(geom); + rcp->flags |= G_CF_DIRECT_RECEIVE; g_attach(rcp, pp); if (g_access(rcp, 1, 1, 1) != 0) ; //goto fail1; Modified: projects/camlock/sys/geom/raid/md_intel.c ============================================================================== --- projects/camlock/sys/geom/raid/md_intel.c Mon Aug 26 07:17:41 2013 (r254897) +++ projects/camlock/sys/geom/raid/md_intel.c Mon Aug 26 07:48:50 2013 (r254898) @@ -1477,6 +1477,7 @@ search: } rcp = g_new_consumer(geom); + rcp->flags |= G_CF_DIRECT_RECEIVE; g_attach(rcp, pp); if (g_access(rcp, 1, 1, 1) != 0) ; //goto fail1; Modified: projects/camlock/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/camlock/sys/geom/raid/md_jmicron.c Mon Aug 26 07:17:41 2013 (r254897) +++ projects/camlock/sys/geom/raid/md_jmicron.c Mon Aug 26 07:48:50 2013 (r254898) @@ -923,6 +923,7 @@ search: } rcp = g_new_consumer(geom); + rcp->flags |= G_CF_DIRECT_RECEIVE; g_attach(rcp, pp); if (g_access(rcp, 1, 1, 1) != 0) ; //goto fail1; Modified: projects/camlock/sys/geom/raid/md_nvidia.c ============================================================================== --- projects/camlock/sys/geom/raid/md_nvidia.c Mon Aug 26 07:17:41 2013 (r254897) +++ projects/camlock/sys/geom/raid/md_nvidia.c Mon Aug 26 07:48:50 2013 (r254898) @@ -919,6 +919,7 @@ search: } rcp = g_new_consumer(geom); + rcp->flags |= G_CF_DIRECT_RECEIVE; g_attach(rcp, pp); if (g_access(rcp, 1, 1, 1) != 0) ; //goto fail1; Modified: projects/camlock/sys/geom/raid/md_promise.c ============================================================================== --- projects/camlock/sys/geom/raid/md_promise.c Mon Aug 26 07:17:41 2013 (r254897) +++ projects/camlock/sys/geom/raid/md_promise.c Mon Aug 26 07:48:50 2013 (r254898) @@ -1176,6 +1176,7 @@ search: } rcp = g_new_consumer(geom); + rcp->flags |= G_CF_DIRECT_RECEIVE; g_attach(rcp, pp); if (g_access(rcp, 1, 1, 1) != 0) ; //goto fail1; Modified: projects/camlock/sys/geom/raid/md_sii.c ============================================================================== --- projects/camlock/sys/geom/raid/md_sii.c Mon Aug 26 07:17:41 2013 (r254897) +++ projects/camlock/sys/geom/raid/md_sii.c Mon Aug 26 07:48:50 2013 (r254898) @@ -1012,6 +1012,7 @@ search: } rcp = g_new_consumer(geom); + rcp->flags |= G_CF_DIRECT_RECEIVE; g_attach(rcp, pp); if (g_access(rcp, 1, 1, 1) != 0) ; //goto fail1;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201308260748.r7Q7mots089832>