Lines Matching refs:lock

68 	smb_lock_t	*lock;  in smb_lock_get_lock_count()  local
78 for (lock = smb_llist_head(llist); in smb_lock_get_lock_count()
79 lock != NULL; in smb_lock_get_lock_count()
80 lock = smb_llist_next(llist, lock)) { in smb_lock_get_lock_count()
81 if (lock->l_file == of) in smb_lock_get_lock_count()
106 smb_lock_t *lock = NULL; in smb_unlock_range() local
124 status = smb_lock_range_ulckrules(file, start, length, pid, &lock); in smb_unlock_range()
130 ASSERT(lock == NULL); in smb_unlock_range()
132 if (lock != NULL) { in smb_unlock_range()
133 smb_llist_remove(&node->n_lock_list, lock); in smb_unlock_range()
134 smb_lock_posix_unlock(node, lock, sr->user_cr); in smb_unlock_range()
138 if (smb_lock_debug && lock == NULL) { in smb_unlock_range()
146 if (lock != NULL) in smb_unlock_range()
147 smb_lock_destroy(lock); in smb_unlock_range()
180 smb_lock_t *lock; in smb_lock_range() local
201 lock = smb_lock_create(sr, start, length, pid, locktype, timeout); in smb_lock_range()
207 result = smb_lock_range_lckrules(file, lock, &conflict); in smb_lock_range()
229 result = smb_lock_wait(sr, lock, conflict); in smb_lock_range()
250 lock->l_blocked_by = NULL; in smb_lock_range()
275 if ((lock->l_start >= 0xef000000) && in smb_lock_range()
276 !(lock->l_start & (1ULL << 63))) { in smb_lock_range()
287 (lock->l_start == file->f_llf_pos)) { in smb_lock_range()
295 file->f_llf_pos = lock->l_start; in smb_lock_range()
299 smb_lock_free(lock); in smb_lock_range()
305 rc = smb_fsop_frlock(node, lock, B_FALSE, sr->user_cr); in smb_lock_range()
317 if (lock->l_type == SMB_LOCK_TYPE_READWRITE) in smb_lock_range()
318 smb_llist_insert_head(&node->n_lock_list, lock); in smb_lock_range()
320 smb_llist_insert_tail(&node->n_lock_list, lock); in smb_lock_range()
360 smb_lock_t *lock; in smb_lock_range_access() local
379 for (lock = smb_llist_head(llist); in smb_lock_range_access()
380 lock != NULL; in smb_lock_range_access()
381 lock = smb_llist_next(llist, lock)) { in smb_lock_range_access()
383 if (!smb_lock_range_overlap(lock, start, length)) in smb_lock_range_access()
387 if (lock->l_type == SMB_LOCK_TYPE_READONLY && !will_write) in smb_lock_range_access()
390 if (lock->l_type == SMB_LOCK_TYPE_READWRITE && in smb_lock_range_access()
391 lock->l_file == sr->fid_ofile && in smb_lock_range_access()
392 lock->l_pid == lk_pid) in smb_lock_range_access()
400 (long long)lock->l_start, in smb_lock_range_access()
401 (long long)lock->l_length, in smb_lock_range_access()
402 (void *)lock->l_file, in smb_lock_range_access()
403 lock->l_pid, lock->l_type); in smb_lock_range_access()
421 smb_lock_t *lock; in smb_node_destroy_lock_by_ofile() local
432 for (lock = smb_llist_head(&node->n_wlock_list); in smb_node_destroy_lock_by_ofile()
433 lock != NULL; in smb_node_destroy_lock_by_ofile()
434 lock = smb_llist_next(&node->n_wlock_list, lock)) { in smb_node_destroy_lock_by_ofile()
436 if (lock->l_file == file) { in smb_node_destroy_lock_by_ofile()
437 mutex_enter(&lock->l_mutex); in smb_node_destroy_lock_by_ofile()
438 lock->l_blocked_by = NULL; in smb_node_destroy_lock_by_ofile()
439 lock->l_flags |= SMB_LOCK_FLAG_CLOSED; in smb_node_destroy_lock_by_ofile()
440 cv_broadcast(&lock->l_cv); in smb_node_destroy_lock_by_ofile()
441 mutex_exit(&lock->l_mutex); in smb_node_destroy_lock_by_ofile()
458 lock = smb_llist_head(&node->n_lock_list); in smb_node_destroy_lock_by_ofile()
459 while (lock) { in smb_node_destroy_lock_by_ofile()
460 nxtl = smb_llist_next(&node->n_lock_list, lock); in smb_node_destroy_lock_by_ofile()
461 if (lock->l_file == file) { in smb_node_destroy_lock_by_ofile()
462 smb_llist_remove(&node->n_lock_list, lock); in smb_node_destroy_lock_by_ofile()
463 smb_lock_posix_unlock(node, lock, kcr); in smb_node_destroy_lock_by_ofile()
464 list_insert_tail(&destroy_list, lock); in smb_node_destroy_lock_by_ofile()
466 lock = nxtl; in smb_node_destroy_lock_by_ofile()
470 lock = list_head(&destroy_list); in smb_node_destroy_lock_by_ofile()
471 while (lock) { in smb_node_destroy_lock_by_ofile()
472 nxtl = list_next(&destroy_list, lock); in smb_node_destroy_lock_by_ofile()
473 list_remove(&destroy_list, lock); in smb_node_destroy_lock_by_ofile()
474 smb_lock_destroy(lock); in smb_node_destroy_lock_by_ofile()
475 lock = nxtl; in smb_node_destroy_lock_by_ofile()
491 smb_lock_t *lock; in smb_lock_range_cancel() local
508 for (lock = smb_llist_head(&node->n_wlock_list); in smb_lock_range_cancel()
509 lock != NULL; in smb_lock_range_cancel()
510 lock = smb_llist_next(&node->n_wlock_list, lock)) { in smb_lock_range_cancel()
512 if ((start == lock->l_start) && in smb_lock_range_cancel()
513 (length == lock->l_length) && in smb_lock_range_cancel()
514 lock->l_file == sr->fid_ofile && in smb_lock_range_cancel()
515 lock->l_pid == pid) { in smb_lock_range_cancel()
517 mutex_enter(&lock->l_mutex); in smb_lock_range_cancel()
518 lock->l_blocked_by = NULL; in smb_lock_range_cancel()
519 lock->l_flags |= SMB_LOCK_FLAG_CANCELLED; in smb_lock_range_cancel()
520 cv_broadcast(&lock->l_cv); in smb_lock_range_cancel()
521 mutex_exit(&lock->l_mutex); in smb_lock_range_cancel()
613 smb_lock_posix_unlock(smb_node_t *node, smb_lock_t *lock, cred_t *cr) in smb_lock_posix_unlock() argument
623 unlock_start = lock->l_start; in smb_lock_posix_unlock()
624 unlock_end = unlock_start + lock->l_length; in smb_lock_posix_unlock()
629 lock->l_file->f_uniqid, llist, &new_mark); in smb_lock_posix_unlock()
632 new_unlock = *lock; in smb_lock_posix_unlock()
639 new_unlock = *lock; in smb_lock_posix_unlock()
674 smb_lock_range_overlap(struct smb_lock *lock, uint64_t start, uint64_t length) in smb_lock_range_overlap() argument
677 if ((lock->l_start < start) && in smb_lock_range_overlap()
678 ((lock->l_start + lock->l_length) > start)) in smb_lock_range_overlap()
685 if ((start == lock->l_start) && (length == lock->l_length)) in smb_lock_range_overlap()
688 if (start < lock->l_start) { in smb_lock_range_overlap()
689 if (start + length > lock->l_start) in smb_lock_range_overlap()
691 } else if (start < lock->l_start + lock->l_length) in smb_lock_range_overlap()
721 smb_lock_t *lock; in smb_lock_range_lckrules() local
730 for (lock = smb_llist_head(&node->n_lock_list); in smb_lock_range_lckrules()
731 lock != NULL; in smb_lock_range_lckrules()
732 lock = smb_llist_next(&node->n_lock_list, lock)) { in smb_lock_range_lckrules()
734 if (!smb_lock_range_overlap(lock, dlock->l_start, in smb_lock_range_lckrules()
743 if ((lock->l_type == SMB_LOCK_TYPE_READONLY) && in smb_lock_range_lckrules()
753 !(lock->l_type == SMB_LOCK_TYPE_READONLY)) { in smb_lock_range_lckrules()
754 if (lock->l_file == dlock->l_file && in smb_lock_range_lckrules()
755 lock->l_pid == dlock->l_pid) { in smb_lock_range_lckrules()
761 *conflictp = lock; in smb_lock_range_lckrules()
781 smb_lock_t *lock = sr->cancel_arg2; in smb_lock_cancel_sr() local
783 ASSERT(lock->l_magic == SMB_LOCK_MAGIC); in smb_lock_cancel_sr()
784 mutex_enter(&lock->l_mutex); in smb_lock_cancel_sr()
785 lock->l_blocked_by = NULL; in smb_lock_cancel_sr()
786 lock->l_flags |= SMB_LOCK_FLAG_CANCELLED; in smb_lock_cancel_sr()
787 cv_broadcast(&lock->l_cv); in smb_lock_cancel_sr()
788 mutex_exit(&lock->l_mutex); in smb_lock_cancel_sr()
804 smb_lock_wait(smb_request_t *sr, smb_lock_t *lock, smb_lock_t *conflict) in smb_lock_wait() argument
810 node = lock->l_file->f_node; in smb_lock_wait()
821 mutex_enter(&lock->l_mutex); in smb_lock_wait()
822 lock->l_blocked_by = conflict; in smb_lock_wait()
823 mutex_exit(&lock->l_mutex); in smb_lock_wait()
833 smb_llist_insert_tail(&node->n_wlock_list, lock); in smb_lock_wait()
839 (void *)lock, (void *)conflict); in smb_lock_wait()
863 sr->cancel_arg2 = lock; in smb_lock_wait()
874 mutex_enter(&lock->l_mutex); in smb_lock_wait()
876 lock->l_blocked_by != NULL) { in smb_lock_wait()
877 if (lock->l_flags & SMB_LOCK_FLAG_INDEFINITE) { in smb_lock_wait()
878 cv_wait(&lock->l_cv, &lock->l_mutex); in smb_lock_wait()
880 rc = cv_timedwait(&lock->l_cv, in smb_lock_wait()
881 &lock->l_mutex, lock->l_end_time); in smb_lock_wait()
887 if (lock->l_flags & SMB_LOCK_FLAG_CANCELLED) in smb_lock_wait()
889 if (lock->l_flags & SMB_LOCK_FLAG_CLOSED) in smb_lock_wait()
892 mutex_exit(&lock->l_mutex); in smb_lock_wait()
924 smb_llist_remove(&node->n_wlock_list, lock); in smb_lock_wait()
958 smb_lock_t *lock; in smb_lock_range_ulckrules() local
962 for (lock = smb_llist_head(&node->n_lock_list); in smb_lock_range_ulckrules()
963 lock != NULL; in smb_lock_range_ulckrules()
964 lock = smb_llist_next(&node->n_lock_list, lock)) { in smb_lock_range_ulckrules()
966 if ((start == lock->l_start) && in smb_lock_range_ulckrules()
967 (length == lock->l_length) && in smb_lock_range_ulckrules()
968 lock->l_file == file && in smb_lock_range_ulckrules()
969 lock->l_pid == pid) { in smb_lock_range_ulckrules()
970 *foundlock = lock; in smb_lock_range_ulckrules()
988 smb_lock_t *lock; in smb_lock_create() local
993 lock = kmem_cache_alloc(smb_cache_lock, KM_SLEEP); in smb_lock_create()
994 bzero(lock, sizeof (*lock)); in smb_lock_create()
995 lock->l_magic = SMB_LOCK_MAGIC; in smb_lock_create()
996 lock->l_file = sr->fid_ofile; in smb_lock_create()
998 lock->l_pid = pid; in smb_lock_create()
999 lock->l_type = locktype; in smb_lock_create()
1000 lock->l_start = start; in smb_lock_create()
1001 lock->l_length = length; in smb_lock_create()
1006 lock->l_end_time = ddi_get_lbolt() + MSEC_TO_TICK(timeout); in smb_lock_create()
1008 lock->l_flags |= SMB_LOCK_FLAG_INDEFINITE; in smb_lock_create()
1010 mutex_init(&lock->l_mutex, NULL, MUTEX_DEFAULT, NULL); in smb_lock_create()
1011 cv_init(&lock->l_cv, NULL, CV_DEFAULT, NULL); in smb_lock_create()
1013 return (lock); in smb_lock_create()
1017 smb_lock_free(smb_lock_t *lock) in smb_lock_free() argument
1020 lock->l_magic = 0; in smb_lock_free()
1021 cv_destroy(&lock->l_cv); in smb_lock_free()
1022 mutex_destroy(&lock->l_mutex); in smb_lock_free()
1024 kmem_cache_free(smb_cache_lock, lock); in smb_lock_free()
1033 smb_lock_destroy(smb_lock_t *lock) in smb_lock_destroy() argument
1044 mutex_enter(&lock->l_mutex); in smb_lock_destroy()
1045 ccnt = lock->l_conflicts; in smb_lock_destroy()
1046 lock->l_conflicts = 0; in smb_lock_destroy()
1047 mutex_exit(&lock->l_mutex); in smb_lock_destroy()
1049 node = lock->l_file->f_node; in smb_lock_destroy()
1058 if (tl->l_blocked_by == lock) { in smb_lock_destroy()
1079 smb_lock_free(lock); in smb_lock_destroy()
1175 smb_lock_dump1(smb_lock_t *lock) in smb_lock_dump1() argument
1178 (void *)lock, in smb_lock_dump1()
1179 (long long)lock->l_start, in smb_lock_dump1()
1180 (long long)lock->l_length, in smb_lock_dump1()
1181 (void *)lock->l_file, in smb_lock_dump1()
1182 lock->l_pid); in smb_lock_dump1()
1189 smb_lock_t *lock; in smb_lock_dumplist() local
1191 for (lock = smb_llist_head(llist); in smb_lock_dumplist()
1192 lock != NULL; in smb_lock_dumplist()
1193 lock = smb_llist_next(llist, lock)) { in smb_lock_dumplist()
1194 smb_lock_dump1(lock); in smb_lock_dumplist()