Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 20 Feb 2011 17:20:16 GMT
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 188977 for review
Message-ID:  <201102201720.p1KHKGW9041421@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@188977?ac=10

Change 188977 by trasz@trasz_victim on 2011/02/20 17:19:36

	Properly pass error from rctl_string_to_rule().

Affected files ...

.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_rctl.c#34 edit

Differences ...

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_rctl.c#34 (text+ko) ====

@@ -780,8 +780,8 @@
 	return (1);
 }
 
-static struct rctl_rule *
-rctl_rule_from_string(char *rulestr)
+static int
+rctl_string_to_rule(char *rulestr, struct rctl_rule **rulep)
 {
 	int error = 0;
 	char *subjectstr, *subject_idstr, *resourcestr, *actionstr,
@@ -862,7 +862,7 @@
 			mtx_unlock(&rule->rr_subject.rs_prison->pr_mtx);
 			break;
                default:
-                       panic("rctl_rule_from_string: unknown subject type %d",
+                       panic("rctl_string_to_rule: unknown subject type %d",
                            rule->rr_subject_type);
                }
 	}
@@ -903,12 +903,12 @@
 	}
 
 out:
-	if (error != 0) {
+	if (error == 0)
+		*rulep = rule;
+	else
 		rctl_rule_release(rule);
-		return (NULL);
-	}
 
-	return (rule);
+	return (error);
 }
 
 /*
@@ -1230,12 +1230,12 @@
 
 	sx_slock(&allproc_lock);
 	sx_slock(&allprison_lock);
-	filter = rctl_rule_from_string(inputstr);
+	error = rctl_string_to_rule(inputstr, &filter);
 	free(inputstr, M_RCTL);
-	if (filter == NULL) {
+	if (error != 0) {
 		sx_sunlock(&allprison_lock);
 		sx_sunlock(&allproc_lock);
-		return (EINVAL);
+		return (error);
 	}
 
 	switch (filter->rr_subject_type) {
@@ -1328,12 +1328,12 @@
 
 	sx_slock(&allproc_lock);
 	sx_slock(&allprison_lock);
-	filter = rctl_rule_from_string(inputstr);
+	error = rctl_string_to_rule(inputstr, &filter);
 	free(inputstr, M_RCTL);
-	if (filter == NULL) {
+	if (error != 0) {
 		sx_sunlock(&allprison_lock);
 		sx_sunlock(&allproc_lock);
-		return (EINVAL);
+		return (error);
 	}
 
 again:
@@ -1404,12 +1404,12 @@
 
 	sx_slock(&allproc_lock);
 	sx_slock(&allprison_lock);
-	filter = rctl_rule_from_string(inputstr);
+	error = rctl_string_to_rule(inputstr, &filter);
 	free(inputstr, M_RCTL);
-	if (filter == NULL) {
+	if (error != 0) {
 		sx_sunlock(&allprison_lock);
 		sx_sunlock(&allproc_lock);
-		return (EINVAL);
+		return (error);
 	}
 
 	if (filter->rr_subject_type == RCTL_SUBJECT_TYPE_UNDEFINED) {
@@ -1480,12 +1480,12 @@
 
 	sx_slock(&allproc_lock);
 	sx_slock(&allprison_lock);
-	rule = rctl_rule_from_string(inputstr);
+	error = rctl_string_to_rule(inputstr, &rule);
 	free(inputstr, M_RCTL);
-	if (rule == NULL) {
+	if (error != 0) {
 		sx_sunlock(&allprison_lock);
 		sx_sunlock(&allproc_lock);
-		return (EINVAL);
+		return (error);
 	}
 	/*
 	 * The 'per' part of a rule is optional.
@@ -1525,12 +1525,12 @@
 
 	sx_slock(&allproc_lock);
 	sx_slock(&allprison_lock);
-	filter = rctl_rule_from_string(inputstr);
+	error = rctl_string_to_rule(inputstr, &filter);
 	free(inputstr, M_RCTL);
-	if (filter == NULL) {
+	if (error != 0) {
 		sx_sunlock(&allprison_lock);
 		sx_sunlock(&allproc_lock);
-		return (EINVAL);
+		return (error);
 	}
 
 	error = rctl_rule_remove(filter);



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