Lines Matching refs:ucounts
11 struct ucounts init_ucounts = {
132 static struct ucounts *find_ucounts(struct user_namespace *ns, kuid_t uid, in find_ucounts()
135 struct ucounts *ucounts; in find_ucounts() local
139 hlist_nulls_for_each_entry_rcu(ucounts, pos, hashent, node) { in find_ucounts()
140 if (uid_eq(ucounts->uid, uid) && (ucounts->ns == ns)) { in find_ucounts()
141 if (rcuref_get(&ucounts->count)) in find_ucounts()
142 return ucounts; in find_ucounts()
148 static void hlist_add_ucounts(struct ucounts *ucounts) in hlist_add_ucounts() argument
150 struct hlist_nulls_head *hashent = ucounts_hashentry(ucounts->ns, ucounts->uid); in hlist_add_ucounts()
153 hlist_nulls_add_head_rcu(&ucounts->node, hashent); in hlist_add_ucounts()
157 struct ucounts *alloc_ucounts(struct user_namespace *ns, kuid_t uid) in alloc_ucounts()
160 struct ucounts *ucounts, *new; in alloc_ucounts() local
162 ucounts = find_ucounts(ns, uid, hashent); in alloc_ucounts()
163 if (ucounts) in alloc_ucounts()
164 return ucounts; in alloc_ucounts()
175 ucounts = find_ucounts(ns, uid, hashent); in alloc_ucounts()
176 if (ucounts) { in alloc_ucounts()
179 return ucounts; in alloc_ucounts()
188 void put_ucounts(struct ucounts *ucounts) in put_ucounts() argument
192 if (rcuref_put(&ucounts->count)) { in put_ucounts()
194 hlist_nulls_del_rcu(&ucounts->node); in put_ucounts()
197 put_user_ns(ucounts->ns); in put_ucounts()
198 kfree_rcu(ucounts, rcu); in put_ucounts()
216 struct ucounts *inc_ucount(struct user_namespace *ns, kuid_t uid, in inc_ucount()
219 struct ucounts *ucounts, *iter, *bad; in inc_ucount() local
221 ucounts = alloc_ucounts(ns, uid); in inc_ucount()
222 for (iter = ucounts; iter; iter = tns->ucounts) { in inc_ucount()
229 return ucounts; in inc_ucount()
232 for (iter = ucounts; iter != bad; iter = iter->ns->ucounts) in inc_ucount()
235 put_ucounts(ucounts); in inc_ucount()
239 void dec_ucount(struct ucounts *ucounts, enum ucount_type type) in dec_ucount() argument
241 struct ucounts *iter; in dec_ucount()
242 for (iter = ucounts; iter; iter = iter->ns->ucounts) { in dec_ucount()
246 put_ucounts(ucounts); in dec_ucount()
249 long inc_rlimit_ucounts(struct ucounts *ucounts, enum rlimit_type type, long v) in inc_rlimit_ucounts() argument
251 struct ucounts *iter; in inc_rlimit_ucounts()
255 for (iter = ucounts; iter; iter = iter->ns->ucounts) { in inc_rlimit_ucounts()
259 else if (iter == ucounts) in inc_rlimit_ucounts()
266 bool dec_rlimit_ucounts(struct ucounts *ucounts, enum rlimit_type type, long v) in dec_rlimit_ucounts() argument
268 struct ucounts *iter; in dec_rlimit_ucounts()
270 for (iter = ucounts; iter; iter = iter->ns->ucounts) { in dec_rlimit_ucounts()
273 if (iter == ucounts) in dec_rlimit_ucounts()
279 static void do_dec_rlimit_put_ucounts(struct ucounts *ucounts, in do_dec_rlimit_put_ucounts() argument
280 struct ucounts *last, enum rlimit_type type) in do_dec_rlimit_put_ucounts()
282 struct ucounts *iter, *next; in do_dec_rlimit_put_ucounts()
283 for (iter = ucounts; iter != last; iter = next) { in do_dec_rlimit_put_ucounts()
286 next = iter->ns->ucounts; in do_dec_rlimit_put_ucounts()
292 void dec_rlimit_put_ucounts(struct ucounts *ucounts, enum rlimit_type type) in dec_rlimit_put_ucounts() argument
294 do_dec_rlimit_put_ucounts(ucounts, NULL, type); in dec_rlimit_put_ucounts()
297 long inc_rlimit_get_ucounts(struct ucounts *ucounts, enum rlimit_type type, in inc_rlimit_get_ucounts() argument
301 struct ucounts *iter; in inc_rlimit_get_ucounts()
305 for (iter = ucounts; iter; iter = iter->ns->ucounts) { in inc_rlimit_get_ucounts()
309 if (iter == ucounts) in inc_rlimit_get_ucounts()
326 do_dec_rlimit_put_ucounts(ucounts, iter, type); in inc_rlimit_get_ucounts()
330 bool is_rlimit_overlimit(struct ucounts *ucounts, enum rlimit_type type, unsigned long rlimit) in is_rlimit_overlimit() argument
332 struct ucounts *iter; in is_rlimit_overlimit()
336 for (iter = ucounts; iter; iter = iter->ns->ucounts) { in is_rlimit_overlimit()