Lines Matching refs:ca
2016 static void destroy_cache_args(struct cache_args *ca) in destroy_cache_args() argument
2018 if (ca->metadata_dev) in destroy_cache_args()
2019 dm_put_device(ca->ti, ca->metadata_dev); in destroy_cache_args()
2021 if (ca->cache_dev) in destroy_cache_args()
2022 dm_put_device(ca->ti, ca->cache_dev); in destroy_cache_args()
2024 if (ca->origin_dev) in destroy_cache_args()
2025 dm_put_device(ca->ti, ca->origin_dev); in destroy_cache_args()
2027 kfree(ca); in destroy_cache_args()
2040 static int parse_metadata_dev(struct cache_args *ca, struct dm_arg_set *as, in parse_metadata_dev() argument
2050 r = dm_get_device(ca->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, in parse_metadata_dev()
2051 &ca->metadata_dev); in parse_metadata_dev()
2057 metadata_dev_size = get_dev_size(ca->metadata_dev); in parse_metadata_dev()
2060 bdevname(ca->metadata_dev->bdev, b), THIN_METADATA_MAX_SECTORS); in parse_metadata_dev()
2065 static int parse_cache_dev(struct cache_args *ca, struct dm_arg_set *as, in parse_cache_dev() argument
2073 r = dm_get_device(ca->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, in parse_cache_dev()
2074 &ca->cache_dev); in parse_cache_dev()
2079 ca->cache_sectors = get_dev_size(ca->cache_dev); in parse_cache_dev()
2084 static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as, in parse_origin_dev() argument
2092 r = dm_get_device(ca->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, in parse_origin_dev()
2093 &ca->origin_dev); in parse_origin_dev()
2099 ca->origin_sectors = get_dev_size(ca->origin_dev); in parse_origin_dev()
2100 if (ca->ti->len > ca->origin_sectors) { in parse_origin_dev()
2108 static int parse_block_size(struct cache_args *ca, struct dm_arg_set *as, in parse_block_size() argument
2124 if (block_size > ca->cache_sectors) { in parse_block_size()
2129 ca->block_size = block_size; in parse_block_size()
2140 static int parse_features(struct cache_args *ca, struct dm_arg_set *as, in parse_features() argument
2150 struct cache_features *cf = &ca->features; in parse_features()
2179 static int parse_policy(struct cache_args *ca, struct dm_arg_set *as, in parse_policy() argument
2191 ca->policy_name = dm_shift_arg(as); in parse_policy()
2193 r = dm_read_arg_group(_args, as, &ca->policy_argc, error); in parse_policy()
2197 ca->policy_argv = (const char **)as->argv; in parse_policy()
2198 dm_consume_args(as, ca->policy_argc); in parse_policy()
2203 static int parse_cache_args(struct cache_args *ca, int argc, char **argv, in parse_cache_args() argument
2212 r = parse_metadata_dev(ca, &as, error); in parse_cache_args()
2216 r = parse_cache_dev(ca, &as, error); in parse_cache_args()
2220 r = parse_origin_dev(ca, &as, error); in parse_cache_args()
2224 r = parse_block_size(ca, &as, error); in parse_cache_args()
2228 r = parse_features(ca, &as, error); in parse_cache_args()
2232 r = parse_policy(ca, &as, error); in parse_cache_args()
2294 static int create_cache_policy(struct cache *cache, struct cache_args *ca, in create_cache_policy() argument
2297 struct dm_cache_policy *p = dm_cache_policy_create(ca->policy_name, in create_cache_policy()
2351 static int cache_create(struct cache_args *ca, struct cache **result) in cache_create() argument
2354 char **error = &ca->ti->error; in cache_create()
2356 struct dm_target *ti = ca->ti; in cache_create()
2359 bool may_format = ca->features.mode == CM_WRITE; in cache_create()
2365 cache->ti = ca->ti; in cache_create()
2375 cache->features = ca->features; in cache_create()
2381 cache->metadata_dev = ca->metadata_dev; in cache_create()
2382 cache->origin_dev = ca->origin_dev; in cache_create()
2383 cache->cache_dev = ca->cache_dev; in cache_create()
2385 ca->metadata_dev = ca->origin_dev = ca->cache_dev = NULL; in cache_create()
2388 origin_blocks = cache->origin_sectors = ca->origin_sectors; in cache_create()
2389 origin_blocks = block_div(origin_blocks, ca->block_size); in cache_create()
2392 cache->sectors_per_block = ca->block_size; in cache_create()
2398 if (ca->block_size & (ca->block_size - 1)) { in cache_create()
2399 dm_block_t cache_size = ca->cache_sectors; in cache_create()
2402 cache_size = block_div(cache_size, ca->block_size); in cache_create()
2405 cache->sectors_per_block_shift = __ffs(ca->block_size); in cache_create()
2406 set_cache_size(cache, to_cblock(ca->cache_sectors >> cache->sectors_per_block_shift)); in cache_create()
2409 r = create_cache_policy(cache, ca, error); in cache_create()
2413 cache->policy_nr_args = ca->policy_argc; in cache_create()
2416 r = set_config_values(cache, ca->policy_argc, ca->policy_argv); in cache_create()
2423 ca->block_size, may_format, in cache_create()
2573 struct cache_args *ca; in cache_ctr() local
2576 ca = kzalloc(sizeof(*ca), GFP_KERNEL); in cache_ctr()
2577 if (!ca) { in cache_ctr()
2581 ca->ti = ti; in cache_ctr()
2583 r = parse_cache_args(ca, argc, argv, &ti->error); in cache_ctr()
2587 r = cache_create(ca, &cache); in cache_ctr()
2600 destroy_cache_args(ca); in cache_ctr()