Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 294382
b: refs/heads/master
c: 9df69c8
h: refs/heads/master
v: v3
  • Loading branch information
Stanislav Kinsbursky authored and Trond Myklebust committed Jan 31, 2012
1 parent 2e5dac8 commit e84e6fa
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1b340d0118da1d7c60c664f17d7c8fce2bb1cd9d
refs/heads/master: 9df69c81b469780b64f9b26bb87c048613fdeddf
4 changes: 2 additions & 2 deletions trunk/fs/nfs/cache_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ int nfs_cache_wait_for_upcall(struct nfs_cache_defer_req *dreq)
return 0;
}

static int nfs_cache_register_sb(struct super_block *sb, struct cache_detail *cd)
int nfs_cache_register_sb(struct super_block *sb, struct cache_detail *cd)
{
int ret;
struct dentry *dir;
Expand Down Expand Up @@ -147,7 +147,7 @@ int nfs_cache_register_net(struct net *net, struct cache_detail *cd)
return ret;
}

static void nfs_cache_unregister_sb(struct super_block *sb, struct cache_detail *cd)
void nfs_cache_unregister_sb(struct super_block *sb, struct cache_detail *cd)
{
if (cd->u.pipefs.dir)
sunrpc_cache_unregister_pipefs(cd);
Expand Down
4 changes: 4 additions & 0 deletions trunk/fs/nfs/cache_lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@ extern void nfs_cache_init(struct cache_detail *cd);
extern void nfs_cache_destroy(struct cache_detail *cd);
extern int nfs_cache_register_net(struct net *net, struct cache_detail *cd);
extern void nfs_cache_unregister_net(struct net *net, struct cache_detail *cd);
extern int nfs_cache_register_sb(struct super_block *sb,
struct cache_detail *cd);
extern void nfs_cache_unregister_sb(struct super_block *sb,
struct cache_detail *cd);
38 changes: 37 additions & 1 deletion trunk/fs/nfs/dns_resolve.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ ssize_t nfs_dns_resolve_name(struct net *net, char *name, size_t namelen,
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/cache.h>
#include <linux/sunrpc/svcauth.h>
#include <linux/sunrpc/rpc_pipe_fs.h>

#include "dns_resolve.h"
#include "cache_lib.h"
Expand Down Expand Up @@ -400,12 +401,47 @@ void nfs_dns_resolver_cache_destroy(struct net *net)
kfree(cd);
}

static int rpc_pipefs_event(struct notifier_block *nb, unsigned long event,
void *ptr)
{
struct super_block *sb = ptr;
struct net *net = sb->s_fs_info;
struct nfs_net *nn = net_generic(net, nfs_net_id);
struct cache_detail *cd = nn->nfs_dns_resolve;
int ret = 0;

if (cd == NULL)
return 0;

if (!try_module_get(THIS_MODULE))
return 0;

switch (event) {
case RPC_PIPEFS_MOUNT:
ret = nfs_cache_register_sb(sb, cd);
break;
case RPC_PIPEFS_UMOUNT:
nfs_cache_unregister_sb(sb, cd);
break;
default:
ret = -ENOTSUPP;
break;
}
module_put(THIS_MODULE);
return ret;
}

static struct notifier_block nfs_dns_resolver_block = {
.notifier_call = rpc_pipefs_event,
};

int nfs_dns_resolver_init(void)
{
return 0;
return rpc_pipefs_notifier_register(&nfs_dns_resolver_block);
}

void nfs_dns_resolver_destroy(void)
{
rpc_pipefs_notifier_unregister(&nfs_dns_resolver_block);
}
#endif

0 comments on commit e84e6fa

Please sign in to comment.