projects
/
linux-2.6-block.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6-block.git]
/
fs
/
nfs
/
dns_resolve.c
diff --git
a/fs/nfs/dns_resolve.c
b/fs/nfs/dns_resolve.c
index 060c658eab6600ebb0cf2dfa069d70d4e0f152a0..a7d3df85736dfba49c461ed54a17b5db0d3bfa44 100644
(file)
--- a/
fs/nfs/dns_resolve.c
+++ b/
fs/nfs/dns_resolve.c
@@
-65,6
+65,7
@@
struct nfs_dns_ent {
struct sockaddr_storage addr;
size_t addrlen;
struct sockaddr_storage addr;
size_t addrlen;
+ struct rcu_head rcu_head;
};
};
@@
-101,15
+102,23
@@
static void nfs_dns_ent_init(struct cache_head *cnew,
}
}
}
}
-static void nfs_dns_ent_
put(struct kref *ref
)
+static void nfs_dns_ent_
free_rcu(struct rcu_head *head
)
{
struct nfs_dns_ent *item;
{
struct nfs_dns_ent *item;
- item = container_of(
ref, struct nfs_dns_ent, h.ref
);
+ item = container_of(
head, struct nfs_dns_ent, rcu_head
);
kfree(item->hostname);
kfree(item);
}
kfree(item->hostname);
kfree(item);
}
+static void nfs_dns_ent_put(struct kref *ref)
+{
+ struct nfs_dns_ent *item;
+
+ item = container_of(ref, struct nfs_dns_ent, h.ref);
+ call_rcu(&item->rcu_head, nfs_dns_ent_free_rcu);
+}
+
static struct cache_head *nfs_dns_ent_alloc(void)
{
struct nfs_dns_ent *item = kmalloc(sizeof(*item), GFP_KERNEL);
static struct cache_head *nfs_dns_ent_alloc(void)
{
struct nfs_dns_ent *item = kmalloc(sizeof(*item), GFP_KERNEL);
@@
-195,7
+204,7
@@
static struct nfs_dns_ent *nfs_dns_lookup(struct cache_detail *cd,
{
struct cache_head *ch;
{
struct cache_head *ch;
- ch = sunrpc_cache_lookup(cd,
+ ch = sunrpc_cache_lookup
_rcu
(cd,
&key->h,
nfs_dns_hash(key));
if (!ch)
&key->h,
nfs_dns_hash(key));
if (!ch)