git: c2da954203c0 - main - geom(4): Mark all sysctls as CTLFLAG_MPSAFE.

Alexander Motin mav at FreeBSD.org
Wed Aug 11 00:45:44 UTC 2021


The branch main has been updated by mav:

URL: https://cgit.FreeBSD.org/src/commit/?id=c2da954203c0feb933d3be304710e0346c9ed222

commit c2da954203c0feb933d3be304710e0346c9ed222
Author:     Alexander Motin <mav at FreeBSD.org>
AuthorDate: 2021-08-11 00:18:46 +0000
Commit:     Alexander Motin <mav at FreeBSD.org>
CommitDate: 2021-08-11 00:18:46 +0000

    geom(4): Mark all sysctls as CTLFLAG_MPSAFE.
    
    This code does not use Giant lock for very long time.
    
    MFC after:      2 weeks
---
 sys/geom/cache/g_cache.c     |  4 ++--
 sys/geom/geom_disk.c         |  2 +-
 sys/geom/geom_kern.c         |  6 +++---
 sys/geom/journal/g_journal.c |  6 +++---
 sys/geom/stripe/g_stripe.c   | 16 ++--------------
 sys/geom/zero/g_zero.c       |  2 +-
 6 files changed, 12 insertions(+), 24 deletions(-)

diff --git a/sys/geom/cache/g_cache.c b/sys/geom/cache/g_cache.c
index 05e45e6ea452..2caae5ede0f4 100644
--- a/sys/geom/cache/g_cache.c
+++ b/sys/geom/cache/g_cache.c
@@ -85,11 +85,11 @@ sysctl_handle_pct(SYSCTL_HANDLER_ARGS)
 	return (0);
 }
 SYSCTL_PROC(_kern_geom_cache, OID_AUTO, used_lo,
-    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, &g_cache_used_lo, 0,
+    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, &g_cache_used_lo, 0,
     sysctl_handle_pct, "IU",
     "");
 SYSCTL_PROC(_kern_geom_cache, OID_AUTO, used_hi,
-    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, &g_cache_used_hi, 0,
+    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, &g_cache_used_hi, 0,
     sysctl_handle_pct, "IU",
     "");
 
diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c
index 83d570f7e445..2f0e72fad52d 100644
--- a/sys/geom/geom_disk.c
+++ b/sys/geom/geom_disk.c
@@ -745,7 +745,7 @@ g_disk_create(void *arg, int flag)
 		    "LED name");
 		SYSCTL_ADD_PROC(&sc->sysctl_ctx,
 		    SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO, "flags",
-		    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, dp, 0,
+		    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, dp, 0,
 		    g_disk_sysctl_flags, "A", "Report disk flags");
 	}
 	pp->private = sc;
diff --git a/sys/geom/geom_kern.c b/sys/geom/geom_kern.c
index e06824afc9fd..4b7219591dce 100644
--- a/sys/geom/geom_kern.c
+++ b/sys/geom/geom_kern.c
@@ -208,17 +208,17 @@ SYSCTL_NODE(_kern, OID_AUTO, geom, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
     "GEOMetry management");
 
 SYSCTL_PROC(_kern_geom, OID_AUTO, confxml,
-    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, 0, 0,
+    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, 0,
     sysctl_kern_geom_confxml, "",
     "Dump the GEOM config in XML");
 
 SYSCTL_PROC(_kern_geom, OID_AUTO, confdot,
-    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, 0, 0,
+    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, 0,
     sysctl_kern_geom_confdot, "",
     "Dump the GEOM config in dot");
 
 SYSCTL_PROC(_kern_geom, OID_AUTO, conftxt,
-    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, 0, 0,
+    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, 0,
     sysctl_kern_geom_conftxt, "",
     "Dump the GEOM config in txt");
 
diff --git a/sys/geom/journal/g_journal.c b/sys/geom/journal/g_journal.c
index 0b518d172b5a..7c8c60183bff 100644
--- a/sys/geom/journal/g_journal.c
+++ b/sys/geom/journal/g_journal.c
@@ -129,7 +129,7 @@ g_journal_record_entries_sysctl(SYSCTL_HANDLER_ARGS)
 	return (0);
 }
 SYSCTL_PROC(_kern_geom_journal, OID_AUTO, record_entries,
-    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, NULL, 0,
+    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, 0,
     g_journal_record_entries_sysctl, "I",
     "Maximum number of entires in one journal record");
 SYSCTL_UINT(_kern_geom_journal, OID_AUTO, optimize, CTLFLAG_RW,
@@ -163,7 +163,7 @@ g_journal_cache_limit_sysctl(SYSCTL_HANDLER_ARGS)
 	return (0);
 }
 SYSCTL_PROC(_kern_geom_journal_cache, OID_AUTO, limit,
-    CTLTYPE_ULONG | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, NULL, 0,
+    CTLTYPE_ULONG | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, NULL, 0,
     g_journal_cache_limit_sysctl, "I",
     "Maximum number of allocated bytes");
 SYSCTL_UINT(_kern_geom_journal_cache, OID_AUTO, divisor, CTLFLAG_RDTUN,
@@ -186,7 +186,7 @@ g_journal_cache_switch_sysctl(SYSCTL_HANDLER_ARGS)
 	return (0);
 }
 SYSCTL_PROC(_kern_geom_journal_cache, OID_AUTO, switch,
-    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, NULL, 0,
+    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, 0,
     g_journal_cache_switch_sysctl, "I",
     "Force switch when we hit this percent of cache use");
 SYSCTL_UINT(_kern_geom_journal_cache, OID_AUTO, misses, CTLFLAG_RW,
diff --git a/sys/geom/stripe/g_stripe.c b/sys/geom/stripe/g_stripe.c
index 22cc16753d9a..9b4df1b8dba6 100644
--- a/sys/geom/stripe/g_stripe.c
+++ b/sys/geom/stripe/g_stripe.c
@@ -77,20 +77,8 @@ static u_int g_stripe_debug = 0;
 SYSCTL_UINT(_kern_geom_stripe, OID_AUTO, debug, CTLFLAG_RWTUN, &g_stripe_debug, 0,
     "Debug level");
 static int g_stripe_fast = 0;
-static int
-g_sysctl_stripe_fast(SYSCTL_HANDLER_ARGS)
-{
-	int error, fast;
-
-	fast = g_stripe_fast;
-	error = sysctl_handle_int(oidp, &fast, 0, req);
-	if (error == 0 && req->newptr != NULL)
-		g_stripe_fast = fast;
-	return (error);
-}
-SYSCTL_PROC(_kern_geom_stripe, OID_AUTO, fast,
-    CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, NULL, 0,
-    g_sysctl_stripe_fast, "I",
+SYSCTL_INT(_kern_geom_stripe, OID_AUTO, fast,
+    CTLFLAG_RWTUN, &g_stripe_fast, 0,
     "Fast, but memory-consuming, mode");
 static u_long g_stripe_maxmem;
 SYSCTL_ULONG(_kern_geom_stripe, OID_AUTO, maxmem,
diff --git a/sys/geom/zero/g_zero.c b/sys/geom/zero/g_zero.c
index ef43a032d470..c533a758a236 100644
--- a/sys/geom/zero/g_zero.c
+++ b/sys/geom/zero/g_zero.c
@@ -49,7 +49,7 @@ static SYSCTL_NODE(_kern_geom, OID_AUTO, zero, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
     "GEOM_ZERO stuff");
 static int g_zero_clear = 1;
 SYSCTL_PROC(_kern_geom_zero, OID_AUTO, clear,
-    CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, &g_zero_clear, 0,
+    CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, &g_zero_clear, 0,
     g_zero_clear_sysctl, "I",
     "Clear read data buffer");
 static int g_zero_byte = 0;


More information about the dev-commits-src-all mailing list