本文整理汇总了C++中radix_tree_delete函数的典型用法代码示例。如果您正苦于以下问题:C++ radix_tree_delete函数的具体用法?C++ radix_tree_delete怎么用?C++ radix_tree_delete使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了radix_tree_delete函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: __delete_from_swap_cache
/*
* This must be called only on pages that have
* been verified to be in the swap cache.
*/
void __delete_from_swap_cache(struct page *page)
{
BUG_ON(!PageLocked(page));
BUG_ON(!PageSwapCache(page));
BUG_ON(PageWriteback(page));
BUG_ON(PagePrivate(page));
radix_tree_delete(&swapper_space.page_tree, page_private(page));
set_page_private(page, 0);
ClearPageSwapCache(page);
total_swapcache_pages--;
pagecache_acct(-1);
INC_CACHE_INFO(del_total);
}
示例2: __delete_from_swap_cache
/*
* This must be called only on pages that have
* been verified to be in the swap cache.
*/
void __delete_from_swap_cache(struct page *page)
{
VM_BUG_ON(!PageLocked(page));
VM_BUG_ON(!PageSwapCache(page));
VM_BUG_ON(PageWriteback(page));
radix_tree_delete(&swapper_space.page_tree, page_private(page));
set_page_private(page, 0);
ClearPageSwapCache(page);
total_swapcache_pages--;
__dec_zone_page_state(page, NR_FILE_PAGES);
__dec_zone_page_state(page, NR_SWAPCACHE);
INC_CACHE_INFO(del_total);
}
示例3: __fscache_maybe_release_page
/*
* decide whether a page can be released, possibly by cancelling a store to it
* - we're allowed to sleep if __GFP_DIRECT_RECLAIM is flagged
*/
bool __fscache_maybe_release_page(struct fscache_cookie *cookie,
struct page *page,
gfp_t gfp)
{
struct page *xpage;
void *val;
_enter("%p,%p,%x", cookie, page, gfp);
try_again:
rcu_read_lock();
val = radix_tree_lookup(&cookie->stores, page->index);
if (!val) {
rcu_read_unlock();
fscache_stat(&fscache_n_store_vmscan_not_storing);
__fscache_uncache_page(cookie, page);
return true;
}
/* see if the page is actually undergoing storage - if so we can't get
* rid of it till the cache has finished with it */
if (radix_tree_tag_get(&cookie->stores, page->index,
FSCACHE_COOKIE_STORING_TAG)) {
rcu_read_unlock();
goto page_busy;
}
/* the page is pending storage, so we attempt to cancel the store and
* discard the store request so that the page can be reclaimed */
spin_lock(&cookie->stores_lock);
rcu_read_unlock();
if (radix_tree_tag_get(&cookie->stores, page->index,
FSCACHE_COOKIE_STORING_TAG)) {
/* the page started to undergo storage whilst we were looking,
* so now we can only wait or return */
spin_unlock(&cookie->stores_lock);
goto page_busy;
}
xpage = radix_tree_delete(&cookie->stores, page->index);
spin_unlock(&cookie->stores_lock);
if (xpage) {
fscache_stat(&fscache_n_store_vmscan_cancelled);
fscache_stat(&fscache_n_store_radix_deletes);
ASSERTCMP(xpage, ==, page);
} else {
示例4: main
int main(void)
{
char *test[] = {"abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yz0",
"123", "456", "789", "zyx", "wvu", "tsr", "qpo", "nml", "kji"};
int i = 0;
int num = sizeof(test)/sizeof(*test);
printf("num:%d\n", num);
radix_tree_head *head = radix_tree_head_new();
radix_tree_initial(head);
if(!head)
{
printf("alloc head failed\n");
}
///插入数据测试
for(i = 0; i < num; i++)
{
radix_tree_insert(head, i, test[i]);
}
/// 从指定的index开始,查找固定max_items个数据
void *result[5];
radix_tree_gang_lookup(head,result,2,5); //从第二个之后开始找
for(int i=0;i<6;i++)
{
printf("%d :%s\n",i,result[i]);
}
///从指定位置查找数据
for(i = 0; i < num; i++)
{
printf("%s\n",(char*) radix_tree_lookup(head, i));
}
for(i = 0; i < num; i++)
{
radix_tree_delete(head, i);
}
return 0;
}
示例5: __mlx5e_vxlan_core_del_port
static void __mlx5e_vxlan_core_del_port(struct mlx5e_priv *priv, u16 port)
{
struct mlx5e_vxlan_db *vxlan_db = &priv->vxlan;
struct mlx5e_vxlan *vxlan;
spin_lock_irq(&vxlan_db->lock);
vxlan = radix_tree_delete(&vxlan_db->tree, port);
spin_unlock_irq(&vxlan_db->lock);
if (!vxlan)
return;
mlx5e_vxlan_core_del_port_cmd(priv->mdev, vxlan->udp_port);
kfree(vxlan);
}
示例6: xfs_qm_dqfree_one
STATIC void
xfs_qm_dqfree_one(
struct xfs_dquot *dqp)
{
struct xfs_mount *mp = dqp->q_mount;
struct xfs_quotainfo *qi = mp->m_quotainfo;
mutex_lock(&qi->qi_tree_lock);
radix_tree_delete(XFS_DQUOT_TREE(qi, dqp->q_core.d_flags),
be32_to_cpu(dqp->q_core.d_id));
qi->qi_dquots--;
mutex_unlock(&qi->qi_tree_lock);
xfs_qm_dqdestroy(dqp);
}
示例7: rcu_register_thread
static void *writer_fn(void *arg)
{
int i;
rcu_register_thread();
pthread_barrier_wait(&worker_barrier);
for (i = 0; i < 1000000; i++) {
radix_tree_insert(&mt_tree, 1, &obj1);
radix_tree_delete(&mt_tree, 1);
}
rcu_unregister_thread();
return NULL;
}
示例8: __fscache_maybe_release_page
bool __fscache_maybe_release_page(struct fscache_cookie *cookie,
struct page *page,
gfp_t gfp)
{
struct page *xpage;
void *val;
_enter("%p,%p,%x", cookie, page, gfp);
rcu_read_lock();
val = radix_tree_lookup(&cookie->stores, page->index);
if (!val) {
rcu_read_unlock();
fscache_stat(&fscache_n_store_vmscan_not_storing);
__fscache_uncache_page(cookie, page);
return true;
}
/*
*/
if (radix_tree_tag_get(&cookie->stores, page->index,
FSCACHE_COOKIE_STORING_TAG)) {
rcu_read_unlock();
goto page_busy;
}
/*
*/
spin_lock(&cookie->stores_lock);
rcu_read_unlock();
if (radix_tree_tag_get(&cookie->stores, page->index,
FSCACHE_COOKIE_STORING_TAG)) {
/*
*/
spin_unlock(&cookie->stores_lock);
goto page_busy;
}
xpage = radix_tree_delete(&cookie->stores, page->index);
spin_unlock(&cookie->stores_lock);
if (xpage) {
fscache_stat(&fscache_n_store_vmscan_cancelled);
fscache_stat(&fscache_n_store_radix_deletes);
ASSERTCMP(xpage, ==, page);
} else {
示例9: nilfs_btnode_abort_change_key
void nilfs_btnode_abort_change_key(struct address_space *btnc,
struct nilfs_btnode_chkey_ctxt *ctxt)
{
struct buffer_head *nbh = ctxt->newbh;
__u64 oldkey = ctxt->oldkey, newkey = ctxt->newkey;
if (oldkey == newkey)
return;
if (nbh == NULL) {
spin_lock_irq(&btnc->tree_lock);
radix_tree_delete(&btnc->page_tree, newkey);
spin_unlock_irq(&btnc->tree_lock);
unlock_page(ctxt->bh->b_page);
} else
brelse(nbh);
}
示例10: __add_to_swap_cache
/*
* __add_to_swap_cache resembles add_to_page_cache_locked on swapper_space,
* but sets SwapCache flag and private instead of mapping and index.
*/
int __add_to_swap_cache(struct page *page, swp_entry_t entry)
{
int error, i, nr = hpage_nr_pages(page);
struct address_space *address_space;
pgoff_t idx = swp_offset(entry);
VM_BUG_ON_PAGE(!PageLocked(page), page);
VM_BUG_ON_PAGE(PageSwapCache(page), page);
VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
page_ref_add(page, nr);
SetPageSwapCache(page);
address_space = swap_address_space(entry);
spin_lock_irq(&address_space->tree_lock);
for (i = 0; i < nr; i++) {
set_page_private(page + i, entry.val + i);
error = radix_tree_insert(&address_space->page_tree,
idx + i, page + i);
if (unlikely(error))
break;
}
if (likely(!error)) {
address_space->nrpages += nr;
__mod_node_page_state(page_pgdat(page), NR_FILE_PAGES, nr);
ADD_CACHE_INFO(add_total, nr);
} else {
/*
* Only the context which have set SWAP_HAS_CACHE flag
* would call add_to_swap_cache().
* So add_to_swap_cache() doesn't returns -EEXIST.
*/
VM_BUG_ON(error == -EEXIST);
set_page_private(page + i, 0UL);
while (i--) {
radix_tree_delete(&address_space->page_tree, idx + i);
set_page_private(page + i, 0UL);
}
ClearPageSwapCache(page);
page_ref_sub(page, nr);
}
spin_unlock_irq(&address_space->tree_lock);
return error;
}
示例11: __delete_from_swap_cache
/*
* This must be called only on pages that have
* been verified to be in the swap cache.
*/
void __delete_from_swap_cache(struct page *page)
{
swp_entry_t entry;
struct address_space *address_space;
VM_BUG_ON_PAGE(!PageLocked(page), page);
VM_BUG_ON_PAGE(!PageSwapCache(page), page);
VM_BUG_ON_PAGE(PageWriteback(page), page);
entry.val = page_private(page);
address_space = swap_address_space(entry);
radix_tree_delete(&address_space->page_tree, page_private(page));
set_page_private(page, 0);
ClearPageSwapCache(page);
address_space->nrpages--;
__dec_zone_page_state(page, NR_FILE_PAGES);
INC_CACHE_INFO(del_total);
}
示例12: mpls_remove_ilm
struct mpls_ilm*
mpls_remove_ilm (unsigned int key)
{
struct mpls_ilm *ilm = NULL;
MPLS_ENTER;
ilm = radix_tree_delete (&mpls_ilm_tree, key);
if (!ilm) {
MPLS_DEBUG("node key %u not found.\n",key);
return NULL;
}
list_del_rcu(&ilm->global);
mpls_ilm_release (ilm);
MPLS_EXIT;
return ilm;
}
示例13: kill_cursor
/**
* kill_cursor - free dir_cursor and reiser4_file_fsdata attached to it
* @cursor: cursor to free
*
* Removes reiser4_file_fsdata attached to @cursor from readdir list of
* reiser4_inode, frees that reiser4_file_fsdata. Removes @cursor from from
* indices, hash table, list of unused cursors and frees it.
*/
static void kill_cursor(dir_cursor *cursor)
{
unsigned long index;
assert("nikita-3566", cursor->ref == 0);
assert("nikita-3572", cursor->fsdata != NULL);
index = (unsigned long)cursor->key.oid;
list_del_init(&cursor->fsdata->dir.linkage);
free_fsdata(cursor->fsdata);
cursor->fsdata = NULL;
if (list_empty_careful(&cursor->list))
/* this is last cursor for a file. Kill radix-tree entry */
radix_tree_delete(&cursor->info->tree, index);
else {
void **slot;
/*
* there are other cursors for the same oid.
*/
/*
* if radix tree point to the cursor being removed, re-target
* radix tree slot to the next cursor in the (non-empty as was
* checked above) element of the circular list of all cursors
* for this oid.
*/
slot = radix_tree_lookup_slot(&cursor->info->tree, index);
assert("nikita-3571", *slot != NULL);
if (*slot == cursor)
*slot = list_entry(cursor->list.next, dir_cursor, list);
/* remove cursor from circular list */
list_del_init(&cursor->list);
}
/* remove cursor from the list of unused cursors */
list_del_init(&cursor->alist);
/* remove cursor from the hash table */
d_cursor_hash_remove(&cursor->info->table, cursor);
/* and free it */
kmem_cache_free(d_cursor_cache, cursor);
--d_cursor_unused;
}
示例14: mpls_remove_nhlfe
struct mpls_nhlfe*
mpls_remove_nhlfe (unsigned int key)
{
struct mpls_nhlfe *nhlfe = NULL;
MPLS_ENTER;
nhlfe = radix_tree_delete(&mpls_nhlfe_tree, key);
if (!nhlfe)
MPLS_DEBUG("NHLFE node with key %u not found.\n",key);
list_del_rcu(&nhlfe->global);
/* release the refcnt for the tree hold it */
mpls_nhlfe_release (nhlfe);
MPLS_EXIT;
return nhlfe;
}
示例15: mlx4_srq_free
void mlx4_srq_free(struct mlx4_dev *dev, struct mlx4_srq *srq)
{
struct mlx4_srq_table *srq_table = &mlx4_priv(dev)->srq_table;
int err;
err = mlx4_HW2SW_SRQ(dev, NULL, srq->srqn);
if (err)
mlx4_warn(dev, "HW2SW_SRQ failed (%d) for SRQN %06x\n", err, srq->srqn);
spin_lock_irq(&srq_table->lock);
radix_tree_delete(&srq_table->tree, srq->srqn);
spin_unlock_irq(&srq_table->lock);
if (atomic_dec_and_test(&srq->refcount))
complete(&srq->free);
wait_for_completion(&srq->free);
mlx4_srq_free_icm(dev, srq->srqn);
}