summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2011-08-22 15:09:20 +0200
committerJames Morris <jmorris@namei.org>2011-08-23 01:57:36 +0200
commitb072e9bc2fe9aeff4e104e80e479160349f474a9 (patch)
tree4f243698284aace64f4b5c9e5b9bee107c10e13b
parentKEYS: Move the unreferenced key reaper to the keys garbage collector file (diff)
downloadlinux-b072e9bc2fe9aeff4e104e80e479160349f474a9.tar.xz
linux-b072e9bc2fe9aeff4e104e80e479160349f474a9.zip
KEYS: Make the key reaper non-reentrant
Make the key reaper non-reentrant by sticking it on the appropriate system work queue when we queue it. This will allow it to have global state and drop locks. It should probably be non-reentrant already as it may spend a long time holding the key serial spinlock, and so multiple entrants can spend long periods of time just sitting there spinning, waiting to get the lock. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: James Morris <jmorris@namei.org>
-rw-r--r--security/keys/key.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/security/keys/key.c b/security/keys/key.c
index 991a15f1e85f..1f3ed44a83c0 100644
--- a/security/keys/key.c
+++ b/security/keys/key.c
@@ -602,7 +602,7 @@ void key_put(struct key *key)
key_check(key);
if (atomic_dec_and_test(&key->usage))
- schedule_work(&key_gc_unused_work);
+ queue_work(system_nrt_wq, &key_gc_unused_work);
}
}
EXPORT_SYMBOL(key_put);