Lines Matching refs:mg

554 	struct dm_cache_migration *mg;  in alloc_migration()  local
556 mg = mempool_alloc(&cache->migration_pool, GFP_NOWAIT); in alloc_migration()
557 if (!mg) in alloc_migration()
560 memset(mg, 0, sizeof(*mg)); in alloc_migration()
562 mg->cache = cache; in alloc_migration()
565 return mg; in alloc_migration()
568 static void free_migration(struct dm_cache_migration *mg) in free_migration() argument
570 struct cache *cache = mg->cache; in free_migration()
575 mempool_free(mg, &cache->migration_pool); in free_migration()
1168 static void quiesce(struct dm_cache_migration *mg, in quiesce() argument
1171 init_continuation(&mg->k, continuation); in quiesce()
1172 dm_cell_quiesce_v2(mg->cache->prison, mg->cell, &mg->k.ws); in quiesce()
1183 struct dm_cache_migration *mg = container_of(context, struct dm_cache_migration, k); in copy_complete() local
1186 mg->k.input = BLK_STS_IOERR; in copy_complete()
1188 queue_continuation(mg->cache->wq, &mg->k); in copy_complete()
1191 static void copy(struct dm_cache_migration *mg, bool promote) in copy() argument
1194 struct cache *cache = mg->cache; in copy()
1197 o_region.sector = from_oblock(mg->op->oblock) * cache->sectors_per_block; in copy()
1201 c_region.sector = from_cblock(mg->op->cblock) * cache->sectors_per_block; in copy()
1205 dm_kcopyd_copy(cache->copier, &o_region, 1, &c_region, 0, copy_complete, &mg->k); in copy()
1207 dm_kcopyd_copy(cache->copier, &c_region, 1, &o_region, 0, copy_complete, &mg->k); in copy()
1221 struct dm_cache_migration *mg = bio->bi_private; in overwrite_endio() local
1222 struct cache *cache = mg->cache; in overwrite_endio()
1228 mg->k.input = bio->bi_status; in overwrite_endio()
1230 queue_continuation(cache->wq, &mg->k); in overwrite_endio()
1233 static void overwrite(struct dm_cache_migration *mg, in overwrite() argument
1236 struct bio *bio = mg->overwrite_bio; in overwrite()
1239 dm_hook_bio(&pb->hook_info, bio, overwrite_endio, mg); in overwrite()
1245 if (mg->op->op == POLICY_PROMOTE) in overwrite()
1246 remap_to_cache(mg->cache, bio, mg->op->cblock); in overwrite()
1248 remap_to_origin(mg->cache, bio); in overwrite()
1250 init_continuation(&mg->k, continuation); in overwrite()
1251 accounted_request(mg->cache, bio); in overwrite()
1265 static void mg_complete(struct dm_cache_migration *mg, bool success) in mg_complete() argument
1268 struct cache *cache = mg->cache; in mg_complete()
1269 struct policy_work *op = mg->op; in mg_complete()
1280 if (mg->overwrite_bio) { in mg_complete()
1283 else if (mg->k.input) in mg_complete()
1284 mg->overwrite_bio->bi_status = mg->k.input; in mg_complete()
1286 mg->overwrite_bio->bi_status = BLK_STS_IOERR; in mg_complete()
1287 bio_endio(mg->overwrite_bio); in mg_complete()
1314 if (mg->cell) { in mg_complete()
1315 if (dm_cell_unlock_v2(cache->prison, mg->cell, &bios)) in mg_complete()
1316 free_prison_cell(cache, mg->cell); in mg_complete()
1319 free_migration(mg); in mg_complete()
1328 struct dm_cache_migration *mg = ws_to_mg(ws); in mg_success() local
1329 mg_complete(mg, mg->k.input == 0); in mg_success()
1335 struct dm_cache_migration *mg = ws_to_mg(ws); in mg_update_metadata() local
1336 struct cache *cache = mg->cache; in mg_update_metadata()
1337 struct policy_work *op = mg->op; in mg_update_metadata()
1347 mg_complete(mg, false); in mg_update_metadata()
1350 mg_complete(mg, true); in mg_update_metadata()
1360 mg_complete(mg, false); in mg_update_metadata()
1383 init_continuation(&mg->k, mg_success); in mg_update_metadata()
1384 continue_after_commit(&cache->committer, &mg->k); in mg_update_metadata()
1389 mg_complete(mg, true); in mg_update_metadata()
1396 struct dm_cache_migration *mg = ws_to_mg(ws); in mg_update_metadata_after_copy() local
1401 if (mg->k.input) in mg_update_metadata_after_copy()
1402 mg_complete(mg, false); in mg_update_metadata_after_copy()
1410 struct dm_cache_migration *mg = ws_to_mg(ws); in mg_upgrade_lock() local
1415 if (mg->k.input) in mg_upgrade_lock()
1416 mg_complete(mg, false); in mg_upgrade_lock()
1422 r = dm_cell_lock_promote_v2(mg->cache->prison, mg->cell, in mg_upgrade_lock()
1425 mg_complete(mg, false); in mg_upgrade_lock()
1428 quiesce(mg, mg_update_metadata); in mg_upgrade_lock()
1437 struct dm_cache_migration *mg = ws_to_mg(ws); in mg_full_copy() local
1438 struct cache *cache = mg->cache; in mg_full_copy()
1439 struct policy_work *op = mg->op; in mg_full_copy()
1448 init_continuation(&mg->k, mg_upgrade_lock); in mg_full_copy()
1449 copy(mg, is_policy_promote); in mg_full_copy()
1454 struct dm_cache_migration *mg = ws_to_mg(ws); in mg_copy() local
1456 if (mg->overwrite_bio) { in mg_copy()
1462 if (!optimisable_bio(mg->cache, mg->overwrite_bio, mg->op->oblock)) { in mg_copy()
1466 bool rb = bio_detain_shared(mg->cache, mg->op->oblock, mg->overwrite_bio); in mg_copy()
1468 mg->overwrite_bio = NULL; in mg_copy()
1469 inc_io_migrations(mg->cache); in mg_copy()
1481 overwrite(mg, mg_update_metadata_after_copy); in mg_copy()
1487 static int mg_lock_writes(struct dm_cache_migration *mg) in mg_lock_writes() argument
1491 struct cache *cache = mg->cache; in mg_lock_writes()
1497 mg_complete(mg, false); in mg_lock_writes()
1506 build_key(mg->op->oblock, oblock_succ(mg->op->oblock), &key); in mg_lock_writes()
1508 mg->overwrite_bio ? READ_WRITE_LOCK_LEVEL : WRITE_LOCK_LEVEL, in mg_lock_writes()
1509 prealloc, &mg->cell); in mg_lock_writes()
1512 mg_complete(mg, false); in mg_lock_writes()
1516 if (mg->cell != prealloc) in mg_lock_writes()
1520 mg_copy(&mg->k.ws); in mg_lock_writes()
1522 quiesce(mg, mg_copy); in mg_lock_writes()
1529 struct dm_cache_migration *mg; in mg_start() local
1536 mg = alloc_migration(cache); in mg_start()
1537 if (!mg) { in mg_start()
1543 mg->op = op; in mg_start()
1544 mg->overwrite_bio = bio; in mg_start()
1549 return mg_lock_writes(mg); in mg_start()
1556 static void invalidate_complete(struct dm_cache_migration *mg, bool success) in invalidate_complete() argument
1559 struct cache *cache = mg->cache; in invalidate_complete()
1562 if (dm_cell_unlock_v2(cache->prison, mg->cell, &bios)) in invalidate_complete()
1563 free_prison_cell(cache, mg->cell); in invalidate_complete()
1565 if (!success && mg->overwrite_bio) in invalidate_complete()
1566 bio_io_error(mg->overwrite_bio); in invalidate_complete()
1568 free_migration(mg); in invalidate_complete()
1576 struct dm_cache_migration *mg = ws_to_mg(ws); in invalidate_completed() local
1577 invalidate_complete(mg, !mg->k.input); in invalidate_completed()
1606 struct dm_cache_migration *mg = ws_to_mg(ws); in invalidate_remove() local
1607 struct cache *cache = mg->cache; in invalidate_remove()
1609 r = invalidate_cblock(cache, mg->invalidate_cblock); in invalidate_remove()
1611 invalidate_complete(mg, false); in invalidate_remove()
1615 init_continuation(&mg->k, invalidate_completed); in invalidate_remove()
1616 continue_after_commit(&cache->committer, &mg->k); in invalidate_remove()
1617 remap_to_origin_clear_discard(cache, mg->overwrite_bio, mg->invalidate_oblock); in invalidate_remove()
1618 mg->overwrite_bio = NULL; in invalidate_remove()
1622 static int invalidate_lock(struct dm_cache_migration *mg) in invalidate_lock() argument
1626 struct cache *cache = mg->cache; in invalidate_lock()
1631 invalidate_complete(mg, false); in invalidate_lock()
1635 build_key(mg->invalidate_oblock, oblock_succ(mg->invalidate_oblock), &key); in invalidate_lock()
1637 READ_WRITE_LOCK_LEVEL, prealloc, &mg->cell); in invalidate_lock()
1640 invalidate_complete(mg, false); in invalidate_lock()
1644 if (mg->cell != prealloc) in invalidate_lock()
1648 quiesce(mg, invalidate_remove); in invalidate_lock()
1655 init_continuation(&mg->k, invalidate_remove); in invalidate_lock()
1656 queue_work(cache->wq, &mg->k.ws); in invalidate_lock()
1665 struct dm_cache_migration *mg; in invalidate_start() local
1670 mg = alloc_migration(cache); in invalidate_start()
1671 if (!mg) { in invalidate_start()
1676 mg->overwrite_bio = bio; in invalidate_start()
1677 mg->invalidate_cblock = cblock; in invalidate_start()
1678 mg->invalidate_oblock = oblock; in invalidate_start()
1680 return invalidate_lock(mg); in invalidate_start()