Lines Matching defs:prison

9 #include "dm-bio-prison-v2.h"
39 struct dm_bio_prison_v2 *prison = kzalloc(sizeof(*prison), GFP_KERNEL);
42 if (!prison)
45 prison->wq = wq;
46 spin_lock_init(&prison->lock);
48 ret = mempool_init_slab_pool(&prison->cell_pool, MIN_CELLS, _cell_cache);
50 kfree(prison);
54 prison->cells = RB_ROOT;
56 return prison;
60 void dm_bio_prison_destroy_v2(struct dm_bio_prison_v2 *prison)
62 mempool_exit(&prison->cell_pool);
63 kfree(prison);
67 struct dm_bio_prison_cell_v2 *dm_bio_prison_alloc_cell_v2(struct dm_bio_prison_v2 *prison, gfp_t gfp)
69 return mempool_alloc(&prison->cell_pool, gfp);
73 void dm_bio_prison_free_cell_v2(struct dm_bio_prison_v2 *prison,
76 mempool_free(cell, &prison->cell_pool);
115 static bool __find_or_insert(struct dm_bio_prison_v2 *prison,
121 struct rb_node **new = &prison->cells.rb_node, *parent = NULL;
145 rb_insert_color(&cell_prealloc->node, &prison->cells);
150 static bool __get(struct dm_bio_prison_v2 *prison,
157 if (__find_or_insert(prison, key, cell_prealloc, cell)) {
173 bool dm_cell_get_v2(struct dm_bio_prison_v2 *prison,
182 spin_lock_irq(&prison->lock);
183 r = __get(prison, key, lock_level, inmate, cell_prealloc, cell_result);
184 spin_unlock_irq(&prison->lock);
190 static bool __put(struct dm_bio_prison_v2 *prison,
200 queue_work(prison->wq, cell->quiesce_continuation);
204 rb_erase(&cell->node, &prison->cells);
212 bool dm_cell_put_v2(struct dm_bio_prison_v2 *prison,
218 spin_lock_irqsave(&prison->lock, flags);
219 r = __put(prison, cell);
220 spin_unlock_irqrestore(&prison->lock, flags);
226 static int __lock(struct dm_bio_prison_v2 *prison,
234 if (__find_or_insert(prison, key, cell_prealloc, &cell)) {
257 int dm_cell_lock_v2(struct dm_bio_prison_v2 *prison,
265 spin_lock_irq(&prison->lock);
266 r = __lock(prison, key, lock_level, cell_prealloc, cell_result);
267 spin_unlock_irq(&prison->lock);
273 static void __quiesce(struct dm_bio_prison_v2 *prison,
278 queue_work(prison->wq, continuation);
283 void dm_cell_quiesce_v2(struct dm_bio_prison_v2 *prison,
287 spin_lock_irq(&prison->lock);
288 __quiesce(prison, cell, continuation);
289 spin_unlock_irq(&prison->lock);
293 static int __promote(struct dm_bio_prison_v2 *prison,
304 int dm_cell_lock_promote_v2(struct dm_bio_prison_v2 *prison,
310 spin_lock_irq(&prison->lock);
311 r = __promote(prison, cell, new_lock_level);
312 spin_unlock_irq(&prison->lock);
318 static bool __unlock(struct dm_bio_prison_v2 *prison,
332 rb_erase(&cell->node, &prison->cells);
336 bool dm_cell_unlock_v2(struct dm_bio_prison_v2 *prison,
342 spin_lock_irq(&prison->lock);
343 r = __unlock(prison, cell, bios);
344 spin_unlock_irq(&prison->lock);