NLM: Change nlm_host_rebooted() to take a single nlm_reboot argument
Pass the nlm_reboot data structure directly from the NLMPROC_SM_NOTIFY XDR decoders to nlm_host_rebooted(). This eliminates some packing and unpacking of the NLMPROC_SM_NOTIFY results, and prepares for passing these results, including the "priv" cookie, directly to a lookup routine in fs/lockd/mon.c. This patch changes code organization but should not cause any behavioral change. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
parent
cab2d3c991
commit
7fefc9cb9d
|
@ -444,31 +444,34 @@ 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.
|
||||
/**
|
||||
* nlm_host_rebooted - Release all resources held by rebooted host
|
||||
* @info: pointer to decoded results of NLM_SM_NOTIFY call
|
||||
*
|
||||
* We were notified that the specified host has rebooted. Release
|
||||
* all resources held by that peer.
|
||||
*/
|
||||
void nlm_host_rebooted(const struct sockaddr_in *sin,
|
||||
const char *hostname,
|
||||
unsigned int hostname_len,
|
||||
u32 new_state)
|
||||
void nlm_host_rebooted(const struct nlm_reboot *info)
|
||||
{
|
||||
const struct sockaddr_in sin = {
|
||||
.sin_family = AF_INET,
|
||||
.sin_addr.s_addr = info->addr,
|
||||
};
|
||||
struct hlist_head *chain;
|
||||
struct hlist_node *pos;
|
||||
struct nsm_handle *nsm;
|
||||
struct nlm_host *host;
|
||||
|
||||
nsm = nsm_find((struct sockaddr *)sin, sizeof(*sin),
|
||||
hostname, hostname_len, 0);
|
||||
nsm = nsm_find((struct sockaddr *)&sin, sizeof(sin),
|
||||
info->mon, info->len, 0);
|
||||
if (nsm == NULL) {
|
||||
dprintk("lockd: never saw rebooted peer '%.*s' before\n",
|
||||
hostname_len, hostname);
|
||||
info->len, info->mon);
|
||||
return;
|
||||
}
|
||||
|
||||
dprintk("lockd: nlm_host_rebooted(%.*s, %s)\n",
|
||||
hostname_len, hostname, nsm->sm_addrbuf);
|
||||
info->len, info->mon, nsm->sm_addrbuf);
|
||||
|
||||
/* When reclaiming locks on this peer, make sure that
|
||||
* we set up a new notification */
|
||||
|
@ -483,8 +486,8 @@ again: mutex_lock(&nlm_host_mutex);
|
|||
for (chain = nlm_hosts; chain < nlm_hosts + NLM_HOST_NRHASH; ++chain) {
|
||||
hlist_for_each_entry(host, pos, chain, h_hash) {
|
||||
if (host->h_nsmhandle == nsm
|
||||
&& host->h_nsmstate != new_state) {
|
||||
host->h_nsmstate = new_state;
|
||||
&& host->h_nsmstate != info->state) {
|
||||
host->h_nsmstate = info->state;
|
||||
host->h_state++;
|
||||
|
||||
nlm_get_host(host);
|
||||
|
|
|
@ -419,8 +419,6 @@ static __be32
|
|||
nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
|
||||
void *resp)
|
||||
{
|
||||
struct sockaddr_in saddr;
|
||||
|
||||
dprintk("lockd: SM_NOTIFY called\n");
|
||||
|
||||
if (!nlm_privileged_requester(rqstp)) {
|
||||
|
@ -430,14 +428,7 @@ nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
|
|||
return rpc_system_err;
|
||||
}
|
||||
|
||||
/* 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_family = AF_INET;
|
||||
saddr.sin_addr.s_addr = argp->addr;
|
||||
nlm_host_rebooted(&saddr, argp->mon, argp->len, argp->state);
|
||||
|
||||
nlm_host_rebooted(argp);
|
||||
return rpc_success;
|
||||
}
|
||||
|
||||
|
|
|
@ -451,8 +451,6 @@ static __be32
|
|||
nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
|
||||
void *resp)
|
||||
{
|
||||
struct sockaddr_in saddr;
|
||||
|
||||
dprintk("lockd: SM_NOTIFY called\n");
|
||||
|
||||
if (!nlm_privileged_requester(rqstp)) {
|
||||
|
@ -462,14 +460,7 @@ nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
|
|||
return rpc_system_err;
|
||||
}
|
||||
|
||||
/* 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_family = AF_INET;
|
||||
saddr.sin_addr.s_addr = argp->addr;
|
||||
nlm_host_rebooted(&saddr, argp->mon, argp->len, argp->state);
|
||||
|
||||
nlm_host_rebooted(argp);
|
||||
return rpc_success;
|
||||
}
|
||||
|
||||
|
|
|
@ -239,8 +239,7 @@ 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 void nlm_host_rebooted(const struct sockaddr_in *, const char *,
|
||||
unsigned int, u32);
|
||||
void nlm_host_rebooted(const struct nlm_reboot *);
|
||||
|
||||
/*
|
||||
* Host monitoring
|
||||
|
|
Loading…
Reference in New Issue
Block a user