Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Jul 2020 22:30:55 +0000 (UTC)
From:      Xin LI <delphij@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r363585 - head/sys/geom
Message-ID:  <202007262230.06QMUtBi085623@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: delphij
Date: Sun Jul 26 22:30:55 2020
New Revision: 363585
URL: https://svnweb.freebsd.org/changeset/base/363585

Log:
  gctl_get_geom: Skip validation of g_class.
  
  The caller from kernel is expected to provide an valid g_class
  pointer, instead of traversing the global g_class list, just
  use that pointer directly instead.
  
  Reviewed by:		mav
  MFC after:		2 weeks
  Differential Revision:	https://reviews.freebsd.org/D25811

Modified:
  head/sys/geom/geom.h
  head/sys/geom/geom_ctl.c

Modified: head/sys/geom/geom.h
==============================================================================
--- head/sys/geom/geom.h	Sun Jul 26 22:30:01 2020	(r363584)
+++ head/sys/geom/geom.h	Sun Jul 26 22:30:55 2020	(r363585)
@@ -434,7 +434,7 @@ void *gctl_get_paraml(struct gctl_req *req, const char
 void *gctl_get_paraml_opt(struct gctl_req *req, const char *param, int len);
 int gctl_error(struct gctl_req *req, const char *fmt, ...) __printflike(2, 3);
 struct g_class *gctl_get_class(struct gctl_req *req, char const *arg);
-struct g_geom *gctl_get_geom(struct gctl_req *req, struct g_class *mpr, char const *arg);
+struct g_geom *gctl_get_geom(struct gctl_req *req, struct g_class *mp, char const *arg);
 struct g_provider *gctl_get_provider(struct gctl_req *req, char const *arg);
 
 #endif /* _GEOM_GEOM_H_ */

Modified: head/sys/geom/geom_ctl.c
==============================================================================
--- head/sys/geom/geom_ctl.c	Sun Jul 26 22:30:01 2020	(r363584)
+++ head/sys/geom/geom_ctl.c	Sun Jul 26 22:30:55 2020	(r363585)
@@ -409,25 +409,20 @@ gctl_get_class(struct gctl_req *req, char const *arg)
 }
 
 struct g_geom *
-gctl_get_geom(struct gctl_req *req, struct g_class *mpr, char const *arg)
+gctl_get_geom(struct gctl_req *req, struct g_class *mp, char const *arg)
 {
 	char const *p;
-	struct g_class *mp;
 	struct g_geom *gp;
 
+	MPASS(mp != NULL);
 	p = gctl_get_asciiparam(req, arg);
 	if (p == NULL) {
 		gctl_error(req, "Missing %s argument", arg);
 		return (NULL);
 	}
-	LIST_FOREACH(mp, &g_classes, class) {
-		if (mpr != NULL && mpr != mp)
-			continue;
-		LIST_FOREACH(gp, &mp->geom, geom) {
-			if (!strcmp(p, gp->name))
-				return (gp);
-		}
-	}
+	LIST_FOREACH(gp, &mp->geom, geom)
+		if (!strcmp(p, gp->name))
+			return (gp);
 	gctl_error(req, "Geom not found: \"%s\"", p);
 	return (NULL);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202007262230.06QMUtBi085623>