Lines Matching refs:cell

218 typedef void (*process_cell_fn)(struct thin_c *tc, struct dm_bio_prison_cell *cell);
433 struct dm_bio_prison_cell *cell, in cell_release() argument
436 dm_cell_release(pool->prison, cell, bios); in cell_release()
437 dm_bio_prison_free_cell(pool->prison, cell); in cell_release()
443 struct dm_bio_prison_cell *cell) in cell_visit_release() argument
445 dm_cell_visit_release(pool->prison, fn, context, cell); in cell_visit_release()
446 dm_bio_prison_free_cell(pool->prison, cell); in cell_visit_release()
450 struct dm_bio_prison_cell *cell, in cell_release_no_holder() argument
453 dm_cell_release_no_holder(pool->prison, cell, bios); in cell_release_no_holder()
454 dm_bio_prison_free_cell(pool->prison, cell); in cell_release_no_holder()
458 struct dm_bio_prison_cell *cell, int error_code) in cell_error_with_code() argument
460 dm_cell_error(pool->prison, cell, error_code); in cell_error_with_code()
461 dm_bio_prison_free_cell(pool->prison, cell); in cell_error_with_code()
464 static void cell_error(struct pool *pool, struct dm_bio_prison_cell *cell) in cell_error() argument
466 cell_error_with_code(pool, cell, -EIO); in cell_error()
469 static void cell_success(struct pool *pool, struct dm_bio_prison_cell *cell) in cell_success() argument
471 cell_error_with_code(pool, cell, 0); in cell_success()
474 static void cell_requeue(struct pool *pool, struct dm_bio_prison_cell *cell) in cell_requeue() argument
476 cell_error_with_code(pool, cell, DM_ENDIO_REQUEUE); in cell_requeue()
547 struct dm_bio_prison_cell *cell; member
585 struct dm_bio_prison_cell *cell, *tmp; in requeue_deferred_cells() local
593 list_for_each_entry_safe(cell, tmp, &cells, user_list) in requeue_deferred_cells()
594 cell_requeue(pool, cell); in requeue_deferred_cells()
777 struct dm_bio_prison_cell *cell; member
842 static void cell_defer_no_holder(struct thin_c *tc, struct dm_bio_prison_cell *cell) in cell_defer_no_holder() argument
848 cell_release_no_holder(pool, cell, &tc->deferred_bio_list); in cell_defer_no_holder()
863 struct dm_bio_prison_cell *cell) in __inc_remap_and_issue_cell() argument
868 while ((bio = bio_list_pop(&cell->bios))) { in __inc_remap_and_issue_cell()
885 struct dm_bio_prison_cell *cell, in inc_remap_and_issue_cell() argument
901 &info, cell); in inc_remap_and_issue_cell()
912 cell_error(m->tc->pool, m->cell); in process_prepared_mapping_fail()
925 cell_error(pool, m->cell); in process_prepared_mapping()
937 cell_error(pool, m->cell); in process_prepared_mapping()
948 inc_remap_and_issue_cell(tc, m->cell, m->data_block); in process_prepared_mapping()
951 inc_all_io_entry(tc->pool, m->cell->holder); in process_prepared_mapping()
952 remap_and_issue(tc, m->cell->holder, m->data_block); in process_prepared_mapping()
953 inc_remap_and_issue_cell(tc, m->cell, m->data_block); in process_prepared_mapping()
966 if (m->cell) in free_discard_mapping()
967 cell_defer_no_holder(tc, m->cell); in free_discard_mapping()
988 r = dm_thin_remove_range(tc->td, m->cell->key.block_begin, m->cell->key.block_end); in process_prepared_discard_no_passdown()
995 cell_defer_no_holder(tc, m->cell); in process_prepared_discard_no_passdown()
1066 cell_defer_no_holder(tc, m->cell); in process_prepared_discard_passdown()
1170 struct dm_bio_prison_cell *cell, struct bio *bio, in schedule_copy() argument
1181 m->cell = cell; in schedule_copy()
1242 struct dm_bio_prison_cell *cell, struct bio *bio) in schedule_internal_copy() argument
1245 data_origin, data_dest, cell, bio, in schedule_internal_copy()
1250 dm_block_t data_block, struct dm_bio_prison_cell *cell, in schedule_zero() argument
1261 m->cell = cell; in schedule_zero()
1280 struct dm_bio_prison_cell *cell, struct bio *bio) in schedule_external_copy() argument
1288 virt_block, data_dest, cell, bio, in schedule_external_copy()
1293 virt_block, data_dest, cell, bio, in schedule_external_copy()
1297 schedule_zero(tc, virt_block, data_dest, cell, bio); in schedule_external_copy()
1448 static void retry_bios_on_resume(struct pool *pool, struct dm_bio_prison_cell *cell) in retry_bios_on_resume() argument
1456 cell_error_with_code(pool, cell, error); in retry_bios_on_resume()
1461 cell_release(pool, cell, &bios); in retry_bios_on_resume()
1480 m->cell = virt_cell; in process_discard_cell_no_passdown()
1542 m->cell = data_cell; in break_up_discard_bio()
1571 h->cell = virt_cell; in process_discard_cell_passdown()
1614 struct dm_bio_prison_cell *cell) in break_sharing() argument
1624 data_block, cell, bio); in break_sharing()
1628 retry_bios_on_resume(pool, cell); in break_sharing()
1634 cell_error(pool, cell); in break_sharing()
1640 struct dm_bio_prison_cell *cell) in __remap_and_issue_shared_cell() argument
1645 while ((bio = bio_list_pop(&cell->bios))) { in __remap_and_issue_shared_cell()
1660 struct dm_bio_prison_cell *cell, in remap_and_issue_shared_cell() argument
1671 &info, cell); in remap_and_issue_shared_cell()
1715 struct dm_bio_prison_cell *cell) in provision_block() argument
1726 cell_defer_no_holder(tc, cell); in provision_block()
1737 cell_defer_no_holder(tc, cell); in provision_block()
1746 schedule_external_copy(tc, block, data_block, cell, bio); in provision_block()
1748 schedule_zero(tc, block, data_block, cell, bio); in provision_block()
1752 retry_bios_on_resume(pool, cell); in provision_block()
1758 cell_error(pool, cell); in provision_block()
1763 static void process_cell(struct thin_c *tc, struct dm_bio_prison_cell *cell) in process_cell() argument
1767 struct bio *bio = cell->holder; in process_cell()
1772 cell_requeue(pool, cell); in process_cell()
1780 process_shared_bio(tc, bio, block, &lookup_result, cell); in process_cell()
1784 inc_remap_and_issue_cell(tc, cell, lookup_result.block); in process_cell()
1791 cell_defer_no_holder(tc, cell); in process_cell()
1806 provision_block(tc, bio, block, cell); in process_cell()
1812 cell_defer_no_holder(tc, cell); in process_cell()
1822 struct dm_bio_prison_cell *cell; in process_bio() local
1830 if (bio_detain(pool, &key, bio, &cell)) in process_bio()
1833 process_cell(tc, cell); in process_bio()
1837 struct dm_bio_prison_cell *cell) in __process_bio_read_only() argument
1849 if (cell) in __process_bio_read_only()
1850 cell_defer_no_holder(tc, cell); in __process_bio_read_only()
1854 if (cell) in __process_bio_read_only()
1855 inc_remap_and_issue_cell(tc, cell, lookup_result.block); in __process_bio_read_only()
1860 if (cell) in __process_bio_read_only()
1861 cell_defer_no_holder(tc, cell); in __process_bio_read_only()
1880 if (cell) in __process_bio_read_only()
1881 cell_defer_no_holder(tc, cell); in __process_bio_read_only()
1892 static void process_cell_read_only(struct thin_c *tc, struct dm_bio_prison_cell *cell) in process_cell_read_only() argument
1894 __process_bio_read_only(tc, cell->holder, cell); in process_cell_read_only()
1907 static void process_cell_success(struct thin_c *tc, struct dm_bio_prison_cell *cell) in process_cell_success() argument
1909 cell_success(tc->pool, cell); in process_cell_success()
1912 static void process_cell_fail(struct thin_c *tc, struct dm_bio_prison_cell *cell) in process_cell_fail() argument
1914 cell_error(tc->pool, cell); in process_cell_fail()
2069 struct dm_bio_prison_cell *cell, *tmp; in sort_cells() local
2071 list_for_each_entry_safe(cell, tmp, cells, user_list) { in sort_cells()
2075 pool->cell_sort_array[count++] = cell; in sort_cells()
2076 list_del(&cell->user_list); in sort_cells()
2079 sort(pool->cell_sort_array, count, sizeof(cell), cmp_cells, NULL); in sort_cells()
2089 struct dm_bio_prison_cell *cell; in process_thin_deferred_cells() local
2105 cell = pool->cell_sort_array[i]; in process_thin_deferred_cells()
2106 BUG_ON(!cell->holder); in process_thin_deferred_cells()
2123 if (cell->holder->bi_rw & REQ_DISCARD) in process_thin_deferred_cells()
2124 pool->process_discard_cell(tc, cell); in process_thin_deferred_cells()
2126 pool->process_cell(tc, cell); in process_thin_deferred_cells()
2508 static void thin_defer_cell(struct thin_c *tc, struct dm_bio_prison_cell *cell) in thin_defer_cell() argument
2515 list_add_tail(&cell->user_list, &tc->deferred_cells); in thin_defer_cell()
2530 h->cell = NULL; in thin_hook_bio()
4134 if (h->cell) in thin_endio()
4135 cell_defer_no_holder(h->tc, h->cell); in thin_endio()