KEYS: The dead key link reaper should be non-reentrant
David Howells [Mon, 22 Aug 2011 13:09:28 +0000 (14:09 +0100)]
The dead key link reaper should be non-reentrant as it relies on global state
to keep track of where it's got to when it returns to the work queue manager to
give it some air.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: James Morris <jmorris@namei.org>

security/keys/gc.c

index b23db3f..d67e88b 100644 (file)
@@ -51,7 +51,7 @@ void key_schedule_gc(time_t gc_at)
        kenter("%ld", gc_at - now);
 
        if (gc_at <= now) {
-               schedule_work(&key_gc_work);
+               queue_work(system_nrt_wq, &key_gc_work);
        } else if (gc_at < key_gc_next_run) {
                expires = jiffies + (gc_at - now) * HZ;
                mod_timer(&key_gc_timer, expires);
@@ -65,7 +65,7 @@ static void key_gc_timer_func(unsigned long data)
 {
        kenter("");
        key_gc_next_run = LONG_MAX;
-       schedule_work(&key_gc_work);
+       queue_work(system_nrt_wq, &key_gc_work);
 }
 
 /*
@@ -206,7 +206,7 @@ gc_released_our_lock:
        key_gc_new_timer = new_timer;
        key_gc_again = true;
        clear_bit(0, &key_gc_executing);
-       schedule_work(&key_gc_work);
+       queue_work(system_nrt_wq, &key_gc_work);
        kleave(" [continue]");
        return;