void perf_mmap__put(struct perf_mmap *map) { BUG_ON(map->base && refcount_read(&map->refcnt) == 0); if (refcount_dec_and_test(&map->refcnt)) perf_mmap__munmap(map); }
static void aca_put(struct ifacaddr6 *ac) { if (refcount_dec_and_test(&ac->aca_refcnt)) { fib6_info_release(ac->aca_rt); kfree(ac); } }
static void eg_cache_put(eg_cache_entry *entry) { if (refcount_dec_and_test(&entry->use)) { memset(entry, 0, sizeof(eg_cache_entry)); kfree(entry); } }
static void aca_put(struct ifacaddr6 *ac) { if (refcount_dec_and_test(&ac->aca_refcnt)) { in6_dev_put(ac->aca_idev); dst_release(&ac->aca_rt->dst); kfree(ac); } }
void mdesc_release(struct mdesc_handle *hp) { unsigned long flags; spin_lock_irqsave(&mdesc_lock, flags); if (refcount_dec_and_test(&hp->refcnt)) { list_del_init(&hp->list); hp->mops->free(hp); } spin_unlock_irqrestore(&mdesc_lock, flags); }
void afs_put_serverlist(struct afs_net *net, struct afs_server_list *slist) { int i; if (slist && refcount_dec_and_test(&slist->usage)) { for (i = 0; i < slist->nr_servers; i++) { afs_put_cb_interest(net, slist->servers[i].cb_interest); afs_put_server(net, slist->servers[i].server); } kfree(slist); } }
static int tcf_idr_release_unsafe(struct tc_action *p) { if (atomic_read(&p->tcfa_bindcnt) > 0) return -EPERM; if (refcount_dec_and_test(&p->tcfa_refcnt)) { idr_remove(&p->idrinfo->action_idr, p->tcfa_index); tcf_action_cleanup(p); return ACT_P_DELETED; } return 0; }
void ceph_pagelist_release(struct ceph_pagelist *pl) { if (!refcount_dec_and_test(&pl->refcnt)) return; ceph_pagelist_unmap_tail(pl); while (!list_empty(&pl->head)) { struct page *page = list_first_entry(&pl->head, struct page, lru); list_del(&page->lru); __free_page(page); } ceph_pagelist_free_reserve(pl); kfree(pl); }
/* * Free a logging structure. */ static void put_fc_log(struct fs_context *fc) { struct fc_log *log = fc->log; int i; if (log) { if (refcount_dec_and_test(&log->usage)) { fc->log = NULL; for (i = 0; i <= 7; i++) if (log->need_free & (1 << i)) kfree(log->buffer[i]); kfree(log); } } }
static void pvrdma_free_srq(struct pvrdma_dev *dev, struct pvrdma_srq *srq) { unsigned long flags; spin_lock_irqsave(&dev->srq_tbl_lock, flags); dev->srq_tbl[srq->srq_handle] = NULL; spin_unlock_irqrestore(&dev->srq_tbl_lock, flags); if (refcount_dec_and_test(&srq->refcnt)) complete(&srq->free); wait_for_completion(&srq->free); /* There is no support for kernel clients, so this is safe. */ ib_umem_release(srq->umem); pvrdma_page_dir_cleanup(dev, &srq->pdir); kfree(srq); atomic_dec(&dev->num_srqs); }
static void instance_put(struct nfulnl_instance *inst) { if (inst && refcount_dec_and_test(&inst->use)) call_rcu_bh(&inst->rcu, nfulnl_instance_free_rcu); }
void nsinfo__put(struct nsinfo *nsi) { if (nsi && refcount_dec_and_test(&nsi->refcnt)) nsinfo__delete(nsi); }