Lines Matching defs:cw
395 static void dmz_handle_bio(struct dmz_target *dmz, struct dm_chunk_work *cw,
457 static inline void dmz_get_chunk_work(struct dm_chunk_work *cw)
459 refcount_inc(&cw->refcount);
466 static void dmz_put_chunk_work(struct dm_chunk_work *cw)
468 if (refcount_dec_and_test(&cw->refcount)) {
469 WARN_ON(!bio_list_empty(&cw->bio_list));
470 radix_tree_delete(&cw->target->chunk_rxtree, cw->chunk);
471 kfree(cw);
480 struct dm_chunk_work *cw = container_of(work, struct dm_chunk_work, work);
481 struct dmz_target *dmz = cw->target;
487 while ((bio = bio_list_pop(&cw->bio_list))) {
489 dmz_handle_bio(dmz, cw, bio);
491 dmz_put_chunk_work(cw);
495 dmz_put_chunk_work(cw);
537 struct dm_chunk_work *cw;
543 cw = radix_tree_lookup(&dmz->chunk_rxtree, chunk);
544 if (cw) {
545 dmz_get_chunk_work(cw);
548 cw = kmalloc(sizeof(struct dm_chunk_work), GFP_NOIO);
549 if (unlikely(!cw)) {
554 INIT_WORK(&cw->work, dmz_chunk_work);
555 refcount_set(&cw->refcount, 1);
556 cw->target = dmz;
557 cw->chunk = chunk;
558 bio_list_init(&cw->bio_list);
560 ret = radix_tree_insert(&dmz->chunk_rxtree, chunk, cw);
562 kfree(cw);
567 bio_list_add(&cw->bio_list, bio);
569 if (queue_work(dmz->chunk_wq, &cw->work))
570 dmz_get_chunk_work(cw);