• Home
  • Raw
  • Download

Lines Matching full:origin

51 	struct dm_dev *origin;  member
56 /* List of snapshots per Origin */
72 /* Origin writes don't trigger exceptions until this is set */
127 * => use the origin; forget about the snapshot.
130 * (We can't use the intermediate origin state.)
178 return s->origin; in dm_snap_origin()
207 * Origin buffers waiting for this to complete are held
238 * Hash table mapping origin volumes to lists of snapshots and
314 * One of these per registered origin, held in the snapshot_origins hash
316 struct origin { struct
317 /* The origin device */
322 /* List of snapshots for this origin */ argument
327 * This structure is allocated for each origin target argument
337 * Size of the hash table for origin volumes. If we make this
390 static struct origin *__lookup_origin(struct block_device *origin) in __lookup_origin() argument
393 struct origin *o; in __lookup_origin()
395 ol = &_origins[origin_hash(origin)]; in __lookup_origin()
397 if (bdev_equal(o->bdev, origin)) in __lookup_origin()
403 static void __insert_origin(struct origin *o) in __insert_origin()
409 static struct dm_origin *__lookup_dm_origin(struct block_device *origin) in __lookup_dm_origin() argument
414 ol = &_dm_origins[origin_hash(origin)]; in __lookup_dm_origin()
416 if (bdev_equal(o->dev->bdev, origin)) in __lookup_dm_origin()
438 * snap_merge - an existing snapshot-merge target linked to the same origin.
454 struct origin *o; in __find_snapshots_sharing_cow()
458 o = __lookup_origin(snap->origin->bdev); in __find_snapshots_sharing_cow()
534 static void __insert_snapshot(struct origin *o, struct dm_snapshot *s) in __insert_snapshot()
546 * Make a note of the snapshot and its origin so we can look it
547 * up when the origin has a write on it.
555 struct origin *o, *new_o = NULL; in register_snapshot()
556 struct block_device *bdev = snap->origin->bdev; in register_snapshot()
575 /* New origin */ in register_snapshot()
598 struct block_device *bdev = s->origin->bdev; in reregister_snapshot()
610 struct origin *o; in unregister_snapshot()
613 o = __lookup_origin(s->origin->bdev); in unregister_snapshot()
851 * Return a minimum chunk size of all snapshots that have the specified origin.
852 * Return zero if the origin has no snapshots.
854 static uint32_t __minimum_chunk_size(struct origin *o) in __minimum_chunk_size()
1081 * from the exception store to the origin in snapshot_merge_next_chunks()
1085 dest.bdev = s->origin->bdev; in snapshot_merge_next_chunks()
1134 bio_set_dev(flush_bio, s->origin->bdev); in flush_data()
1291 r = dm_get_device(ti, origin_path, origin_mode, &s->origin); in snapshot_ctr()
1293 ti->error = "Cannot get origin device"; in snapshot_ctr()
1296 origin_dev = s->origin->bdev->bd_dev; in snapshot_ctr()
1304 ti->error = "COW device cannot be the same as origin device"; in snapshot_ctr()
1377 /* Add snapshot to the list of snapshots for this origin */ in snapshot_ctr()
1381 ti->error = "Snapshot origin struct allocation failed"; in snapshot_ctr()
1435 dm_put_device(ti, s->origin); in snapshot_ctr()
1507 /* Prevent further origin writes from using this snapshot. */ in snapshot_dtr()
1534 dm_put_device(ti, s->origin); in snapshot_dtr()
1601 static int do_origin(struct dm_dev *origin, struct bio *bio, bool limit);
1614 r = do_origin(s->origin, bio, false); in retry_origin_bios()
1707 * as the pending exception exists, neither origin writes nor snapshot in pending_complete()
1708 * merging can overwrite the chunk in origin. in pending_complete()
1816 struct block_device *bdev = s->origin->bdev; in start_copy()
2007 * passdown discard to origin (without triggering in snapshot_map()
2009 * defeat the goal of freeing space in origin that is in snapshot_map()
2012 bio_set_dev(bio, s->origin->bdev); in snapshot_map()
2111 bio_set_dev(bio, s->origin->bdev); in snapshot_map()
2124 * target and a snapshot-origin target. It only generates new
2129 * redirect I/O to the cow device. Otherwise I/O is sent to the origin,
2145 bio_set_dev(bio, s->origin->bdev); in snapshot_merge_map()
2161 /* Full merging snapshots are redirected to the origin */ in snapshot_merge_map()
2173 bio_set_dev(bio, s->origin->bdev); in snapshot_merge_map()
2187 bio_set_dev(bio, s->origin->bdev); in snapshot_merge_map()
2191 return do_origin(s->origin, bio, false); in snapshot_merge_map()
2254 o = __lookup_dm_origin(s->origin->bdev); in snapshot_resume()
2328 * snapshot-merge acts as an origin, so set ti->max_io_len in snapshot_merge_resume()
2330 ti->max_io_len = get_origin_minimum_chunksize(s->origin->bdev); in snapshot_merge_resume()
2380 DMEMIT("%s %s", snap->origin->name, snap->cow->name); in snapshot_status()
2401 r = fn(ti, snap->origin, 0, ti->len, data); in snapshot_iterate_devices()
2431 * Origin methods
2437 * (No remapping actually occurs as the origin is always a direct linear
2456 /* Do all the snapshots on this origin */ in __origin_write()
2524 * If an origin bio was supplied, queue it to wait for the in __origin_write()
2564 * Called on a write from the origin driver.
2566 static int do_origin(struct dm_dev *origin, struct bio *bio, bool limit) in do_origin() argument
2568 struct origin *o; in do_origin()
2573 o = __lookup_origin(origin->bdev); in do_origin()
2607 struct origin *o; in origin_write_extent()
2610 * The origin's __minimum_chunk_size() got stored in max_io_len in origin_write_extent()
2614 o = __lookup_origin(merging_snap->origin->bdev); in origin_write_extent()
2625 * Origin: maps a linear range of a device, with hooks for snapshotting.
2629 * Construct an origin mapping: <dev_path>
2630 * The context for an origin is merely a 'struct dm_dev *'
2639 ti->error = "origin: incorrect number of arguments"; in origin_ctr()
2645 ti->error = "Cannot allocate private origin structure"; in origin_ctr()
2748 .name = "snapshot-origin",
2829 DMERR("Origin target register failed %d", r); in dm_snapshot_init()
2877 MODULE_ALIAS("dm-snapshot-origin");