mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-20 00:26:39 +08:00
[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>
This commit is contained in:
parent
977faf392f
commit
cf712c24d7
@ -39,7 +39,7 @@ static void nlm_gc_hosts(void);
|
|||||||
* Find an NLM server handle in the cache. If there is none, create it.
|
* Find an NLM server handle in the cache. If there is none, create it.
|
||||||
*/
|
*/
|
||||||
struct nlm_host *
|
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);
|
return nlm_lookup_host(0, sin, proto, version);
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ nlmsvc_lookup_host(struct svc_rqst *rqstp)
|
|||||||
* Common host lookup routine for server & client
|
* Common host lookup routine for server & client
|
||||||
*/
|
*/
|
||||||
struct nlm_host *
|
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)
|
int proto, int version)
|
||||||
{
|
{
|
||||||
struct nlm_host *host, **hp;
|
struct nlm_host *host, **hp;
|
||||||
@ -259,6 +259,32 @@ void nlm_release_host(struct nlm_host *host)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
* Shut down the hosts module.
|
||||||
* Note that this routine is called only at server shutdown time.
|
* Note that this routine is called only at server shutdown time.
|
||||||
|
@ -420,10 +420,6 @@ nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
|
|||||||
void *resp)
|
void *resp)
|
||||||
{
|
{
|
||||||
struct sockaddr_in saddr = rqstp->rq_addr;
|
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");
|
dprintk("lockd: SM_NOTIFY called\n");
|
||||||
if (saddr.sin_addr.s_addr != htonl(INADDR_LOOPBACK)
|
if (saddr.sin_addr.s_addr != htonl(INADDR_LOOPBACK)
|
||||||
@ -438,21 +434,10 @@ nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
|
|||||||
/* Obtain the host pointer for this NFS server and try to
|
/* Obtain the host pointer for this NFS server and try to
|
||||||
* reclaim all locks we hold on this server.
|
* reclaim all locks we hold on this server.
|
||||||
*/
|
*/
|
||||||
|
memset(&saddr, 0, sizeof(saddr));
|
||||||
saddr.sin_addr.s_addr = argp->addr;
|
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;
|
return rpc_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,9 +449,6 @@ nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
|
|||||||
void *resp)
|
void *resp)
|
||||||
{
|
{
|
||||||
struct sockaddr_in saddr = rqstp->rq_addr;
|
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");
|
dprintk("lockd: SM_NOTIFY called\n");
|
||||||
if (saddr.sin_addr.s_addr != htonl(INADDR_LOOPBACK)
|
if (saddr.sin_addr.s_addr != htonl(INADDR_LOOPBACK)
|
||||||
@ -466,19 +463,9 @@ nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
|
|||||||
/* Obtain the host pointer for this NFS server and try to
|
/* Obtain the host pointer for this NFS server and try to
|
||||||
* reclaim all locks we hold on this server.
|
* reclaim all locks we hold on this server.
|
||||||
*/
|
*/
|
||||||
|
memset(&saddr, 0, sizeof(saddr));
|
||||||
saddr.sin_addr.s_addr = argp->addr;
|
saddr.sin_addr.s_addr = argp->addr;
|
||||||
if ((argp->proto & 1)==0) {
|
nlm_host_rebooted(&saddr, argp);
|
||||||
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;
|
return rpc_success;
|
||||||
}
|
}
|
||||||
|
@ -161,15 +161,16 @@ int nlmclnt_reclaim(struct nlm_host *, struct file_lock *);
|
|||||||
/*
|
/*
|
||||||
* Host cache
|
* 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 * 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 *);
|
struct rpc_clnt * nlm_bind_host(struct nlm_host *);
|
||||||
void nlm_rebind_host(struct nlm_host *);
|
void nlm_rebind_host(struct nlm_host *);
|
||||||
struct nlm_host * nlm_get_host(struct nlm_host *);
|
struct nlm_host * nlm_get_host(struct nlm_host *);
|
||||||
void nlm_release_host(struct nlm_host *);
|
void nlm_release_host(struct nlm_host *);
|
||||||
void nlm_shutdown_hosts(void);
|
void nlm_shutdown_hosts(void);
|
||||||
extern struct nlm_host *nlm_find_client(void);
|
extern struct nlm_host *nlm_find_client(void);
|
||||||
|
extern void nlm_host_rebooted(const struct sockaddr_in *, const struct nlm_reboot *);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user