Consolidate common code for statd->lockd notification
Subsystems (2)
PATCH 3/22 Consolidate common code for statd->lockd notification
From: Olaf Kirch <[email protected]>
Subject: Consolidate common code for statd->lockd notification
This is in preparation of a patch that will change the reboot notification handling entirely.
Signed-off-by [email protected]
fs/lockd/host.c | 30 ++++++++++++++++++++++++++++-- fs/lockd/svc4proc.c | 19 ++----------------- fs/lockd/svcproc.c | 17 ++--------------- include/linux/lockd/lockd.h | 5 +++-- 4 files changed, 35 insertions(+), 36 deletions(-)
fs/lockd/host.c +28 -2
@@ -39,7 +39,7 @@ static void nlm_gc_hosts(void);* Find an NLM server handle in the cache. If there is none, create it. */ struct nlm_host * -nlmclnt_lookup_host (struct sockaddr_in *sin,int proto,int version) +nlmclnt_lookup_host (const struct sockaddr_in *sin,int proto,int version) {return nlm_lookup_host (0 , sin, proto, version); }
@@ -58,7 +58,7 @@ nlmsvc_lookup_host(struct svc_rqst *rqst* Common host lookup routine for server & client */ struct nlm_host * -nlm_lookup_host (int server,struct sockaddr_in *sin, +nlm_lookup_host (int server,const struct sockaddr_in *sin,int proto,int version) {struct nlm_host *host, **hp;
@@ -256,6 +256,32 @@ void nlm_release_host(struct nlm_host *h }/* +* We were notified that the host indicated by address &sin +* has rebooted. +* Release all resources held by that peer. +*/ +void nlm_host_rebooted (const struct sockaddr_in *sin,const struct nlm_reboot *argp) +{ +struct nlm_host *host; + +/* Obtain the host pointer for this NFS server and try to +* reclaim all locks we hold on this server. +*/ +if ((argp->proto &1 )==0 ) { +/* We are client, he's the server: try to reclaim all locks. */ +if ((host =nlmclnt_lookup_host (sin, argp->proto >>1 , argp->vers)) ==NULL ) +return ; +nlmclnt_recovery (host, argp->state); + }else { +/* He's the client, we're the server: delete all locks held by the client */ +if ((host =nlm_lookup_host (1 , sin, argp->proto >>1 , argp->vers)) ==NULL ) +return ; +nlmsvc_free_host_resources (host); + } +nlm_release_host (host); +} + +/* * Shut down the hosts module. * Note that this routine is called only at server shutdown time. */
fs/lockd/svc4proc.c +2 -17
@@ -420,10 +420,6 @@ nlm4svc_proc_sm_notify(struct svc_rqst * void *resp) {struct sockaddr_in saddr = rqstp->rq_addr; -int vers = argp->vers; -int prot = argp->proto >>1 ; - -struct nlm_host *host;dprintk ("lockd: SM_NOTIFY called\n" ); if (saddr.sin_addr.s_addr != htonl(INADDR_LOOPBACK)
@@ -438,21 +434,10 @@ nlm4svc_proc_sm_notify(struct svc_rqst */* Obtain the host pointer for this NFS server and try to * reclaim all locks we hold on this server. */ +memset (&saddr,0 ,sizeof (saddr)); saddr.sin_addr.s_addr = argp->addr; +nlm_host_rebooted (&saddr, argp); -if ((argp->proto &1 )==0 ) { -if ((host =nlmclnt_lookup_host (&saddr, prot, vers)) !=NULL ) { -nlmclnt_recovery (host, argp->state); -nlm_release_host (host); - } - }else { -/* If we run on an NFS server, delete all locks held by the client */ - -if ((host =nlm_lookup_host (1 , &saddr, prot, vers)) !=NULL ) { -nlmsvc_free_host_resources (host); -nlm_release_host (host); - } - }return rpc_success; }
fs/lockd/svcproc.c +2 -15
@@ -449,9 +449,6 @@ nlmsvc_proc_sm_notify(struct svc_rqst *r void *resp) {struct sockaddr_in saddr = rqstp->rq_addr; -int vers = argp->vers; -int prot = argp->proto >>1 ; -struct nlm_host *host;dprintk ("lockd: SM_NOTIFY called\n" ); if (saddr.sin_addr.s_addr != htonl(INADDR_LOOPBACK)
@@ -466,19 +463,9 @@ nlmsvc_proc_sm_notify(struct svc_rqst *r/* Obtain the host pointer for this NFS server and try to * reclaim all locks we hold on this server. */ +memset (&saddr,0 ,sizeof (saddr)); saddr.sin_addr.s_addr = argp->addr; -if ((argp->proto &1 )==0 ) { -if ((host =nlmclnt_lookup_host (&saddr, prot, vers)) !=NULL ) { -nlmclnt_recovery (host, argp->state); -nlm_release_host (host); - } - }else { -/* If we run on an NFS server, delete all locks held by the client */ -if ((host =nlm_lookup_host (1 , &saddr, prot, vers)) !=NULL ) { -nlmsvc_free_host_resources (host); -nlm_release_host (host); - } - } +nlm_host_rebooted (&saddr, argp);return rpc_success; }
include/linux/lockd/lockd.h +3 -2
@@ -163,15 +163,16 @@ int nlmclnt_reclaim(struct nlm_host */* * Host cache */ -struct nlm_host *nlmclnt_lookup_host (struct sockaddr_in *,int ,int ); +struct nlm_host *nlmclnt_lookup_host (const struct sockaddr_in *,int ,int );struct nlm_host *nlmsvc_lookup_host (struct svc_rqst *); -struct nlm_host *nlm_lookup_host (int server,struct sockaddr_in *,int ,int ); +struct nlm_host *nlm_lookup_host (int server,const struct sockaddr_in *,int ,int );struct rpc_clnt *nlm_bind_host (struct nlm_host *);void nlm_rebind_host (struct nlm_host *);struct nlm_host *nlm_get_host (struct nlm_host *);void nlm_release_host (struct nlm_host *);void nlm_shutdown_hosts (void );extern struct nlm_host *nlm_find_client (void ); +extern void nlm_host_rebooted (const struct sockaddr_in *,const struct nlm_reboot *);/*
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs