• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/

Lines Matching refs:lr

37  *	lr = rangelock_enter(zp, off, len, lock_type);
38 * rangelock_reduce(lr, off, len); // optional
39 * rangelock_exit(lr);
145 locked_range_t *lr;
178 lr = avl_find(tree, new, &where);
179 if (lr != NULL)
182 lr = (locked_range_t *)avl_nearest(tree, where, AVL_AFTER);
183 if (lr != NULL &&
184 lr->lr_offset < new->lr_offset + new->lr_length)
187 lr = (locked_range_t *)avl_nearest(tree, where, AVL_BEFORE);
188 if (lr != NULL &&
189 lr->lr_offset + lr->lr_length > new->lr_offset)
195 if (!lr->lr_write_wanted) {
196 cv_init(&lr->lr_write_cv, NULL, CV_DEFAULT, NULL);
197 lr->lr_write_wanted = B_TRUE;
199 cv_wait(&lr->lr_write_cv, &rl->rl_lock);
213 rangelock_proxify(avl_tree_t *tree, locked_range_t *lr)
217 if (lr->lr_proxy)
218 return (lr); /* already a proxy */
220 ASSERT3U(lr->lr_count, ==, 1);
221 ASSERT(lr->lr_write_wanted == B_FALSE);
222 ASSERT(lr->lr_read_wanted == B_FALSE);
223 avl_remove(tree, lr);
224 lr->lr_count = 0;
228 proxy->lr_offset = lr->lr_offset;
229 proxy->lr_length = lr->lr_length;
245 rangelock_split(avl_tree_t *tree, locked_range_t *lr, uint64_t off)
247 ASSERT3U(lr->lr_length, >, 1);
248 ASSERT3U(off, >, lr->lr_offset);
249 ASSERT3U(off, <, lr->lr_offset + lr->lr_length);
250 ASSERT(lr->lr_write_wanted == B_FALSE);
251 ASSERT(lr->lr_read_wanted == B_FALSE);
256 rear->lr_length = lr->lr_offset + lr->lr_length - off;
257 rear->lr_count = lr->lr_count;
263 locked_range_t *front = rangelock_proxify(tree, lr);
264 front->lr_length = off - lr->lr_offset;
277 locked_range_t *lr = kmem_alloc(sizeof (locked_range_t), KM_SLEEP);
278 lr->lr_offset = off;
279 lr->lr_length = len;
280 lr->lr_count = 1;
281 lr->lr_type = RL_READER;
282 lr->lr_proxy = B_TRUE;
283 lr->lr_write_wanted = B_FALSE;
284 lr->lr_read_wanted = B_FALSE;
285 avl_add(tree, lr);
519 locked_range_t *lr = avl_find(tree, remove, NULL);
520 ASSERT3P(lr, !=, NULL);
521 ASSERT3U(lr->lr_count, !=, 0);
522 ASSERT3U(lr->lr_type, ==, RL_READER);
524 for (len = remove->lr_length; len != 0; lr = next) {
525 len -= lr->lr_length;
527 next = AVL_NEXT(tree, lr);
529 ASSERT3U(lr->lr_offset + lr->lr_length, ==,
534 lr->lr_count--;
535 if (lr->lr_count == 0) {
536 avl_remove(tree, lr);
537 if (lr->lr_write_wanted) {
538 cv_broadcast(&lr->lr_write_cv);
539 cv_destroy(&lr->lr_write_cv);
541 if (lr->lr_read_wanted) {
542 cv_broadcast(&lr->lr_read_cv);
543 cv_destroy(&lr->lr_read_cv);
545 kmem_free(lr, sizeof (locked_range_t));
556 rangelock_exit(locked_range_t *lr)
558 rangelock_t *rl = lr->lr_rangelock;
560 ASSERT(lr->lr_type == RL_WRITER || lr->lr_type == RL_READER);
561 ASSERT(lr->lr_count == 1 || lr->lr_count == 0);
562 ASSERT(!lr->lr_proxy);
565 if (lr->lr_type == RL_WRITER) {
567 avl_remove(&rl->rl_tree, lr);
569 if (lr->lr_write_wanted) {
570 cv_broadcast(&lr->lr_write_cv);
571 cv_destroy(&lr->lr_write_cv);
573 if (lr->lr_read_wanted) {
574 cv_broadcast(&lr->lr_read_cv);
575 cv_destroy(&lr->lr_read_cv);
577 kmem_free(lr, sizeof (locked_range_t));
583 rangelock_exit_reader(rl, lr);
594 rangelock_reduce(locked_range_t *lr, uint64_t off, uint64_t len)
596 rangelock_t *rl = lr->lr_rangelock;
600 ASSERT3U(lr->lr_offset, ==, 0);
601 ASSERT3U(lr->lr_type, ==, RL_WRITER);
602 ASSERT(!lr->lr_proxy);
603 ASSERT3U(lr->lr_length, ==, UINT64_MAX);
604 ASSERT3U(lr->lr_count, ==, 1);
607 lr->lr_offset = off;
608 lr->lr_length = len;
610 if (lr->lr_write_wanted)
611 cv_broadcast(&lr->lr_write_cv);
612 if (lr->lr_read_wanted)
613 cv_broadcast(&lr->lr_read_cv);