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 /fs/nfsd/nfs4idmap.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 'fs/nfsd/nfs4idmap.c')
| -rw-r--r-- | fs/nfsd/nfs4idmap.c | 16 | 
1 files changed, 14 insertions, 2 deletions
diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c index e9012ad36ac..cdfa86fa147 100644 --- a/fs/nfsd/nfs4idmap.c +++ b/fs/nfsd/nfs4idmap.c @@ -146,6 +146,12 @@ idtoname_request(struct cache_detail *cd, struct cache_head *ch, char **bpp,  }  static int +idtoname_upcall(struct cache_detail *cd, struct cache_head *ch) +{ +	return sunrpc_cache_pipe_upcall(cd, ch, idtoname_request); +} + +static int  idtoname_match(struct cache_head *ca, struct cache_head *cb)  {  	struct ent *a = container_of(ca, struct ent, h); @@ -192,7 +198,7 @@ static struct cache_detail idtoname_cache = {  	.hash_table	= idtoname_table,  	.name		= "nfs4.idtoname",  	.cache_put	= ent_put, -	.cache_request	= idtoname_request, +	.cache_upcall	= idtoname_upcall,  	.cache_parse	= idtoname_parse,  	.cache_show	= idtoname_show,  	.warn_no_listener = warn_no_idmapd, @@ -325,6 +331,12 @@ nametoid_request(struct cache_detail *cd, struct cache_head *ch, char **bpp,  }  static int +nametoid_upcall(struct cache_detail *cd, struct cache_head *ch) +{ +	return sunrpc_cache_pipe_upcall(cd, ch, nametoid_request); +} + +static int  nametoid_match(struct cache_head *ca, struct cache_head *cb)  {  	struct ent *a = container_of(ca, struct ent, h); @@ -363,7 +375,7 @@ static struct cache_detail nametoid_cache = {  	.hash_table	= nametoid_table,  	.name		= "nfs4.nametoid",  	.cache_put	= ent_put, -	.cache_request	= nametoid_request, +	.cache_upcall	= nametoid_upcall,  	.cache_parse	= nametoid_parse,  	.cache_show	= nametoid_show,  	.warn_no_listener = warn_no_idmapd,  |