diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-03 03:55:57 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-06 14:58:58 -0500 |
commit | 58df095b732529ade8f4051b41d7c29731afecd6 (patch) | |
tree | 917819b96bac91e5daea7a31eb6eba66268952d9 /fs/nfs/inode.c | |
parent | 0065db328533c390fbfb0fe0c46bcf9a278fb99e (diff) |
NFSv4: Allow entries in the idmap cache to expire
If someone changes the uid/gid mapping in userland, then we do eventually
want those changes to be propagated to the kernel. Currently the kernel
assumes that it may cache entries forever.
Add an expiration time + garbage collector for idmap entries.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/inode.c')
-rw-r--r-- | fs/nfs/inode.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 4625479a6b62..e7bd0d92600f 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -2050,6 +2050,20 @@ static int param_set_port(const char *val, struct kernel_param *kp) | |||
2050 | module_param_call(callback_tcpport, param_set_port, param_get_int, | 2050 | module_param_call(callback_tcpport, param_set_port, param_get_int, |
2051 | &nfs_callback_set_tcpport, 0644); | 2051 | &nfs_callback_set_tcpport, 0644); |
2052 | 2052 | ||
2053 | static int param_set_idmap_timeout(const char *val, struct kernel_param *kp) | ||
2054 | { | ||
2055 | char *endp; | ||
2056 | int num = simple_strtol(val, &endp, 0); | ||
2057 | int jif = num * HZ; | ||
2058 | if (endp == val || *endp || num < 0 || jif < num) | ||
2059 | return -EINVAL; | ||
2060 | *((int *)kp->arg) = jif; | ||
2061 | return 0; | ||
2062 | } | ||
2063 | |||
2064 | module_param_call(idmap_cache_timeout, param_set_idmap_timeout, param_get_int, | ||
2065 | &nfs_idmap_cache_timeout, 0644); | ||
2066 | |||
2053 | #define nfs4_init_once(nfsi) \ | 2067 | #define nfs4_init_once(nfsi) \ |
2054 | do { \ | 2068 | do { \ |
2055 | INIT_LIST_HEAD(&(nfsi)->open_states); \ | 2069 | INIT_LIST_HEAD(&(nfsi)->open_states); \ |