MCPcopy Create free account
hub / github.com/F-Stack/f-stack / rctl_get_available

Function rctl_get_available

freebsd/kern/kern_rctl.c:728–765  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

726}
727
728uint64_t
729rctl_get_available(struct proc *p, int resource)
730{
731 struct rctl_rule *rule;
732 struct rctl_rule_link *link;
733 int64_t available, minavailable, allocated;
734
735 minavailable = INT64_MAX;
736
737 ASSERT_RACCT_ENABLED();
738 RACCT_LOCK_ASSERT();
739
740 /*
741 * There may be more than one matching rule; go through all of them.
742 * Denial should be done last, after logging and sending signals.
743 */
744 LIST_FOREACH(link, &p->p_racct->r_rule_links, rrl_next) {
745 rule = link->rrl_rule;
746 if (rule->rr_resource != resource)
747 continue;
748 if (rule->rr_action != RCTL_ACTION_DENY)
749 continue;
750 available = rctl_available_resource(p, rule);
751 if (available < minavailable)
752 minavailable = available;
753 }
754
755 /*
756 * XXX: Think about this _hard_.
757 */
758 allocated = p->p_racct->r_resources[resource];
759 if (minavailable < INT64_MAX - allocated)
760 minavailable += allocated;
761 if (minavailable < 0)
762 minavailable = 0;
763
764 return (minavailable);
765}
766
767static int
768rctl_rule_matches(const struct rctl_rule *rule, const struct rctl_rule *filter)

Callers 1

racct_get_availableFunction · 0.85

Calls 1

rctl_available_resourceFunction · 0.85

Tested by

no test coverage detected