Lines Matching refs:state
78 struct extent_state *state; in extent_io_exit() local
82 state = list_entry(states.next, struct extent_state, leak_list); in extent_io_exit()
85 (unsigned long long)state->start, in extent_io_exit()
86 (unsigned long long)state->end, in extent_io_exit()
87 state->state, state->tree, atomic_read(&state->refs)); in extent_io_exit()
88 list_del(&state->leak_list); in extent_io_exit()
89 kmem_cache_free(extent_state_cache, state); in extent_io_exit()
110 tree->state.rb_node = NULL; in extent_io_tree_init()
121 struct extent_state *state; in alloc_extent_state() local
126 state = kmem_cache_alloc(extent_state_cache, mask); in alloc_extent_state()
127 if (!state) in alloc_extent_state()
128 return state; in alloc_extent_state()
129 state->state = 0; in alloc_extent_state()
130 state->private = 0; in alloc_extent_state()
131 state->tree = NULL; in alloc_extent_state()
134 list_add(&state->leak_list, &states); in alloc_extent_state()
137 atomic_set(&state->refs, 1); in alloc_extent_state()
138 init_waitqueue_head(&state->wq); in alloc_extent_state()
139 return state; in alloc_extent_state()
142 static void free_extent_state(struct extent_state *state) in free_extent_state() argument
144 if (!state) in free_extent_state()
146 if (atomic_dec_and_test(&state->refs)) { in free_extent_state()
150 WARN_ON(state->tree); in free_extent_state()
153 list_del(&state->leak_list); in free_extent_state()
156 kmem_cache_free(extent_state_cache, state); in free_extent_state()
189 struct rb_root *root = &tree->state; in __etree_search()
296 struct extent_state *state) in merge_state() argument
301 if (state->state & (EXTENT_IOBITS | EXTENT_BOUNDARY)) in merge_state()
304 other_node = rb_prev(&state->rb_node); in merge_state()
307 if (other->end == state->start - 1 && in merge_state()
308 other->state == state->state) { in merge_state()
309 state->start = other->start; in merge_state()
311 rb_erase(&other->rb_node, &tree->state); in merge_state()
315 other_node = rb_next(&state->rb_node); in merge_state()
318 if (other->start == state->end + 1 && in merge_state()
319 other->state == state->state) { in merge_state()
320 other->start = state->start; in merge_state()
321 state->tree = NULL; in merge_state()
322 rb_erase(&state->rb_node, &tree->state); in merge_state()
323 free_extent_state(state); in merge_state()
330 struct extent_state *state, in set_state_cb() argument
334 tree->ops->set_bit_hook(tree->mapping->host, state->start, in set_state_cb()
335 state->end, state->state, bits); in set_state_cb()
340 struct extent_state *state, in clear_state_cb() argument
344 tree->ops->clear_bit_hook(tree->mapping->host, state->start, in clear_state_cb()
345 state->end, state->state, bits); in clear_state_cb()
360 struct extent_state *state, u64 start, u64 end, in insert_state() argument
373 set_state_cb(tree, state, bits); in insert_state()
374 state->state |= bits; in insert_state()
375 state->start = start; in insert_state()
376 state->end = end; in insert_state()
377 node = tree_insert(&tree->state, end, &state->rb_node); in insert_state()
385 free_extent_state(state); in insert_state()
388 state->tree = tree; in insert_state()
389 merge_state(tree, state); in insert_state()
413 prealloc->state = orig->state; in split_state()
416 node = tree_insert(&tree->state, prealloc->end, &prealloc->rb_node); in split_state()
434 struct extent_state *state, int bits, int wake, in clear_state_bit() argument
437 int ret = state->state & bits; in clear_state_bit()
439 if ((bits & EXTENT_DIRTY) && (state->state & EXTENT_DIRTY)) { in clear_state_bit()
440 u64 range = state->end - state->start + 1; in clear_state_bit()
444 clear_state_cb(tree, state, bits); in clear_state_bit()
445 state->state &= ~bits; in clear_state_bit()
447 wake_up(&state->wq); in clear_state_bit()
448 if (delete || state->state == 0) { in clear_state_bit()
449 if (state->tree) { in clear_state_bit()
450 clear_state_cb(tree, state, state->state); in clear_state_bit()
451 rb_erase(&state->rb_node, &tree->state); in clear_state_bit()
452 state->tree = NULL; in clear_state_bit()
453 free_extent_state(state); in clear_state_bit()
458 merge_state(tree, state); in clear_state_bit()
479 struct extent_state *state; in clear_extent_bit() local
500 state = rb_entry(node, struct extent_state, rb_node); in clear_extent_bit()
501 if (state->start > end) in clear_extent_bit()
503 WARN_ON(state->end < start); in clear_extent_bit()
521 if (state->start < start) { in clear_extent_bit()
524 err = split_state(tree, state, prealloc, start); in clear_extent_bit()
529 if (state->end <= end) { in clear_extent_bit()
530 start = state->end + 1; in clear_extent_bit()
531 set |= clear_state_bit(tree, state, bits, in clear_extent_bit()
534 start = state->start; in clear_extent_bit()
544 if (state->start <= end && state->end > end) { in clear_extent_bit()
547 err = split_state(tree, state, prealloc, end + 1); in clear_extent_bit()
551 wake_up(&state->wq); in clear_extent_bit()
558 start = state->end + 1; in clear_extent_bit()
559 set |= clear_state_bit(tree, state, bits, wake, delete); in clear_extent_bit()
579 struct extent_state *state) in wait_on_state() argument
584 prepare_to_wait(&state->wq, &wait, TASK_UNINTERRUPTIBLE); in wait_on_state()
588 finish_wait(&state->wq, &wait); in wait_on_state()
599 struct extent_state *state; in wait_extent_bit() local
613 state = rb_entry(node, struct extent_state, rb_node); in wait_extent_bit()
615 if (state->start > end) in wait_extent_bit()
618 if (state->state & bits) { in wait_extent_bit()
619 start = state->start; in wait_extent_bit()
620 atomic_inc(&state->refs); in wait_extent_bit()
621 wait_on_state(tree, state); in wait_extent_bit()
622 free_extent_state(state); in wait_extent_bit()
625 start = state->end + 1; in wait_extent_bit()
642 struct extent_state *state, in set_state_bits() argument
645 if ((bits & EXTENT_DIRTY) && !(state->state & EXTENT_DIRTY)) { in set_state_bits()
646 u64 range = state->end - state->start + 1; in set_state_bits()
649 set_state_cb(tree, state, bits); in set_state_bits()
650 state->state |= bits; in set_state_bits()
668 struct extent_state *state; in set_extent_bit() local
695 state = rb_entry(node, struct extent_state, rb_node); in set_extent_bit()
696 last_start = state->start; in set_extent_bit()
697 last_end = state->end; in set_extent_bit()
705 if (state->start == start && state->end <= end) { in set_extent_bit()
706 set = state->state & bits; in set_extent_bit()
708 *failed_start = state->start; in set_extent_bit()
712 set_state_bits(tree, state, bits); in set_extent_bit()
713 start = state->end + 1; in set_extent_bit()
714 merge_state(tree, state); in set_extent_bit()
734 if (state->start < start) { in set_extent_bit()
735 set = state->state & bits; in set_extent_bit()
741 err = split_state(tree, state, prealloc, start); in set_extent_bit()
746 if (state->end <= end) { in set_extent_bit()
747 set_state_bits(tree, state, bits); in set_extent_bit()
748 start = state->end + 1; in set_extent_bit()
749 merge_state(tree, state); in set_extent_bit()
751 start = state->start; in set_extent_bit()
762 if (state->start > start) { in set_extent_bit()
783 if (state->start <= end && state->end > end) { in set_extent_bit()
784 set = state->state & bits; in set_extent_bit()
790 err = split_state(tree, state, prealloc, end + 1); in set_extent_bit()
1005 struct extent_state *state; in find_first_extent_bit() local
1018 state = rb_entry(node, struct extent_state, rb_node); in find_first_extent_bit()
1019 if (state->end >= start && (state->state & bits)) { in find_first_extent_bit()
1020 *start_ret = state->start; in find_first_extent_bit()
1021 *end_ret = state->end; in find_first_extent_bit()
1042 struct extent_state *state; in find_first_extent_bit_state() local
1053 state = rb_entry(node, struct extent_state, rb_node); in find_first_extent_bit_state()
1054 if (state->end >= start && (state->state & bits)) in find_first_extent_bit_state()
1055 return state; in find_first_extent_bit_state()
1075 struct extent_state *state; in find_delalloc_range() local
1094 state = rb_entry(node, struct extent_state, rb_node); in find_delalloc_range()
1095 if (found && (state->start != cur_start || in find_delalloc_range()
1096 (state->state & EXTENT_BOUNDARY))) { in find_delalloc_range()
1099 if (!(state->state & EXTENT_DELALLOC)) { in find_delalloc_range()
1101 *end = state->end; in find_delalloc_range()
1105 *start = state->start; in find_delalloc_range()
1107 *end = state->end; in find_delalloc_range()
1108 cur_start = state->end + 1; in find_delalloc_range()
1112 total_bytes += state->end - state->start + 1; in find_delalloc_range()
1361 struct extent_state *state; in count_range_bits() local
1385 state = rb_entry(node, struct extent_state, rb_node); in count_range_bits()
1386 if (state->start > search_end) in count_range_bits()
1388 if (state->end >= cur_start && (state->state & bits)) { in count_range_bits()
1389 total_bytes += min(search_end, state->end) + 1 - in count_range_bits()
1390 max(cur_start, state->start); in count_range_bits()
1394 *start = state->start; in count_range_bits()
1477 struct extent_state *state; in set_state_private() local
1490 state = rb_entry(node, struct extent_state, rb_node); in set_state_private()
1491 if (state->start != start) { in set_state_private()
1495 state->private = private; in set_state_private()
1504 struct extent_state *state; in get_state_private() local
1517 state = rb_entry(node, struct extent_state, rb_node); in get_state_private()
1518 if (state->start != start) { in get_state_private()
1522 *private = state->private; in get_state_private()
1537 struct extent_state *state = NULL; in test_range_bit() local
1544 state = rb_entry(node, struct extent_state, rb_node); in test_range_bit()
1546 if (filled && state->start > start) { in test_range_bit()
1551 if (state->start > end) in test_range_bit()
1554 if (state->state & bits) { in test_range_bit()
1562 start = state->end + 1; in test_range_bit()