Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Apr 2017 06:33:08 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r317352 - stable/10/usr.sbin/ctld
Message-ID:  <201704240633.v3O6X8uU012184@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Mon Apr 24 06:33:08 2017
New Revision: 317352
URL: https://svnweb.freebsd.org/changeset/base/317352

Log:
  MFC r316677: Do not register in CTL portal groups without portals.
  
  From config synthax point of view such portal groups are not incorrect,
  but they are useless since can not receive any connection.  And since
  CTL port resource is very limited, it is good to save it.

Modified:
  stable/10/usr.sbin/ctld/ctld.c
  stable/10/usr.sbin/ctld/ctld.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/usr.sbin/ctld/ctld.c
==============================================================================
--- stable/10/usr.sbin/ctld/ctld.c	Mon Apr 24 06:32:35 2017	(r317351)
+++ stable/10/usr.sbin/ctld/ctld.c	Mon Apr 24 06:33:08 2017	(r317352)
@@ -1219,7 +1219,6 @@ port_new(struct conf *conf, struct targe
 	port->p_target = target;
 	TAILQ_INSERT_TAIL(&pg->pg_ports, port, p_pgs);
 	port->p_portal_group = pg;
-	port->p_foreign = pg->pg_foreign;
 	return (port);
 }
 
@@ -1292,6 +1291,19 @@ port_delete(struct port *port)
 	free(port);
 }
 
+int
+port_is_dummy(struct port *port)
+{
+
+	if (port->p_portal_group) {
+		if (port->p_portal_group->pg_foreign)
+			return (1);
+		if (TAILQ_EMPTY(&port->p_portal_group->pg_portals))
+			return (1);
+	}
+	return (0);
+}
+
 struct target *
 target_new(struct conf *conf, const char *name)
 {
@@ -1867,10 +1879,10 @@ conf_apply(struct conf *oldconf, struct 
 	 * and missing in the new one.
 	 */
 	TAILQ_FOREACH_SAFE(oldport, &oldconf->conf_ports, p_next, tmpport) {
-		if (oldport->p_foreign)
+		if (port_is_dummy(oldport))
 			continue;
 		newport = port_find(newconf, oldport->p_name);
-		if (newport != NULL && !newport->p_foreign)
+		if (newport != NULL && !port_is_dummy(newport))
 			continue;
 		log_debugx("removing port \"%s\"", oldport->p_name);
 		error = kernel_port_remove(oldport);
@@ -1990,11 +2002,11 @@ conf_apply(struct conf *oldconf, struct 
 	 * Now add new ports or modify existing ones.
 	 */
 	TAILQ_FOREACH(newport, &newconf->conf_ports, p_next) {
-		if (newport->p_foreign)
+		if (port_is_dummy(newport))
 			continue;
 		oldport = port_find(oldconf, newport->p_name);
 
-		if (oldport == NULL || oldport->p_foreign) {
+		if (oldport == NULL || port_is_dummy(oldport)) {
 			log_debugx("adding port \"%s\"", newport->p_name);
 			error = kernel_port_add(newport);
 		} else {

Modified: stable/10/usr.sbin/ctld/ctld.h
==============================================================================
--- stable/10/usr.sbin/ctld/ctld.h	Mon Apr 24 06:32:35 2017	(r317351)
+++ stable/10/usr.sbin/ctld/ctld.h	Mon Apr 24 06:33:08 2017	(r317352)
@@ -149,7 +149,6 @@ struct port {
 	struct portal_group		*p_portal_group;
 	struct pport			*p_pport;
 	struct target			*p_target;
-	int				p_foreign;
 
 	uint32_t			p_ctl_port;
 };
@@ -363,6 +362,7 @@ struct port		*port_find(const struct con
 struct port		*port_find_in_pg(const struct portal_group *pg,
 			    const char *target);
 void			port_delete(struct port *port);
+int			port_is_dummy(struct port *port);
 
 struct target		*target_new(struct conf *conf, const char *name);
 void			target_delete(struct target *target);



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