xref: /dragonfly/sys/dev/disk/dm/doc/proposal-dm.txt (revision ef2b2b9d)
1
2
3/* constant dm_target structures for error, zero, linear, stripes etc. */
4struct dm_target {
5	int (*init)(struct dm_table_entry *, int argc, char **argv);
6	int (*destroy)(struct dm_table_entry *);
7	int (*strategy)(struct dm_table_entry *, struct buf *);
8	int (*upcall)(struct dm_table_entry *, struct buf *);
9
10	TAILQ_ENTRY(dm_target) dm_target_next;
11};
12
13
14struct dm_table_entry {
15	struct dm_dev *dev;		/* backlink */
16	uint64_t start;
17	uint64_t length;
18
19	struct dm_target *target;
20	void *target_config;
21	TAILQ_ENTRY(dm_table_entry) next;
22};
23TAILQ_HEAD(dm_table, dm_table_entry);
24
25
26struct dm_pdev {
27	struct vnode *pdev_vnode;
28	int refcnt;
29	TAILQ_ENTRY(dm_pdev) next_pdev;
30};
31TAILQ_HEAD(dm_pdevs, pm_pdev);
32
33
34struct dm_dev {
35	char name[DM_NAME_LEN];
36	char uuid[DM_UUID_LEN];
37
38	int minor;
39	uint32_t flags;
40
41	kmutex_t dev_mtx;
42	uint32_t event_nr;
43	uint32_t ref_cnt;
44
45	struct dm_pdev pdevs;
46
47	int cur_active_table;
48	struct dm_table tables[2];
49
50	struct dm_dev_list upcalls;
51	TAILQ_NEXT(dm_dev) next_upcall;
52
53	TAILQ_NEXT(dm_dev) next_devlist;
54};
55TAILQ_HEAD(dm_dev_list, dm_dev) dm_devs;
56
57
58/* for zero,error : dm_target->target_config == NULL */
59/* for linear : */
60struct target_linear_config {
61	struct dm_pdev *pdev;
62	uint64_t offset;
63};
64
65
66/* for mirror : */
67struct target_mirror_config {
68	struct dm_pdev *orig;
69	struct dm_pdev *copies[MAX_MIRROR_COPIES];
70
71	/* copied blocks bitmaps administration etc*/
72	struct dm_pdev *log_pdev;	/* for administration */
73	uint64_t log_regionsize;	/* blocksize of mirror */
74
75	/* list of parts that still need copied etc.; run length encoded? */
76	....
77};
78
79
80/* for snapshot : */
81struct target_snapshot_config {
82	struct dm_dev *orig;
83
84	/* modified blocks bitmaps administration etc*/
85	struct dm_pdev *log_pdev;
86	uint64_t log_regionsize;
87	/* list of sector renames to the log device */
88	...
89};
90
91