sunrpc: Add routines that allow registering per-net caches
Existing calls do the same, but for the init_net. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
352114f395
commit
593ce16b94
|
@ -197,7 +197,9 @@ extern void cache_purge(struct cache_detail *detail);
|
||||||
#define NEVER (0x7FFFFFFF)
|
#define NEVER (0x7FFFFFFF)
|
||||||
extern void __init cache_initialize(void);
|
extern void __init cache_initialize(void);
|
||||||
extern int cache_register(struct cache_detail *cd);
|
extern int cache_register(struct cache_detail *cd);
|
||||||
|
extern int cache_register_net(struct cache_detail *cd, struct net *net);
|
||||||
extern void cache_unregister(struct cache_detail *cd);
|
extern void cache_unregister(struct cache_detail *cd);
|
||||||
|
extern void cache_unregister_net(struct cache_detail *cd, struct net *net);
|
||||||
|
|
||||||
extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *,
|
extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *,
|
||||||
mode_t, struct cache_detail *);
|
mode_t, struct cache_detail *);
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <linux/sunrpc/cache.h>
|
#include <linux/sunrpc/cache.h>
|
||||||
#include <linux/sunrpc/stats.h>
|
#include <linux/sunrpc/stats.h>
|
||||||
#include <linux/sunrpc/rpc_pipe_fs.h>
|
#include <linux/sunrpc/rpc_pipe_fs.h>
|
||||||
|
#include <net/net_namespace.h>
|
||||||
|
|
||||||
#define RPCDBG_FACILITY RPCDBG_CACHE
|
#define RPCDBG_FACILITY RPCDBG_CACHE
|
||||||
|
|
||||||
|
@ -1537,7 +1538,7 @@ static const struct file_operations cache_flush_operations_procfs = {
|
||||||
.release = release_flush_procfs,
|
.release = release_flush_procfs,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void remove_cache_proc_entries(struct cache_detail *cd)
|
static void remove_cache_proc_entries(struct cache_detail *cd, struct net *net)
|
||||||
{
|
{
|
||||||
if (cd->u.procfs.proc_ent == NULL)
|
if (cd->u.procfs.proc_ent == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -1552,7 +1553,7 @@ static void remove_cache_proc_entries(struct cache_detail *cd)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
static int create_cache_proc_entries(struct cache_detail *cd)
|
static int create_cache_proc_entries(struct cache_detail *cd, struct net *net)
|
||||||
{
|
{
|
||||||
struct proc_dir_entry *p;
|
struct proc_dir_entry *p;
|
||||||
|
|
||||||
|
@ -1587,11 +1588,11 @@ static int create_cache_proc_entries(struct cache_detail *cd)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
out_nomem:
|
out_nomem:
|
||||||
remove_cache_proc_entries(cd);
|
remove_cache_proc_entries(cd, net);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
#else /* CONFIG_PROC_FS */
|
#else /* CONFIG_PROC_FS */
|
||||||
static int create_cache_proc_entries(struct cache_detail *cd)
|
static int create_cache_proc_entries(struct cache_detail *cd, struct net *net)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1602,22 +1603,32 @@ void __init cache_initialize(void)
|
||||||
INIT_DELAYED_WORK_DEFERRABLE(&cache_cleaner, do_cache_clean);
|
INIT_DELAYED_WORK_DEFERRABLE(&cache_cleaner, do_cache_clean);
|
||||||
}
|
}
|
||||||
|
|
||||||
int cache_register(struct cache_detail *cd)
|
int cache_register_net(struct cache_detail *cd, struct net *net)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
sunrpc_init_cache_detail(cd);
|
sunrpc_init_cache_detail(cd);
|
||||||
ret = create_cache_proc_entries(cd);
|
ret = create_cache_proc_entries(cd, net);
|
||||||
if (ret)
|
if (ret)
|
||||||
sunrpc_destroy_cache_detail(cd);
|
sunrpc_destroy_cache_detail(cd);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cache_register(struct cache_detail *cd)
|
||||||
|
{
|
||||||
|
return cache_register_net(cd, &init_net);
|
||||||
|
}
|
||||||
EXPORT_SYMBOL_GPL(cache_register);
|
EXPORT_SYMBOL_GPL(cache_register);
|
||||||
|
|
||||||
|
void cache_unregister_net(struct cache_detail *cd, struct net *net)
|
||||||
|
{
|
||||||
|
remove_cache_proc_entries(cd, net);
|
||||||
|
sunrpc_destroy_cache_detail(cd);
|
||||||
|
}
|
||||||
|
|
||||||
void cache_unregister(struct cache_detail *cd)
|
void cache_unregister(struct cache_detail *cd)
|
||||||
{
|
{
|
||||||
remove_cache_proc_entries(cd);
|
cache_unregister_net(cd, &init_net);
|
||||||
sunrpc_destroy_cache_detail(cd);
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(cache_unregister);
|
EXPORT_SYMBOL_GPL(cache_unregister);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue