static void aoedev_freedev(struct aoedev *d) { if (d->gd) { aoedisk_rm_sysfs(d); del_gendisk(d->gd); put_disk(d->gd); } kfree(d->frames); if (d->bufpool) mempool_destroy(d->bufpool); kfree(d); }
static void aoedev_freedev(struct aoedev *d) { struct aoetgt **t, **e; if (d->gd) { aoedisk_rm_sysfs(d); del_gendisk(d->gd); put_disk(d->gd); } t = d->targets; e = t + NTARGETS; for (; t < e && *t; t++) freetgt(d, *t); if (d->bufpool) mempool_destroy(d->bufpool); skbpoolfree(d); kfree(d); }
static void aoedev_freedev(struct aoedev *d) { struct aoetgt **t, **e; cancel_work_sync(&d->work); if (d->gd) { aoedisk_rm_sysfs(d); del_gendisk(d->gd); put_disk(d->gd); } t = d->targets; e = t + NTARGETS; for (; t < e && *t; t++) freetgt(d, *t); if (d->bufpool) mempool_destroy(d->bufpool); skbpoolfree(d); blk_cleanup_queue(d->blkq); kfree(d); }
static void freedev(struct aoedev *d) { struct aoetgt **t, **e; int freeing = 0; unsigned long flags; spin_lock_irqsave(&d->lock, flags); if (d->flags & DEVFL_TKILL && !(d->flags & DEVFL_FREEING)) { d->flags |= DEVFL_FREEING; freeing = 1; } spin_unlock_irqrestore(&d->lock, flags); if (!freeing) return; del_timer_sync(&d->timer); aoedbg_undbg(d); if (d->gd) { aoedisk_rm_debugfs(d); aoedisk_rm_sysfs(d); del_gendisk(d->gd); put_disk(d->gd); blk_cleanup_queue(d->blkq); } t = d->targets; e = t + d->ntargets; for (; t < e && *t; t++) freetgt(d, *t); if (d->bufpool) mempool_destroy(d->bufpool); skbpoolfree(d); minor_free(d->sysminor); spin_lock_irqsave(&d->lock, flags); d->flags |= DEVFL_FREED; spin_unlock_irqrestore(&d->lock, flags); }