Lines Matching refs:cw
396 static void dmz_handle_bio(struct dmz_target *dmz, struct dm_chunk_work *cw,
458 static inline void dmz_get_chunk_work(struct dm_chunk_work *cw)
460 refcount_inc(&cw->refcount);
467 static void dmz_put_chunk_work(struct dm_chunk_work *cw)
469 if (refcount_dec_and_test(&cw->refcount)) {
470 WARN_ON(!bio_list_empty(&cw->bio_list));
471 radix_tree_delete(&cw->target->chunk_rxtree, cw->chunk);
472 kfree(cw);
481 struct dm_chunk_work *cw = container_of(work, struct dm_chunk_work, work);
482 struct dmz_target *dmz = cw->target;
488 while ((bio = bio_list_pop(&cw->bio_list))) {
490 dmz_handle_bio(dmz, cw, bio);
492 dmz_put_chunk_work(cw);
496 dmz_put_chunk_work(cw);
538 struct dm_chunk_work *cw;
544 cw = radix_tree_lookup(&dmz->chunk_rxtree, chunk);
545 if (cw) {
546 dmz_get_chunk_work(cw);
549 cw = kmalloc(sizeof(struct dm_chunk_work), GFP_NOIO);
550 if (unlikely(!cw)) {
555 INIT_WORK(&cw->work, dmz_chunk_work);
556 refcount_set(&cw->refcount, 1);
557 cw->target = dmz;
558 cw->chunk = chunk;
559 bio_list_init(&cw->bio_list);
561 ret = radix_tree_insert(&dmz->chunk_rxtree, chunk, cw);
563 kfree(cw);
568 bio_list_add(&cw->bio_list, bio);
570 if (queue_work(dmz->chunk_wq, &cw->work))
571 dmz_get_chunk_work(cw);