Lines Matching refs:snap
214 struct dm_snapshot *snap;
448 static int __find_snapshots_sharing_cow(struct dm_snapshot *snap,
458 o = __lookup_origin(snap->origin->bdev);
465 if (!bdev_equal(s->cow->bdev, snap->cow->bdev))
489 static int __validate_exception_handover(struct dm_snapshot *snap)
495 if ((__find_snapshots_sharing_cow(snap, &snap_src, &snap_dest,
498 snap->ti->error = "Snapshot cow pairing for exception "
504 * If no snap_src was found, snap cannot become a handover
513 if (!dm_target_is_snapshot_merge(snap->ti))
520 snap->ti->error = "A snapshot is already merging.";
526 snap->ti->error = "Snapshot exception store does not "
553 static int register_snapshot(struct dm_snapshot *snap)
556 struct block_device *bdev = snap->origin->bdev;
565 r = __validate_exception_handover(snap);
585 __insert_snapshot(o, snap);
747 pe->snap = s;
754 struct dm_snapshot *s = pe->snap;
856 struct dm_snapshot *snap;
860 list_for_each_entry(snap, &o->snapshots, list)
862 snap->store->chunk_size);
1472 snap_dest->store->snap = snap_dest;
1473 snap_src->store->snap = snap_src;
1665 struct dm_snapshot *s = pe->snap;
1751 struct dm_snapshot *s = pe->snap;
1765 struct dm_snapshot *s = pe->snap;
1814 struct dm_snapshot *s = pe->snap;
1844 struct dm_snapshot *s = pe->snap;
2339 struct dm_snapshot *snap = ti->private;
2345 down_write(&snap->lock);
2347 if (!snap->valid)
2349 else if (snap->merge_failed)
2351 else if (snap->snapshot_overflowed)
2354 if (snap->store->type->usage) {
2357 snap->store->type->usage(snap->store,
2370 up_write(&snap->lock);
2380 DMEMIT("%s %s", snap->origin->name, snap->cow->name);
2381 sz += snap->store->type->status(snap->store, type, result + sz,
2383 num_features = snap->discard_zeroes_cow + snap->discard_passdown_origin;
2386 if (snap->discard_zeroes_cow)
2388 if (snap->discard_passdown_origin)
2398 struct dm_snapshot *snap = ti->private;
2401 r = fn(ti, snap->origin, 0, ti->len, data);
2404 r = fn(ti, snap->cow, 0, get_dev_size(snap->cow->bdev), data);
2411 struct dm_snapshot *snap = ti->private;
2413 if (snap->discard_zeroes_cow) {
2418 (void) __find_snapshots_sharing_cow(snap, &snap_src, &snap_dest, NULL);
2420 snap = snap_src;
2423 limits->discard_granularity = snap->store->chunk_size;
2424 limits->max_discard_sectors = snap->store->chunk_size;
2448 struct dm_snapshot *snap;
2457 list_for_each_entry (snap, snapshots, list) {
2462 if (dm_target_is_snapshot_merge(snap->ti))
2466 if (sector >= dm_table_get_size(snap->ti->table))
2473 chunk = sector_to_chunk(snap->store, sector);
2474 dm_exception_table_lock_init(snap, chunk, &lock);
2476 down_read(&snap->lock);
2480 if (!snap->valid || !snap->active)
2483 pe = __lookup_pending_exception(snap, chunk);
2490 e = dm_lookup_exception(&snap->complete, chunk);
2495 pe = alloc_pending_exception(snap);
2498 pe2 = __lookup_pending_exception(snap, chunk);
2501 e = dm_lookup_exception(&snap->complete, chunk);
2507 pe = __insert_pending_exception(snap, pe, chunk);
2510 up_read(&snap->lock);
2512 invalidate_snapshot(snap, -ENOMEM);
2545 up_read(&snap->lock);