diff options
author | Olaf Kirch <okir@suse.de> | 2006-10-04 05:15:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-04 10:55:16 -0400 |
commit | cf712c24d72341effcfd28330b83b49f77cb627b (patch) | |
tree | 88fcb932f3c85d83601e45473bee2c99a22ba9c2 /fs/lockd/host.c | |
parent | 977faf392fc898407554bbe7338d57b29e3660cf (diff) |
[PATCH] knfsd: consolidate common code for statd->lockd notification
Common code from nlm4svc_proc_sm_notify and nlmsvc_proc_sm_notify is moved
into a new nlm_host_rebooted.
This is in preparation of a patch that will change the reboot notification
handling entirely.
Signed-off-by: Olaf Kirch <okir@suse.de>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/lockd/host.c')
-rw-r--r-- | fs/lockd/host.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/fs/lockd/host.c b/fs/lockd/host.c index 637ec9567066..bcc21b05808a 100644 --- a/fs/lockd/host.c +++ b/fs/lockd/host.c | |||
@@ -39,7 +39,7 @@ static void nlm_gc_hosts(void); | |||
39 | * Find an NLM server handle in the cache. If there is none, create it. | 39 | * Find an NLM server handle in the cache. If there is none, create it. |
40 | */ | 40 | */ |
41 | struct nlm_host * | 41 | struct nlm_host * |
42 | nlmclnt_lookup_host(struct sockaddr_in *sin, int proto, int version) | 42 | nlmclnt_lookup_host(const struct sockaddr_in *sin, int proto, int version) |
43 | { | 43 | { |
44 | return nlm_lookup_host(0, sin, proto, version); | 44 | return nlm_lookup_host(0, sin, proto, version); |
45 | } | 45 | } |
@@ -58,7 +58,7 @@ nlmsvc_lookup_host(struct svc_rqst *rqstp) | |||
58 | * Common host lookup routine for server & client | 58 | * Common host lookup routine for server & client |
59 | */ | 59 | */ |
60 | struct nlm_host * | 60 | struct nlm_host * |
61 | nlm_lookup_host(int server, struct sockaddr_in *sin, | 61 | nlm_lookup_host(int server, const struct sockaddr_in *sin, |
62 | int proto, int version) | 62 | int proto, int version) |
63 | { | 63 | { |
64 | struct nlm_host *host, **hp; | 64 | struct nlm_host *host, **hp; |
@@ -260,6 +260,32 @@ void nlm_release_host(struct nlm_host *host) | |||
260 | } | 260 | } |
261 | 261 | ||
262 | /* | 262 | /* |
263 | * We were notified that the host indicated by address &sin | ||
264 | * has rebooted. | ||
265 | * Release all resources held by that peer. | ||
266 | */ | ||
267 | void nlm_host_rebooted(const struct sockaddr_in *sin, const struct nlm_reboot *argp) | ||
268 | { | ||
269 | struct nlm_host *host; | ||
270 | |||
271 | /* Obtain the host pointer for this NFS server and try to | ||
272 | * reclaim all locks we hold on this server. | ||
273 | */ | ||
274 | if ((argp->proto & 1)==0) { | ||
275 | /* We are client, he's the server: try to reclaim all locks. */ | ||
276 | if ((host = nlmclnt_lookup_host(sin, argp->proto >> 1, argp->vers)) == NULL) | ||
277 | return; | ||
278 | nlmclnt_recovery(host, argp->state); | ||
279 | } else { | ||
280 | /* He's the client, we're the server: delete all locks held by the client */ | ||
281 | if ((host = nlm_lookup_host(1, sin, argp->proto >> 1, argp->vers)) == NULL) | ||
282 | return; | ||
283 | nlmsvc_free_host_resources(host); | ||
284 | } | ||
285 | nlm_release_host(host); | ||
286 | } | ||
287 | |||
288 | /* | ||
263 | * Shut down the hosts module. | 289 | * Shut down the hosts module. |
264 | * Note that this routine is called only at server shutdown time. | 290 | * Note that this routine is called only at server shutdown time. |
265 | */ | 291 | */ |