Commit b26411f8 authored by Stanislav Kinsbursky's avatar Stanislav Kinsbursky Committed by J. Bruce Fields

LockD: mark host per network namespace on garbage collect

This is required for per-network NLM shutdown and cleanup.
This patch passes init_net for a while.
Signed-off-by: default avatarStanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 99dbb8fe
...@@ -628,13 +628,14 @@ nlm_gc_hosts(void) ...@@ -628,13 +628,14 @@ nlm_gc_hosts(void)
struct hlist_head *chain; struct hlist_head *chain;
struct hlist_node *pos, *next; struct hlist_node *pos, *next;
struct nlm_host *host; struct nlm_host *host;
struct net *net = &init_net;
dprintk("lockd: host garbage collection\n"); dprintk("lockd: host garbage collection\n");
for_each_host(host, pos, chain, nlm_server_hosts) for_each_host(host, pos, chain, nlm_server_hosts)
host->h_inuse = 0; host->h_inuse = 0;
/* Mark all hosts that hold locks, blocks or shares */ /* Mark all hosts that hold locks, blocks or shares */
nlmsvc_mark_resources(); nlmsvc_mark_resources(net);
for_each_host_safe(host, pos, next, chain, nlm_server_hosts) { for_each_host_safe(host, pos, next, chain, nlm_server_hosts) {
if (atomic_read(&host->h_count) || host->h_inuse if (atomic_read(&host->h_count) || host->h_inuse
......
...@@ -309,7 +309,8 @@ nlm_release_file(struct nlm_file *file) ...@@ -309,7 +309,8 @@ nlm_release_file(struct nlm_file *file)
* Helpers function for resource traversal * Helpers function for resource traversal
* *
* nlmsvc_mark_host: * nlmsvc_mark_host:
* used by the garbage collector; simply sets h_inuse. * used by the garbage collector; simply sets h_inuse only for those
* hosts, which passed network check.
* Always returns 0. * Always returns 0.
* *
* nlmsvc_same_host: * nlmsvc_same_host:
...@@ -320,12 +321,15 @@ nlm_release_file(struct nlm_file *file) ...@@ -320,12 +321,15 @@ nlm_release_file(struct nlm_file *file)
* returns 1 iff the host is a client. * returns 1 iff the host is a client.
* Used by nlmsvc_invalidate_all * Used by nlmsvc_invalidate_all
*/ */
static int static int
nlmsvc_mark_host(void *data, struct nlm_host *dummy) nlmsvc_mark_host(void *data, struct nlm_host *hint)
{ {
struct nlm_host *host = data; struct nlm_host *host = data;
host->h_inuse = 1; if ((hint->net == NULL) ||
(host->net == hint->net))
host->h_inuse = 1;
return 0; return 0;
} }
...@@ -358,10 +362,13 @@ nlmsvc_is_client(void *data, struct nlm_host *dummy) ...@@ -358,10 +362,13 @@ nlmsvc_is_client(void *data, struct nlm_host *dummy)
* Mark all hosts that still hold resources * Mark all hosts that still hold resources
*/ */
void void
nlmsvc_mark_resources(void) nlmsvc_mark_resources(struct net *net)
{ {
dprintk("lockd: nlmsvc_mark_resources\n"); struct nlm_host hint;
nlm_traverse_files(NULL, nlmsvc_mark_host, NULL);
dprintk("lockd: nlmsvc_mark_resources for net %p\n", net);
hint.net = net;
nlm_traverse_files(&hint, nlmsvc_mark_host, NULL);
} }
/* /*
......
...@@ -279,7 +279,7 @@ void nlmsvc_release_call(struct nlm_rqst *); ...@@ -279,7 +279,7 @@ void nlmsvc_release_call(struct nlm_rqst *);
__be32 nlm_lookup_file(struct svc_rqst *, struct nlm_file **, __be32 nlm_lookup_file(struct svc_rqst *, struct nlm_file **,
struct nfs_fh *); struct nfs_fh *);
void nlm_release_file(struct nlm_file *); void nlm_release_file(struct nlm_file *);
void nlmsvc_mark_resources(void); void nlmsvc_mark_resources(struct net *);
void nlmsvc_free_host_resources(struct nlm_host *); void nlmsvc_free_host_resources(struct nlm_host *);
void nlmsvc_invalidate_all(void); void nlmsvc_invalidate_all(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment