Lines Matching defs:prison

8 #include "dm-bio-prison-v1.h"
9 #include "dm-bio-prison-v2.h"
36 struct dm_bio_prison *prison = kzalloc(sizeof(*prison), GFP_KERNEL);
39 if (!prison)
42 spin_lock_init(&prison->lock);
44 ret = mempool_init_slab_pool(&prison->cell_pool, MIN_CELLS, _cell_cache);
46 kfree(prison);
50 prison->cells = RB_ROOT;
52 return prison;
56 void dm_bio_prison_destroy(struct dm_bio_prison *prison)
58 mempool_exit(&prison->cell_pool);
59 kfree(prison);
63 struct dm_bio_prison_cell *dm_bio_prison_alloc_cell(struct dm_bio_prison *prison, gfp_t gfp)
65 return mempool_alloc(&prison->cell_pool, gfp);
69 void dm_bio_prison_free_cell(struct dm_bio_prison *prison,
72 mempool_free(cell, &prison->cell_pool);
109 static int __bio_detain(struct dm_bio_prison *prison,
116 struct rb_node **new = &prison->cells.rb_node, *parent = NULL;
141 rb_insert_color(&cell_prealloc->node, &prison->cells);
146 static int bio_detain(struct dm_bio_prison *prison,
154 spin_lock_irq(&prison->lock);
155 r = __bio_detain(prison, key, inmate, cell_prealloc, cell_result);
156 spin_unlock_irq(&prison->lock);
161 int dm_bio_detain(struct dm_bio_prison *prison,
167 return bio_detain(prison, key, inmate, cell_prealloc, cell_result);
171 int dm_get_cell(struct dm_bio_prison *prison,
176 return bio_detain(prison, key, NULL, cell_prealloc, cell_result);
183 static void __cell_release(struct dm_bio_prison *prison,
187 rb_erase(&cell->node, &prison->cells);
196 void dm_cell_release(struct dm_bio_prison *prison,
200 spin_lock_irq(&prison->lock);
201 __cell_release(prison, cell, bios);
202 spin_unlock_irq(&prison->lock);
209 static void __cell_release_no_holder(struct dm_bio_prison *prison,
213 rb_erase(&cell->node, &prison->cells);
217 void dm_cell_release_no_holder(struct dm_bio_prison *prison,
223 spin_lock_irqsave(&prison->lock, flags);
224 __cell_release_no_holder(prison, cell, inmates);
225 spin_unlock_irqrestore(&prison->lock, flags);
229 void dm_cell_error(struct dm_bio_prison *prison,
236 dm_cell_release(prison, cell, &bios);
245 void dm_cell_visit_release(struct dm_bio_prison *prison,
250 spin_lock_irq(&prison->lock);
252 rb_erase(&cell->node, &prison->cells);
253 spin_unlock_irq(&prison->lock);
257 static int __promote_or_release(struct dm_bio_prison *prison,
261 rb_erase(&cell->node, &prison->cells);
269 int dm_cell_promote_or_release(struct dm_bio_prison *prison,
274 spin_lock_irq(&prison->lock);
275 r = __promote_or_release(prison, cell);
276 spin_unlock_irq(&prison->lock);
456 MODULE_DESCRIPTION(DM_NAME " bio prison");