Lines Matching refs:ca
2422 static void destroy_cache_args(struct cache_args *ca) in destroy_cache_args() argument
2424 if (ca->metadata_dev) in destroy_cache_args()
2425 dm_put_device(ca->ti, ca->metadata_dev); in destroy_cache_args()
2427 if (ca->cache_dev) in destroy_cache_args()
2428 dm_put_device(ca->ti, ca->cache_dev); in destroy_cache_args()
2430 if (ca->origin_dev) in destroy_cache_args()
2431 dm_put_device(ca->ti, ca->origin_dev); in destroy_cache_args()
2433 kfree(ca); in destroy_cache_args()
2446 static int parse_metadata_dev(struct cache_args *ca, struct dm_arg_set *as, in parse_metadata_dev() argument
2456 r = dm_get_device(ca->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, in parse_metadata_dev()
2457 &ca->metadata_dev); in parse_metadata_dev()
2463 metadata_dev_size = get_dev_size(ca->metadata_dev); in parse_metadata_dev()
2466 bdevname(ca->metadata_dev->bdev, b), THIN_METADATA_MAX_SECTORS); in parse_metadata_dev()
2471 static int parse_cache_dev(struct cache_args *ca, struct dm_arg_set *as, in parse_cache_dev() argument
2479 r = dm_get_device(ca->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, in parse_cache_dev()
2480 &ca->cache_dev); in parse_cache_dev()
2485 ca->cache_sectors = get_dev_size(ca->cache_dev); in parse_cache_dev()
2490 static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as, in parse_origin_dev() argument
2498 r = dm_get_device(ca->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, in parse_origin_dev()
2499 &ca->origin_dev); in parse_origin_dev()
2505 ca->origin_sectors = get_dev_size(ca->origin_dev); in parse_origin_dev()
2506 if (ca->ti->len > ca->origin_sectors) { in parse_origin_dev()
2514 static int parse_block_size(struct cache_args *ca, struct dm_arg_set *as, in parse_block_size() argument
2530 if (block_size > ca->cache_sectors) { in parse_block_size()
2535 ca->block_size = block_size; in parse_block_size()
2546 static int parse_features(struct cache_args *ca, struct dm_arg_set *as, in parse_features() argument
2556 struct cache_features *cf = &ca->features; in parse_features()
2585 static int parse_policy(struct cache_args *ca, struct dm_arg_set *as, in parse_policy() argument
2597 ca->policy_name = dm_shift_arg(as); in parse_policy()
2599 r = dm_read_arg_group(_args, as, &ca->policy_argc, error); in parse_policy()
2603 ca->policy_argv = (const char **)as->argv; in parse_policy()
2604 dm_consume_args(as, ca->policy_argc); in parse_policy()
2609 static int parse_cache_args(struct cache_args *ca, int argc, char **argv, in parse_cache_args() argument
2618 r = parse_metadata_dev(ca, &as, error); in parse_cache_args()
2622 r = parse_cache_dev(ca, &as, error); in parse_cache_args()
2626 r = parse_origin_dev(ca, &as, error); in parse_cache_args()
2630 r = parse_block_size(ca, &as, error); in parse_cache_args()
2634 r = parse_features(ca, &as, error); in parse_cache_args()
2638 r = parse_policy(ca, &as, error); in parse_cache_args()
2700 static int create_cache_policy(struct cache *cache, struct cache_args *ca, in create_cache_policy() argument
2703 struct dm_cache_policy *p = dm_cache_policy_create(ca->policy_name, in create_cache_policy()
2757 static int cache_create(struct cache_args *ca, struct cache **result) in cache_create() argument
2760 char **error = &ca->ti->error; in cache_create()
2762 struct dm_target *ti = ca->ti; in cache_create()
2765 bool may_format = ca->features.mode == CM_WRITE; in cache_create()
2771 cache->ti = ca->ti; in cache_create()
2781 cache->features = ca->features; in cache_create()
2787 cache->metadata_dev = ca->metadata_dev; in cache_create()
2788 cache->origin_dev = ca->origin_dev; in cache_create()
2789 cache->cache_dev = ca->cache_dev; in cache_create()
2791 ca->metadata_dev = ca->origin_dev = ca->cache_dev = NULL; in cache_create()
2794 origin_blocks = cache->origin_sectors = ca->origin_sectors; in cache_create()
2795 origin_blocks = block_div(origin_blocks, ca->block_size); in cache_create()
2798 cache->sectors_per_block = ca->block_size; in cache_create()
2804 if (ca->block_size & (ca->block_size - 1)) { in cache_create()
2805 dm_block_t cache_size = ca->cache_sectors; in cache_create()
2808 cache_size = block_div(cache_size, ca->block_size); in cache_create()
2811 cache->sectors_per_block_shift = __ffs(ca->block_size); in cache_create()
2812 set_cache_size(cache, to_cblock(ca->cache_sectors >> cache->sectors_per_block_shift)); in cache_create()
2815 r = create_cache_policy(cache, ca, error); in cache_create()
2819 cache->policy_nr_args = ca->policy_argc; in cache_create()
2822 r = set_config_values(cache, ca->policy_argc, ca->policy_argv); in cache_create()
2829 ca->block_size, may_format, in cache_create()
2988 struct cache_args *ca; in cache_ctr() local
2991 ca = kzalloc(sizeof(*ca), GFP_KERNEL); in cache_ctr()
2992 if (!ca) { in cache_ctr()
2996 ca->ti = ti; in cache_ctr()
2998 r = parse_cache_args(ca, argc, argv, &ti->error); in cache_ctr()
3002 r = cache_create(ca, &cache); in cache_ctr()
3015 destroy_cache_args(ca); in cache_ctr()