svn commit: r254898 - projects/camlock/sys/geom/raid
Alexander Motin
mav at FreeBSD.org
Mon Aug 26 07:48:52 UTC 2013
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;
More information about the svn-src-projects
mailing list