KEYS: Make the key reaper non-reentrant
authorDavid Howells <dhowells@redhat.com>
Mon, 22 Aug 2011 13:09:20 +0000 (14:09 +0100)
committerJames Morris <jmorris@namei.org>
Mon, 22 Aug 2011 23:57:36 +0000 (09:57 +1000)
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>
security/keys/key.c

index 991a15f1e85faf6a94623f1c5b61347b606ded5c..1f3ed44a83c0a6a750758a53ee90c1ea7894ce1e 100644 (file)
@@ -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);