aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/dns_resolve.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/dns_resolve.c')
-rw-r--r--fs/nfs/dns_resolve.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c
index 9aea78ab86ac..200eb67c95d9 100644
--- a/fs/nfs/dns_resolve.c
+++ b/fs/nfs/dns_resolve.c
@@ -40,6 +40,7 @@ ssize_t nfs_dns_resolve_name(struct net *net, char *name, size_t namelen,
40#include <linux/sunrpc/clnt.h> 40#include <linux/sunrpc/clnt.h>
41#include <linux/sunrpc/cache.h> 41#include <linux/sunrpc/cache.h>
42#include <linux/sunrpc/svcauth.h> 42#include <linux/sunrpc/svcauth.h>
43#include <linux/sunrpc/rpc_pipe_fs.h>
43 44
44#include "dns_resolve.h" 45#include "dns_resolve.h"
45#include "cache_lib.h" 46#include "cache_lib.h"
@@ -400,12 +401,47 @@ void nfs_dns_resolver_cache_destroy(struct net *net)
400 kfree(cd); 401 kfree(cd);
401} 402}
402 403
404static int rpc_pipefs_event(struct notifier_block *nb, unsigned long event,
405 void *ptr)
406{
407 struct super_block *sb = ptr;
408 struct net *net = sb->s_fs_info;
409 struct nfs_net *nn = net_generic(net, nfs_net_id);
410 struct cache_detail *cd = nn->nfs_dns_resolve;
411 int ret = 0;
412
413 if (cd == NULL)
414 return 0;
415
416 if (!try_module_get(THIS_MODULE))
417 return 0;
418
419 switch (event) {
420 case RPC_PIPEFS_MOUNT:
421 ret = nfs_cache_register_sb(sb, cd);
422 break;
423 case RPC_PIPEFS_UMOUNT:
424 nfs_cache_unregister_sb(sb, cd);
425 break;
426 default:
427 ret = -ENOTSUPP;
428 break;
429 }
430 module_put(THIS_MODULE);
431 return ret;
432}
433
434static struct notifier_block nfs_dns_resolver_block = {
435 .notifier_call = rpc_pipefs_event,
436};
437
403int nfs_dns_resolver_init(void) 438int nfs_dns_resolver_init(void)
404{ 439{
405 return 0; 440 return rpc_pipefs_notifier_register(&nfs_dns_resolver_block);
406} 441}
407 442
408void nfs_dns_resolver_destroy(void) 443void nfs_dns_resolver_destroy(void)
409{ 444{
445 rpc_pipefs_notifier_unregister(&nfs_dns_resolver_block);
410} 446}
411#endif 447#endif