aboutsummaryrefslogtreecommitdiffstats
path: root/fs/lockd/host.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/lockd/host.c')
-rw-r--r--fs/lockd/host.c30
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 */
41struct nlm_host * 41struct nlm_host *
42nlmclnt_lookup_host(struct sockaddr_in *sin, int proto, int version) 42nlmclnt_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 */
60struct nlm_host * 60struct nlm_host *
61nlm_lookup_host(int server, struct sockaddr_in *sin, 61nlm_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 */
267void 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 */