Lines Matching +full:wait +full:- +full:retry +full:- +full:us

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
60 int ns_svid; /* on-the-wire SVID for this file */
112 p = td ? td->td_proc : NULL; in nlm_msg()
131 struct nfsmount *nmp = nf->nf_nmp; in nlm_down()
135 mtx_lock(&nmp->nm_mtx); in nlm_down()
136 if (!(nmp->nm_state & NFSSTA_LOCKTIMEO)) { in nlm_down()
137 nmp->nm_state |= NFSSTA_LOCKTIMEO; in nlm_down()
138 mtx_unlock(&nmp->nm_mtx); in nlm_down()
139 vfs_event_signal(&nmp->nm_mountp->mnt_stat.f_fsid, in nlm_down()
142 mtx_unlock(&nmp->nm_mtx); in nlm_down()
145 nf->nf_printed = TRUE; in nlm_down()
146 nlm_msg(td, nmp->nm_mountp->mnt_stat.f_mntfromname, msg, error); in nlm_down()
153 struct nfsmount *nmp = nf->nf_nmp; in nlm_up()
155 if (!nf->nf_printed) in nlm_up()
158 nlm_msg(td, nmp->nm_mountp->mnt_stat.f_mntfromname, msg, 0); in nlm_up()
160 mtx_lock(&nmp->nm_mtx); in nlm_up()
161 if (nmp->nm_state & NFSSTA_LOCKTIMEO) { in nlm_up()
162 nmp->nm_state &= ~NFSSTA_LOCKTIMEO; in nlm_up()
163 mtx_unlock(&nmp->nm_mtx); in nlm_up()
164 vfs_event_signal(&nmp->nm_mountp->mnt_stat.f_fsid, in nlm_up()
167 mtx_unlock(&nmp->nm_mtx); in nlm_up()
190 * nlm_advlock --
191 * NFS advisory byte-level locks.
221 nmp = VFSTONFS(vp->v_mount); in nlm_advlock_internal()
225 * file, we get whatever they wrote and vice-versa. in nlm_advlock_internal()
228 nmp->nm_vinvalbuf(vp, V_SAVE, td, 1); in nlm_advlock_internal()
230 strcpy(servername, nmp->nm_hostname); in nlm_advlock_internal()
231 nmp->nm_getinfo(vp, fh.fh_bytes, &fhlen, &ss, &is_v3, &size, &timo); in nlm_advlock_internal()
238 if (nmp->nm_flag & NFSMNT_SOFT) in nlm_advlock_internal()
239 retries = nmp->nm_retry; in nlm_advlock_internal()
244 * We need to switch to mount-point creds so that we can send in nlm_advlock_internal()
249 cred = td->td_ucred; in nlm_advlock_internal()
250 td->td_ucred = vp->v_mount->mnt_cred; in nlm_advlock_internal()
251 crhold(td->td_ucred); in nlm_advlock_internal()
270 KASSERT(fl->l_start == 0 && fl->l_len == 0, in nlm_advlock_internal()
271 ("F_FLOCK lock requests must be whole-file locks")); in nlm_advlock_internal()
272 if (!ns->ns_ucred) { in nlm_advlock_internal()
277 ns->ns_ucred = crdup(cred); in nlm_advlock_internal()
279 svid = ns->ns_svid; in nlm_advlock_internal()
286 svid = fl->l_pid; in nlm_advlock_internal()
288 svid = ((struct proc *) id)->p_pid; in nlm_advlock_internal()
294 && fl->l_type == F_WRLCK) { in nlm_advlock_internal()
303 * non-blocking and if that fails, we unlock in nlm_advlock_internal()
310 fl->l_type = F_UNLCK; in nlm_advlock_internal()
314 fl->l_type = F_WRLCK; in nlm_advlock_internal()
317 if (ns->ns_active) { in nlm_advlock_internal()
318 ns->ns_refs--; in nlm_advlock_internal()
319 ns->ns_active = FALSE; in nlm_advlock_internal()
336 if (!ns->ns_active) { in nlm_advlock_internal()
341 * F_FLOCK only supports whole-file in nlm_advlock_internal()
345 ns->ns_refs++; in nlm_advlock_internal()
346 ns->ns_active = TRUE; in nlm_advlock_internal()
357 if (ns->ns_active) { in nlm_advlock_internal()
358 ns->ns_refs--; in nlm_advlock_internal()
359 ns->ns_active = FALSE; in nlm_advlock_internal()
378 cred1 = td->td_ucred; in nlm_advlock_internal()
379 td->td_ucred = cred; in nlm_advlock_internal()
392 return (nlm_advlock_internal(ap->a_vp, ap->a_id, ap->a_op, ap->a_fl, in nlm_advlock()
393 ap->a_flags, FALSE, TRUE)); in nlm_advlock()
410 if (fl->l_pid > PID_MAX) { in nlm_set_creds_for_lock()
412 * If this was originally a F_FLOCK-style lock, we in nlm_set_creds_for_lock()
420 if (ns->ns_svid == fl->l_pid) { in nlm_set_creds_for_lock()
421 cred = crhold(ns->ns_ucred); in nlm_set_creds_for_lock()
432 p = pfind(fl->l_pid); in nlm_set_creds_for_lock()
434 cred = crhold(p->p_ucred); in nlm_set_creds_for_lock()
444 cred = crhold(td->td_ucred); in nlm_set_creds_for_lock()
447 td->td_ucred = cred; in nlm_set_creds_for_lock()
461 oldcred = td->td_ucred; in nlm_reclaim_free_lock()
467 crfree(td->td_ucred); in nlm_reclaim_free_lock()
468 td->td_ucred = oldcred; in nlm_reclaim_free_lock()
477 nlm_cancel_wait(ap->a_vp); in nlm_reclaim()
478 lf_iteratelocks_vnode(ap->a_vp, nlm_reclaim_free_lock, NULL); in nlm_reclaim()
500 state = nlm_host_get_state(nr->nr_host); in nlm_client_recover_lock()
501 if (nr->nr_state != state) in nlm_client_recover_lock()
508 oldcred = td->td_ucred; in nlm_client_recover_lock()
514 crfree(td->td_ucred); in nlm_client_recover_lock()
515 td->td_ucred = oldcred; in nlm_client_recover_lock()
539 dst->caller_name = src->caller_name; in nlm_convert_to_nlm_lock()
540 dst->fh = src->fh; in nlm_convert_to_nlm_lock()
541 dst->oh = src->oh; in nlm_convert_to_nlm_lock()
542 dst->svid = src->svid; in nlm_convert_to_nlm_lock()
543 dst->l_offset = src->l_offset; in nlm_convert_to_nlm_lock()
544 dst->l_len = src->l_len; in nlm_convert_to_nlm_lock()
551 dst->exclusive = src->exclusive; in nlm_convert_to_nlm4_holder()
552 dst->svid = src->svid; in nlm_convert_to_nlm4_holder()
553 dst->oh = src->oh; in nlm_convert_to_nlm4_holder()
554 dst->l_offset = src->l_offset; in nlm_convert_to_nlm4_holder()
555 dst->l_len = src->l_len; in nlm_convert_to_nlm4_holder()
561 dst->cookie = src->cookie; in nlm_convert_to_nlm4_res()
562 dst->stat.stat = (enum nlm4_stats) src->stat.stat; in nlm_convert_to_nlm4_res()
576 args1.cookie = args->cookie; in nlm_test_rpc()
577 args1.exclusive = args->exclusive; in nlm_test_rpc()
578 nlm_convert_to_nlm_lock(&args1.alock, &args->alock); in nlm_test_rpc()
584 res->cookie = res1.cookie; in nlm_test_rpc()
585 res->stat.stat = (enum nlm4_stats) res1.stat.stat; in nlm_test_rpc()
588 &res->stat.nlm4_testrply_u.holder, in nlm_test_rpc()
607 args1.cookie = args->cookie; in nlm_lock_rpc()
608 args1.block = args->block; in nlm_lock_rpc()
609 args1.exclusive = args->exclusive; in nlm_lock_rpc()
610 nlm_convert_to_nlm_lock(&args1.alock, &args->alock); in nlm_lock_rpc()
611 args1.reclaim = args->reclaim; in nlm_lock_rpc()
612 args1.state = args->state; in nlm_lock_rpc()
636 args1.cookie = args->cookie; in nlm_cancel_rpc()
637 args1.block = args->block; in nlm_cancel_rpc()
638 args1.exclusive = args->exclusive; in nlm_cancel_rpc()
639 nlm_convert_to_nlm_lock(&args1.alock, &args->alock); in nlm_cancel_rpc()
663 args1.cookie = args->cookie; in nlm_unlock_rpc()
664 nlm_convert_to_nlm_lock(&args1.alock, &args->alock); in nlm_unlock_rpc()
687 * Note that since it is possible for us to receive replies from the
691 * We expect that any actual wait will be rare and short hence we
710 newfl.l_start = fl->l_start; in nlm_record_lock()
711 newfl.l_len = fl->l_len; in nlm_record_lock()
712 newfl.l_type = fl->l_type; in nlm_record_lock()
713 newfl.l_whence = fl->l_whence; in nlm_record_lock()
718 error = lf_advlockasync(&a, &vp->v_lockf, size); in nlm_record_lock()
744 * There is no sense in re-trying recording in nlm_record_lock()
754 ("Failed to register NFS lock locally - error=%d", error)); in nlm_record_lock()
769 int retry, block, exclusive; in nlm_setlock() local
777 exclusive = (fl->l_type == F_WRLCK); in nlm_setlock()
788 retry = 5*hz; in nlm_setlock()
792 return (ENOLCK); /* XXX retry? */ in nlm_setlock()
809 retries--; in nlm_setlock()
827 * their locks. Wait for a few seconds and try in nlm_setlock()
830 error = tsleep(&args, PCATCH, "nlmgrace", retry); in nlm_setlock()
833 retry = 2*retry; in nlm_setlock()
834 if (retry > 30*hz) in nlm_setlock()
835 retry = 30*hz; in nlm_setlock()
841 * The server should call us back with a in nlm_setlock()
845 * will also re-try every few seconds. in nlm_setlock()
847 error = nlm_wait_lock(wait_handle, retry); in nlm_setlock()
849 retry = 2*retry; in nlm_setlock()
850 if (retry > 30*hz) in nlm_setlock()
851 retry = 30*hz; in nlm_setlock()
873 /* XXX retry? */ in nlm_setlock()
917 * recently rebooted - in nlm_setlock()
934 * implementation - in nlm_setlock()
980 return (ENOLCK); /* XXX retry? */ in nlm_clearlock()
992 retries--; in nlm_clearlock()
1007 * their locks. Wait for a few seconds and try in nlm_clearlock()
1050 exclusive = (fl->l_type == F_WRLCK); in nlm_getlock()
1061 return (ENOLCK); /* XXX retry? */ in nlm_getlock()
1073 retries--; in nlm_getlock()
1083 * their locks. Wait for a few seconds and try in nlm_getlock()
1096 fl->l_start = h->l_offset; in nlm_getlock()
1097 fl->l_len = h->l_len; in nlm_getlock()
1098 fl->l_pid = h->svid; in nlm_getlock()
1099 if (h->exclusive) in nlm_getlock()
1100 fl->l_type = F_WRLCK; in nlm_getlock()
1102 fl->l_type = F_RDLCK; in nlm_getlock()
1103 fl->l_whence = SEEK_SET; in nlm_getlock()
1104 fl->l_sysid = 0; in nlm_getlock()
1106 fl->l_type = F_UNLCK; in nlm_getlock()
1158 if (ns->ns_id == id) { in nlm_find_svid()
1159 ns->ns_refs++; in nlm_find_svid()
1168 newns->ns_refs = 1; in nlm_find_svid()
1169 newns->ns_id = id; in nlm_find_svid()
1170 newns->ns_svid = svid; in nlm_find_svid()
1171 newns->ns_ucred = NULL; in nlm_find_svid()
1172 newns->ns_active = FALSE; in nlm_find_svid()
1180 if (ns->ns_id == id) { in nlm_find_svid()
1181 ns->ns_refs++; in nlm_find_svid()
1187 free_unr(nlm_svid_allocator, newns->ns_svid); in nlm_find_svid()
1205 ns->ns_refs--; in nlm_free_svid()
1206 if (!ns->ns_refs) { in nlm_free_svid()
1207 KASSERT(!ns->ns_active, ("Freeing active SVID")); in nlm_free_svid()
1210 free_unr(nlm_svid_allocator, ns->ns_svid); in nlm_free_svid()
1211 if (ns->ns_ucred) in nlm_free_svid()
1212 crfree(ns->ns_ucred); in nlm_free_svid()
1227 if (fl->l_whence == SEEK_END) { in nlm_init_lock()
1229 || (fl->l_start > 0 && size > OFF_MAX - fl->l_start)) in nlm_init_lock()
1231 start = size + fl->l_start; in nlm_init_lock()
1232 } else if (fl->l_whence == SEEK_SET || fl->l_whence == SEEK_CUR) { in nlm_init_lock()
1233 start = fl->l_start; in nlm_init_lock()
1239 if (fl->l_len < 0) { in nlm_init_lock()
1240 len = -fl->l_len; in nlm_init_lock()
1241 start -= len; in nlm_init_lock()
1245 len = fl->l_len; in nlm_init_lock()
1258 getcredhostname(NULL, oh_space + oh_len, 32 - oh_len); in nlm_init_lock()
1262 lock->caller_name = prison0.pr_hostname; in nlm_init_lock()
1263 lock->fh.n_len = fhlen; in nlm_init_lock()
1264 lock->fh.n_bytes = fh; in nlm_init_lock()
1265 lock->oh.n_len = oh_len; in nlm_init_lock()
1266 lock->oh.n_bytes = oh_space; in nlm_init_lock()
1267 lock->svid = svid; in nlm_init_lock()
1268 lock->l_offset = start; in nlm_init_lock()
1269 lock->l_len = len; in nlm_init_lock()