diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2009-08-09 15:14:29 -0400 | 
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2009-08-09 15:14:29 -0400 | 
| commit | bc74b4f5e63a09fb78e245794a0de1e5a2716bbe (patch) | |
| tree | 5e96e63fd69303162456549f12bff5f9b2ee2a22 /net/sunrpc/svcauth_unix.c | |
| parent | da77005f0d64486cd760f43d9b7cc2379262a363 (diff) | |
| download | olio-linux-3.10-bc74b4f5e63a09fb78e245794a0de1e5a2716bbe.tar.xz olio-linux-3.10-bc74b4f5e63a09fb78e245794a0de1e5a2716bbe.zip  | |
SUNRPC: Allow the cache_detail to specify alternative upcall mechanisms
For events that are rare, such as referral DNS lookups, it makes limited
sense to have a daemon constantly listening for upcalls on a channel. An
alternative in those cases might simply be to run the app that fills the
cache using call_usermodehelper_exec() and friends.
The following patch allows the cache_detail to specify alternative upcall
mechanisms for these particular cases.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc/svcauth_unix.c')
| -rw-r--r-- | net/sunrpc/svcauth_unix.c | 14 | 
1 files changed, 12 insertions, 2 deletions
diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c index 5c865e2d299..6caffa34ac0 100644 --- a/net/sunrpc/svcauth_unix.c +++ b/net/sunrpc/svcauth_unix.c @@ -171,6 +171,11 @@ static void ip_map_request(struct cache_detail *cd,  	(*bpp)[-1] = '\n';  } +static int ip_map_upcall(struct cache_detail *cd, struct cache_head *h) +{ +	return sunrpc_cache_pipe_upcall(cd, h, ip_map_request); +} +  static struct ip_map *ip_map_lookup(char *class, struct in6_addr *addr);  static int ip_map_update(struct ip_map *ipm, struct unix_domain *udom, time_t expiry); @@ -289,7 +294,7 @@ struct cache_detail ip_map_cache = {  	.hash_table	= ip_table,  	.name		= "auth.unix.ip",  	.cache_put	= ip_map_put, -	.cache_request	= ip_map_request, +	.cache_upcall	= ip_map_upcall,  	.cache_parse	= ip_map_parse,  	.cache_show	= ip_map_show,  	.match		= ip_map_match, @@ -523,6 +528,11 @@ static void unix_gid_request(struct cache_detail *cd,  	(*bpp)[-1] = '\n';  } +static int unix_gid_upcall(struct cache_detail *cd, struct cache_head *h) +{ +	return sunrpc_cache_pipe_upcall(cd, h, unix_gid_request); +} +  static struct unix_gid *unix_gid_lookup(uid_t uid);  extern struct cache_detail unix_gid_cache; @@ -622,7 +632,7 @@ struct cache_detail unix_gid_cache = {  	.hash_table	= gid_table,  	.name		= "auth.unix.gid",  	.cache_put	= unix_gid_put, -	.cache_request	= unix_gid_request, +	.cache_upcall	= unix_gid_upcall,  	.cache_parse	= unix_gid_parse,  	.cache_show	= unix_gid_show,  	.match		= unix_gid_match,  |