You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Created a function for setting timeouts on keys
The keyctl_set_timeout function isn't exported to other parts of the kernel, but I want to use it for the NFS idmapper. I already have the key, but I wanted a generic way to set the timeout. Signed-off-by: Bryan Schumaker <bjschuma@netapp.com> Acked-by: David Howells <dhowells@redhat.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
committed by
Trond Myklebust
parent
0cb3284b53
commit
59e6b9c113
@@ -671,6 +671,26 @@ found_kernel_type:
|
||||
return ktype;
|
||||
}
|
||||
|
||||
void key_set_timeout(struct key *key, unsigned timeout)
|
||||
{
|
||||
struct timespec now;
|
||||
time_t expiry = 0;
|
||||
|
||||
/* make the changes with the locks held to prevent races */
|
||||
down_write(&key->sem);
|
||||
|
||||
if (timeout > 0) {
|
||||
now = current_kernel_time();
|
||||
expiry = now.tv_sec + timeout;
|
||||
}
|
||||
|
||||
key->expiry = expiry;
|
||||
key_schedule_gc(key->expiry + key_gc_delay);
|
||||
|
||||
up_write(&key->sem);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(key_set_timeout);
|
||||
|
||||
/*
|
||||
* Unlock a key type locked by key_type_lookup().
|
||||
*/
|
||||
|
||||
+2
-16
@@ -14,6 +14,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/key.h>
|
||||
#include <linux/keyctl.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/capability.h>
|
||||
@@ -1244,10 +1245,8 @@ error:
|
||||
*/
|
||||
long keyctl_set_timeout(key_serial_t id, unsigned timeout)
|
||||
{
|
||||
struct timespec now;
|
||||
struct key *key, *instkey;
|
||||
key_ref_t key_ref;
|
||||
time_t expiry;
|
||||
long ret;
|
||||
|
||||
key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE | KEY_LOOKUP_PARTIAL,
|
||||
@@ -1273,20 +1272,7 @@ long keyctl_set_timeout(key_serial_t id, unsigned timeout)
|
||||
|
||||
okay:
|
||||
key = key_ref_to_ptr(key_ref);
|
||||
|
||||
/* make the changes with the locks held to prevent races */
|
||||
down_write(&key->sem);
|
||||
|
||||
expiry = 0;
|
||||
if (timeout > 0) {
|
||||
now = current_kernel_time();
|
||||
expiry = now.tv_sec + timeout;
|
||||
}
|
||||
|
||||
key->expiry = expiry;
|
||||
key_schedule_gc(key->expiry + key_gc_delay);
|
||||
|
||||
up_write(&key->sem);
|
||||
key_set_timeout(key, timeout);
|
||||
key_put(key);
|
||||
|
||||
ret = 0;
|
||||
|
||||
Reference in New Issue
Block a user