Lines Matching +full:local +full:- +full:host

1 // SPDX-License-Identifier: GPL-2.0
58 * Local NSM state
65 return (struct sockaddr *)&nsm->sm_addr; in nsm_addr()
92 const struct nlm_host *host) in nsm_mon_unmon() argument
97 .priv = &nsm->sm_priv, in nsm_mon_unmon()
101 .mon_name = nsm->sm_mon_name, in nsm_mon_unmon()
102 .nodename = host->nodename, in nsm_mon_unmon()
111 clnt = nsm_create(host->net, host->nodename); in nsm_mon_unmon()
115 host->net->ns.inum); in nsm_mon_unmon()
119 msg.rpc_proc = &clnt->cl_procinfo[proc]; in nsm_mon_unmon()
121 if (status == -ECONNREFUSED) { in nsm_mon_unmon()
138 * nsm_monitor - Notify a peer in case we reboot
139 * @host: pointer to nlm_host of peer to notify
142 * upcall to the local rpc.statd to record the name/address of
145 * Returns zero if the peer is monitored by the local rpc.statd;
148 int nsm_monitor(const struct nlm_host *host) in nsm_monitor() argument
150 struct nsm_handle *nsm = host->h_nsmhandle; in nsm_monitor()
154 dprintk("lockd: nsm_monitor(%s)\n", nsm->sm_name); in nsm_monitor()
156 if (nsm->sm_monitored) in nsm_monitor()
161 * this peer in the local rpc.statd's database. in nsm_monitor()
163 nsm->sm_mon_name = nsm_use_hostnames ? nsm->sm_name : nsm->sm_addrbuf; in nsm_monitor()
165 status = nsm_mon_unmon(nsm, NSMPROC_MON, &res, host); in nsm_monitor()
167 status = -EIO; in nsm_monitor()
169 pr_notice_ratelimited("lockd: cannot monitor %s\n", nsm->sm_name); in nsm_monitor()
173 nsm->sm_monitored = 1; in nsm_monitor()
182 * nsm_unmonitor - Unregister peer notification
183 * @host: pointer to nlm_host of peer to stop monitoring
186 * tell the local rpc.statd not to send this peer a notification
189 void nsm_unmonitor(const struct nlm_host *host) in nsm_unmonitor() argument
191 struct nsm_handle *nsm = host->h_nsmhandle; in nsm_unmonitor()
195 if (refcount_read(&nsm->sm_count) == 1 in nsm_unmonitor()
196 && nsm->sm_monitored && !nsm->sm_sticky) { in nsm_unmonitor()
197 dprintk("lockd: nsm_unmonitor(%s)\n", nsm->sm_name); in nsm_unmonitor()
199 status = nsm_mon_unmon(nsm, NSMPROC_UNMON, &res, host); in nsm_unmonitor()
201 status = -EIO; in nsm_unmonitor()
204 nsm->sm_name); in nsm_unmonitor()
206 nsm->sm_monitored = 0; in nsm_unmonitor()
216 if (strlen(nsm->sm_name) == len && in nsm_lookup_hostname()
217 memcmp(nsm->sm_name, hostname, len) == 0) in nsm_lookup_hostname()
239 if (memcmp(nsm->sm_priv.data, priv->data, in nsm_lookup_priv()
240 sizeof(priv->data)) == 0) in nsm_lookup_priv()
247 * host. It is passed to the local rpc.statd via NSMPROC_MON, and
254 * be sent to the kernel, it could cause the wrong host to lose its
257 * The cookies are exposed only to local user space via loopback. They
259 * for some reason, nsm_init_private() could perform a one-way hash to
264 u64 *p = (u64 *)&nsm->sm_priv.data; in nsm_init_private()
283 refcount_set(&new->sm_count, 1); in nsm_create_handle()
284 new->sm_name = (char *)(new + 1); in nsm_create_handle()
286 new->sm_addrlen = salen; in nsm_create_handle()
289 if (rpc_ntop(nsm_addr(new), new->sm_addrbuf, in nsm_create_handle()
290 sizeof(new->sm_addrbuf)) == 0) in nsm_create_handle()
291 (void)snprintf(new->sm_addrbuf, sizeof(new->sm_addrbuf), in nsm_create_handle()
293 memcpy(new->sm_name, hostname, hostname_len); in nsm_create_handle()
294 new->sm_name[hostname_len] = '\0'; in nsm_create_handle()
300 * nsm_get_handle - Find or create a cached nsm_handle
335 cached = nsm_lookup_hostname(&ln->nsm_handles, in nsm_get_handle()
338 cached = nsm_lookup_addr(&ln->nsm_handles, sap); in nsm_get_handle()
341 refcount_inc(&cached->sm_count); in nsm_get_handle()
345 "cnt %d\n", cached->sm_name, in nsm_get_handle()
346 cached->sm_addrbuf, in nsm_get_handle()
347 refcount_read(&cached->sm_count)); in nsm_get_handle()
352 list_add(&new->sm_link, &ln->nsm_handles); in nsm_get_handle()
355 new->sm_name, new->sm_addrbuf); in nsm_get_handle()
368 * nsm_reboot_lookup - match NLMPROC_SM_NOTIFY arguments to an nsm_handle
384 cached = nsm_lookup_priv(&ln->nsm_handles, &info->priv); in nsm_reboot_lookup()
388 info->len, info->mon); in nsm_reboot_lookup()
392 refcount_inc(&cached->sm_count); in nsm_reboot_lookup()
395 dprintk("lockd: host %s (%s) rebooted, cnt %d\n", in nsm_reboot_lookup()
396 cached->sm_name, cached->sm_addrbuf, in nsm_reboot_lookup()
397 refcount_read(&cached->sm_count)); in nsm_reboot_lookup()
402 * nsm_release - Release an NSM handle
408 if (refcount_dec_and_lock(&nsm->sm_count, &nsm_lock)) { in nsm_release()
409 list_del(&nsm->sm_link); in nsm_release()
412 nsm->sm_name, nsm->sm_addrbuf); in nsm_release()
434 * "mon_name" specifies the host to be monitored.
438 encode_nsm_string(xdr, argp->mon_name); in encode_mon_name()
444 * (via the NLMPROC_SM_NOTIFY call) that the state of host "mon_name"
451 encode_nsm_string(xdr, argp->nodename); in encode_my_id()
453 *p++ = cpu_to_be32(argp->prog); in encode_my_id()
454 *p++ = cpu_to_be32(argp->vers); in encode_my_id()
455 *p = cpu_to_be32(argp->proc); in encode_my_id()
459 * The "mon_id" argument specifies the non-private arguments
478 xdr_encode_opaque_fixed(p, argp->priv->data, SM_PRIV_SIZE); in encode_priv()
503 return -EIO; in nsm_xdr_dec_stat_res()
504 resp->status = be32_to_cpup(p++); in nsm_xdr_dec_stat_res()
505 resp->state = be32_to_cpup(p); in nsm_xdr_dec_stat_res()
508 __func__, resp->status, resp->state); in nsm_xdr_dec_stat_res()
521 return -EIO; in nsm_xdr_dec_stat()
522 resp->state = be32_to_cpup(p); in nsm_xdr_dec_stat()
524 dprintk("lockd: %s state %d\n", __func__, resp->state); in nsm_xdr_dec_stat()