PERFORCE change 188977 for review
    Edward Tomasz Napierala 
    trasz at FreeBSD.org
       
    Sun Feb 20 17:20:17 UTC 2011
    
    
  
http://p4web.freebsd.org/@@188977?ac=10
Change 188977 by trasz at 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);
    
    
More information about the p4-projects
mailing list