Lines Matching +full:short +full:- +full:circuit
1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2009-2011 Red Hat, Inc. All Rights Reserved.
10 #include <keys/keyring-type.h>
40 * Any key whose type gets unregistered will be re-typed to this if it can't be
49 * - time precision isn't particularly important
56 kenter("%lld", gc_at - now); in key_schedule_gc()
64 expires = jiffies + (gc_at - now) * HZ; in key_schedule_gc()
74 key->expiry = expiry; in key_set_expiry()
76 if (!(key->type->flags & KEY_TYPE_INSTANT_REAP)) in key_set_expiry()
114 kenter("%s", ktype->name); in key_gc_keytype()
139 list_entry(keys->next, struct key, graveyard_link); in key_gc_unused_keys()
140 short state = key->state; in key_gc_unused_keys()
142 list_del(&key->graveyard_link); in key_gc_unused_keys()
144 kdebug("- %u", key->serial); in key_gc_unused_keys()
148 remove_watch_list(key->watchers, key->serial); in key_gc_unused_keys()
149 key->watchers = NULL; in key_gc_unused_keys()
153 if (state == KEY_IS_POSITIVE && key->type->destroy) in key_gc_unused_keys()
154 key->type->destroy(key); in key_gc_unused_keys()
158 atomic_dec(&key->user->nkeys); in key_gc_unused_keys()
160 atomic_dec(&key->user->nikeys); in key_gc_unused_keys()
162 key_user_put(key->user); in key_gc_unused_keys()
163 key_put_tag(key->domain_tag); in key_gc_unused_keys()
164 kfree(key->description); in key_gc_unused_keys()
182 #define KEY_GC_REAP_AGAIN 0x01 /* - Need another cycle */ in key_garbage_collector()
183 #define KEY_GC_REAPING_LINKS 0x02 /* - We need to reap links */ in key_garbage_collector()
184 #define KEY_GC_REAPING_DEAD_1 0x10 /* - We need to mark dead keys */ in key_garbage_collector()
185 #define KEY_GC_REAPING_DEAD_2 0x20 /* - We need to reap dead key links */ in key_garbage_collector()
186 #define KEY_GC_REAPING_DEAD_3 0x40 /* - We need to reap dead keys */ in key_garbage_collector()
187 #define KEY_GC_FOUND_DEAD_KEY 0x80 /* - We found at least one dead key */ in key_garbage_collector()
210 * serial tree, if cursor is non-NULL then it will always point to a in key_garbage_collector()
211 * valid node in the tree - even if lock got dropped. in key_garbage_collector()
221 if (!test_bit_acquire(KEY_FLAG_USER_ALIVE, &key->flags)) { in key_garbage_collector()
222 /* Clobber key->user after final put seen. */ in key_garbage_collector()
227 if (key->type == key_gc_dead_keytype) { in key_garbage_collector()
229 set_bit(KEY_FLAG_DEAD, &key->flags); in key_garbage_collector()
230 key->perm = 0; in key_garbage_collector()
232 } else if (key->type == &key_type_keyring && in key_garbage_collector()
233 key->restrict_link) { in key_garbage_collector()
238 expiry = key->expiry; in key_garbage_collector()
240 if (!(key->type->flags & KEY_TYPE_INSTANT_REAP)) in key_garbage_collector()
244 key_serial(key), key->expiry - limit); in key_garbage_collector()
245 new_timer = key->expiry; in key_garbage_collector()
250 if (key->type == key_gc_dead_keytype) in key_garbage_collector()
255 if (key->type == &key_type_keyring) in key_garbage_collector()
260 if (key->type == key_gc_dead_keytype) in key_garbage_collector()
308 /* No remaining dead keys: short circuit the remaining in key_garbage_collector()
311 kdebug("dead short"); in key_garbage_collector()
331 /* We found an unreferenced key - once we've removed it from the tree, in key_garbage_collector()
335 kdebug("unrefd key %d", key->serial); in key_garbage_collector()
336 rb_erase(&key->serial_node, &key_serial_tree); in key_garbage_collector()
339 list_add_tail(&key->graveyard_link, &graveyard); in key_garbage_collector()
366 kdebug("destroy key %d", key->serial); in key_garbage_collector()
367 down_write(&key->sem); in key_garbage_collector()
368 key->type = &key_type_dead; in key_garbage_collector()
369 if (key_gc_dead_keytype->destroy) in key_garbage_collector()
370 key_gc_dead_keytype->destroy(key); in key_garbage_collector()
371 memset(&key->payload, KEY_DESTROY, sizeof(key->payload)); in key_garbage_collector()
372 up_write(&key->sem); in key_garbage_collector()