Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 593ce16b authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by J. Bruce Fields
Browse files

sunrpc: Add routines that allow registering per-net caches



Existing calls do the same, but for the init_net.

Signed-off-by: default avatarPavel Emelyanov <xemul@openvz.org>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 352114f3
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -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 *);
+19 −8
Original line number Original line Diff line number Diff line
@@ -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,23 +1603,33 @@ 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(struct cache_detail *cd)
void cache_unregister_net(struct cache_detail *cd, struct net *net)
{
{
	remove_cache_proc_entries(cd);
	remove_cache_proc_entries(cd, net);
	sunrpc_destroy_cache_detail(cd);
	sunrpc_destroy_cache_detail(cd);
}
}

void cache_unregister(struct cache_detail *cd)
{
	cache_unregister_net(cd, &init_net);
}
EXPORT_SYMBOL_GPL(cache_unregister);
EXPORT_SYMBOL_GPL(cache_unregister);


static ssize_t cache_read_pipefs(struct file *filp, char __user *buf,
static ssize_t cache_read_pipefs(struct file *filp, char __user *buf,