unsigned int remove_extent(struct results_tree *res, struct extent *extent) { struct dupe_extents *p = extent->e_parent; struct rb_node *n; unsigned int result; again: p->de_score -= p->de_len; p->de_num_dupes--; result = p->de_num_dupes; list_del_init(&extent->e_list); rb_erase(&extent->e_node, &p->de_extents_root); interval_tree_remove(&extent->e_itnode, &extent->e_file->extent_tree); #ifdef ITDEBUG extent->e_file->num_extents--; #endif free_extent(extent); if (p->de_num_dupes == 1) { /* It doesn't make sense to have one extent in a dup * list. */ abort_on(RB_EMPTY_ROOT(&p->de_extents_root));/* logic error */ n = rb_first(&p->de_extents_root); extent = rb_entry(n, struct extent, e_node); goto again; }
static void del_object(struct i915_mmu_object *mo) { if (RB_EMPTY_NODE(&mo->it.rb)) return; interval_tree_remove(&mo->it, &mo->mn->objects); RB_CLEAR_NODE(&mo->it.rb); }
static void del_object(struct i915_mmu_object *mo) { if (!mo->attached) return; interval_tree_remove(&mo->it, &mo->mn->objects); mo->attached = false; }
static int interval_tree_test_init(void) { int i, j; unsigned long results; cycles_t time1, time2, _time; printk(KERN_ALERT "interval tree insert/remove"); prandom_seed_state(&rnd, 3141592653589793238ULL); init(); time1 = get_cycles(); for (i = 0; i < PERF_LOOPS; i++) { for (j = 0; j < NODES; j++) interval_tree_insert(nodes + j, &root); for (j = 0; j < NODES; j++) interval_tree_remove(nodes + j, &root); } time2 = get_cycles(); _time = time2 - time1; _time = div_u64(_time, PERF_LOOPS); printk(" -> %llu cycles\n", (unsigned long long)time); printk(KERN_ALERT "interval tree search"); for (j = 0; j < NODES; j++) interval_tree_insert(nodes + j, &root); time1 = get_cycles(); results = 0; for (i = 0; i < SEARCH_LOOPS; i++) for (j = 0; j < SEARCHES; j++) results += search(queries[j], &root); time2 = get_cycles(); _time = time2 - time1; _time = div_u64(_time, SEARCH_LOOPS); results = div_u64(results, SEARCH_LOOPS); printk(" -> %llu cycles (%lu results)\n", (unsigned long long)time, results); return -EAGAIN; /* Fail will directly unload the module */ }