void pipeline_destroy(struct pipeline *line) { while (!list_is_empty(&line->pipe)) umem_cache_free(pipestage_cache, list_remove_head(&line->pipe)); umem_cache_free(pipeline_cache, line); }
struct objstore *objstore_vg_create(const char *name, enum objstore_vg_type type) { struct objstore *vg; if (type != OS_VG_SIMPLE) return ERR_PTR(EINVAL); vg = umem_cache_alloc(vg_cache, 0); if (!vg) return ERR_PTR(ENOMEM); vg->name = strdup(name); if (!vg->name) { umem_cache_free(vg_cache, vg); return ERR_PTR(ENOMEM); } list_create(&vg->vols, sizeof(struct objstore_vol), offsetof(struct objstore_vol, vg_list)); mxinit(&vg->lock); mxlock(&vgs_lock); list_insert_tail(&vgs, vg); mxunlock(&vgs_lock); return vg; }
struct objstore_vol *objstore_vol_create(struct objstore *vg, const char *path, enum objstore_mode mode) { struct objstore_vol *s; int ret; if (!backend->def->vol_ops->create) return ERR_PTR(ENOTSUP); s = umem_cache_alloc(vol_cache, 0); if (!s) return ERR_PTR(ENOMEM); s->def = backend->def; s->mode = mode; s->path = strdup(path); if (!s->path) { ret = ENOMEM; goto err; } ret = s->def->vol_ops->create(s); if (ret) goto err_path; vg_add_vol(vg, s); return s; err_path: free((char *) s->path); err: umem_cache_free(vol_cache, s); return ERR_PTR(ret); }
static void freeentry(pkgentry_t *p) { umem_free(p->line, p->len); umem_cache_free(ecache, p); }
void nvclock_free(struct nvclock *clock) { umem_cache_free(vclock_cache, clock); }