提交 0a402d5a 编写于 作者: S Stanislav Kinsbursky 提交者: Trond Myklebust

SUNRPC: cache creation and destruction routines introduced

This patch prepares infrastructure for network namespace aware cache detail
allocation.
One note about adding network namespace link to cache structure. It's going to
be used later in NFS DNS cache parsing routine (nfs_dns_parse for rpc_pton()
call).
Signed-off-by: NStanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
Acked-by: NJ. Bruce Fields <bfields@redhat.com>
上级 5ecebb7c
...@@ -117,6 +117,7 @@ struct cache_detail { ...@@ -117,6 +117,7 @@ struct cache_detail {
struct cache_detail_procfs procfs; struct cache_detail_procfs procfs;
struct cache_detail_pipefs pipefs; struct cache_detail_pipefs pipefs;
} u; } u;
struct net *net;
}; };
...@@ -202,6 +203,9 @@ extern int cache_register_net(struct cache_detail *cd, struct net *net); ...@@ -202,6 +203,9 @@ 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 void cache_unregister_net(struct cache_detail *cd, struct net *net);
extern struct cache_detail *cache_create_net(struct cache_detail *tmpl, struct net *net);
extern void cache_destroy_net(struct cache_detail *cd, struct net *net);
extern void sunrpc_init_cache_detail(struct cache_detail *cd); extern void sunrpc_init_cache_detail(struct cache_detail *cd);
extern void sunrpc_destroy_cache_detail(struct cache_detail *cd); extern void sunrpc_destroy_cache_detail(struct cache_detail *cd);
extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *, extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *,
......
...@@ -1664,6 +1664,32 @@ void cache_unregister(struct cache_detail *cd) ...@@ -1664,6 +1664,32 @@ void cache_unregister(struct cache_detail *cd)
} }
EXPORT_SYMBOL_GPL(cache_unregister); EXPORT_SYMBOL_GPL(cache_unregister);
struct cache_detail *cache_create_net(struct cache_detail *tmpl, struct net *net)
{
struct cache_detail *cd;
cd = kmemdup(tmpl, sizeof(struct cache_detail), GFP_KERNEL);
if (cd == NULL)
return ERR_PTR(-ENOMEM);
cd->hash_table = kzalloc(cd->hash_size * sizeof(struct cache_head *),
GFP_KERNEL);
if (cd->hash_table == NULL) {
kfree(cd);
return ERR_PTR(-ENOMEM);
}
cd->net = net;
return cd;
}
EXPORT_SYMBOL_GPL(cache_create_net);
void cache_destroy_net(struct cache_detail *cd, struct net *net)
{
kfree(cd->hash_table);
kfree(cd);
}
EXPORT_SYMBOL_GPL(cache_destroy_net);
static ssize_t cache_read_pipefs(struct file *filp, char __user *buf, static ssize_t cache_read_pipefs(struct file *filp, char __user *buf,
size_t count, loff_t *ppos) size_t count, loff_t *ppos)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册